From bf58a21e71230bff9b456627fd31789cc98507bd Mon Sep 17 00:00:00 2001
From: Gaetan Boismal <gaetan.boismal@forgerock.com>
Date: Mon, 27 Apr 2015 10:03:47 +0000
Subject: [PATCH] OPENDJ-1963 Use backend type printable name in UI

---
 opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/ui/DataOptionsPanel.java |    8 +-
 opendj-server-legacy/src/main/java/org/opends/quicksetup/UserData.java                      |    9 ++-
 opendj-server-legacy/src/main/java/org/opends/server/tools/InstallDS.java                   |   27 +++++---
 opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/Installer.java           |   10 ++
 opendj-server-legacy/src/main/java/org/opends/quicksetup/util/Utils.java                    |    5 +
 opendj-server-legacy/src/main/java/org/opends/server/tools/BackendTypeHelper.java           |   87 ++++++++++++++++++++++------
 opendj-server-legacy/src/main/java/org/opends/server/tools/InstallDSArgumentParser.java     |    2 
 7 files changed, 106 insertions(+), 42 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/quicksetup/UserData.java b/opendj-server-legacy/src/main/java/org/opends/quicksetup/UserData.java
index 73aa7f5..3cb7076 100644
--- a/opendj-server-legacy/src/main/java/org/opends/quicksetup/UserData.java
+++ b/opendj-server-legacy/src/main/java/org/opends/quicksetup/UserData.java
@@ -31,6 +31,9 @@
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
+import org.forgerock.opendj.config.ManagedObjectDefinition;
+import org.forgerock.opendj.server.config.client.BackendCfgClient;
+import org.forgerock.opendj.server.config.server.BackendCfg;
 import org.opends.admin.ads.ServerDescriptor;
 import org.opends.admin.ads.SuffixDescriptor;
 import org.opends.quicksetup.installer.AuthenticationData;
@@ -72,7 +75,7 @@
 
   private boolean enableWindowsService;
 
-  private String backendType;
+  private ManagedObjectDefinition<? extends BackendCfgClient, ? extends BackendCfg> backendType;
 
   private NewSuffixOptions newSuffixOptions;
 
@@ -359,7 +362,7 @@
    *
    * @return the new userRoot backend type.
    */
-  public String getBackendType()
+  public ManagedObjectDefinition<? extends BackendCfgClient, ? extends BackendCfg> getBackendType()
   {
     return backendType;
   }
@@ -371,7 +374,7 @@
    *          The new backend type. This string must be compatible with
    *          dsconfig tool.
    */
-  public void setBackendType(final String backendType)
+  public void setBackendType(ManagedObjectDefinition<? extends BackendCfgClient, ? extends BackendCfg> backendType)
   {
     this.backendType = backendType;
   }
diff --git a/opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/Installer.java b/opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/Installer.java
index adc5739..789f6a2 100644
--- a/opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/Installer.java
+++ b/opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/Installer.java
@@ -71,6 +71,9 @@
 import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.forgerock.i18n.slf4j.LocalizedLogger;
+import org.forgerock.opendj.config.ManagedObjectDefinition;
+import org.forgerock.opendj.server.config.client.BackendCfgClient;
+import org.forgerock.opendj.server.config.server.BackendCfg;
 import org.opends.admin.ads.ADSContext;
 import org.opends.admin.ads.ADSContextException;
 import org.opends.admin.ads.ReplicaDescriptor;
@@ -122,6 +125,7 @@
 import org.opends.quicksetup.util.FileManager;
 import org.opends.quicksetup.util.IncompatibleVersionException;
 import org.opends.quicksetup.util.Utils;
+import org.opends.server.tools.BackendTypeHelper;
 import org.opends.server.util.CertificateManager;
 import org.opends.server.util.DynamicConstants;
 import org.opends.server.util.SetupUtils;
@@ -873,7 +877,7 @@
     argList.add(getUserData().getDirectoryManagerPwd());
 
     argList.add("--" + OPTION_LONG_BACKEND_TYPE);
