Script

import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import edu.internet2.middleware.grouper.Group;
import edu.internet2.middleware.grouper.GroupFinder;
import edu.internet2.middleware.grouper.GrouperSession;
import edu.internet2.middleware.grouper.SubjectFinder;
import edu.internet2.middleware.grouper.app.loader.OtherJobScript;
import edu.internet2.middleware.grouper.misc.GrouperStartup;
import edu.internet2.middleware.grouper.privs.AccessPrivilege;
import edu.internet2.middleware.grouper.util.GrouperUtil;
import edu.internet2.middleware.grouperClient.jdbc.GcDbAccess;
import edu.internet2.middleware.subject.Subject;

//// uncomment to run in eclipse
//public class Test43syncGrouperAll {
//
//  public static void main(String[] args) {

    GrouperStartup.startup();
    GrouperSession.startRootSession();
    
    String folderToSync = "test2";

    Subject grouperAll = SubjectFinder.findAllSubject();
    Map<String, Object> debugMap = new LinkedHashMap<String, Object>();
    
    List<String> groupNamesNew = new GcDbAccess().connectionName("grouper").sql("select name from grouper_groups where name in ('test2:testGroup1', 'test2:testGroup3')").selectList(String.class);

    debugMap.put("groupNamesNewCount", GrouperUtil.length(groupNamesNew));
    
    List<String> groupNamesExisting = new GcDbAccess().connectionName("grouper").sql("select group_name from grouper_memberships_lw_v gmlv where group_name like '" + folderToSync + ":%' and list_name = 'readers' and subject_source = 'g:isa' and subject_id = 'GrouperAll'").selectList(String.class);

    debugMap.put("groupNamesExistingCount", GrouperUtil.length(groupNamesExisting));

    Set<String> groupNamesToAdd = new HashSet<String>(groupNamesNew);
    groupNamesToAdd.removeAll(groupNamesExisting);
    
    for (String groupNameToAdd : groupNamesToAdd) {
      Group group = GroupFinder.findByName(groupNameToAdd, false);
      if (group == null) {
        debugMap.put("cantFind_" + groupNameToAdd, groupNamesToAdd);
        continue;
      }
      debugMap.put("add_" + groupNameToAdd, true);
      group.grantPriv(grouperAll, AccessPrivilege.READ, false);
    }
        
    Set<String> groupNamesToRemove = new HashSet<String>(groupNamesExisting);
    groupNamesToRemove.removeAll(groupNamesNew);
    
    for (String groupNameToRemove : groupNamesToRemove) {
      Group group = GroupFinder.findByName(groupNameToRemove, false);
      if (group == null) {
        continue;
      }
      debugMap.put("remove_" + groupNameToRemove, true);
      group.revokePriv(grouperAll, AccessPrivilege.READ, false);
    }
        
    OtherJobScript.retrieveFromThreadLocal().getOtherJobInput().getHib3GrouperLoaderLog().appendJobMessage(GrouperUtil.mapToString(debugMap));

    OtherJobScript.retrieveFromThreadLocal().getOtherJobInput().getHib3GrouperLoaderLog().addTotalCount(GrouperUtil.length(groupNamesNew));
    OtherJobScript.retrieveFromThreadLocal().getOtherJobInput().getHib3GrouperLoaderLog().addInsertCount(GrouperUtil.length(groupNamesToAdd));
    OtherJobScript.retrieveFromThreadLocal().getOtherJobInput().getHib3GrouperLoaderLog().addDeleteCount(GrouperUtil.length(groupNamesToRemove));
//  }
//
//}


  • No labels