From ff6e1ddf0bccd6a40e0673f312a33dc0a76a87a1 Mon Sep 17 00:00:00 2001
From: lutoff <lutoff@localhost>
Date: Thu, 31 May 2007 08:31:45 +0000
Subject: [PATCH] Commit related to issue  https://opends.dev.java.net/issues/show_bug.cgi?id=1334

---
 opendj-sdk/opends/src/ads/org/opends/admin/ads/ADSContext.java |  345 ++++++++++++++++++++++++---------------------------------
 1 files changed, 147 insertions(+), 198 deletions(-)

diff --git a/opendj-sdk/opends/src/ads/org/opends/admin/ads/ADSContext.java b/opendj-sdk/opends/src/ads/org/opends/admin/ads/ADSContext.java
index 2457510..e0089e7 100644
--- a/opendj-sdk/opends/src/ads/org/opends/admin/ads/ADSContext.java
+++ b/opendj-sdk/opends/src/ads/org/opends/admin/ads/ADSContext.java
@@ -27,11 +27,6 @@
 
 package org.opends.admin.ads;
 
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.Set;
 import java.util.HashSet;
@@ -186,7 +181,7 @@
     /**
      * The members of the server group.
      */
-    MEMBERS("members");
+    MEMBERS("uniqueMember");
 
     private String attrName;
 
@@ -445,11 +440,80 @@
     return result;
   }
 
+  /**
+   * Returns the member list of a group of server.
+   *
+   * @param serverGroupId
+   *          The group name.
+   * @return the member list of a group of server.
+   * @throws ADSContextException
+   *           if something goes wrong.
+   */
+  public Set<String> getServerGroupMemberList(
+      String serverGroupId) throws ADSContextException
+  {
+    LdapName dn = nameFromDN("cn=" + Rdn.escapeValue(serverGroupId) + ","
+        + getServerGroupContainerDN());
+
+    Set<String> result = new HashSet<String>() ;
+    try
+    {
+      SearchControls sc = new SearchControls();
+      sc.setSearchScope(SearchControls.OBJECT_SCOPE);
+      NamingEnumeration<SearchResult> srs = getDirContext().search(dn,
+          "(objectclass=*)", sc);
+
+      if (!srs.hasMore())
+      {
+        return result;
+      }
+      Attributes attrs = srs.next().getAttributes();
+      NamingEnumeration ne = attrs.getAll();
+      while (ne.hasMore())
+      {
+        Attribute attr = (Attribute)ne.next();
+        String attrID = attr.getID();
+
+        if (!attrID.toLowerCase().equals(
+            ServerGroupProperty.MEMBERS.getAttributeName().toLowerCase()))
+        {
+          continue;
+        }
+
+        // We have the members list
+        NamingEnumeration ae = attr.getAll();
+        while (ae.hasMore())
+        {
+          result.add((String)ae.next());
+        }
+        break;
+      }
+    }
+    catch (NameNotFoundException x)
+    {
+      result = new HashSet<String>();
+    }
+    catch (NoPermissionException x)
+    {
+      throw new ADSContextException(
+          ADSContextException.ErrorType.ACCESS_PERMISSION);
+    }
+    catch (NamingException x)
+    {
+      throw new ADSContextException(
+          ADSContextException.ErrorType.ERROR_UNEXPECTED, x);
+    }
+    return result;
+  }
 
   /**
-   * Returns a set containing the servers that are registered in the ADS.
-   * @return a set containing the servers that are registered in the ADS.
-   * @throws ADSContextException if something goes wrong.
+   * Returns a set containing the servers that are registered in the
+   * ADS.
+   *
+   * @return a set containing the servers that are registered in the
+   *         ADS.
+   * @throws ADSContextException
+   *           if something goes wrong.
    */
   public Set<Map<ServerProperty,Object>> readServerRegistry()
   throws ADSContextException
@@ -583,6 +647,9 @@
     LdapName dn = makeDNFromServerGroupProperties(serverGroupProperties);
     BasicAttributes attrs = makeAttrsFromServerGroupProperties(
         serverGroupProperties);
