mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

matthew_swift
17.43.2007 83ae39c633ac896fb89d82d4cecef2c7d8ea8e00
opendj-sdk/opends/resource/admin/metaMO.xsl
@@ -222,7 +222,7 @@
        <xsl:value-of
          select="concat('    super(&quot;',
                         $this/@name,
                         '&quot;, null);&#xa;')" />
                         '&quot;, TopCfgDefn.getInstance());&#xa;')" />
      </xsl:otherwise>
    </xsl:choose>
    <xsl:value-of select="'  }&#xa;'" />
@@ -1628,6 +1628,9 @@
    <xsl:text>&#xa;</xsl:text>
    <xsl:call-template name="generate-import-statements">
      <xsl:with-param name="imports">
        <xsl:if test="not(boolean($this/@extends))">
          <import>org.opends.server.admin.TopCfgDefn</import>
        </xsl:if>
        <xsl:if
          test="$this-local-properties[@multi-valued='true' or
                                       @read-only='true' or
opendj-sdk/opends/src/server/org/opends/server/admin/AbstractManagedObjectDefinition.java
@@ -43,6 +43,7 @@
import org.opends.messages.Message;
import org.opends.server.admin.DefinitionDecodingException.Reason;
import org.opends.server.util.Validator;
@@ -108,11 +109,24 @@
   * @param name
   *          The name of the definition.
   * @param parent
   *          The parent definition, or <code>null</code> if there is no
   *          parent.
   *          The parent definition, or <code>null</code> if there
   *          is no parent (only the {@link TopCfgDefn} should have a
   *          <code>null</code> parent}.
   */
  protected AbstractManagedObjectDefinition(String name,
      AbstractManagedObjectDefinition<? super C, ? super S> parent) {
    // Perform sanity checks.
    if (this.getClass() == TopCfgDefn.class) {
      Validator.ensureTrue(name.equals("top"),
          "TopCfgDefn should have the name 'top'");
      Validator.ensureTrue(parent == null,
          "TopCfgDefn should not have a parent");
    } else {
      Validator.ensureTrue(!name.equals("top"),
          "Only the TopCfgDefn should have the name 'top'");
      Validator.ensureTrue(parent != null, "No parent defined");
    }
    this.name = name;
    this.parent = parent;
    this.constraints = new LinkedList<Constraint>();
@@ -309,8 +323,11 @@
   * @return Returns the description of this managed object definition
   *         in the default locale, or <code>null</code> if there is
   *         no description.
   * @throws UnsupportedOperationException
   *           If this managed object definition is the
   *           {@link TopCfgDefn}.
   */
  public final Message getDescription() {
  public final Message getDescription() throws UnsupportedOperationException {
    return getDescription(Locale.getDefault());
  }
@@ -325,11 +342,15 @@
   * @return Returns the description of this managed object definition
   *         in the specified locale, or <code>null</code> if there
   *         is no description.
   * @throws UnsupportedOperationException
   *           If this managed object definition is the
   *           {@link TopCfgDefn}.
   */
  public final Message getDescription(Locale locale) {
  public final Message getDescription(Locale locale)
      throws UnsupportedOperationException {
    try {
      return ManagedObjectDefinitionI18NResource.getInstance()
          .getMessage(this, "description", locale);
        .getMessage(this, "description", locale);
    } catch (MissingResourceException e) {
      return null;
    }
@@ -352,8 +373,8 @@
   * Get the parent managed object definition, if applicable.
   *
   * @return Returns the parent of this managed object definition, or
   *         <code>null</code> if this definition does not have a
   *         parent.
   *         <code>null</code> if this definition is the
   *         {@link TopCfgDefn}.
   */
  public final AbstractManagedObjectDefinition<? super C,
      ? super S> getParent() {
@@ -459,8 +480,11 @@
   *
   * @return Returns the synopsis of this managed object definition in
   *         the default locale.
   * @throws UnsupportedOperationException
   *           If this managed object definition is the
   *           {@link TopCfgDefn}.
   */
  public final Message getSynopsis() {
  public final Message getSynopsis() throws UnsupportedOperationException {
    return getSynopsis(Locale.getDefault());
  }
@@ -474,8 +498,12 @@
   *          The locale.
   * @return Returns the synopsis of this managed object definition in
   *         the specified locale.
   * @throws UnsupportedOperationException
   *           If this managed object definition is the
   *           {@link TopCfgDefn}.
   */
  public final Message getSynopsis(Locale locale) {
  public final Message getSynopsis(Locale locale)
      throws UnsupportedOperationException {
    return ManagedObjectDefinitionI18NResource.getInstance()
        .getMessage(this, "synopsis", locale);
  }
@@ -488,8 +516,12 @@
   *
   * @return Returns the user friendly name of this managed object
   *         definition in the default locale.
   * @throws UnsupportedOperationException
   *           If this managed object definition is the
   *           {@link TopCfgDefn}.
   */
  public final Message getUserFriendlyName() {
  public final Message getUserFriendlyName()
      throws UnsupportedOperationException {
    return getUserFriendlyName(Locale.getDefault());
  }
@@ -503,8 +535,12 @@
   *          The locale.
   * @return Returns the user friendly name of this managed object
   *         definition in the specified locale.
   * @throws UnsupportedOperationException
   *           If this managed object definition is the
   *           {@link TopCfgDefn}.
   */
  public final Message getUserFriendlyName(Locale locale) {
  public final Message getUserFriendlyName(Locale locale)
      throws UnsupportedOperationException {
    // TODO: have admin framework getMessage return a Message
    return Message.raw(ManagedObjectDefinitionI18NResource.getInstance()
        .getMessage(this, "user-friendly-name", locale));
@@ -518,8 +554,12 @@
   *
   * @return Returns the user friendly plural name of this managed
   *         object definition in the default locale.
   * @throws UnsupportedOperationException
   *           If this managed object definition is the
   *           {@link TopCfgDefn}.
   */
  public final Message getUserFriendlyPluralName() {
  public final Message getUserFriendlyPluralName()
      throws UnsupportedOperationException {
    return getUserFriendlyPluralName(Locale.getDefault());
  }
@@ -533,8 +573,12 @@
   *          The locale.
   * @return Returns the user friendly plural name of this managed
   *         object definition in the specified locale.
   * @throws UnsupportedOperationException
   *           If this managed object definition is the
   *           {@link TopCfgDefn}.
   */
  public final Message getUserFriendlyPluralName(Locale locale) {
  public final Message getUserFriendlyPluralName(Locale locale)
      throws UnsupportedOperationException {
    return ManagedObjectDefinitionI18NResource.getInstance()
        .getMessage(this, "user-friendly-plural-name", locale);
  }
@@ -616,6 +660,19 @@
  /**
   * Determines whether or not this managed object definition is the
   * {@link TopCfgDefn}.
   *
   * @return Returns <code>true</code> if this managed object
   *         definition is the {@link TopCfgDefn}.
   */
  public final boolean isTop() {
    return (this == TopCfgDefn.getInstance());
  }
  /**
   * Finds a sub-type of this managed object definition which most closely
   * corresponds to the matching criteria of the provided definition resolver.
   *
opendj-sdk/opends/src/server/org/opends/server/admin/LDAPProfile.java
@@ -268,6 +268,10 @@
   */
  public String getObjectClass(AbstractManagedObjectDefinition<?, ?> d)
      throws MissingResourceException {
    if (d.isTop()) {
      return "top";
    }
    for (Wrapper profile : profiles) {
      String objectClass = profile.getObjectClass(d);
      if (objectClass != null) {
@@ -309,11 +313,6 @@
      d = d.getParent();
    }
    // Make sure that we have top.
    if (!s.contains("top")) {
      objectClasses.addFirst("top");
    }
    return objectClasses;
  }
opendj-sdk/opends/src/server/org/opends/server/admin/ManagedObjectDefinitionI18NResource.java
@@ -42,6 +42,9 @@
/**
 * A class for retrieving internationalized resource properties
 * associated with a managed object definition.
 * <p>
 * I18N resource properties are not available for the
 * {@link TopCfgDefn}.
 */
public final class ManagedObjectDefinitionI18NResource {
@@ -127,9 +130,12 @@
   *         specified key in the default locale.
   * @throws MissingResourceException
   *           If the key was not found.
   * @throws UnsupportedOperationException
   *           If the provided managed object definition was the
   *           {@link TopCfgDefn}.
   */
  public Message getMessage(AbstractManagedObjectDefinition<?, ?> d,
      String key) throws MissingResourceException {
  public Message getMessage(AbstractManagedObjectDefinition<?, ?> d, String key)
      throws MissingResourceException, UnsupportedOperationException {
    return getMessage(d, key, Locale.getDefault(), (String[]) null);
  }
@@ -149,9 +155,13 @@
   *         specified key and locale.
   * @throws MissingResourceException
   *           If the key was not found.
   * @throws UnsupportedOperationException
   *           If the provided managed object definition was the
   *           {@link TopCfgDefn}.
   */
  public Message getMessage(AbstractManagedObjectDefinition<?, ?> d,
      String key, Locale locale) throws MissingResourceException {
      String key, Locale locale) throws MissingResourceException,
      UnsupportedOperationException {
    return getMessage(d, key, locale, (String[]) null);
  }
@@ -174,10 +184,13 @@
   *         specified key and locale.
   * @throws MissingResourceException
   *           If the key was not found.
   * @throws UnsupportedOperationException
   *           If the provided managed object definition was the
   *           {@link TopCfgDefn}.
   */
  public Message getMessage(AbstractManagedObjectDefinition<?, ?> d,
      String key, Locale locale, String... args)
      throws MissingResourceException {
      throws MissingResourceException, UnsupportedOperationException {
    ResourceBundle resource = getResourceBundle(d, locale);
    // TODO: use message framework directly
@@ -206,9 +219,13 @@
   *         specified key in the default locale.
   * @throws MissingResourceException
   *           If the key was not found.
   * @throws UnsupportedOperationException
   *           If the provided managed object definition was the
   *           {@link TopCfgDefn}.
   */
  public Message getMessage(AbstractManagedObjectDefinition<?, ?> d,
      String key, String... args) throws MissingResourceException {
      String key, String... args) throws MissingResourceException,
      UnsupportedOperationException {
    return getMessage(d, key, Locale.getDefault(), args);
  }
@@ -303,7 +320,13 @@
  // locale, lazily loading it if necessary.
  private synchronized ResourceBundle getResourceBundle(
      AbstractManagedObjectDefinition<?, ?> d, Locale locale)
      throws MissingResourceException {
      throws MissingResourceException, UnsupportedOperationException {
    if (d.isTop()) {
      throw new UnsupportedOperationException(
          "I18n resources are not available for the "
              + "Top configuration definition");
    }
    // First get the locale-resource mapping, creating it if
    // necessary.
    Map<Locale, ResourceBundle> map = resources.get(d);
opendj-sdk/opends/src/server/org/opends/server/admin/ManagedObjectDefinitionResource.java
@@ -42,6 +42,8 @@
/**
 * A class for retrieving non-internationalized resource properties
 * associated with a managed object definition.
 * <p>
 * Resource properties are not available for the {@link TopCfgDefn}.
 */
public final class ManagedObjectDefinitionResource {
@@ -89,9 +91,18 @@
   *         key.
   * @throws MissingResourceException
   *           If the key was not found.
   * @throws UnsupportedOperationException
   *           If the provided managed object definition was the
   *           {@link TopCfgDefn}.
   */
  public String getString(AbstractManagedObjectDefinition<?, ?> d,
      String key) throws MissingResourceException {
  public String getString(AbstractManagedObjectDefinition<?, ?> d, String key)
      throws MissingResourceException, UnsupportedOperationException {
    if (d.isTop()) {
      throw new UnsupportedOperationException(
          "Profile resources are not available for the "
              + "Top configuration definition");
    }
    Properties p = getProperties(d);
    String result = p.getProperty(key);
@@ -109,8 +120,7 @@
  // Retrieve the properties table associated with a managed object,
  // lazily
  // loading it if necessary.
  // lazily loading it if necessary.
  private synchronized Properties getProperties(
      AbstractManagedObjectDefinition<?, ?> d)
      throws MissingResourceException {
opendj-sdk/opends/src/server/org/opends/server/admin/TopCfgDefn.java
New file
@@ -0,0 +1,74 @@
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  If applicable,
 * add the following below this CDDL HEADER, with the fields enclosed
 * by brackets "[]" replaced with your own identifying information:
 *      Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 *
 *
 *      Portions Copyright 2007 Sun Microsystems, Inc.
 */
package org.opends.server.admin;
/**
 * Configuration definition <code>TopCfgDefn</code> is the root of
 * the configuration definition hierarchy. Every configuration has
 * <code>TopCfgDefn</code> as a superclass.
 * <p>
 * The <code>TopCfgDefn</code> has no properties or relations.
 * However, it can be used to determine all the configuration
 * definitions currently available to the administration framework
 * using the {@link #getAllChildren()}.
 * <p>
 * <b>NOTE:</b> it is not possible to retrieve I18N related
 * information or profile information for this managed object
 * definition. In particular, calls to the methods
 * {@link #getSynopsis()}, {@link #getDescription()},
 * {@link #getUserFriendlyName()}, and
 * {@link #getUserFriendlyPluralName()} will not work.
 */
public final class TopCfgDefn extends
    AbstractManagedObjectDefinition<ConfigurationClient, Configuration> {
  // The singleton configuration definition instance.
  private static final TopCfgDefn INSTANCE = new TopCfgDefn();
  /**
   * Get the Top configuration definition singleton.
   *
   * @return Returns the Top configuration definition singleton.
   */
  public static TopCfgDefn getInstance() {
    return INSTANCE;
  }
  /**
   * Private constructor.
   */
  private TopCfgDefn() {
    super("top", null);
  }
}
opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/HelpSubCommandHandler.java
@@ -757,7 +757,7 @@
      AbstractManagedObjectDefinition<?, ?> d) {
    // Determine the definition's base name.
    AbstractManagedObjectDefinition<?, ?> parent = d;
    while (parent.getParent() != null) {
    while (!parent.getParent().isTop()) {
      parent = parent.getParent();
    }
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/AbstractManagedObjectDefinitionTest.java
@@ -71,7 +71,7 @@
  }
  // Test definitions.
  private TestDefinition top = new TestDefinition("top", null);
  private TestDefinition top = new TestDefinition("topmost", TopCfgDefn.getInstance());
  private TestDefinition middle1 = new TestDefinition("middle1", top);
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/TestChildCfgDefn.java
@@ -202,7 +202,7 @@
   * Private constructor.
   */
  private TestChildCfgDefn() {
    super("test-child", null);
    super("test-child", TopCfgDefn.getInstance());
  }
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/TestParentCfgDefn.java
@@ -201,7 +201,7 @@
   * Private constructor.
   */
  private TestParentCfgDefn() {
    super("test-parent", null);
    super("test-parent", TopCfgDefn.getInstance());
  }
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/TestTopCfgDefnTest.java
New file
@@ -0,0 +1,190 @@
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  If applicable,
 * add the following below this CDDL HEADER, with the fields enclosed
 * by brackets "[]" replaced with your own identifying information:
 *      Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 *
 *
 *      Portions Copyright 2007 Sun Microsystems, Inc.
 */
package org.opends.server.admin;
import static org.testng.Assert.*;
import org.opends.server.DirectoryServerTestCase;
import org.opends.server.TestCaseUtils;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
/**
 * TopCfgDefn test cases.
 */
@Test(sequential = true)
public class TestTopCfgDefnTest extends DirectoryServerTestCase {
  /**
   * Sets up tests
   *
   * @throws Exception
   *           If the server could not be initialized.
   */
  @BeforeClass
  public void setUp() throws Exception {
    // This test suite depends on having the admin framework
    // initialized.
    TestCaseUtils.startServer();
  }
  /**
   * Tests getInstance() does not return null.
   */
  @Test
  public void testGetInstance() {
    assertNotNull(TopCfgDefn.getInstance());
  }
  /**
   * Tests getName() returns "top".
   */
  @Test
  public void testGetName() {
    assertEquals(TopCfgDefn.getInstance().getName(), "top");
  }
  /**
   * Tests that there are no property definitions.
   */
  @Test
  public void testGetAllPropertyDefinitions() {
    assertTrue(TopCfgDefn.getInstance().getAllPropertyDefinitions().isEmpty());
  }
  /**
   * Tests that there are no relation definitions.
   */
  @Test
  public void testGetAllRelationDefinitions() {
    assertTrue(TopCfgDefn.getInstance().getAllRelationDefinitions().isEmpty());
  }
  /**
   * Tests that there are no constraints.
   */
  @Test
  public void testGetAllConstraints() {
    assertTrue(TopCfgDefn.getInstance().getAllConstraints().isEmpty());
  }
  /**
   * Tests that there are no tags.
   */
  @Test
  public void testGetAllTags() {
    assertTrue(TopCfgDefn.getInstance().getAllTags().isEmpty());
  }
  /**
   * Tests that there is no parent.
   */
  @Test
  public void testGetParent() {
    assertNull(TopCfgDefn.getInstance().getParent());
  }
  /**
   * Tests that isTop returns true.
   */
  @Test
  public void testIsTop() {
    assertTrue(TopCfgDefn.getInstance().isTop());
  }
  /**
   * Tests that getSynopsis throws an exception.
   */
  @Test(expectedExceptions = UnsupportedOperationException.class)
  public void testGetSynopsis() {
    assertNotNull(TopCfgDefn.getInstance().getSynopsis());
  }
  /**
   * Tests that getDescription throws an exception.
   */
  @Test(expectedExceptions = UnsupportedOperationException.class)
  public void testGetDescription() {
    assertNotNull(TopCfgDefn.getInstance().getDescription());
  }
  /**
   * Tests that getUserFriendlyName throws an exception.
   */
  @Test(expectedExceptions = UnsupportedOperationException.class)
  public void testGetUserFriendlyName() {
    assertNotNull(TopCfgDefn.getInstance().getUserFriendlyName());
  }
  /**
   * Tests that getUserFriendlyPluralName throws an exception.
   */
  @Test(expectedExceptions = UnsupportedOperationException.class)
  public void testGetUserFriendlyPluralName() {
    assertNotNull(TopCfgDefn.getInstance().getUserFriendlyPluralName());
  }
  /**
   * Tests that there are children.
   */
  @Test
  public void testGetAllChildren() {
    assertTrue(TopCfgDefn.getInstance().getAllChildren().size() > 0);
  }
}
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/client/spi/PropertySetTest.java
@@ -28,17 +28,32 @@
package org.opends.server.admin.client.spi;
import static org.testng.Assert.*;
import org.testng.annotations.*;
import org.opends.server.admin.*;
import org.opends.server.admin.Configuration;
import org.opends.server.admin.client.ManagedObject;
import org.opends.server.admin.client.spi.Property;
import org.opends.server.admin.client.spi.PropertySet;
import org.opends.server.admin.server.ServerManagedObject;
import org.opends.server.admin.std.meta.RootCfgDefn;
import org.opends.server.DirectoryServerTestCase;
import java.util.*;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Set;
import java.util.SortedSet;
import org.opends.server.admin.AbstractManagedObjectDefinition;
import org.opends.server.admin.AdminTestCase;
import org.opends.server.admin.BooleanPropertyDefinition;
import org.opends.server.admin.Configuration;
import org.opends.server.admin.ConfigurationClient;
import org.opends.server.admin.DefaultBehaviorProvider;
import org.opends.server.admin.DefinedDefaultBehaviorProvider;
import org.opends.server.admin.ManagedObjectDefinition;
import org.opends.server.admin.PropertyDefinition;
import org.opends.server.admin.PropertyOption;
import org.opends.server.admin.PropertyProvider;
import org.opends.server.admin.StringPropertyDefinition;
import org.opends.server.admin.TopCfgDefn;
import org.opends.server.admin.client.ManagedObject;
import org.opends.server.admin.server.ServerManagedObject;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
/**
 * PropertySet Tester.
@@ -73,21 +88,21 @@
  @BeforeClass
  public void setUp() {
    BooleanPropertyDefinition.Builder builder =
            BooleanPropertyDefinition.createBuilder(RootCfgDefn.getInstance(), "test-bool-prop");
            BooleanPropertyDefinition.createBuilder(TopCfgDefn.getInstance(), "test-bool-prop");
    DefinedDefaultBehaviorProvider<Boolean> dbp =
            new DefinedDefaultBehaviorProvider<Boolean>(BOOL_DEFAULT.toString());
    builder.setDefaultBehaviorProvider(dbp);
    testBoolPropertyDefinition = builder.getInstance();
    StringPropertyDefinition.Builder builder2 =
            StringPropertyDefinition.createBuilder(RootCfgDefn.getInstance(), "test-sv-str-prop");
            StringPropertyDefinition.createBuilder(TopCfgDefn.getInstance(), "test-sv-str-prop");
    DefinedDefaultBehaviorProvider<String> dbp2 =
            new DefinedDefaultBehaviorProvider<String>(STR_DEFAULT);
    builder2.setDefaultBehaviorProvider(dbp2);
    testSvStringPropertyDefinition = builder2.getInstance();
    StringPropertyDefinition.Builder builder3 =
            StringPropertyDefinition.createBuilder(RootCfgDefn.getInstance(), "test-mv-str-prop");
            StringPropertyDefinition.createBuilder(TopCfgDefn.getInstance(), "test-mv-str-prop");
    DefinedDefaultBehaviorProvider<String> dbp3 =
            new DefinedDefaultBehaviorProvider<String>(STR_DEFAULT);
    builder3.setDefaultBehaviorProvider(dbp3);
@@ -385,7 +400,7 @@
  }
  private PropertySet createTestPropertySet(PropertyProvider pp) {
    ManagedObjectDefinition<?, ?> d = new TestManagedObjectDefinition<ConfigurationClient, Configuration>("test-mod", null);
    ManagedObjectDefinition<?, ?> d = new TestManagedObjectDefinition<ConfigurationClient, Configuration>("test-mod", TopCfgDefn.getInstance());
    PropertySet ps = new PropertySet();
    for (PropertyDefinition<?> pd : d.getPropertyDefinitions()) {
      addProperty(ps, pd, pp);