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

jvergara
17.32.2008 ee5d05f4843a959cd76804318a9ab1f49653770c
Fix for issue 3589 (Control Panel : error raised at new vlv index creation).

The control panel code has been updated to handle the case where the cn=VLV Index top entry is not created. However, if the user chooses to create a new backend and populate it online, the user will encounter issue https://opends.dev.java.net/issues/show_bug.cgi?id=3609. However since this is unrelated to the control panel itself, issue 3589 is considered as fixed.
2 files modified
106 ■■■■■ changed files
opends/src/guitools/org/opends/guitools/controlpanel/ui/NewBaseDNPanel.java 3 ●●●● patch | view | raw | blame | history
opends/src/guitools/org/opends/guitools/controlpanel/ui/NewVLVIndexPanel.java 103 ●●●●● patch | view | raw | blame | history
opends/src/guitools/org/opends/guitools/controlpanel/ui/NewBaseDNPanel.java
@@ -1367,7 +1367,8 @@
          public void run()
          {
            getProgressDialog().appendProgressHtml(
                Utilities.getProgressDone(ColorAndFontConstants.progressFont));
                Utilities.getProgressDone(ColorAndFontConstants.progressFont)+
                "<br><br>");
          }
        });
      }
opends/src/guitools/org/opends/guitools/controlpanel/ui/NewVLVIndexPanel.java
@@ -36,14 +36,9 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import javax.naming.directory.Attributes;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.BasicAttributes;
import javax.naming.ldap.InitialLdapContext;
import javax.swing.SwingUtilities;
@@ -53,15 +48,19 @@
import org.opends.guitools.controlpanel.datamodel.VLVSortOrder;
import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
import org.opends.guitools.controlpanel.task.OfflineUpdateException;
import org.opends.guitools.controlpanel.task.OnlineUpdateException;
import org.opends.guitools.controlpanel.task.Task;
import org.opends.guitools.controlpanel.util.ConfigReader;
import org.opends.guitools.controlpanel.util.Utilities;
import org.opends.messages.Message;
import org.opends.server.admin.client.ManagementContext;
import org.opends.server.admin.client.ldap.JNDIDirContextAdaptor;
import org.opends.server.admin.client.ldap.LDAPManagementContext;
import org.opends.server.admin.std.client.LocalDBBackendCfgClient;
import org.opends.server.admin.std.client.LocalDBVLVIndexCfgClient;
import org.opends.server.admin.std.client.RootCfgClient;
import org.opends.server.admin.std.meta.LocalDBVLVIndexCfgDefn;
import org.opends.server.admin.std.meta.LocalDBVLVIndexCfgDefn.Scope;
import org.opends.server.core.DirectoryServer;
import org.opends.server.types.Attribute;
import org.opends.server.types.AttributeValue;
import org.opends.server.types.DN;
import org.opends.server.types.Entry;
import org.opends.server.types.LDIFImportConfig;
@@ -352,7 +351,30 @@
      LDIFImportConfig ldifImportConfig = null;
      try
      {
        ldifImportConfig = new LDIFImportConfig(new StringReader(ldif));
        String topEntryDN =
          "cn=VLV Index,"+Utilities.getRDNString("ds-cfg-backend-id",
          backendName.getText())+",cn=Backends,cn=config";
        boolean topEntryExists =
          DirectoryServer.getConfigHandler().entryExists(
              DN.decode(topEntryDN));
        if (!topEntryExists)
        {
          String completeLDIF =
          Utilities.makeLdif(
          "dn: "+topEntryDN,
          "objectClass: top",
          "objectClass: ds-cfg-branch",
          "cn: VLV Index", "") + ldif;
          ldifImportConfig =
            new LDIFImportConfig(new StringReader(completeLDIF));
        }
        else
        {
          ldifImportConfig = new LDIFImportConfig(new StringReader(ldif));
        }
        LDIFReader reader = new LDIFReader(ldifImportConfig);
        Entry backendConfigEntry;
        while ((backendConfigEntry = reader.readEntry()) != null)
@@ -378,53 +400,21 @@
    private void createIndex(InitialLdapContext ctx) throws OpenDsException
    {
      // Instead of adding indexes using management framework, use this approach
      // so that we have to define the additional indexes only in the method
      // getBackendLdif.
      LDIFImportConfig ldifImportConfig = null;
      try
      {
        ldifImportConfig = new LDIFImportConfig(new StringReader(ldif));
        LDIFReader reader = new LDIFReader(ldifImportConfig);
        Entry indexEntry = reader.readEntry();
        Attributes attrs = new BasicAttributes();
      ManagementContext mCtx = LDAPManagementContext.createFromContext(
          JNDIDirContextAdaptor.adapt(ctx));
      RootCfgClient root = mCtx.getRootConfiguration();
      LocalDBBackendCfgClient backend =
        (LocalDBBackendCfgClient)root.getBackend(backendName.getText());
      LocalDBVLVIndexCfgDefn provider = LocalDBVLVIndexCfgDefn.getInstance();
      LocalDBVLVIndexCfgClient index =
        backend.createLocalDBVLVIndex(provider, name.getText(), null);
        BasicAttribute oc = new BasicAttribute("objectClass");
        Iterator<AttributeValue> it =
          indexEntry.getObjectClassAttribute().iterator();
        while (it.hasNext())
        {
          oc.add(it.next().getStringValue());
        }
        attrs.put(oc);
        List<Attribute> odsAttrs = indexEntry.getAttributes();
        for (Attribute odsAttr : odsAttrs)
        {
          String attrName = odsAttr.getName();
          BasicAttribute attr = new BasicAttribute(attrName);
          it = odsAttr.iterator();
          while (it.hasNext())
          {
            attr.add(it.next().getStringValue());
          }
          attrs.put(attr);
        }
        ctx.createSubcontext(indexEntry.getDN().toString(), attrs);
      }
      catch (Throwable t)
      {
        throw new OnlineUpdateException(
            ERR_CTRL_PANEL_ERROR_UPDATING_CONFIGURATION.get(t.toString()), t);
      }
      finally
      {
        if (ldifImportConfig != null)
        {
          ldifImportConfig.close();
        }
      }
      index.setFilter(filter.getText().trim());
      index.setSortOrder(getSortOrderStringValue(getSortOrder()));
      index.setBaseDN(DN.decode(getBaseDN()));
      index.setScope(getScope());
      index.setMaxBlockSize(Integer.parseInt(maxBlockSize.getText().trim()));
      index.commit();
    }
    /**
@@ -524,9 +514,6 @@
      args.add("--set");
      args.add("sort-order:"+sortOrderStringValue);
      args.add("--index-filter");
      args.add(filterValue);
      args.addAll(getConnectionCommandLineArguments());
      args.add("--no-prompt");
      return args;