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.ldap.schema.registries;
021
022
023 import java.util.Arrays;
024 import java.util.HashSet;
025 import java.util.Set;
026
027 import org.apache.directory.shared.i18n.I18n;
028 import org.apache.directory.shared.ldap.schema.SchemaObjectWrapper;
029 import org.apache.directory.shared.ldap.util.StringTools;
030
031
032
033 /**
034 * The default Schema interface implementation.
035 *
036 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
037 * @version $Rev$
038 */
039 public class DefaultSchema implements Schema
040 {
041 /** The default schema's owner */
042 private static final String DEFAULT_OWNER = "uid=admin,ou=system";
043
044 /** Tells if this schema is disabled */
045 private boolean disabled;
046
047 /** Contains the list of schema it depends on */
048 private String[] dependencies;
049
050 /** The schema owner */
051 private String owner;
052
053 /** The schema name */
054 private String name;
055
056 /** The set of SchemaObjects declared in this schema */
057 private Set<SchemaObjectWrapper> content;
058
059
060 /**
061 * Creates a new instance of DefaultSchema.
062 *
063 * @param name The schema's name
064 */
065 public DefaultSchema( String name )
066 {
067 this( name, null, null, false );
068 }
069
070
071 /**
072 * Creates a new instance of DefaultSchema.
073 *
074 * @param name The schema's name
075 * @param owner the schema's owner
076 */
077 public DefaultSchema( String name, String owner )
078 {
079 this( name, owner, null, false );
080 }
081
082
083 /**
084 * Creates a new instance of DefaultSchema.
085 *
086 * @param name The schema's name
087 * @param owner the schema's owner
088 * @param dependencies The list of schemas it depends on
089 */
090 public DefaultSchema( String name, String owner, String[] dependencies )
091 {
092 this( name, owner, dependencies, false );
093 }
094
095
096 /**
097 * Creates a new instance of DefaultSchema.
098 *
099 * @param name The schema's name
100 * @param owner the schema's owner
101 * @param dependencies The list of schemas it depends on
102 * @param disabled Set the status for this schema
103 */
104 public DefaultSchema( String name, String owner, String[] dependencies, boolean disabled )
105 {
106 if ( name == null )
107 {
108 throw new NullPointerException( I18n.err( I18n.ERR_04266 ) );
109 }
110
111 this.name = name;
112
113 if ( owner != null )
114 {
115 this.owner = owner;
116 }
117 else
118 {
119 this.owner = DEFAULT_OWNER;
120 }
121
122 if ( dependencies != null )
123 {
124 this.dependencies = dependencies;
125 }
126 else
127 {
128 this.dependencies = StringTools.EMPTY_STRINGS;
129 }
130
131 this.disabled = disabled;
132
133 content = new HashSet<SchemaObjectWrapper>();
134 }
135
136
137 /**
138 * {@inheritDoc}
139 */
140 public String[] getDependencies()
141 {
142 String[] copy = new String[dependencies.length];
143 System.arraycopy( dependencies, 0, copy, 0, dependencies.length );
144 return copy;
145 }
146
147
148 /**
149 * {@inheritDoc}
150 */
151 public void addDependencies( String... dependencies )
152 {
153 if ( dependencies != null )
154 {
155 this.dependencies = new String[dependencies.length];
156 System.arraycopy( this.dependencies, 0, dependencies, 0, dependencies.length );
157 }
158 }
159
160
161 /**
162 * {@inheritDoc}
163 */
164 public String getOwner()
165 {
166 return owner;
167 }
168
169
170 /**
171 * {@inheritDoc}
172 */
173 public String getSchemaName()
174 {
175 return name;
176 }
177
178
179 /**
180 * {@inheritDoc}
181 */
182 public boolean isDisabled()
183 {
184 return disabled;
185 }
186
187
188 /**
189 * {@inheritDoc}
190 */
191 public boolean isEnabled()
192 {
193 return !disabled;
194 }
195
196
197 /**
198 * {@inheritDoc}
199 */
200 public void disable()
201 {
202 this.disabled = true;
203 }
204
205
206 /**
207 * {@inheritDoc}
208 */
209 public void enable()
210 {
211 this.disabled = false;
212 }
213
214
215 /**
216 * {@inheritDoc}
217 */
218 public Set<SchemaObjectWrapper> getContent()
219 {
220 return content;
221 }
222
223
224 /**
225 * @see Object#toString()
226 */
227 public String toString()
228 {
229 StringBuilder sb = new StringBuilder( "\tSchema Name: " );
230 sb.append( name );
231 sb.append( "\n\t\tDisabled: " );
232 sb.append( disabled );
233 sb.append( "\n\t\tOwner: " );
234 sb.append( owner );
235 sb.append( "\n\t\tDependencies: " );
236 sb.append( Arrays.toString( dependencies ) );
237
238 // TODO : print the associated ShcemaObjects
239 return sb.toString();
240 }
241 }