summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEndi S. Dewata <edewata@redhat.com>2014-05-04 18:22:37 -0400
committerEndi S. Dewata <edewata@redhat.com>2014-05-08 22:59:20 -0400
commit47724f3c91e124f1856e4b4f3bbd0068d6ca6ff6 (patch)
treecaa8e7fc6ca3e9ffb9341d3679c15803bb5cf685
parent45c80df9cfcc26d251be2eb50d787dcecd40f388 (diff)
Added filter to GroupService.findGroupMembers().
The GroupService.findGroupMembers() has been modified to accept an additional parameter to filter the group members to be returned. The CLI has been modified accordingly. Ticket #920
-rw-r--r--base/common/src/com/netscape/certsrv/group/GroupClient.java8
-rw-r--r--base/common/src/com/netscape/certsrv/group/GroupResource.java1
-rw-r--r--base/java-tools/src/com/netscape/cmstools/group/GroupMemberFindCLI.java9
-rw-r--r--base/server/cms/src/com/netscape/cms/servlet/admin/GroupMemberProcessor.java28
-rw-r--r--base/server/cms/src/org/dogtagpki/server/rest/GroupService.java6
5 files changed, 32 insertions, 20 deletions
diff --git a/base/common/src/com/netscape/certsrv/group/GroupClient.java b/base/common/src/com/netscape/certsrv/group/GroupClient.java
index f516e9842..80e48e809 100644
--- a/base/common/src/com/netscape/certsrv/group/GroupClient.java
+++ b/base/common/src/com/netscape/certsrv/group/GroupClient.java
@@ -65,8 +65,12 @@ public class GroupClient extends Client {
client.getEntity(response, Void.class);
}
- public GroupMemberCollection findGroupMembers(String groupID, Integer start, Integer size) {
- Response response = groupClient.findGroupMembers(groupID, start, size);
+ public GroupMemberCollection findGroupMembers(
+ String groupID,
+ String filter,
+ Integer start,
+ Integer size) {
+ Response response = groupClient.findGroupMembers(groupID, filter, start, size);
return client.getEntity(response, GroupMemberCollection.class);
}
diff --git a/base/common/src/com/netscape/certsrv/group/GroupResource.java b/base/common/src/com/netscape/certsrv/group/GroupResource.java
index aff584fe6..27fa90b75 100644
--- a/base/common/src/com/netscape/certsrv/group/GroupResource.java
+++ b/base/common/src/com/netscape/certsrv/group/GroupResource.java
@@ -71,6 +71,7 @@ public interface GroupResource {
@ClientResponseType(entityType=GroupMemberCollection.class)
public Response findGroupMembers(
@PathParam("groupID") String groupID,
+ @QueryParam("filter") String filter,
@QueryParam("start") Integer start,
@QueryParam("size") Integer size);
diff --git a/base/java-tools/src/com/netscape/cmstools/group/GroupMemberFindCLI.java b/base/java-tools/src/com/netscape/cmstools/group/GroupMemberFindCLI.java
index 41f310a5f..7a4f217f0 100644
--- a/base/java-tools/src/com/netscape/cmstools/group/GroupMemberFindCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/group/GroupMemberFindCLI.java
@@ -44,7 +44,7 @@ public class GroupMemberFindCLI extends CLI {
}
public void printHelp() {
- formatter.printHelp(getFullName() + " <Group ID> [OPTIONS...]", options);
+ formatter.printHelp(getFullName() + " <Group ID> [FILTER] [OPTIONS...]", options);
}
public void createOptions() {
@@ -78,13 +78,14 @@ public class GroupMemberFindCLI extends CLI {
String[] cmdArgs = cmd.getArgs();
- if (cmdArgs.length != 1) {
- System.err.println("Error: No Group ID specified.");
+ if (cmdArgs.length < 1 || cmdArgs.length > 2) {
+ System.err.println("Error: Incorrect number of arguments specified.");
printHelp();
System.exit(-1);
}
String groupID = cmdArgs[0];
+ String filter = cmdArgs.length < 2 ? null : cmdArgs[1];
String s = cmd.getOptionValue("start");
Integer start = s == null ? null : Integer.valueOf(s);
@@ -92,7 +93,7 @@ public class GroupMemberFindCLI extends CLI {
s = cmd.getOptionValue("size");
Integer size = s == null ? null : Integer.valueOf(s);
- GroupMemberCollection response = groupMemberCLI.groupClient.findGroupMembers(groupID, start, size);
+ GroupMemberCollection response = groupMemberCLI.groupClient.findGroupMembers(groupID, filter, start, size);
MainCLI.printMessage(response.getTotal() + " entries matched");
if (response.getTotal() == 0) return;
diff --git a/base/server/cms/src/com/netscape/cms/servlet/admin/GroupMemberProcessor.java b/base/server/cms/src/com/netscape/cms/servlet/admin/GroupMemberProcessor.java
index 78f602acd..24b242174 100644
--- a/base/server/cms/src/com/netscape/cms/servlet/admin/GroupMemberProcessor.java
+++ b/base/server/cms/src/com/netscape/cms/servlet/admin/GroupMemberProcessor.java
@@ -19,7 +19,9 @@ package com.netscape.cms.servlet.admin;
import java.net.URI;
import java.net.URLEncoder;
+import java.util.ArrayList;
import java.util.Enumeration;
+import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -94,7 +96,8 @@ public class GroupMemberProcessor extends Processor {
return groupMemberData;
}
- public GroupMemberCollection findGroupMembers(String groupID, Integer start, Integer size) {
+ public GroupMemberCollection findGroupMembers(String groupID, String filter, Integer start, Integer size) {
+
try {
start = start == null ? 0 : start;
size = size == null ? DEFAULT_SIZE : size;
@@ -113,28 +116,29 @@ public class GroupMemberProcessor extends Processor {
GroupMemberCollection response = new GroupMemberCollection();
Enumeration<String> members = group.getMemberNames();
+ List<String> results = new ArrayList<String>();
- int i = 0;
-
- // skip to the start of the page
- for ( ; i<start && members.hasMoreElements(); i++) members.nextElement();
-
- // return entries up to the page size
- for ( ; i<start+size && members.hasMoreElements(); i++) {
+ // filter members
+ while (members.hasMoreElements()) {
String memberID = members.nextElement();
+ if (filter == null || memberID.contains(filter)) results.add(memberID);
+ }
+
+ // return entries in the page
+ for (int i = start; i < start+size && i < results.size(); i++) {
+ String memberID = results.get(i);
response.addEntry(createGroupMemberData(groupID, memberID));
}
- // count the total entries
- for ( ; members.hasMoreElements(); i++) members.nextElement();
- response.setTotal(i);
+ // return the total entries
+ response.setTotal(results.size());
if (start > 0) {
URI uri = uriInfo.getRequestUriBuilder().replaceQueryParam("start", Math.max(start-size, 0)).build();
response.addLink(new Link("prev", uri));
}
- if (start+size < i) {
+ if (start+size < results.size()) {
URI uri = uriInfo.getRequestUriBuilder().replaceQueryParam("start", start+size).build();
response.addLink(new Link("next", uri));
}
diff --git a/base/server/cms/src/org/dogtagpki/server/rest/GroupService.java b/base/server/cms/src/org/dogtagpki/server/rest/GroupService.java
index fdfbbd966..3e98d3940 100644
--- a/base/server/cms/src/org/dogtagpki/server/rest/GroupService.java
+++ b/base/server/cms/src/org/dogtagpki/server/rest/GroupService.java
@@ -336,14 +336,16 @@ public class GroupService extends PKIService implements GroupResource {
}
@Override
- public Response findGroupMembers(String groupID, Integer start, Integer size) {
+ public Response findGroupMembers(String groupID, String filter, Integer start, Integer size) {
+
+ CMS.debug("GroupService.findGroupMembers(" + groupID + ", " + filter + ")");
if (groupID == null) throw new BadRequestException("Group ID is null.");
try {
GroupMemberProcessor processor = new GroupMemberProcessor(getLocale(headers));
processor.setUriInfo(uriInfo);
- return createOKResponse(processor.findGroupMembers(groupID, start, size));
+ return createOKResponse(processor.findGroupMembers(groupID, filter, start, size));
} catch (PKIException e) {
throw e;