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
010     * trunk/opends/resource/legal-notices/OpenDS.LICENSE
011     * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
012     * See the License for the specific language governing permissions
013     * and limitations under the License.
014     *
015     * When distributing Covered Code, include this CDDL HEADER in each
016     * file and include the License file at
017     * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  If applicable,
018     * add the following below this CDDL HEADER, with the fields enclosed
019     * by brackets "[]" replaced with your own identifying information:
020     *      Portions Copyright [yyyy] [name of copyright owner]
021     *
022     * CDDL HEADER END
023     *
024     *
025     *      Copyright 2008 Sun Microsystems, Inc.
026     */
027    package org.opends.server.admin.std.meta;
028    
029    
030    
031    import java.util.Collection;
032    import java.util.SortedSet;
033    import org.opends.server.admin.AdministratorAction;
034    import org.opends.server.admin.AliasDefaultBehaviorProvider;
035    import org.opends.server.admin.BooleanPropertyDefinition;
036    import org.opends.server.admin.client.AuthorizationException;
037    import org.opends.server.admin.client.CommunicationException;
038    import org.opends.server.admin.client.ConcurrentModificationException;
039    import org.opends.server.admin.client.ManagedObject;
040    import org.opends.server.admin.client.MissingMandatoryPropertiesException;
041    import org.opends.server.admin.client.OperationRejectedException;
042    import org.opends.server.admin.DNPropertyDefinition;
043    import org.opends.server.admin.ManagedObjectAlreadyExistsException;
044    import org.opends.server.admin.ManagedObjectDefinition;
045    import org.opends.server.admin.ManagedObjectOption;
046    import org.opends.server.admin.PropertyOption;
047    import org.opends.server.admin.PropertyProvider;
048    import org.opends.server.admin.server.ConfigurationChangeListener;
049    import org.opends.server.admin.server.ServerManagedObject;
050    import org.opends.server.admin.std.client.RootDSEBackendCfgClient;
051    import org.opends.server.admin.std.server.RootDSEBackendCfg;
052    import org.opends.server.admin.Tag;
053    import org.opends.server.admin.TopCfgDefn;
054    import org.opends.server.admin.UndefinedDefaultBehaviorProvider;
055    import org.opends.server.types.DN;
056    
057    
058    
059    /**
060     * An interface for querying the Root DSE Backend managed object
061     * definition meta information.
062     * <p>
063     * The Root DSE Backend contains the Directory Server root DSE.
064     */
065    public final class RootDSEBackendCfgDefn extends ManagedObjectDefinition<RootDSEBackendCfgClient, RootDSEBackendCfg> {
066    
067      // The singleton configuration definition instance.
068      private static final RootDSEBackendCfgDefn INSTANCE = new RootDSEBackendCfgDefn();
069    
070    
071    
072      // The "show-all-attributes" property definition.
073      private static final BooleanPropertyDefinition PD_SHOW_ALL_ATTRIBUTES;
074    
075    
076    
077      // The "subordinate-base-dn" property definition.
078      private static final DNPropertyDefinition PD_SUBORDINATE_BASE_DN;
079    
080    
081    
082      // Build the "show-all-attributes" property definition.
083      static {
084          BooleanPropertyDefinition.Builder builder = BooleanPropertyDefinition.createBuilder(INSTANCE, "show-all-attributes");
085          builder.setOption(PropertyOption.MANDATORY);
086          builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "show-all-attributes"));
087          builder.setDefaultBehaviorProvider(new UndefinedDefaultBehaviorProvider<Boolean>());
088          PD_SHOW_ALL_ATTRIBUTES = builder.getInstance();
089          INSTANCE.registerPropertyDefinition(PD_SHOW_ALL_ATTRIBUTES);
090      }
091    
092    
093    
094      // Build the "subordinate-base-dn" property definition.
095      static {
096          DNPropertyDefinition.Builder builder = DNPropertyDefinition.createBuilder(INSTANCE, "subordinate-base-dn");
097          builder.setOption(PropertyOption.MULTI_VALUED);
098          builder.setAdministratorAction(new AdministratorAction(AdministratorAction.Type.NONE, INSTANCE, "subordinate-base-dn"));
099          builder.setDefaultBehaviorProvider(new AliasDefaultBehaviorProvider<DN>(INSTANCE, "subordinate-base-dn"));
100          PD_SUBORDINATE_BASE_DN = builder.getInstance();
101          INSTANCE.registerPropertyDefinition(PD_SUBORDINATE_BASE_DN);
102      }
103    
104    
105    
106      // Register the options associated with this managed object definition.
107      static {
108        INSTANCE.registerOption(ManagedObjectOption.ADVANCED);
109      }
110    
111    
112    
113      // Register the tags associated with this managed object definition.
114      static {
115        INSTANCE.registerTag(Tag.valueOf("core-server"));
116        INSTANCE.registerTag(Tag.valueOf("database"));
117      }
118    
119    
120    
121      /**
122       * Get the Root DSE Backend configuration definition singleton.
123       *
124       * @return Returns the Root DSE Backend configuration definition
125       *         singleton.
126       */
127      public static RootDSEBackendCfgDefn getInstance() {
128        return INSTANCE;
129      }
130    
131    
132    
133      /**
134       * Private constructor.
135       */
136      private RootDSEBackendCfgDefn() {
137        super("root-dse-backend", TopCfgDefn.getInstance());
138      }
139    
140    
141    
142      /**
143       * {@inheritDoc}
144       */
145      public RootDSEBackendCfgClient createClientConfiguration(
146          ManagedObject<? extends RootDSEBackendCfgClient> impl) {
147        return new RootDSEBackendCfgClientImpl(impl);
148      }
149    
150    
151    
152      /**
153       * {@inheritDoc}
154       */
155      public RootDSEBackendCfg createServerConfiguration(
156          ServerManagedObject<? extends RootDSEBackendCfg> impl) {
157        return new RootDSEBackendCfgServerImpl(impl);
158      }
159    
160    
161    
162      /**
163       * {@inheritDoc}
164       */
165      public Class<RootDSEBackendCfg> getServerConfigurationClass() {
166        return RootDSEBackendCfg.class;
167      }
168    
169    
170    
171      /**
172       * Get the "show-all-attributes" property definition.
173       * <p>
174       * Indicates whether all attributes in the root DSE are to be
175       * treated like user attributes (and therefore returned to clients by
176       * default) regardless of the Directory Server schema configuration.
177       *
178       * @return Returns the "show-all-attributes" property definition.
179       */
180      public BooleanPropertyDefinition getShowAllAttributesPropertyDefinition() {
181        return PD_SHOW_ALL_ATTRIBUTES;
182      }
183    
184    
185    
186      /**
187       * Get the "subordinate-base-dn" property definition.
188       * <p>
189       * Specifies the set of base DNs used for singleLevel, wholeSubtree,
190       * and subordinateSubtree searches based at the root DSE.
191       *
192       * @return Returns the "subordinate-base-dn" property definition.
193       */
194      public DNPropertyDefinition getSubordinateBaseDNPropertyDefinition() {
195        return PD_SUBORDINATE_BASE_DN;
196      }
197    
198    
199    
200      /**
201       * Managed object client implementation.
202       */
203      private static class RootDSEBackendCfgClientImpl implements
204        RootDSEBackendCfgClient {
205    
206        // Private implementation.
207        private ManagedObject<? extends RootDSEBackendCfgClient> impl;
208    
209    
210    
211        // Private constructor.
212        private RootDSEBackendCfgClientImpl(
213            ManagedObject<? extends RootDSEBackendCfgClient> impl) {
214          this.impl = impl;
215        }
216    
217    
218    
219        /**
220         * {@inheritDoc}
221         */
222        public Boolean isShowAllAttributes() {
223          return impl.getPropertyValue(INSTANCE.getShowAllAttributesPropertyDefinition());
224        }
225    
226    
227    
228        /**
229         * {@inheritDoc}
230         */
231        public void setShowAllAttributes(boolean value) {
232          impl.setPropertyValue(INSTANCE.getShowAllAttributesPropertyDefinition(), value);
233        }
234    
235    
236    
237        /**
238         * {@inheritDoc}
239         */
240        public SortedSet<DN> getSubordinateBaseDN() {
241          return impl.getPropertyValues(INSTANCE.getSubordinateBaseDNPropertyDefinition());
242        }
243    
244    
245    
246        /**
247         * {@inheritDoc}
248         */
249        public void setSubordinateBaseDN(Collection<DN> values) {
250          impl.setPropertyValues(INSTANCE.getSubordinateBaseDNPropertyDefinition(), values);
251        }
252    
253    
254    
255        /**
256         * {@inheritDoc}
257         */
258        public ManagedObjectDefinition<? extends RootDSEBackendCfgClient, ? extends RootDSEBackendCfg> definition() {
259          return INSTANCE;
260        }
261    
262    
263    
264        /**
265         * {@inheritDoc}
266         */
267        public PropertyProvider properties() {
268          return impl;
269        }
270    
271    
272    
273        /**
274         * {@inheritDoc}
275         */
276        public void commit() throws ManagedObjectAlreadyExistsException,
277            MissingMandatoryPropertiesException, ConcurrentModificationException,
278            OperationRejectedException, AuthorizationException,
279            CommunicationException {
280          impl.commit();
281        }
282    
283      }
284    
285    
286    
287      /**
288       * Managed object server implementation.
289       */
290      private static class RootDSEBackendCfgServerImpl implements
291        RootDSEBackendCfg {
292    
293        // Private implementation.
294        private ServerManagedObject<? extends RootDSEBackendCfg> impl;
295    
296        // The value of the "show-all-attributes" property.
297        private final boolean pShowAllAttributes;
298    
299        // The value of the "subordinate-base-dn" property.
300        private final SortedSet<DN> pSubordinateBaseDN;
301    
302    
303    
304        // Private constructor.
305        private RootDSEBackendCfgServerImpl(ServerManagedObject<? extends RootDSEBackendCfg> impl) {
306          this.impl = impl;
307          this.pShowAllAttributes = impl.getPropertyValue(INSTANCE.getShowAllAttributesPropertyDefinition());
308          this.pSubordinateBaseDN = impl.getPropertyValues(INSTANCE.getSubordinateBaseDNPropertyDefinition());
309        }
310    
311    
312    
313        /**
314         * {@inheritDoc}
315         */
316        public void addChangeListener(
317            ConfigurationChangeListener<RootDSEBackendCfg> listener) {
318          impl.registerChangeListener(listener);
319        }
320    
321    
322    
323        /**
324         * {@inheritDoc}
325         */
326        public void removeChangeListener(
327            ConfigurationChangeListener<RootDSEBackendCfg> listener) {
328          impl.deregisterChangeListener(listener);
329        }
330    
331    
332    
333        /**
334         * {@inheritDoc}
335         */
336        public boolean isShowAllAttributes() {
337          return pShowAllAttributes;
338        }
339    
340    
341    
342        /**
343         * {@inheritDoc}
344         */
345        public SortedSet<DN> getSubordinateBaseDN() {
346          return pSubordinateBaseDN;
347        }
348    
349    
350    
351        /**
352         * {@inheritDoc}
353         */
354        public Class<? extends RootDSEBackendCfg> configurationClass() {
355          return RootDSEBackendCfg.class;
356        }
357    
358    
359    
360        /**
361         * {@inheritDoc}
362         */
363        public DN dn() {
364          return impl.getDN();
365        }
366    
367      }
368    }