-    argList.add(getUserData().getBackendType());
+    argList.add(BackendTypeHelper.filterSchemaBackendName(getUserData().getBackendType().getName()));
 
     if (createNotReplicatedSuffix())
     {
@@ -3730,6 +3734,7 @@
    * @throws UserDataException
    *           if the data provided by the user is not valid.
    */
+  @SuppressWarnings("unchecked")
   private void updateUserDataForNewSuffixOptionsPanel(final QuickSetup ui) throws UserDataException
   {
     final List<LocalizableMessage> errorMsgs = new ArrayList<LocalizableMessage>();
@@ -3740,7 +3745,8 @@
 
     if (dataOptions != null)
     {
-      getUserData().setBackendType(ui.getFieldStringValue(FieldName.BACKEND_TYPE));
+      getUserData().setBackendType((ManagedObjectDefinition<? extends BackendCfgClient, ? extends BackendCfg>)
+          ui.getFieldValue(FieldName.BACKEND_TYPE));
       getUserData().setNewSuffixOptions(dataOptions);
     }
 
diff --git a/opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/ui/DataOptionsPanel.java b/opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/ui/DataOptionsPanel.java
index 4615583..5275055 100644
--- a/opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/ui/DataOptionsPanel.java
+++ b/opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/ui/DataOptionsPanel.java
@@ -40,7 +40,6 @@
 
 import javax.swing.Box;
 import javax.swing.ButtonGroup;
-import javax.swing.DefaultComboBoxModel;
 import javax.swing.JButton;
 import javax.swing.JComboBox;
 import javax.swing.JLabel;
@@ -61,6 +60,7 @@
 import org.opends.quicksetup.ui.UIFactory;
 import org.opends.quicksetup.ui.Utilities;
 import org.opends.server.tools.BackendTypeHelper;
+import org.opends.server.tools.BackendTypeHelper.BackendTypeUIAdapter;
 
 /**
  * This is the panel that contains the Data Options: the suffix dn, whether to
@@ -83,7 +83,7 @@
 
   private JButton ldifBrowseButton;
 
-  private JComboBox backendTypeComboBox;
+  private JComboBox<BackendTypeUIAdapter> backendTypeComboBox;
 
   /**
    * Constructor of the panel.
@@ -117,7 +117,7 @@
     }
     else if (FieldName.BACKEND_TYPE == fieldName)
     {
-      return backendTypeComboBox.getSelectedItem().toString();
+      return ((BackendTypeUIAdapter) backendTypeComboBox.getSelectedItem()).getBackend();
     }
     else
     {
@@ -444,7 +444,7 @@
   private void createBackendTypeComboBox()
   {
     final BackendTypeHelper backendTypeHelper = new BackendTypeHelper();
-    backendTypeComboBox = new JComboBox(new DefaultComboBoxModel(backendTypeHelper.getBackendTypeNames().toArray()));
+    backendTypeComboBox = new JComboBox<>(backendTypeHelper.getBackendTypeUIAdaptors());
   }
 
   private void createDirectoryDataChoiceRadioButton(final JLabel dataLabel)
diff --git a/opendj-server-legacy/src/main/java/org/opends/quicksetup/util/Utils.java b/opendj-server-legacy/src/main/java/org/opends/quicksetup/util/Utils.java
index 2e2ad0a..ed59f9f 100644
--- a/opendj-server-legacy/src/main/java/org/opends/quicksetup/util/Utils.java
+++ b/opendj-server-legacy/src/main/java/org/opends/quicksetup/util/Utils.java
@@ -57,6 +57,7 @@
 import org.opends.quicksetup.installer.NewSuffixOptions;
 import org.opends.quicksetup.installer.SuffixesToReplicateOptions;
 import org.opends.quicksetup.ui.UIFactory;
+import org.opends.server.tools.BackendTypeHelper;
 import org.opends.server.util.SetupUtils;
 import org.opends.server.util.StaticUtils;
 
@@ -1381,7 +1382,7 @@
 
     final DataReplicationOptions repl = userInstallData.getReplicationOptions();
     final SuffixesToReplicateOptions suf = userInstallData.getSuffixesToReplicateOptions();
-    final String backendType = userInstallData.getBackendType();
+    final String backendType = userInstallData.getBackendType().getUserFriendlyName().toString();
 
     boolean createSuffix = repl.getType() == DataReplicationOptions.Type.FIRST_IN_TOPOLOGY
         || repl.getType() == DataReplicationOptions.Type.STANDALONE
@@ -1639,7 +1640,7 @@
     if (!baseDNs.isEmpty())
     {
       cmdLine.add("--" + ArgumentConstants.OPTION_LONG_BACKEND_TYPE);
-      cmdLine.add(userData.getBackendType());
+      cmdLine.add(BackendTypeHelper.filterSchemaBackendName(userData.getBackendType().getName()));
     }
 
     for (final String baseDN : baseDNs)
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 9801c7e..911df37 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
@@ -25,6 +25,7 @@
  */
 package org.opends.server.tools;
 
+import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.regex.Matcher;
@@ -49,6 +50,63 @@
 {
   private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
 
+  /**
+   * Filter the provided backend name by removing the backend suffix.
+   *
+   * @param dsCfgBackendName
+   *          The backend name
+   * @return The backend name with the '-backend' suffix filtered out
+   */
+  public static String filterSchemaBackendName(final String dsCfgBackendName)
+  {
+    final String cfgNameRegExp = "(.*)-backend.*";
+    final Matcher regExpMatcher = Pattern.compile(cfgNameRegExp, Pattern.CASE_INSENSITIVE).matcher(dsCfgBackendName);
+    if (regExpMatcher.matches())
+    {
+      return regExpMatcher.group(1);
+    }
+
+    return dsCfgBackendName;
+  }
+
+  /** Adaptor to allow backend type selection in UIs. */
+  public static class BackendTypeUIAdapter
+  {
+    private final ManagedObjectDefinition<? extends BackendCfgClient, ? extends BackendCfg> backend;
+
+    /**
+     * Create a new {@code BackendTypeUIAdapter}.
+     *
+     * @param backend
+     *          The backend to adapt
+     */
+    private BackendTypeUIAdapter(ManagedObjectDefinition<? extends BackendCfgClient, ? extends BackendCfg> backend)
+    {
+      this.backend = backend;
+    }
+
+    /**
+     * Return a user friendly readable name for this backend.
+     *
+     * @return A user friendly readable name for this backend.
+     */
+    @Override
+    public String toString()
+    {
+      return backend.getUserFriendlyName().toString();
+    }
+
+    /**
+     * Return the adapted backend object.
+     *
+     * @return The adapted backend object
+     */
+    public ManagedObjectDefinition<? extends BackendCfgClient, ? extends BackendCfg> getBackend()
+    {
+      return backend;
+    }
+  }
+
   private List<ManagedObjectDefinition<? extends BackendCfgClient, ? extends BackendCfg>> backends;
 
   /** Creates a new backend type helper. */
@@ -116,9 +174,9 @@
   String getPrintableBackendTypeNames()
   {
     String backendTypeNames = "";
-    for (final String backendName : getBackendTypeNames())
+    for (ManagedObjectDefinition<? extends BackendCfgClient, ? extends BackendCfg> backend : getBackendTypes())
     {
-      backendTypeNames += backendName + ", ";
+      backendTypeNames += filterSchemaBackendName(backend.getName()) + ", ";
     }
 
     if (backendTypeNames.isEmpty())
@@ -130,30 +188,19 @@
   }
 
   /**
-   * Return a list of all available backend type printable names.
+   * Return a list which contains all available backend type adapted for UI.
    *
-   * @return A list of all available backend type printable names.
+   * @return a list which contains all available backend type adapted for UI
    */
-  public List<String> getBackendTypeNames()
+  public BackendTypeUIAdapter[] getBackendTypeUIAdaptors()
   {
-    final List<String> backendTypeNames = new LinkedList<>();
-    for (ManagedObjectDefinition<? extends BackendCfgClient, ? extends BackendCfg> backendType : backends)
+    List<BackendTypeUIAdapter> adaptors = new ArrayList<>();
+    for (ManagedObjectDefinition<? extends BackendCfgClient, ? extends BackendCfg> backend : getBackendTypes())
     {
-      backendTypeNames.add(filterSchemaBackendName(backendType.getName()));
+      adaptors.add(new BackendTypeUIAdapter(backend));
     }
 
-    return backendTypeNames;
+    return adaptors.toArray(new BackendTypeUIAdapter[adaptors.size()]);
   }
 
-  String filterSchemaBackendName(final String dsCfgBackendName)
-  {
-    final String cfgNameRegExp = "(.*)-backend.*";
-    final Matcher regExpMatcher = Pattern.compile(cfgNameRegExp, Pattern.CASE_INSENSITIVE).matcher(dsCfgBackendName);
-    if (regExpMatcher.matches())
-    {
-      return regExpMatcher.group(1);
-    }
-
-    return dsCfgBackendName;
-  }
 }
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 37a80db..d9a9d0e 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
@@ -56,6 +56,9 @@
 import org.forgerock.i18n.LocalizableMessageDescriptor.Arg0;
 import org.forgerock.i18n.LocalizableMessageDescriptor.Arg1;
 import org.forgerock.i18n.slf4j.LocalizedLogger;
+import org.forgerock.opendj.config.ManagedObjectDefinition;
+import org.forgerock.opendj.server.config.client.BackendCfgClient;
+import org.forgerock.opendj.server.config.server.BackendCfg;
 import org.opends.messages.QuickSetupMessages;
 import org.opends.messages.ToolMessages;
 import org.opends.quicksetup.ApplicationException;
@@ -208,7 +211,7 @@
 
   /** Different variables we use when the user decides to provide data again. */
   private NewSuffixOptions.Type lastResetPopulateOption;
-  private String lastResetBackendType;
+  private ManagedObjectDefinition<? extends BackendCfgClient, ? extends BackendCfg> lastResetBackendType;
 
   private String lastResetImportFile;
   private String lastResetRejectedFile;
@@ -704,9 +707,11 @@
   private void setBackendType(final UserData uData, final List<LocalizableMessage> errorMessages)
   {
     final String filledBackendType = argParser.backendTypeArg.getValue();
-    if (backendTypeHelper.retrieveBackendTypeFromName(filledBackendType) != null)
+    final ManagedObjectDefinition<? extends BackendCfgClient, ? extends BackendCfg> backend =
+        backendTypeHelper.retrieveBackendTypeFromName(filledBackendType);
+    if (backend != null)
     {
-      uData.setBackendType(filledBackendType);
+      uData.setBackendType(backend);
     }
     else
     {
@@ -1275,13 +1280,15 @@
 
   }
 
-  private String getOrPromptForBackendType()
+  private ManagedObjectDefinition<? extends BackendCfgClient, ? extends BackendCfg> getOrPromptForBackendType()
   {
     if (argParser.backendTypeArg.isPresent())
     {
-      if (backendTypeHelper.retrieveBackendTypeFromName(argParser.backendTypeArg.getValue().toLowerCase()) != null)
+      final ManagedObjectDefinition<? extends BackendCfgClient, ? extends BackendCfg> backend =
+          backendTypeHelper.retrieveBackendTypeFromName(argParser.backendTypeArg.getValue().toLowerCase());
+      if ( backend != null)
       {
-        return argParser.backendTypeArg.getValue();
+        return backend;
       }
       println();
       println(ERR_INSTALLDS_NO_SUCH_BACKEND_TYPE.get(
@@ -1302,7 +1309,7 @@
       logger.warn(LocalizableMessage.raw("Error reading input: " + ce, ce));
     }
 
-    return backendTypeHelper.getBackendTypeNames().get(backendTypeIndex - 1);
+    return backendTypeHelper.getBackendTypes().get(backendTypeIndex - 1);
   }
 
   private Menu<Integer> getBackendTypeMenu()
@@ -1310,9 +1317,9 @@
     final MenuBuilder<Integer> builder = new MenuBuilder<Integer>(this);
     builder.setPrompt(INFO_INSTALLDS_PROMPT_BACKEND_TYPE.get());
     int index = 1;
-    for (final String backendTypeName : backendTypeHelper.getBackendTypeNames())
+    for (final ManagedObjectDefinition<?, ?> backendType : backendTypeHelper.getBackendTypes())
     {
-      builder.addNumberedOption(LocalizableMessage.raw(backendTypeName), MenuResult.success(index++));
+      builder.addNumberedOption(backendType.getUserFriendlyName(), MenuResult.success(index++));
     }
 
     final int printableIndex = getPromptedBackendTypeIndex();
@@ -1324,7 +1331,7 @@
   {
     if (lastResetBackendType != null)
     {
-      return backendTypeHelper.getBackendTypeNames().indexOf(lastResetBackendType) + 1;
+      return backendTypeHelper.getBackendTypes().indexOf(lastResetBackendType) + 1;
     }
     return 1;
   }
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/tools/InstallDSArgumentParser.java b/opendj-server-legacy/src/main/java/org/opends/server/tools/InstallDSArgumentParser.java
index 8dc97ff..9623526 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/tools/InstallDSArgumentParser.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/tools/InstallDSArgumentParser.java
@@ -399,7 +399,7 @@
         OPTION_LONG_BACKEND_TYPE.toLowerCase(),
         OPTION_SHORT_BACKEND_TYPE, OPTION_LONG_BACKEND_TYPE,
         false, false, true, INFO_INSTALLDS_BACKEND_TYPE_PLACEHOLDER.get(),
-        LocalDBBackendCfgDefn.getInstance().getName(),
+        BackendTypeHelper.filterSchemaBackendName(LocalDBBackendCfgDefn.getInstance().getName()),
         OPTION_LONG_BACKEND_TYPE,
         INFO_INSTALLDS_DESCRIPTION_BACKEND_TYPE.get()
     );

--
Gitblit v1.10.0