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 * http://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 */
020 package org.apache.directory.shared.converter.schema;
021
022 import java.util.ArrayList;
023 import java.util.List;
024
025 import org.apache.directory.shared.ldap.entry.Entry;
026 import org.apache.directory.shared.ldap.entry.EntryAttribute;
027 import org.apache.directory.shared.ldap.entry.client.DefaultClientAttribute;
028 import org.apache.directory.shared.ldap.entry.client.DefaultClientEntry;
029 import org.apache.directory.shared.ldap.exception.LdapException;
030 import org.apache.directory.shared.ldap.ldif.LdifUtils;
031 import org.apache.directory.shared.ldap.util.StringTools;
032
033 /**
034 * An abstract SchemaElement implementation. It contains shared
035 * elements from AttributeType and ObjectClass, like obsolete, oid,
036 * description, names and extensions (not implemented)
037 *
038 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
039 * @version $Rev$, $Date$
040 */
041 public abstract class SchemaElementImpl implements SchemaElement
042 {
043 /** The schema element oid */
044 protected String oid;
045
046 /** The schema element description */
047 protected String description;
048
049 /** The list of names for this schemaElements */
050 protected List<String> names = new ArrayList<String>();
051
052 /** The obsolete flag */
053 protected boolean obsolete = false;
054
055 /** The optional list of extensions */
056 protected List<String> extensions = new ArrayList<String>();
057
058 /**
059 * @see SchemaElement#isObsolete()
060 */
061 public boolean isObsolete()
062 {
063 return obsolete;
064 }
065
066 /**
067 * @see SchemaElement#setObsolete(boolean)
068 */
069 public void setObsolete( boolean obsolete )
070 {
071 this.obsolete = obsolete;
072 }
073
074 /**
075 * @see SchemaElement#getOid()
076 */
077 public String getOid()
078 {
079 return oid;
080 }
081
082 /**
083 * @see SchemaElement#getDescription()
084 */
085 public String getDescription()
086 {
087 return description;
088 }
089
090 /**
091 * @see SchemaElement#setDescription(String)
092 */
093 public void setDescription( String description )
094 {
095 this.description = description;
096 }
097
098 /**
099 * @see SchemaElement#getNames()
100 */
101 public List<String> getNames()
102 {
103 return names;
104 }
105
106 /**
107 * @see SchemaElement#setNames(List)
108 */
109 public void setNames( List<String> names )
110 {
111 this.names = names;
112 }
113
114 /**
115 * @see SchemaElement#getExtensions()
116 */
117 public List<String> getExtensions()
118 {
119 return extensions;
120 }
121
122 /**
123 * @see SchemaElement#setExtensions(List)
124 */
125 public void setExtensions( List<String> extensions )
126 {
127 this.extensions = extensions;
128 }
129
130 /**
131 * @return The OID as a Ldif line
132 */
133 private String oidToLdif()
134 {
135 return "m-oid: " + oid + '\n';
136 }
137
138 /**
139 * @return the Names as Ldif lines
140 */
141 private String nameToLdif() throws LdapException
142 {
143 if ( names.size() == 0 )
144 {
145 return "";
146 }
147 else
148 {
149 Entry entry = new DefaultClientEntry();
150 EntryAttribute attribute = new DefaultClientAttribute( "m-name" );
151
152 for ( String name:names )
153 {
154 attribute.add( name );
155 }
156
157 entry.put( attribute );
158
159 return LdifUtils.convertAttributesToLdif( entry );
160 }
161 }
162
163 /**
164 * @return The description as a ldif line
165 */
166 private String descToLdif() throws LdapException
167 {
168 if ( StringTools.isEmpty( description ) )
169 {
170 return "";
171 }
172 else
173 {
174 Entry entry = new DefaultClientEntry();
175 EntryAttribute attribute = new DefaultClientAttribute( "m-description", description );
176
177 entry.put( attribute );
178
179 return LdifUtils.convertAttributesToLdif( entry );
180 }
181 }
182
183 /**
184 * @return The dn as a ldif line
185 */
186 public abstract String dnToLdif( String schemaName ) throws LdapException;
187
188 /**
189 * Return the extensions formated as Ldif lines
190 * @param ID The attributeId : can be m-objectClassExtension or
191 * m-attributeTypeExtension
192 *
193 * @return The extensions formated as ldif lines
194 * @throws LdapException If the conversion goes wrong
195 */
196 protected String extensionsToLdif( String ID ) throws LdapException
197 {
198 StringBuilder sb = new StringBuilder();
199
200 Entry entry = new DefaultClientEntry();
201 EntryAttribute attribute = new DefaultClientAttribute( ID );
202
203 for ( String extension:extensions )
204 {
205 attribute.add( extension );
206 }
207
208 sb.append( LdifUtils.convertAttributesToLdif( entry ) );
209
210 return sb.toString();
211 }
212
213 protected String schemaToLdif( String schemaName, String type ) throws LdapException
214 {
215 StringBuilder sb = new StringBuilder();
216
217 // The DN
218 sb.append( dnToLdif( schemaName ) );
219
220 // ObjectClasses
221 sb.append( "objectclass: " ).append( type ).append( '\n' );
222 sb.append( "objectclass: metaTop\n" );
223 sb.append( "objectclass: top\n" );
224
225 // The oid
226 sb.append( oidToLdif() );
227
228 // The name
229 sb.append( nameToLdif() );
230
231 // The desc
232 sb.append( descToLdif() );
233
234 // The obsolete flag, only if "true"
235 if ( obsolete )
236 {
237 sb.append( "m-obsolete: TRUE\n" );
238 }
239
240 return sb.toString();
241 }
242 }