From ac94e6957b59a1a28c6285f3481327b109c59748 Mon Sep 17 00:00:00 2001
From: Gaetan Boismal <gaetan.boismal@forgerock.com>
Date: Tue, 10 Nov 2015 16:42:55 +0000
Subject: [PATCH] OPENDJ-2388 Change setup to support OEM editions

---
 opendj-server-legacy/src/main/java/org/opends/server/tools/InstallDS.java         |   16 +++++++
 opendj-server-legacy/src/messages/org/opends/messages/tool.properties             |    1 
 opendj-server-legacy/src/main/java/org/opends/server/tools/BackendTypeHelper.java |   46 +++++++++++++++++-----
 3 files changed, 51 insertions(+), 12 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/tools/BackendTypeHelper.java b/opendj-server-legacy/src/main/java/org/opends/server/tools/BackendTypeHelper.java
index 47716c0..8dada30 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/tools/BackendTypeHelper.java
+++ b/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)
   {
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/tools/InstallDS.java b/opendj-server-legacy/src/main/java/org/opends/server/tools/InstallDS.java
index 977a305..daa1a35 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/tools/InstallDS.java
+++ b/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()
diff --git a/opendj-server-legacy/src/messages/org/opends/messages/tool.properties b/opendj-server-legacy/src/messages/org/opends/messages/tool.properties
index 015792d..8963d64 100644
--- a/opendj-server-legacy/src/messages/org/opends/messages/tool.properties
+++ b/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

--
Gitblit v1.10.0