From 688633f95faa52515b090ff00440b1eebdaad7d9 Mon Sep 17 00:00:00 2001
From: Gaetan Boismal <gaetan.boismal@forgerock.com>
Date: Fri, 24 Apr 2015 07:53:53 +0000
Subject: [PATCH] OPENDJ-1934 UI: Create/Update indexes
---
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/AbstractIndexPanel.java | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 107 insertions(+), 0 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/AbstractIndexPanel.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/AbstractIndexPanel.java
index 8103b3e..d9e152f 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/AbstractIndexPanel.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/AbstractIndexPanel.java
@@ -31,8 +31,10 @@
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
+import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
@@ -45,12 +47,27 @@
import javax.swing.JTextField;
import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.opendj.config.LDAPProfile;
+import org.forgerock.opendj.config.PropertyException;
+import org.forgerock.opendj.config.client.ManagementContext;
+import org.forgerock.opendj.config.client.ldap.LDAPManagementContext;
+import org.forgerock.opendj.server.config.client.BackendCfgClient;
+import org.forgerock.opendj.server.config.client.BackendIndexCfgClient;
+import org.forgerock.opendj.server.config.client.LocalDBBackendCfgClient;
+import org.forgerock.opendj.server.config.client.LocalDBIndexCfgClient;
+import org.forgerock.opendj.server.config.client.PluggableBackendCfgClient;
+import org.forgerock.opendj.server.config.meta.BackendIndexCfgDefn;
import org.forgerock.opendj.server.config.meta.LocalDBIndexCfgDefn;
+import org.opends.guitools.controlpanel.datamodel.IndexDescriptor;
import org.opends.guitools.controlpanel.datamodel.IndexTypeDescriptor;
import org.opends.guitools.controlpanel.ui.components.TitlePanel;
import org.opends.guitools.controlpanel.ui.renderer.CustomListCellRenderer;
import org.opends.guitools.controlpanel.util.Utilities;
+import org.opends.quicksetup.Installation;
+import org.opends.server.backends.jeb.RemoveOnceLocalDBBackendIsPluggable;
+import org.opends.server.config.ConfigException;
import org.opends.server.types.AttributeType;
+import org.opends.server.types.OpenDsException;
/**
* Abstract class used to refactor some code between the classes that are used
@@ -353,4 +370,94 @@
return errors;
}
+
+ void createIndexOffline(final String backendName, final String attributeName,
+ final Set<IndexTypeDescriptor> indexTypes, final int indexEntryLimit) throws OpenDsException
+ {
+ updateIndexOffline(backendName, null, attributeName, indexTypes, indexEntryLimit);
+ }
+
+ void modifyIndexOffline(final String backendName, final String attributeName, final IndexDescriptor indexToModify,
+ final Set<IndexTypeDescriptor> indexTypes, final int indexEntryLimit) throws OpenDsException
+ {
+ updateIndexOffline(backendName, indexToModify, attributeName, indexTypes, indexEntryLimit);
+ }
+
+ private void updateIndexOffline(final String backendName, final IndexDescriptor indexToModify,
+ final String attributeName, final Set<IndexTypeDescriptor> indexTypes, final int indexEntryLimit)
+ throws OpenDsException
+ {
+ getInfo().initializeConfigurationFramework();
+ try
+ {
+ final List<IOException> exceptions = new ArrayList<>();
+ final ManagementContext context = LDAPManagementContext.newLDIFManagementContext(
+ Installation.getLocal().getCurrentConfigurationFile(), LDAPProfile.getInstance(), exceptions);
+ Utilities.throwFirstFrom(exceptions);
+ final BackendCfgClient backend = context.getRootConfiguration().getBackend(backendName);
+ if (backend instanceof LocalDBBackendCfgClient)
+ {
+ updateLocalDBIndexOffline(
+ (LocalDBBackendCfgClient) backend, indexToModify, attributeName, indexTypes, indexEntryLimit);
+ }
+ else
+ {
+ updateBackendIndexOnline(
+ (PluggableBackendCfgClient) backend, indexToModify, attributeName, indexTypes, indexEntryLimit);
+ }
+ context.close();
+ }
+ catch (final Exception e)
+ {
+ throw new ConfigException(LocalizableMessage.raw(e.getMessage(), e));
+ }
+ }
+
+ private void updateBackendIndexOnline(final PluggableBackendCfgClient backend,
+ final IndexDescriptor indexToModify, final String attributeName, final Set<IndexTypeDescriptor> indexTypes,
+ final int indexEntryLimit) throws Exception
+ {
+ final boolean isCreation = indexToModify == null;
+ final List<PropertyException> exceptions = new ArrayList<>();
+ final BackendIndexCfgClient index = isCreation
+ ? backend.createBackendIndex(BackendIndexCfgDefn.getInstance(), attributeName, exceptions)
+ : backend.getBackendIndex(attributeName);
+
+ if (isCreation || indexTypes.equals(indexToModify.getTypes()))
+ {
+ index.setIndexType(IndexTypeDescriptor.toNewConfigBackendIndexTypes(indexTypes));
+ }
+
+ if (indexEntryLimit != index.getIndexEntryLimit())
+ {
+ index.setIndexEntryLimit(indexEntryLimit);
+ }
+ index.commit();
+ Utilities.throwFirstFrom(exceptions);
+ }
+
+ @RemoveOnceLocalDBBackendIsPluggable
+ private void updateLocalDBIndexOffline(final LocalDBBackendCfgClient backend, final IndexDescriptor indexToModify,
+ final String attributeName, final Set<IndexTypeDescriptor> indexTypes, final int indexEntryLimit)
+ throws Exception
+ {
+ final boolean isCreation = indexToModify == null;
+ final List<PropertyException> exceptions = new ArrayList<>();
+ final LocalDBIndexCfgClient index = isCreation
+ ? backend.createLocalDBIndex(LocalDBIndexCfgDefn.getInstance(), attributeName, exceptions)
+ : backend.getLocalDBIndex(attributeName);
+
+ if (isCreation || indexTypes.equals(indexToModify.getTypes()))
+ {
+ index.setIndexType(IndexTypeDescriptor.toNewConfigLocalDBIndexTypes(indexTypes));
+ }
+
+ if (indexEntryLimit != index.getIndexEntryLimit())
+ {
+ index.setIndexEntryLimit(indexEntryLimit);
+ }
+ index.commit();
+ Utilities.throwFirstFrom(exceptions);
+ }
+
}
--
Gitblit v1.10.0