Package edu.uchicago.grouperabi

Source Code of edu.uchicago.grouperabi.GrouperQueryEngine

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package edu.uchicago.grouperabi;

import edu.internet2.middleware.grouperClient.api.*;
import edu.internet2.middleware.grouperClient.api.GcFindGroups;
import edu.internet2.middleware.grouperClient.util.GrouperClientUtils;
import edu.internet2.middleware.grouperClient.ws.*;
import edu.internet2.middleware.grouperClient.ws.beans.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.log4j.*;
import nsit.Config;

/**
* This class is used to query grouper via web-service
* @author davel
*/
public class GrouperQueryEngine {
  private static Logger log = Logger.getLogger(GrouperQueryEngine.class);

  private String stem = null;
 
  private Stem myApplicationStem;

  /**
   * Create a new GrouperQueryEngine object
   * @param stemName the stem name we are going to be working with (not the full group, just the stem)
   */
  public GrouperQueryEngine(String stemName){
    try{
      Config conf = Config.getInstance();
      initialize(conf.getOption("ldap_host"),
              conf.getOption("grouper_url"),
              conf.getOption("grouper_user"),
              conf.getOption("grouper_password"),
              stemName);
    }
    catch(Exception e){
      throw new RuntimeException(e);
    }
  }

  public GrouperQueryEngine(String group, boolean isGroup){
    try{
      Config conf = Config.getInstance();
      initialize(conf.getOption("ldap_host"),
              conf.getOption("grouper_url"),
              conf.getOption("grouper_user"),
              conf.getOption("grouper_password"),
              null);
    }
    catch(Exception e){
      throw new RuntimeException(e);
    }
  }

  public GrouperQueryEngine(String ldapHost, String grouperURL, String grouperUser, String grouperPassword, String stemName) {
    initialize(ldapHost, grouperURL, grouperUser, grouperPassword, stemName);
  }

  /**
   * Initialize the class
   * @param ldapHost
   * @param grouperURL
   * @param grouperUser
   * @param grouperPassword
   * @param stemName
   */
  private void initialize(String ldapHost, String grouperURL, String grouperUser, String grouperPassword, String stemName){
    stem = stemName;

    //setup GrouperClient
    Map<String, String> grouperConfig = GrouperClientUtils.grouperClientOverrideMap();
    grouperConfig.put("grouperClient.ldap.url", "ldaps://"+ldapHost+"/dc=uchicago,dc=edu");
    grouperConfig.put("grouperClient.webService.url",grouperURL);
    grouperConfig.put("grouperClient.webService.login", grouperUser);
    grouperConfig.put("grouperClient.webService.password", grouperPassword);

    if(stem != null){
      myApplicationStem = getStem();
    }
  }
  /*
  public Group getEnforcedGroup(){
    //stack the query filters
    //this one is for the stem
    WsQueryFilter qfps = new WsQueryFilter();
    qfps.setStemName(stem);
    qfps.setQueryFilterType("FIND_BY_STEM_NAME");

    //this one is for the group
    WsQueryFilter qfg = new WsQueryFilter();
    qfg.setGroupName(eligibleUsersGroupName);
    qfg.setQueryFilterType("FIND_BY_GROUP_NAME_APPROXIMATE");

    //this one performs the AND
    WsQueryFilter queryFilterFinal = new WsQueryFilter();
    queryFilterFinal.setQueryFilterType("AND");
    queryFilterFinal.setQueryFilter0(qfps);
    queryFilterFinal.setQueryFilter1(qfg);

    GcFindGroups gcf = new GcFindGroups();
    gcf.assignQueryFilter(queryFilterFinal);
    gcf.assignIncludeGroupDetail(Boolean.FALSE);
    WsFindGroupsResults results = gcf.execute();

    WsResultMeta resultMetadata = results.getResultMetadata();

    if (!"T".equals(resultMetadata.getSuccess())) {
      throw new RuntimeException("Error finding stems: " + resultMetadata.getSuccess()
          + ", " + resultMetadata.getResultCode()
          + ", " + resultMetadata.getResultMessage());
    }

    log.debug("we found "+results.getGroupResults().length+" groups");

    return new Group(results.getGroupResults()[0], getStem(stem));
  }
   *
   */

  public Stem getStem(){
    return getStem(stem);
  }
 
  /**
   * Get all effective memberships of a person
   * @param subj the subject
   * @return list of memberships
   */
  public ArrayList<Group> getMemberships(Subject subj){
    GcGetMemberships gcm = new GcGetMemberships();
    gcm.assignIncludeGroupDetail(Boolean.TRUE);
   
    WsSubjectLookup ws = new WsSubjectLookup();
    ws.setSubjectId(subj.getId());
   
    gcm.addWsSubjectLookup(ws);
   
    WsGetMembershipsResults res = gcm.execute();
   
    ArrayList<Group> results = new ArrayList();
   
    for(WsGroup resGrp : res.getWsGroups()){
      results.add(new Group(resGrp,null));
    }
   
    return results;
   
  }
 
  /**
   * Get a bunch of groups by type
   * @param type group type to query by
   * @return ArrayList of groups.  List will be empty if no results
   */
  public ArrayList<Group> getGroupsByType(String type){
    GcFindGroups groupFinder = new GcFindGroups();
   
    WsQueryFilter filter = new WsQueryFilter();
    filter.setQueryFilterType("FIND_BY_TYPE");
    filter.setGroupTypeName(type);
   
    groupFinder.assignQueryFilter(filter);
   
    WsFindGroupsResults queryResults = groupFinder.execute();
   
    ArrayList<Group> results = new ArrayList();
   
    for(WsGroup resGrp : queryResults.getGroupResults()){
      results.add(new Group(resGrp,null));
    }
   
    return results;
  }

  public Group findGroup(String groupID){
    GcFindGroups groupFinder = new GcFindGroups();

    groupFinder.addGroupName(groupID);
    WsFindGroupsResults res = groupFinder.execute();
   
    if(!"T".equals(res.getResultMetadata().getSuccess())){
      throw new RuntimeException("Error finding group: "+groupID+", "+res.getResultMetadata().getResultMessage());
    }

    WsGroup[] groups = res.getGroupResults();

    return new Group(groups[0], null);


  }

  Stem getStem(String stemName){
    GcFindStems gcFindStems = new GcFindStems();

    WsStemQueryFilter wsStemQueryFilter = new WsStemQueryFilter();
    wsStemQueryFilter.setStemName(stemName);
    wsStemQueryFilter.setStemQueryFilterType("FIND_BY_STEM_NAME");

    gcFindStems.assignStemQueryFilter(wsStemQueryFilter);

    WsFindStemsResults wsFindStemsResults = gcFindStems.execute();

    WsResultMeta resultMetadata = wsFindStemsResults.getResultMetadata();

    if (!"T".equals(resultMetadata.getSuccess())) {
      throw new RuntimeException("Error finding stems: " + resultMetadata.getSuccess()
          + ", " + resultMetadata.getResultCode()
          + ", " + resultMetadata.getResultMessage());
    }

    WsStem[] wsStems = wsFindStemsResults.getStemResults();

    return new Stem(wsStems[0]);
  }

}
TOP

Related Classes of edu.uchicago.grouperabi.GrouperQueryEngine

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.