+    // Add the objectclass attribute value
+    attrs.put("objectclass", "top");
+    attrs.put("objectclass", "groupOfUniqueNames");
     try
     {
       DirContext ctx = dirContext.createSubcontext(dn, attrs);
@@ -604,13 +671,16 @@
    * Updates the properties of a Server Group in the ADS.
    * @param serverGroupProperties the new properties of the server group to be
    * updated.
+   * @param groupID The group name.
    * @throws ADSContextException if somethings goes wrong.
    */
-  public void updateServerGroup(
+  public void updateServerGroup(String groupID,
       Map<ServerGroupProperty, Object> serverGroupProperties)
   throws ADSContextException
   {
-    LdapName dn = makeDNFromServerGroupProperties(serverGroupProperties);
+
+    LdapName dn = nameFromDN("cn=" + Rdn.escapeValue(groupID) + "," +
+        getServerGroupContainerDN());
     BasicAttributes attrs =
       makeAttrsFromServerGroupProperties(serverGroupProperties);
     try
@@ -630,6 +700,38 @@
   }
 
   /**
+   * Updates the properties of a Server Group in the ADS.
+   * @param serverGroupProperties the new properties of the server group to be
+   * updated.
+   * @param groupID The group name.
+   * @throws ADSContextException if somethings goes wrong.
+   */
+  public void removeServerGroupProp(String groupID,
+      Set<ServerGroupProperty> serverGroupProperties)
+  throws ADSContextException
+  {
+
+    LdapName dn = nameFromDN("cn=" + Rdn.escapeValue(groupID) + "," +
+        getServerGroupContainerDN());
+    BasicAttributes attrs =
+      makeAttrsFromServerGroupProperties(serverGroupProperties);
+    try
+    {
+      dirContext.modifyAttributes(dn, DirContext.REMOVE_ATTRIBUTE, attrs);
+    }
+    catch (NameAlreadyBoundException x)
+    {
+      throw new ADSContextException(
+          ADSContextException.ErrorType.ALREADY_REGISTERED);
+    }
+    catch (NamingException x)
+    {
+      throw new ADSContextException(
+          ADSContextException.ErrorType.ERROR_UNEXPECTED, x);
+    }
+  }
+
+  /**
    * Deletes a Server Group in the ADS.
    * @param serverGroupProperties the properties of the server group to be
    * deleted.
@@ -762,134 +864,6 @@
     createContainerEntry(getServerGroupContainerDN());
   }
 
-  /**
-   * TODO: remove this method if we can assume that the server during setup
-   * can be started to do a number of things.
-   * NOTE: this can only be called locally.
-   * The call to this method assumes that OpenDS.jar has already been loaded.
-   * So this should not be called by the Java Web Start before being sure that
-   * this jar is loaded.
-   * @param serverProperties the properties of the servers to register.
-   * @param serverGroupProperties the properties of the server groups to
-   * register.
-   * @param administratorProperties the properties of the administrators to
-   * register.
-   * @param installPath the installation path of the server.
-   * @throws ADSContextException if something goes wrong.
-   */
-  public static void createOfflineAdminData(
-      Set<Map<ServerProperty, Object>> serverProperties,
-      Set<Map<ServerGroupProperty, Object>> serverGroupProperties,
-      Set<Map<AdministratorProperty, Object>> administratorProperties,
-      String installPath)
-  throws ADSContextException
-  {
-    // Add the administration suffix
-    createOfflineAdministrationSuffix(installPath);
-
-    // Create the DIT below the administration suffix
-    try
-    {
-      File ldifFile = File.createTempFile("ads", ".ldif");
-      ldifFile.deleteOnExit();
-
-      LinkedList<String> lines = new LinkedList<String>();
-
-      lines.add("dn: "+getAdministrationSuffixDN());
-      lines.add("objectclass: extensibleobject");
-      lines.add("aci: "+getTopContainerACI());
-      lines.add("");
-
-      lines.add("dn: "+getAdministratorContainerDN());
-      lines.add("objectclass: groupOfUniqueNames");
-      lines.add("objectclass: groupofurls");
-      lines.add("memberURL: ldap:///" + getAdministratorContainerDN() +
-      "??one?(objectclass=*)");
-      lines.add("description: Group of identities which have full access.");
-
-      lines.add("dn: "+getServerContainerDN());
-      lines.add("objectclass: extensibleobject");
-      lines.add("");
-
-      lines.add("dn: "+getServerGroupContainerDN());
-      lines.add("objectclass: extensibleobject");
-
-      for (Map<ServerProperty, Object> props : serverProperties)
-      {
-        lines.add("");
-        LdapName dn = makeDNFromServerProperties(props);
-        BasicAttributes attrs = makeAttrsFromServerProperties(props);
-        addToLines(dn, attrs, lines);
-      }
-      for (Map<ServerGroupProperty, Object> props : serverGroupProperties)
-      {
-        lines.add("");
-        LdapName dn = makeDNFromServerGroupProperties(props);
-        BasicAttributes attrs = makeAttrsFromServerGroupProperties(props);
-        addToLines(dn, attrs, lines);
-      }
-      for (Map<AdministratorProperty, Object> props : administratorProperties)
-      {
-        lines.add("");
-        LdapName dn = makeDNFromAdministratorProperties(props);
-        BasicAttributes attrs = makeAttrsFromAdministratorProperties(props);
-        addToLines(dn, attrs, lines);
-      }
-
-
-      BufferedWriter writer = new BufferedWriter(new FileWriter(ldifFile));
-      for (String line : lines)
-      {
-        writer.write(line);
-        writer.newLine();
-      }
-
-      writer.flush();
-      writer.close();
-
-      ArrayList<String> argList = new ArrayList<String>();
-      argList.add("-C");
-      argList.add(
-          org.opends.server.extensions.ConfigFileHandler.class.getName());
-
-      argList.add("-c");
-      argList.add(installPath+File.separator+"config"+File.separator+
-          "config.ldif");
-
-      argList.add("-n");
-      argList.add(getBackendName());
-      argList.add("-t");
-      argList.add(ldifFile.getAbsolutePath());
-      argList.add("-S");
-      argList.add("0");
-
-      String[] args = new String[argList.size()];
-      argList.toArray(args);
-
-      try
-      {
-
-        int result = org.opends.server.tools.ImportLDIF.mainImportLDIF(args);
-
-        if (result != 0)
-        {
-          throw new ADSContextException(
-              ADSContextException.ErrorType.ERROR_UNEXPECTED);
-        }
-      } catch (Throwable t)
-      {
-//      This should not happen
-        throw new ADSContextException(
-            ADSContextException.ErrorType.ERROR_UNEXPECTED, t);
-      }
-    }
-    catch (IOException ioe)
-    {
-//    This should not happen
-      throw new ADSContextException(
-          ADSContextException.ErrorType.ERROR_UNEXPECTED, ioe);
-    }
-  }
 
   /**
    * Removes the administration data.
@@ -1297,8 +1271,29 @@
         result.put(attr);
       }
     }
-    // Add the objectclass attribute value
-    result.put("objectclass", "extensibleobject");
+    return result;
+  }
+
+  /**
+   * Returns the attributes for some server group properties.
+   * @param serverProperties the server group properties.
+   * @return the attributes for the given server group properties.
+   * @throws ADSContextException if something goes wrong.
+   */
+  private static BasicAttributes makeAttrsFromServerGroupProperties(
+      Set<ServerGroupProperty> serverGroupProperties)
+  {
+    BasicAttributes result = new BasicAttributes();
+
+    // Transform 'properties' into 'attributes'
+    for (ServerGroupProperty prop: serverGroupProperties)
+    {
+      Attribute attr = makeAttrFromServerGroupProperty(prop,null);
+      if (attr != null)
+      {
+        result.put(attr);
+      }
+    }
     return result;
   }
 
@@ -1344,29 +1339,15 @@
       new HashMap<ServerGroupProperty, Object>();
     try
     {
-      NamingEnumeration ne = attrs.getAll();
-      while (ne.hasMore())
+      for (ServerGroupProperty prop : ServerGroupProperty.values())
       {
-        Attribute attr = (Attribute)ne.next();
-        String attrID = attr.getID();
+        Attribute attr = (Attribute) attrs.get(prop.getAttributeName());
+        if (attr == null)
+        {
+          continue ;
+        }
         Object value = null;
 
-        ServerGroupProperty prop = null;
-        ServerGroupProperty[] props = ServerGroupProperty.values();
-        for (int i=0; i<props.length && (prop == null); i++)
-        {
-          String v = props[i].getAttributeName();
-          if (attrID.equalsIgnoreCase(v))
-          {
-            prop = props[i];
-          }
-        }
-        if (prop == null)
-        {
-          throw new ADSContextException(
-              ADSContextException.ErrorType.ERROR_UNEXPECTED);
-        }
-
         if (attr.size() >= 1 &&
             MULTIVALUED_SERVER_GROUP_PROPERTIES.contains(prop))
         {
@@ -1769,7 +1750,9 @@
   {
     BasicAttributes attrs = new BasicAttributes();
 
-    attrs.put("objectclass", "extensibleobject");
+    attrs.put("objectclass", "top");
+    attrs.put("objectclass", "ds-cfg-branch");
+    // attrs.put("objectclass", "extensibleobject");
     createEntry(dn, attrs);
   }
 
@@ -1798,7 +1781,8 @@
   {
     BasicAttributes attrs = new BasicAttributes();
 
-    attrs.put("objectclass", "extensibleobject");
+    attrs.put("objectclass", "top");
+    attrs.put("objectclass", "ds-cfg-branch");
     attrs.put("aci", getTopContainerACI());
     createEntry(getAdministrationSuffixDN(), attrs);
   }
@@ -1851,41 +1835,6 @@
   }
 
   /**
-   * Creates the Administration Suffix when the server is down.  This can only
-   * be called locally.
-   * @param installPath the installation path of the server
-   * @throws ADSContextException if something goes wrong.
-   */
-  private static void createOfflineAdministrationSuffix(String installPath)
-  throws ADSContextException
-  {
-    // NOTE: the call to this method assumes
-    // that OpenDS.jar has already been loaded.  So this should not be called by
-    // the Java Web Start before being sure that this jar is loaded.
-    ArrayList<String> argList = new ArrayList<String>();
-    argList.add("-C");
-    argList.add(org.opends.server.extensions.ConfigFileHandler.class.getName());
-
-    argList.add("-c");
-    argList.add(installPath+File.separator+"config"+File.separator+
-        "config.ldif");
-
-    argList.add("-b");
-    argList.add(getAdministrationSuffixDN());
-
-    String[] args = new String[argList.size()];
-    argList.toArray(args);
-
-    int returnValue = org.opends.server.tools.ConfigureDS.configMain(args);
-
-    if (returnValue != 0)
-    {
-      throw new ADSContextException(
-          ADSContextException.ErrorType.ERROR_UNEXPECTED);
-    }
-  }
-
-  /**
    * Removes the administration suffix.
    * @throws ADSContextException
    */

--
Gitblit v1.10.0