001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * https://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 * 019 */ 020package org.apache.directory.api.ldap.schema.converter; 021 022 023import java.util.ArrayList; 024import java.util.List; 025 026import org.apache.directory.api.ldap.model.constants.SchemaConstants; 027import org.apache.directory.api.ldap.model.entry.DefaultEntry; 028import org.apache.directory.api.ldap.model.entry.Entry; 029import org.apache.directory.api.ldap.model.exception.LdapException; 030import org.apache.directory.api.ldap.model.ldif.LdifUtils; 031import org.apache.directory.api.ldap.model.name.Rdn; 032import org.apache.directory.api.ldap.model.schema.ObjectClassTypeEnum; 033 034 035/** 036 * A bean used to encapsulate the literal String values of an ObjectClass 037 * definition found within an OpenLDAP schema configuration file. 038 * 039 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> 040 */ 041public class ObjectClassHolder extends SchemaElementImpl 042{ 043 /** The list of superiors */ 044 private List<String> superiors = new ArrayList<>(); 045 046 /** The list of mandatory attributes */ 047 private List<String> must = new ArrayList<>(); 048 049 /** The list of optional attributes */ 050 private List<String> may = new ArrayList<>(); 051 052 /** The ObjectClass type */ 053 private ObjectClassTypeEnum classType = ObjectClassTypeEnum.STRUCTURAL; 054 055 056 /** 057 * Create an instance of ObjectClass element 058 * 059 * @param oid the OjectClass OID 060 */ 061 public ObjectClassHolder( String oid ) 062 { 063 this.oid = oid; 064 } 065 066 067 /** 068 * Get the list of superior for this objectClass 069 * @return A list of all inherited objectClasses 070 */ 071 public List<String> getSuperiors() 072 { 073 return superiors; 074 } 075 076 077 /** 078 * Set the list of inherited objectClasses 079 * @param superiors The list of inherited objectClasses 080 */ 081 public void setSuperiors( List<String> superiors ) 082 { 083 this.superiors = superiors; 084 } 085 086 087 /** 088 * @return The list of mandatory attributes 089 */ 090 public List<String> getMust() 091 { 092 return must; 093 } 094 095 096 /** 097 * Set the list of mandatory attributes 098 * @param must The list of mandatory attributes 099 */ 100 public void setMust( List<String> must ) 101 { 102 this.must = must; 103 } 104 105 106 /** 107 * @return The list of optional attributes 108 */ 109 public List<String> getMay() 110 { 111 return may; 112 } 113 114 115 /** 116 * Set the list of optional attributes 117 * @param may The list of optional attributes 118 */ 119 public void setMay( List<String> may ) 120 { 121 this.may = may; 122 } 123 124 125 /** 126 * @return The objectClass type 127 */ 128 public ObjectClassTypeEnum getClassType() 129 { 130 return classType; 131 } 132 133 134 /** 135 * Set the objectClass type. 136 * @param classType The objectClass type. 137 */ 138 public void setClassType( ObjectClassTypeEnum classType ) 139 { 140 this.classType = classType; 141 } 142 143 144 /** 145 * Convert this objectClass to a Ldif string 146 * 147 * @param schemaName The name of the schema file containing this objectClass 148 * @return A ldif formatted string 149 * @throws org.apache.directory.api.ldap.model.exception.LdapException If something went wrong 150 */ 151 @Override 152 public String toLdif( String schemaName ) throws LdapException 153 { 154 StringBuilder sb = new StringBuilder(); 155 156 sb.append( schemaToLdif( schemaName, "metaObjectClass" ) ); 157 158 // The superiors 159 if ( !superiors.isEmpty() ) 160 { 161 for ( String superior : superiors ) 162 { 163 sb.append( "m-supObjectClass: " ).append( superior ).append( '\n' ); 164 } 165 } 166 167 // The kind of class 168 if ( classType != ObjectClassTypeEnum.STRUCTURAL ) 169 { 170 sb.append( "m-typeObjectClass: " ).append( classType ).append( '\n' ); 171 } 172 173 // The 'must' 174 if ( !must.isEmpty() ) 175 { 176 for ( String attr : must ) 177 { 178 sb.append( "m-must: " ).append( attr ).append( '\n' ); 179 } 180 } 181 182 // The 'may' 183 if ( !may.isEmpty() ) 184 { 185 for ( String attr : may ) 186 { 187 sb.append( "m-may: " ).append( attr ).append( '\n' ); 188 } 189 } 190 191 // The extensions 192 if ( !extensions.isEmpty() ) 193 { 194 extensionsToLdif( "m-extensionObjectClass" ); 195 } 196 197 return sb.toString(); 198 } 199 200 201 /** 202 * @return a String representing this ObjectClass. 203 */ 204 @Override 205 public String toString() 206 { 207 return getOid(); 208 } 209 210 211 /** 212 * Transform a schema name to a Dn pointing to the correct position in the DIT 213 * 214 * @param schemaName The schema name 215 * @return the Dn associated with this schema in the DIT 216 */ 217 @Override 218 public String dnToLdif( String schemaName ) throws LdapException 219 { 220 StringBuilder sb = new StringBuilder(); 221 222 String dn = "m-oid=" + oid + ", " + SchemaConstants.OBJECT_CLASSES_PATH + ", cn=" 223 + Rdn.escapeValue( schemaName ) + ", ou=schema"; 224 225 // First dump the Dn only 226 Entry entry = new DefaultEntry( dn ); 227 sb.append( LdifUtils.convertToLdif( entry ) ); 228 229 return sb.toString(); 230 } 231}