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

Gaetan Boismal
02.29.2015 ac94e6957b59a1a28c6285f3481327b109c59748
OPENDJ-2388 Change setup to support OEM editions

Pull Request #133
* BackendTypeHelper
* Check if the java class of each backend type element is available
in the classpath before adding it to the available backend list.
* Other changes
* Pretty print in setup cli if there is just one backend type
available (i.e in oem versions)
3 files modified
63 ■■■■ changed files
opendj-server-legacy/src/main/java/org/opends/server/tools/BackendTypeHelper.java 46 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/InstallDS.java 16 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/messages/org/opends/messages/tool.properties 1 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/BackendTypeHelper.java
@@ -26,12 +26,14 @@
package org.opends.server.tools;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.forgerock.opendj.config.AbstractManagedObjectDefinition;
import org.forgerock.opendj.config.DefinedDefaultBehaviorProvider;
import org.forgerock.opendj.config.ManagedObjectDefinition;
import org.forgerock.opendj.server.config.client.BackendCfgClient;
import org.forgerock.opendj.server.config.meta.LocalDBBackendCfgDefn;
@@ -164,27 +166,49 @@
    backends = new LinkedList<>();
    // Add the JE backend if it is supported in this release.
    try
    {
      Class.forName("org.opends.server.backends.jeb.BackendImpl");
      backends.add(LocalDBBackendCfgDefn.getInstance());
    }
    catch (ClassNotFoundException ignored)
    {
      // Ignore: JE backend not supported.
    }
    addLocalDBBackendIfSupported();
    for (AbstractManagedObjectDefinition<?, ?> backendType : PluggableBackendCfgDefn.getInstance().getAllChildren())
    {
      // Filtering out only the non-abstract backends to avoid users attempt to create abstract ones
      if (backendType instanceof ManagedObjectDefinition)
      {
        backends.add((ManagedObjectDefinition<? extends BackendCfgClient, ? extends BackendCfg>) backendType);
        final DefinedDefaultBehaviorProvider<String> defaultBehaviorProvider =
                (DefinedDefaultBehaviorProvider<String>) backendType.getPropertyDefinition("java-class")
                                                                    .getDefaultBehaviorProvider();
        final Iterator<String> defaultBackendClassNameIterator = defaultBehaviorProvider.getDefaultValues().iterator();
        if (!defaultBackendClassNameIterator.hasNext())
        {
          return;
        }
        addToBackendListIfClassExists(defaultBackendClassNameIterator.next(),
                (ManagedObjectDefinition<? extends BackendCfgClient, ? extends BackendCfg>) backendType);
      }
    }
  }
  @RemoveOnceLocalDBBackendIsPluggable
  private void addLocalDBBackendIfSupported()
  {
    addToBackendListIfClassExists(
            "org.opends.server.backends.jeb.BackendImpl", LocalDBBackendCfgDefn.getInstance());
  }
  private void addToBackendListIfClassExists(final String backendClassName,
          final ManagedObjectDefinition<? extends BackendCfgClient, ? extends BackendCfg> backendToAdd)
  {
    try
    {
      Class.forName(backendClassName);
      backends.add(backendToAdd);
    }
    catch (ClassNotFoundException ignored)
    {
      // The backend is not supported in the running version.
    }
  }
  ManagedObjectDefinition<? extends BackendCfgClient, ? extends BackendCfg> retrieveBackendTypeFromName(
      final String backendTypeStr)
  {
opendj-server-legacy/src/main/java/org/opends/server/tools/InstallDS.java
@@ -1288,7 +1288,21 @@
          argParser.backendTypeArg.getValue(), backendTypeHelper.getPrintableBackendTypeNames()));
    }
    return promptForBackendType();
  }
  private ManagedObjectDefinition<? extends BackendCfgClient,? extends BackendCfg> promptForBackendType()
  {
    println();
    int backendTypeIndex = 1;
    final List<ManagedObjectDefinition<? extends BackendCfgClient, ? extends BackendCfg>> backendTypes =
            backendTypeHelper.getBackendTypes();
    if (backendTypes.size() == 1) {
      final ManagedObjectDefinition<? extends BackendCfgClient, ? extends BackendCfg> backendType = backendTypes.get(0);
      println(INFO_INSTALLDS_BACKEND_TYPE_USED.get(backendType.getUserFriendlyName()));
      return backendType;
    }
    try
    {
      final MenuResult<Integer> m = getBackendTypeMenu().run();
@@ -1302,7 +1316,7 @@
      logger.warn(LocalizableMessage.raw("Error reading input: " + ce, ce));
    }
    return backendTypeHelper.getBackendTypes().get(backendTypeIndex - 1);
    return backendTypes.get(backendTypeIndex - 1);
  }
  private Menu<Integer> getBackendTypeMenu()
opendj-server-legacy/src/messages/org/opends/messages/tool.properties
@@ -2743,3 +2743,4 @@
ERR_FILE_NOT_FULLY_READABLE_20015=Could not completely read file '%s'
SUPPLEMENT_DESCRIPTION_BACKEND_TOOL_SUBCMD_LIST_INDEX_STATUS_20016=\
  <xinclude:include href="variablelist-backendstat-index-status.xml" />
INFO_INSTALLDS_BACKEND_TYPE_USED_20017=Backend Type: %s