001/*
002 * The contents of this file are subject to the terms of the Common Development and
003 * Distribution License (the License). You may not use this file except in compliance with the
004 * License.
005 *
006 * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
007 * specific language governing permission and limitations under the License.
008 *
009 * When distributing Covered Software, include this CDDL Header Notice in each file and include
010 * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
011 * Header, with the fields enclosed by brackets [] replaced by your own identifying
012 * information: "Portions Copyright [year] [name of copyright owner]".
013 *
014 * Copyright 2008 Sun Microsystems, Inc.
015 */
016package org.forgerock.opendj.server.config.meta;
017
018
019
020import org.forgerock.opendj.config.AdministratorAction;
021import org.forgerock.opendj.config.BooleanPropertyDefinition;
022import org.forgerock.opendj.config.ClassPropertyDefinition;
023import org.forgerock.opendj.config.client.ConcurrentModificationException;
024import org.forgerock.opendj.config.client.ManagedObject;
025import org.forgerock.opendj.config.client.MissingMandatoryPropertiesException;
026import org.forgerock.opendj.config.client.OperationRejectedException;
027import org.forgerock.opendj.config.ManagedObjectAlreadyExistsException;
028import org.forgerock.opendj.config.ManagedObjectDefinition;
029import org.forgerock.opendj.config.PropertyOption;
030import org.forgerock.opendj.config.PropertyProvider;
031import org.forgerock.opendj.config.server.ConfigurationChangeListener;
032import org.forgerock.opendj.config.server.ServerManagedObject;
033import org.forgerock.opendj.config.TopCfgDefn;
034import org.forgerock.opendj.config.UndefinedDefaultBehaviorProvider;
035import org.forgerock.opendj.ldap.DN;
036import org.forgerock.opendj.ldap.LdapException;
037import org.forgerock.opendj.server.config.client.SchemaProviderCfgClient;
038import org.forgerock.opendj.server.config.server.SchemaProviderCfg;
039
040
041
042/**
043 * An interface for querying the Schema Provider managed object
044 * definition meta information.
045 * <p>
046 * Schema Providers define the schema elements to load.
047 */
048public final class SchemaProviderCfgDefn extends ManagedObjectDefinition<SchemaProviderCfgClient, SchemaProviderCfg> {
049
050  /** The singleton configuration definition instance. */
051  private static final SchemaProviderCfgDefn INSTANCE = new SchemaProviderCfgDefn();
052
053
054
055  /** The "enabled" property definition. */
056  private static final BooleanPropertyDefinition PD_ENABLED;
057
058
059
060  /** The "java-class" property definition. */
061  private static final ClassPropertyDefinition PD_JAVA_CLASS;
062
063
064
065  /** Build the "enabled" property definition. */
066  static {
067      BooleanPropertyDefinition.Builder builder = BooleanPropertyDefinition.createBuilder(INSTANCE, "enabled");
068      builder.setOption(PropertyOption.MANDATORY);
069      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "enabled"));
070      builder.setDefaultBehaviorProvider(new UndefinedDefaultBehaviorProvider<Boolean>());
071      PD_ENABLED = builder.getInstance();
072      INSTANCE.registerPropertyDefinition(PD_ENABLED);
073  }
074
075
076
077  /** Build the "java-class" property definition. */
078  static {
079      ClassPropertyDefinition.Builder builder = ClassPropertyDefinition.createBuilder(INSTANCE, "java-class");
080      builder.setOption(PropertyOption.MANDATORY);
081      builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "java-class"));
082      builder.setDefaultBehaviorProvider(new UndefinedDefaultBehaviorProvider<String>());
083      builder.addInstanceOf("org.opends.server.schema.SchemaProvider");
084      PD_JAVA_CLASS = builder.getInstance();
085      INSTANCE.registerPropertyDefinition(PD_JAVA_CLASS);
086  }
087
088
089
090  /**
091   * Get the Schema Provider configuration definition singleton.
092   *
093   * @return Returns the Schema Provider configuration definition
094   *         singleton.
095   */
096  public static SchemaProviderCfgDefn getInstance() {
097    return INSTANCE;
098  }
099
100
101
102  /**
103   * Private constructor.
104   */
105  private SchemaProviderCfgDefn() {
106    super("schema-provider", TopCfgDefn.getInstance());
107  }
108
109
110
111  /** {@inheritDoc} */
112  public SchemaProviderCfgClient createClientConfiguration(
113      ManagedObject<? extends SchemaProviderCfgClient> impl) {
114    return new SchemaProviderCfgClientImpl(impl);
115  }
116
117
118
119  /** {@inheritDoc} */
120  public SchemaProviderCfg createServerConfiguration(
121      ServerManagedObject<? extends SchemaProviderCfg> impl) {
122    return new SchemaProviderCfgServerImpl(impl);
123  }
124
125
126
127  /** {@inheritDoc} */
128  public Class<SchemaProviderCfg> getServerConfigurationClass() {
129    return SchemaProviderCfg.class;
130  }
131
132
133
134  /**
135   * Get the "enabled" property definition.
136   * <p>
137   * Indicates whether the Schema Provider is enabled for use.
138   *
139   * @return Returns the "enabled" property definition.
140   */
141  public BooleanPropertyDefinition getEnabledPropertyDefinition() {
142    return PD_ENABLED;
143  }
144
145
146
147  /**
148   * Get the "java-class" property definition.
149   * <p>
150   * Specifies the fully-qualified name of the Java class that
151   * provides the Schema Provider implementation.
152   *
153   * @return Returns the "java-class" property definition.
154   */
155  public ClassPropertyDefinition getJavaClassPropertyDefinition() {
156    return PD_JAVA_CLASS;
157  }
158
159
160
161  /**
162   * Managed object client implementation.
163   */
164  private static class SchemaProviderCfgClientImpl implements
165    SchemaProviderCfgClient {
166
167    /** Private implementation. */
168    private ManagedObject<? extends SchemaProviderCfgClient> impl;
169
170
171
172    /** Private constructor. */
173    private SchemaProviderCfgClientImpl(
174        ManagedObject<? extends SchemaProviderCfgClient> impl) {
175      this.impl = impl;
176    }
177
178
179
180    /** {@inheritDoc} */
181    public Boolean isEnabled() {
182      return impl.getPropertyValue(INSTANCE.getEnabledPropertyDefinition());
183    }
184
185
186
187    /** {@inheritDoc} */
188    public void setEnabled(boolean value) {
189      impl.setPropertyValue(INSTANCE.getEnabledPropertyDefinition(), value);
190    }
191
192
193
194    /** {@inheritDoc} */
195    public String getJavaClass() {
196      return impl.getPropertyValue(INSTANCE.getJavaClassPropertyDefinition());
197    }
198
199
200
201    /** {@inheritDoc} */
202    public void setJavaClass(String value) {
203      impl.setPropertyValue(INSTANCE.getJavaClassPropertyDefinition(), value);
204    }
205
206
207
208    /** {@inheritDoc} */
209    public ManagedObjectDefinition<? extends SchemaProviderCfgClient, ? extends SchemaProviderCfg> definition() {
210      return INSTANCE;
211    }
212
213
214
215    /** {@inheritDoc} */
216    public PropertyProvider properties() {
217      return impl;
218    }
219
220
221
222    /** {@inheritDoc} */
223    public void commit() throws ManagedObjectAlreadyExistsException,
224        MissingMandatoryPropertiesException, ConcurrentModificationException,
225        OperationRejectedException, LdapException {
226      impl.commit();
227    }
228
229
230
231    /** {@inheritDoc} */
232    public String toString() {
233      return impl.toString();
234    }
235  }
236
237
238
239  /**
240   * Managed object server implementation.
241   */
242  private static class SchemaProviderCfgServerImpl implements
243    SchemaProviderCfg {
244
245    /** Private implementation. */
246    private ServerManagedObject<? extends SchemaProviderCfg> impl;
247
248    /** The value of the "enabled" property. */
249    private final boolean pEnabled;
250
251    /** The value of the "java-class" property. */
252    private final String pJavaClass;
253
254
255
256    /** Private constructor. */
257    private SchemaProviderCfgServerImpl(ServerManagedObject<? extends SchemaProviderCfg> impl) {
258      this.impl = impl;
259      this.pEnabled = impl.getPropertyValue(INSTANCE.getEnabledPropertyDefinition());
260      this.pJavaClass = impl.getPropertyValue(INSTANCE.getJavaClassPropertyDefinition());
261    }
262
263
264
265    /** {@inheritDoc} */
266    public void addChangeListener(
267        ConfigurationChangeListener<SchemaProviderCfg> listener) {
268      impl.registerChangeListener(listener);
269    }
270
271
272
273    /** {@inheritDoc} */
274    public void removeChangeListener(
275        ConfigurationChangeListener<SchemaProviderCfg> listener) {
276      impl.deregisterChangeListener(listener);
277    }
278
279
280
281    /** {@inheritDoc} */
282    public boolean isEnabled() {
283      return pEnabled;
284    }
285
286
287
288    /** {@inheritDoc} */
289    public String getJavaClass() {
290      return pJavaClass;
291    }
292
293
294
295    /** {@inheritDoc} */
296    public Class<? extends SchemaProviderCfg> configurationClass() {
297      return SchemaProviderCfg.class;
298    }
299
300
301
302    /** {@inheritDoc} */
303    public DN dn() {
304      return impl.getDN();
305    }
306
307
308
309    /** {@inheritDoc} */
310    public String toString() {
311      return impl.toString();
312    }
313  }
314}