From f4eb1c336ec220e6605e7b90204cbb91a68b60eb Mon Sep 17 00:00:00 2001
From: lutoff <lutoff@localhost>
Date: Tue, 24 Jul 2007 14:13:28 +0000
Subject: [PATCH] Fix for issue #2013 (dsframework unregister-server doesn't  update groups which contain this server)

---
 opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliServer.java |   38 ++++++++++++++++++++++++++++++++++----
 1 files changed, 34 insertions(+), 4 deletions(-)

diff --git a/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliServer.java b/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliServer.java
index 72e203d..acf725a 100644
--- a/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliServer.java
+++ b/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliServer.java
@@ -47,6 +47,7 @@
 import org.opends.admin.ads.ADSContext;
 import org.opends.admin.ads.ADSContextException;
 import org.opends.admin.ads.ADSContext.ServerProperty;
+import org.opends.admin.ads.ADSContextException.ErrorType;
 import org.opends.server.admin.PropertyOption;
 import org.opends.server.admin.client.cli.DsFrameworkCliReturnCode.ReturnCode;
 import org.opends.server.tools.dsconfig.ArgumentExceptionFactory;
@@ -611,16 +612,19 @@
       // -----------------------
       if (subCmd.getName().equals(unregisterServerSubCmd.getName()))
       {
+        returnCode = ReturnCode.SUCCESSFUL;
+
         Map<ServerProperty, Object> map = new HashMap<ServerProperty, Object>();
+        String serverId = null;
         if (unregisterServerServerIDArg.isPresent())
         {
-          map.put(ServerProperty.ID, unregisterServerServerIDArg.getValue());
+          serverId = unregisterServerServerIDArg.getValue();
         }
         else
         {
-          map.put(ServerProperty.ID, ADSContext
-              .getServerIdFromServerProperties(map));
+          serverId = ADSContext.getServerIdFromServerProperties(map);
         }
+        map.put(ServerProperty.ID,serverId);
 
         ctx = argParser.getContext(outStream, errStream);
         if (ctx == null)
@@ -628,8 +632,34 @@
           return ReturnCode.CANNOT_CONNECT_TO_ADS;
         }
         adsCtx = new ADSContext(ctx);
+
+        // update groups in which server was registered
+        Set<Map<ServerProperty, Object>> serverList =
+          adsCtx.readServerRegistry();
+        boolean found = false;
+        Map<ServerProperty,Object> serverProperties = null ;
+        for (Map<ServerProperty,Object> elm : serverList)
+        {
+          if (serverId.equals(elm.get(ServerProperty.ID)))
+          {
+            found = true ;
+            serverProperties = elm ;
+            break ;
+          }
+        }
+        if ( ! found )
+        {
+          throw new ADSContextException (ErrorType.NOT_YET_REGISTERED) ;
+        }
+        Set groupList = (Set) serverProperties.get(ServerProperty.GROUPS);
+        for (Object groupId : groupList.toArray())
+        {
+          DsFrameworkCliServerGroup.removeServerFromGroup(adsCtx,
+              (String) groupId, serverId);
+        }
+
+        // unregister the server
         adsCtx.unregisterServer(map);
-        returnCode = ReturnCode.SUCCESSFUL;
       }
       else
       // -----------------------

--
Gitblit v1.10.0