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