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

lutoff
24.12.2007 1745a41a7e509b972102676166c3bd9dcae31d58
Fix for issue #2012 (dsframework add-to-group/remove-from-group doesn't update the server prop "GROUPS")

2 files modified
140 ■■■■ changed files
opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliServer.java 2 ●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliServerGroup.java 138 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliServer.java
@@ -603,7 +603,7 @@
        // Add this server in the default "all-servers" group.
        returnCode = DsFrameworkCliServerGroup.addServerTogroup(adsCtx,
            ADSContext.ALL_SERVERGROUP_NAME, serverId);
            ADSContext.ALL_SERVERGROUP_NAME, map);
      }
      else
      // -----------------------
opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliServerGroup.java
@@ -728,6 +728,7 @@
        Set<Map<ServerProperty, Object>> serverList = adsCtx
            .readServerRegistry();
        boolean found = false ;
        Map<ServerProperty, Object> foundServerProperties = null ;
        for (Map<ServerProperty, Object> serverProperties : serverList)
        {
          String serverId = ADSContext
@@ -735,6 +736,7 @@
          if (addToGoupMemberNameArg.getValue().equals(serverId))
          {
            found = true;
            foundServerProperties = serverProperties ;
            break;
          }
        }
@@ -743,18 +745,14 @@
          return ReturnCode.SERVER_NOT_REGISTERED;
        }
        returnCode = addServerTogroup(adsCtx, groupId, addToGoupMemberNameArg
            .getValue());
        // Add the server inside the group
        returnCode = addServerTogroup(adsCtx, groupId, foundServerProperties);
      }
      // -----------------------
      // remove-from-group subcommand
      // -----------------------
      else if (subCmd.getName().equals(removeFromGroupSubCmd.getName()))
      {
        String groupId = removeFromGroupGroupNameArg.getValue();
        HashMap<ServerGroupProperty, Object> serverGroupProperties =
          new HashMap<ServerGroupProperty, Object>();
        ctx = argParser.getContext(outStream, errStream);
        if (ctx == null)
        {
@@ -762,26 +760,9 @@
        }
        adsCtx = new ADSContext(ctx) ;
        // get the current member list
        Set<String> memberList = adsCtx.getServerGroupMemberList(groupId);
        if (memberList == null)
        {
          returnCode = ReturnCode.NOT_YET_REGISTERED;
        }
        String memberToRemove = "cn="
            + Rdn.escapeValue(removeFromGoupMemberNameArg.getValue());
        if (!memberList.contains(memberToRemove))
        {
          returnCode = ReturnCode.NOT_YET_REGISTERED;
        }
        memberList.remove(memberToRemove);
        serverGroupProperties.put(ServerGroupProperty.MEMBERS, memberList);
        // Update the server group
        adsCtx.updateServerGroup(groupId, serverGroupProperties);
        returnCode = ReturnCode.SUCCESSFUL;
        returnCode = removeServerFromGroup(adsCtx,
            removeFromGroupGroupNameArg.getValue(),
            removeFromGoupMemberNameArg.getValue());
      }
      // -----------------------
      // list-members subcommand
@@ -913,14 +894,93 @@
  }
  /**
   * Remove a server from a group.
   *
   * @param adsCtx
   *          The ADS context to use.
   * @param groupId
   *          The group identifier from which a server has to be
   *          remove.
   * @param serverId
   *          The server identifier to be removed.
   * @return The return code.
   * @throws ADSContextException
   *           If there is a problem with any of the parameters used
   *           to create this argument.
   */
  private ReturnCode removeServerFromGroup(ADSContext adsCtx, String groupId,
      String serverId)
      throws ADSContextException
  {
    ReturnCode returnCode = ReturnCode.SUCCESSFUL;
    // get the current group member list
    Set<String> memberList = adsCtx.getServerGroupMemberList(groupId);
    if (memberList == null)
    {
      returnCode = ReturnCode.NOT_YET_REGISTERED;
    }
    String memberToRemove = "cn="
        + Rdn.escapeValue(serverId);
    if (!memberList.contains(memberToRemove))
    {
      returnCode = ReturnCode.NOT_YET_REGISTERED;
    }
    memberList.remove(memberToRemove);
    HashMap<ServerGroupProperty, Object> serverGroupProperties =
      new HashMap<ServerGroupProperty, Object>();
    serverGroupProperties.put(ServerGroupProperty.MEMBERS, memberList);
    // Update the server group
    adsCtx.updateServerGroup(groupId, serverGroupProperties);
    // Update the server property "GROUPS"
    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 )
    {
      return returnCode.SERVER_NOT_REGISTERED ;
    }
    Set rawGroupList = (Set) serverProperties.get(ServerProperty.GROUPS);
    Set<String> groupList = new HashSet<String>();
    if (rawGroupList != null)
    {
      for (Object elm :rawGroupList.toArray() )
      {
        if (groupId.equals(elm))
        {
          continue ;
        }
        groupList.add(elm.toString());
      }
    }
    serverProperties.put(ServerProperty.GROUPS, groupList);
    adsCtx.updateServer(serverProperties, null);
    return returnCode;
  }
  /**
   * Add a server inside a group.
   *
   * @param adsCtx
   *          The ADS context to use.
   * @param groupId
   *          The group identifier in which a server has to be added.
   * @param serverId
   *          The server identifier that have to be added to the
   * @param map
   *          The properties of the server that have to be added to the
   *          group.
   * @return the return code.
   * @throws ADSContextException
@@ -928,10 +988,12 @@
   *           to create this argument.
   */
  static ReturnCode addServerTogroup(ADSContext adsCtx, String groupId,
      String serverId) throws ADSContextException
      Map<ServerProperty, Object> map) throws ADSContextException
  {
    ReturnCode returnCode = ReturnCode.SUCCESSFUL;
    // get the current member list
    String serverId = (String) map.get(ServerProperty.ID);
    // Add the server inside the group
    HashMap<ServerGroupProperty, Object> serverGroupProperties =
      new HashMap<ServerGroupProperty, Object>();
    Set<String> memberList = adsCtx.getServerGroupMemberList(groupId);
@@ -948,9 +1010,23 @@
    memberList.add(newMember);
    serverGroupProperties.put(ServerGroupProperty.MEMBERS, memberList);
    // Update the server group
    adsCtx.updateServerGroup(groupId, serverGroupProperties);
    // Update the server property "GROUPS"
    Set rawGroupList = (Set) map.get(ServerProperty.GROUPS);
    Set<String> groupList = new HashSet<String>();
    if (rawGroupList != null)
    {
      for (Object elm :rawGroupList.toArray() )
      {
        groupList.add(elm.toString());
      }
    }
    groupList.add(groupId) ;
    map.put(ServerProperty.GROUPS, groupList);
    adsCtx.updateServer(map, null);
    return returnCode;
  }
}