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  /**
130   * {@inheritDoc}
131   */
132  public GroupImplementationCfgClient createClientConfiguration(
133      ManagedObject<? extends GroupImplementationCfgClient> impl) {
134    return new GroupImplementationCfgClientImpl(impl);
135  }
136
137
138
139  /**
140   * {@inheritDoc}
141   */
142  public GroupImplementationCfg createServerConfiguration(
143      ServerManagedObject<? extends GroupImplementationCfg> impl) {
144    return new GroupImplementationCfgServerImpl(impl);
145  }
146
147
148
149  /**
150   * {@inheritDoc}
151   */
152  public Class<GroupImplementationCfg> getServerConfigurationClass() {
153    return GroupImplementationCfg.class;
154  }
155
156
157
158  /**
159   * Get the "enabled" property definition.
160   * <p>
161   * Indicates whether the Group Implementation is enabled.
162   *
163   * @return Returns the "enabled" property definition.
164   */
165  public BooleanPropertyDefinition getEnabledPropertyDefinition() {
166    return PD_ENABLED;
167  }
168
169
170
171  /**
172   * Get the "java-class" property definition.
173   * <p>
174   * Specifies the fully-qualified name of the Java class that
175   * provides the Group Implementation implementation.
176   *
177   * @return Returns the "java-class" property definition.
178   */
179  public ClassPropertyDefinition getJavaClassPropertyDefinition() {
180    return PD_JAVA_CLASS;
181  }
182
183
184
185  /**
186   * Managed object client implementation.
187   */
188  private static class GroupImplementationCfgClientImpl implements
189    GroupImplementationCfgClient {
190
191    // Private implementation.
192    private ManagedObject<? extends GroupImplementationCfgClient> impl;
193
194
195
196    // Private constructor.
197    private GroupImplementationCfgClientImpl(
198        ManagedObject<? extends GroupImplementationCfgClient> impl) {
199      this.impl = impl;
200    }
201
202
203
204    /**
205     * {@inheritDoc}
206     */
207    public Boolean isEnabled() {
208      return impl.getPropertyValue(INSTANCE.getEnabledPropertyDefinition());
209    }
210
211
212
213    /**
214     * {@inheritDoc}
215     */
216    public void setEnabled(boolean value) {
217      impl.setPropertyValue(INSTANCE.getEnabledPropertyDefinition(), value);
218    }
219
220
221
222    /**
223     * {@inheritDoc}
224     */
225    public String getJavaClass() {
226      return impl.getPropertyValue(INSTANCE.getJavaClassPropertyDefinition());
227    }
228
229
230
231    /**
232     * {@inheritDoc}
233     */
234    public void setJavaClass(String value) {
235      impl.setPropertyValue(INSTANCE.getJavaClassPropertyDefinition(), value);
236    }
237
238
239
240    /**
241     * {@inheritDoc}
242     */
243    public ManagedObjectDefinition<? extends GroupImplementationCfgClient, ? extends GroupImplementationCfg> definition() {
244      return INSTANCE;
245    }
246
247
248
249    /**
250     * {@inheritDoc}
251     */
252    public PropertyProvider properties() {
253      return impl;
254    }
255
256
257
258    /**
259     * {@inheritDoc}
260     */
261    public void commit() throws ManagedObjectAlreadyExistsException,
262        MissingMandatoryPropertiesException, ConcurrentModificationException,
263        OperationRejectedException, LdapException {
264      impl.commit();
265    }
266
267  }
268
269
270
271  /**
272   * Managed object server implementation.
273   */
274  private static class GroupImplementationCfgServerImpl implements
275    GroupImplementationCfg {
276
277    // Private implementation.
278    private ServerManagedObject<? extends GroupImplementationCfg> impl;
279
280    // The value of the "enabled" property.
281    private final boolean pEnabled;
282
283    // The value of the "java-class" property.
284    private final String pJavaClass;
285
286
287
288    // Private constructor.
289    private GroupImplementationCfgServerImpl(ServerManagedObject<? extends GroupImplementationCfg> impl) {
290      this.impl = impl;
291      this.pEnabled = impl.getPropertyValue(INSTANCE.getEnabledPropertyDefinition());
292      this.pJavaClass = impl.getPropertyValue(INSTANCE.getJavaClassPropertyDefinition());
293    }
294
295
296
297    /**
298     * {@inheritDoc}
299     */
300    public void addChangeListener(
301        ConfigurationChangeListener<GroupImplementationCfg> listener) {
302      impl.registerChangeListener(listener);
303    }
304
305
306
307    /**
308     * {@inheritDoc}
309     */
310    public void removeChangeListener(
311        ConfigurationChangeListener<GroupImplementationCfg> listener) {
312      impl.deregisterChangeListener(listener);
313    }
314
315
316
317    /**
318     * {@inheritDoc}
319     */
320    public boolean isEnabled() {
321      return pEnabled;
322    }
323
324
325
326    /**
327     * {@inheritDoc}
328     */
329    public String getJavaClass() {
330      return pJavaClass;
331    }
332
333
334
335    /**
336     * {@inheritDoc}
337     */
338    public Class<? extends GroupImplementationCfg> configurationClass() {
339      return GroupImplementationCfg.class;
340    }
341
342
343
344    /**
345     * {@inheritDoc}
346     */
347    public DN dn() {
348      return impl.getDN();
349    }
350
351  }
352}