This example is for v4.10.0+ and v5.7.0+.
Get the immediate and total membership counts for a group. Does not use template inputs, arbitrary JSON inputs
Config
grouperGshTemplate.membershipCountV1arbitraryInputs.allowWsFromNoOwner = true grouperGshTemplate.membershipCountV1arbitraryInputs.displayErrorOutput = true grouperGshTemplate.membershipCountV1arbitraryInputs.groupUuidCanRun = test\u003AtemplateRunners grouperGshTemplate.membershipCountV1arbitraryInputs.gshTemplate = // grouperGshTemplate.membershipCountV1arbitraryInputs.runAsType = GrouperSystem grouperGshTemplate.membershipCountV1arbitraryInputs.securityRunType = specifiedGroup grouperGshTemplate.membershipCountV1arbitraryInputs.templateDescription = count membership immediate and total of group grouperGshTemplate.membershipCountV1arbitraryInputs.templateName = membershipCountV1 arbitrary inputs
GSH script
//uncomment to compile in eclipse (and last line) // these are standard imports, can be commented out in script but needed in eclipse import java.util.LinkedHashMap; import java.util.Map; import edu.internet2.middleware.grouper.GrouperSession; import edu.internet2.middleware.grouper.SubjectFinder; import edu.internet2.middleware.grouper.app.gsh.GrouperGroovyRuntime; import edu.internet2.middleware.grouper.app.gsh.template.GshTemplateOutput; import edu.internet2.middleware.grouper.app.gsh.template.GshTemplateRuntime; import edu.internet2.middleware.grouper.misc.GrouperStartup; import edu.internet2.middleware.grouper.util.GrouperUtil; import edu.internet2.middleware.grouperClient.jdbc.GcDbAccess; import edu.internet2.middleware.subject.Subject; //public class Test25membershipCountV1arbitraryInputs { // // public static void main(String[] args) { // // GrouperStartup.startup(); // // GrouperSession gsh_builtin_grouperSession = GrouperSession.startRootSession(); // Subject gsh_builtin_subject = SubjectFinder.findByIdentifierAndSource("mchyzer", "pennperson", true); // GrouperGroovyRuntime grouperGroovyRuntime = new GrouperGroovyRuntime(); // GshTemplateOutput gsh_builtin_gshTemplateOutput = new GshTemplateOutput(); // GshTemplateRuntime gsh_builtin_gshTemplateRuntime = new GshTemplateRuntime(); Map<String, Object> wsInput = gsh_builtin_gshTemplateRuntime.getWsInput(); String groupName = (String)wsInput.get("groupName"); String effectiveQuery = "select count(*) from grouper_memberships_lw_v where group_name = ? and list_name = 'members'"; int effectiveCount = new GcDbAccess().sql(effectiveQuery).addBindVar(groupName).selectList(Integer.class).get(0); String immediateQuery = "select count(*) from grouper_memberships_v where group_name = ? and list_name = 'members' and membership_type = 'immediate'"; int immediateCount = new GcDbAccess().sql(immediateQuery).addBindVar(groupName).selectList(Integer.class).get(0); Map<String, Object> jsonOutput = new LinkedHashMap<>(); jsonOutput.put("totalMembershipCount", GrouperUtil.longValue(effectiveCount)); jsonOutput.put("immediateMembershipCount", GrouperUtil.longValue(immediateCount)); gsh_builtin_gshTemplateOutput.setWsOutput(jsonOutput); // } // //}
Sample WS call
Request
POST https://grouperWs.school.edu/grouper-ws/servicesRest/2.6.0/gshTemplateExec Content-Type: application/json Authorization: sas9f8d7sa9df87asd98f { "WsRestGshTemplateExecRequest":{ "configId":"membershipCountV1arbitraryInputs", "wsInput":{ "groupName":"test:testGroup" } } }
Response
STATUS: 200 x-grouper-resultcode: SUCCESS x-grouper-resultcode2: NONE x-grouper-success: T { "WsGshTemplateExecResult": { "resultMetadata": { "resultCode": "SUCCESS", "resultMessage": "Success for: clientVersion: 4.0.0, configId: membershipCountV1arbitraryInputs, ownerType: null, inputs: null\n, actAsSubject: null, paramNames: \n, params: null", "success": "T" }, "responseMetadata": { "millis": "723", "serverVersion": "4.0.0" }, "transaction": true, "gshValidationLines": [], "gshOutputLines": [], "gshExitCode": 0, "wsOutput": { "totalMembershipCount": 12, "immediateMembershipCount": 10 } } }