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

Jean-Noel Rouvignac
04.36.2014 d41ebfdf1b752c71ff76b2b613e424adf3b0fd4c
opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/NewSchemaElementsTask.java
@@ -37,6 +37,7 @@
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.naming.NamingException;
@@ -63,11 +64,14 @@
import org.forgerock.opendj.ldap.ModificationType;
import org.opends.server.types.ObjectClass;
import org.opends.server.types.OpenDsException;
import org.opends.server.types.SchemaFileElement;
import org.opends.server.util.LDIFReader;
import org.opends.server.util.LDIFWriter;
import org.opends.server.util.ServerConstants;
import org.opends.server.util.StaticUtils;
import static org.opends.server.types.CommonSchemaElements.*;
/**
 * An abstract class used to re-factor some code between the different tasks
 * that create elements in the schema.
@@ -97,6 +101,7 @@
  /**
   * {@inheritDoc}
   */
  @Override
  public Set<String> getBackends()
  {
    return Collections.emptySet();
@@ -105,6 +110,7 @@
  /**
   * {@inheritDoc}
   */
  @Override
  public boolean canLaunch(Task taskToBeLaunched,
      Collection<LocalizableMessage> incompatibilityReasons)
  {
@@ -124,6 +130,7 @@
  /**
   * {@inheritDoc}
   */
  @Override
  public void runTask()
  {
    state = State.RUNNING;
@@ -144,6 +151,7 @@
  /**
   * {@inheritDoc}
   */
  @Override
  public Type getType()
  {
    return Type.NEW_SCHEMA_ELEMENT;
@@ -152,6 +160,7 @@
  /**
   * {@inheritDoc}
   */
  @Override
  public LocalizableMessage getTaskDescription()
  {
    if (attrsToAdd.size() == 1 && ocsToAdd.isEmpty())
@@ -212,6 +221,7 @@
  /**
   * {@inheritDoc}
   */
  @Override
  protected String getCommandLinePath()
  {
    return null;
@@ -220,6 +230,7 @@
  /**
   * {@inheritDoc}
   */
  @Override
  protected List<String> getCommandLineArguments()
  {
    return Collections.emptyList();
@@ -234,6 +245,7 @@
      addAttributeOnline(attr);
      SwingUtilities.invokeLater(new Runnable()
      {
        @Override
        public void run()
        {
          getProgressDialog().appendProgressHtml(Utilities.applyFont("<br><br>",
@@ -246,6 +258,7 @@
      addObjectClassOnline(oc);
      SwingUtilities.invokeLater(new Runnable()
      {
        @Override
        public void run()
        {
          getProgressDialog().appendProgressHtml(Utilities.applyFont("<br><br>",
@@ -258,57 +271,16 @@
  private void updateSchemaOffline() throws OpenDsException
  {
    // Group the changes in the same schema file.
    LinkedHashMap<String, List<AttributeType>> hmAttrs =
      new LinkedHashMap<String, List<AttributeType>>();
    for (AttributeType attr : attrsToAdd)
    {
      String fileName = getFileName(attr);
      if (fileName == null)
      {
        fileName = "";
      }
      List<AttributeType> attrs = hmAttrs.get(fileName);
      if (attrs == null)
      {
        attrs = new ArrayList<AttributeType>();
        hmAttrs.put(fileName, attrs);
      }
      attrs.add(attr);
    }
    LinkedHashMap<String, List<ObjectClass>> hmOcs =
      new LinkedHashMap<String, List<ObjectClass>>();
    for (ObjectClass oc : ocsToAdd)
    {
      String fileName = getFileName(oc);
      if (fileName == null)
      {
        fileName = "";
      }
      List<ObjectClass> ocs = hmOcs.get(fileName);
      if (ocs == null)
      {
        ocs = new ArrayList<ObjectClass>();
        hmOcs.put(fileName, ocs);
      }
      ocs.add(oc);
    }
    LinkedHashMap<String, List<AttributeType>> hmAttrs = copy(attrsToAdd);
    LinkedHashMap<String, List<ObjectClass>> hmOcs = copy(ocsToAdd);
    LinkedHashSet<String> allFileNames = new LinkedHashSet<String>();
    allFileNames.addAll(hmAttrs.keySet());
    allFileNames.addAll(hmOcs.keySet());
    for (String fileName : allFileNames)
    {
      List<AttributeType> attrs = hmAttrs.get(fileName);
      List<ObjectClass> ocs = hmOcs.get(fileName);
      if (attrs == null)
      {
        attrs = Collections.emptyList();
      }
      if (ocs == null)
      {
        ocs = Collections.emptyList();
      }
      List<AttributeType> attrs = get(hmAttrs, fileName);
      List<ObjectClass> ocs = get(hmOcs, fileName);
      if (fileName.equals(""))
      {
@@ -317,6 +289,7 @@
      updateSchemaOffline(fileName, attrs, ocs);
      SwingUtilities.invokeLater(new Runnable()
      {
        @Override
        public void run()
        {
          getProgressDialog().appendProgressHtml(Utilities.applyFont("<br><br>",
@@ -326,6 +299,40 @@
    }
  }
  private <T extends SchemaFileElement> List<T> get(
      LinkedHashMap<String, List<T>> hmElems, String fileName)
  {
    List<T> elems = hmElems.get(fileName);
    if (elems != null)
    {
      return elems;
    }
    return Collections.emptyList();
  }
  private <T extends SchemaFileElement> LinkedHashMap<String, List<T>> copy(
      LinkedHashSet<T> elemsToAdd)
  {
    LinkedHashMap<String, List<T>> hmElems =
        new LinkedHashMap<String, List<T>>();
    for (T elem : elemsToAdd)
    {
      String fileName = CommonSchemaElements.getSchemaFile(elem);
      if (fileName == null)
      {
        fileName = "";
      }
      List<T> elems = hmElems.get(fileName);
      if (elems == null)
      {
        elems = new ArrayList<T>();
        hmElems.put(fileName, elems);
      }
      elems.add(elem);
    }
    return hmElems;
  }
  private void addAttributeOnline(final AttributeType attribute)
  throws OpenDsException
  {
@@ -334,6 +341,7 @@
      /**
       * {@inheritDoc}
       */
      @Override
      public void run()
      {
        printEquivalentCommandLineToAddOnline(attribute);
@@ -362,6 +370,7 @@
    notifyConfigurationElementCreated(attribute);
    SwingUtilities.invokeLater(new Runnable()
    {
      @Override
      public void run()
      {
        getProgressDialog().appendProgressHtml(
@@ -378,6 +387,7 @@
      /**
       * {@inheritDoc}
       */
      @Override
      public void run()
      {
        printEquivalentCommandLineToAddOnline(objectClass);
@@ -406,6 +416,7 @@
    notifyConfigurationElementCreated(objectClass);
    SwingUtilities.invokeLater(new Runnable()
    {
      @Override
      public void run()
      {
        getProgressDialog().appendProgressHtml(
@@ -421,23 +432,16 @@
  private String getValueOffline(CommonSchemaElements element)
  {
    Iterable<String> previousValues =
      element.getExtraProperty(ServerConstants.SCHEMA_PROPERTY_FILENAME);
    element.setExtraProperty(ServerConstants.SCHEMA_PROPERTY_FILENAME,
        (String)null);
    final Map<String, List<String>> props = element.getExtraProperties();
    List<String> previousValues =
        props.get(ServerConstants.SCHEMA_PROPERTY_FILENAME);
    setExtraProperty(element, ServerConstants.SCHEMA_PROPERTY_FILENAME, null);
    String attributeWithoutFileDefinition = element.toString();
    if (previousValues != null)
    if (previousValues != null && !previousValues.isEmpty())
    {
      ArrayList<String> vs = new ArrayList<String>();
      for (String s : previousValues)
      {
        vs.add(s);
      }
      if (!vs.isEmpty())
      {
        element.setExtraProperty(ServerConstants.SCHEMA_PROPERTY_FILENAME, vs);
      }
      ArrayList<String> vs = new ArrayList<String>(previousValues);
      element.setExtraProperty(ServerConstants.SCHEMA_PROPERTY_FILENAME, vs);
    }
    return attributeWithoutFileDefinition;
  }
@@ -491,21 +495,6 @@
    }
  }
  private String getFileName(CommonSchemaElements element)
  {
    String value = null;
    Iterable<String> vs =
      element.getExtraProperty(ServerConstants.SCHEMA_PROPERTY_FILENAME);
    if (vs != null)
    {
      if (vs.iterator().hasNext())
      {
        value = vs.iterator().next();
      }
    }
    return value;
  }
  private void updateSchemaOffline(String file,
      final List<AttributeType> attributes,
      final List<ObjectClass> objectClasses) throws OpenDsException
@@ -528,6 +517,7 @@
      /**
       * {@inheritDoc}
       */
      @Override
      public void run()
      {
        printEquivalentCommandToAddOffline(fileName, isSchemaFileDefined,
@@ -573,6 +563,7 @@
    }
    SwingUtilities.invokeLater(new Runnable()
    {
      @Override
      public void run()
      {
        getProgressDialog().appendProgressHtml(