View Javadoc

1   /**
2    * Copyright 2005-2012 The Kuali Foundation
3    *
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.opensource.org/licenses/ecl2.php
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.kuali.rice.kim.api.group;
17  
18  import org.kuali.rice.core.api.criteria.QueryByCriteria;
19  import org.kuali.rice.core.api.exception.RiceIllegalArgumentException;
20  import org.kuali.rice.core.api.util.jaxb.MapStringStringAdapter;
21  import org.kuali.rice.kim.api.KimConstants;
22  import org.springframework.cache.annotation.CacheEvict;
23  import org.springframework.cache.annotation.Cacheable;
24  
25  import javax.jws.WebMethod;
26  import javax.jws.WebParam;
27  import javax.jws.WebResult;
28  import javax.jws.WebService;
29  import javax.jws.soap.SOAPBinding;
30  import javax.xml.bind.annotation.XmlElement;
31  import javax.xml.bind.annotation.XmlElementWrapper;
32  import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
33  import java.util.Collection;
34  import java.util.List;
35  import java.util.Map;
36  
37  @WebService(name = "groupService", targetNamespace = KimConstants.Namespaces.KIM_NAMESPACE_2_0)
38  @SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
39  public interface GroupService {
40  
41      /**
42       * Get all the groups for a given principal.
43       *
44       * <p>
45       * This will include all groups directly assigned as well as those inferred
46       * by the fact that they are members of higher level groups.
47       * </p>
48       *
49       * @param principalId The id of the Principal
50       * @return a list of Group objects in which the given Principal is a member of.  An empty list is returned if an invalid or
51       *         non-existant principalId is supplied.
52       * @throws IllegalArgumentException if the principalId is null or blank
53       */
54      @WebMethod(operationName = "getGroupsByPrincipalId")
55      @XmlElementWrapper(name = "groups", required = true)
56      @XmlElement(name = "group", required = false)
57      @WebResult(name = "groups")
58      @Cacheable(value= GroupMember.Cache.NAME, key="'principalId=' + #p0")
59      List<Group> getGroupsByPrincipalId(@WebParam(name = "principalId") String principalId) throws RiceIllegalArgumentException;
60  
61  
62      /**
63       * Get all the groups within a namespace for a given principal.
64       *
65       * <p>
66       * This will include all groups directly assigned as well as those inferred
67       * by the fact that they are members of higher level groups, and filtered by Group namespace.
68       * </p>
69       *
70       * @param principalId The id of the Principal
71       * @param namespaceCode The namespace code of the desired Groups to return
72       * @return a list of Group objects in which the given Principal is a member of, filtered by Group namespace.  An empty list is returned if an invalid or
73       *         non-existant principalId is supplied.
74       * @throws IllegalArgumentException if the principalId, namespaceCode is null or blank
75       */
76      @WebMethod(operationName = "getGroupsByPrincipalIdAndNamespaceCode")
77      @XmlElementWrapper(name = "groups", required = true)
78      @XmlElement(name = "group", required = false)
79      @WebResult(name = "groups")
80      @Cacheable(value= GroupMember.Cache.NAME, key="'principalId=' + #p0 + '|' + 'namespaceCode=' + #p1")
81      List<Group> getGroupsByPrincipalIdAndNamespaceCode(@WebParam(name = "principalId") String principalId,
82              @WebParam(name = "namespaceCode") String namespaceCode) throws RiceIllegalArgumentException;
83  
84      /**
85       * Query for groups based on the given search criteria which is a Map of group field names to values.
86       *
87       * <p>
88       * This method returns it's results as a List of group ids that match the given search criteria.
89       * </p>
90       *
91       * @param queryByCriteria the criteria.  Cannot be null.
92       * @return a list of groupId Strings in which the given criteria match Group properties.  An empty list is returned if an invalid or
93       *         non-existent criteria is supplied.
94       * @throws IllegalArgumentException if the queryByCriteria is null
95       */
96      @WebMethod(operationName = "findGroupIds")
97      @XmlElementWrapper(name = "groupIds", required = true)
98      @XmlElement(name = "groupId", required = false)
99      @WebResult(name = "groupIds")
100     List<String> findGroupIds(@WebParam(name = "query") QueryByCriteria queryByCriteria) throws RiceIllegalArgumentException;
101 
102     /**
103      * Query for groups based on the given search criteria which is a Map of group field names to values.
104      *
105      * <p>
106      * This method returns it's results as a List of Groups that match the given search criteria.
107      * </p>
108      *
109      * @param queryByCriteria the criteria.  Cannot be null.
110      * @return a list of Group objects in which the given criteria match Group properties.  An empty list is returned if an invalid or
111      *         non-existent criteria is supplied.
112      * @throws IllegalArgumentException if the queryByCriteria is null
113      */
114     @WebMethod(operationName = "findGroups")
115     @WebResult(name = "results")
116     GroupQueryResults findGroups(@WebParam(name = "query") QueryByCriteria queryByCriteria) throws RiceIllegalArgumentException;
117 
118     /**
119      * Query for group members based on the given search criteria which is a Map of group member field names to values.
120      *
121      * <p>
122      * This method returns it's results as a List of GroupMemberss that match the given search criteria.
123      * </p>
124      *
125      * @param queryByCriteria the criteria.  Cannot be null.
126      * @return a list of GroupMember objects in which the given criteria match Group properties.  An empty list is returned if an invalid or
127      *         non-existent criteria is supplied.
128      * @throws IllegalArgumentException if the queryByCriteria is null
129      */
130     @WebMethod(operationName = "findGroupMembers")
131     @WebResult(name = "results")
132     GroupMemberQueryResults findGroupMembers(@WebParam(name = "query") QueryByCriteria queryByCriteria) throws RiceIllegalArgumentException;
133     /**
134      * Lookup a Group based on the passed in id.
135      *
136      *
137      * @param id String that matches the desired Groups id
138      * @return a Group with the given id value.  A null reference is returned if an invalid or
139      *         non-existant id is supplied.
140      * @throws IllegalArgumentException if the groupId is null or blank
141      */
142     @WebMethod(operationName = "getGroup")
143     @WebResult(name = "group")
144     @Cacheable(value= Group.Cache.NAME, key="'id=' + #p0")
145     Group getGroup(@WebParam(name="id") String id) throws RiceIllegalArgumentException;
146 
147     /**
148      * Lookup a Group based on the passed in namespace and name.
149      *
150      *
151      * @param namespaceCode String that matches the desired Group's namespaceCode
152      * @param groupName     String that matches the desired Group's name
153      * @return a Group with the given namespace and name values.  A null reference is returned if an invalid or
154      *         non-existant id is supplied.
155      * @throws IllegalArgumentException if the namespaceCode, groupName is null or blank
156      */
157     @WebMethod(operationName = "getGroupByNamespaceCodeAndName")
158     @WebResult(name = "group")
159     @Cacheable(value= Group.Cache.NAME, key="'namespaceCode=' + #p0 + '|' + 'groupName=' + #p1")
160     Group getGroupByNamespaceCodeAndName(@WebParam(name = "namespaceCode") String namespaceCode,
161             @WebParam(name = "groupName") String groupName) throws RiceIllegalArgumentException;
162 
163     /**
164      * Gets all groups for the given collection of group ids.
165      *
166      * <p>The result is a Map containing the group id as the key and the Group as the value.</p>
167      *
168      * @param ids Collection that matches the desired Groups' id
169      * @return a Map of Groups with the given id values.  An empty Map is returned if an invalid or
170      *         non-existant id is supplied.
171      * @throws IllegalArgumentException if the groupIds null or empty
172      */
173     @WebMethod(operationName = "getGroups")
174     @XmlElementWrapper(name = "groups", required = true)
175     @XmlElement(name = "group", required = false)
176     @WebResult(name = "groups")
177     @Cacheable(value= Group.Cache.NAME, key="'ids=' + T(org.kuali.rice.core.api.cache.CacheKeyUtils).key(#p0)")
178     List<Group> getGroups(@WebParam(name="ids") Collection<String> ids) throws RiceIllegalArgumentException;
179 
180 
181     /**
182      * Check whether the give principal is a member of the group.
183      *
184      * <p>Will return true if the principal is a member of the group or a group assigned to this group.</p>
185      *
186      * @param principalId Id of the principal
187      * @param groupId     Id string of group
188      * @return true if principal is a member of the group or a member of a group assigned to the the group.
189      * @throws IllegalArgumentException if the principalId, groupId is null or blank
190      */
191     @WebMethod(operationName = "isMemberOfGroup")
192     @WebResult(name = "isMember")
193     @Cacheable(value= GroupMember.Cache.NAME, key="'{isMemberOfGroup}' + 'principalId=' + #p0 + '|' + 'groupId=' + #p1")
194 	boolean isMemberOfGroup(@WebParam(name="principalId") String principalId, @WebParam(name="groupId") String groupId) throws RiceIllegalArgumentException;
195 
196 	/**
197 	 * Check whether the give principal is a member of the group.
198 	 *
199 	 * <p>This will not recurse into contained groups.
200 	 */
201     /**
202      * Check whether the give principal is a member of the group.
203      *
204      * <p>This method does not recurse into contained groups.</p>
205      *
206      * @param principalId Id of the principal
207      * @param groupId     Id string of group
208      * @return true if principal is a direct member of the group.
209      * @throws IllegalArgumentException if the principalId, groupId is null or blank
210      */
211     @WebMethod(operationName = "isDirectMemberOfGroup")
212     @WebResult(name = "isDirectMember")
213     @Cacheable(value= GroupMember.Cache.NAME, key="'{isDirectMemberOfGroup}' + 'principalId=' + #p0 + '|' + 'groupId=' + #p1")
214 	boolean isDirectMemberOfGroup(@WebParam(name="principalId") String principalId, @WebParam(name="groupId") String groupId) throws RiceIllegalArgumentException;
215 
216     /**
217      * Get all the groups for the given principal.  Recurses into parent groups
218      * to provide a comprehensive list.
219      *
220      * <p>
221      * This returns id for all groups for a given principal id.
222      * </p>
223      *
224      * @param principalId Id of a Principal
225      * @return a list of Group Ids in which the principal is a member of.
226      * @throws IllegalArgumentException if the principalId is null or blank
227      */
228     @WebMethod(operationName = "getGroupIdsByPrincipalId")
229     @XmlElementWrapper(name = "groupIds", required = true)
230     @XmlElement(name = "groupId", required = false)
231     @WebResult(name = "groupIds")
232     @Cacheable(value= GroupMember.Cache.NAME, key="'{getGroupIdsByPrincipalId}' + 'principalId=' + #p0")
233 	List<String> getGroupIdsByPrincipalId(@WebParam(name = "principalId") String principalId) throws RiceIllegalArgumentException;
234 
235     /**
236      * Get all the groups for the given principal.  Recurses into parent groups
237      * to provide a comprehensive list.  This is limited to the passed in Group's namespace.
238      *
239      * <p>
240      * This returns id for all groups for a given principal id, limited to specific Group namespace.
241      * </p>
242      *
243      * @param principalId Id of a Principal
244      * @param namespaceCode Namspace code to limit group results to
245      * @return a list of Group Ids in which the principal is a member of, limited to the passed in namespace.
246      * @throws IllegalArgumentException if the principalId, namespaceCode is null or blank
247      */
248     @WebMethod(operationName = "getGroupIdsByPrincipalIdAndNamespaceCode")
249     @XmlElementWrapper(name = "groupIds", required = true)
250     @XmlElement(name = "groupId", required = false)
251     @WebResult(name = "groupIds")
252     @Cacheable(value= GroupMember.Cache.NAME, key="'{getGroupIdsByPrincipalIdAndNamespaceCode}' + 'principalId=' + #p0 + '|' + 'namespaceCode=' + #p1")
253 	List<String> getGroupIdsByPrincipalIdAndNamespaceCode(@WebParam(name = "principalId") String principalId,
254             @WebParam(name = "namespaceCode") String namespaceCode) throws RiceIllegalArgumentException;
255 
256 
257     /**
258      * Get all the groups for the given principal.  Does not recurse into parent groups.
259      *
260      * <p>
261      * This returns id for all groups for a given principal id.
262      * </p>
263      *
264      * @param principalId Id of a Principal
265      * @return a list of Group Ids in which the principal is directly a member of.
266      * @throws IllegalArgumentException if the principalId is null or blank
267      */
268     @WebMethod(operationName = "getDirectGroupIdsByPrincipalId")
269     @XmlElementWrapper(name = "groupIds", required = true)
270     @XmlElement(name = "groupId", required = false)
271     @WebResult(name = "groupIds")
272     @Cacheable(value= GroupMember.Cache.NAME, key="'{getDirectGroupIdsByPrincipalId}' + 'principalId=' + #p0")
273     List<String> getDirectGroupIdsByPrincipalId(@WebParam(name = "principalId") String principalId) throws RiceIllegalArgumentException;
274 
275 
276     /**
277      * Check whether the group identified by groupMemberId is a member of the group
278      * identified by groupId.  This will recurse through all groups.
279      *
280      * <p>Will return true if the group is a member of the group or a group assigned to this group.</p>
281      *
282      * @param groupMemberId Id of the principal
283      * @param groupId     Id string of group
284      * @return true if group is a member of the group or a member of a group assigned to the the group.
285      * @throws IllegalArgumentException if the groupMemberId, groupId is null or blank
286      */
287     @WebMethod(operationName = "isGroupMemberOfGroup")
288     @WebResult(name = "isMember")
289     @Cacheable(value= GroupMember.Cache.NAME, key="'{isGroupMemberOfGroup}' + 'groupMemberId=' + #p0 + '|' + 'groupId=' + #p1")
290     boolean isGroupMemberOfGroup(@WebParam(name="groupMemberId") String groupMemberId, @WebParam(name="groupId") String groupId) throws RiceIllegalArgumentException;
291 
292 
293     /**
294      * Returns all principal ids that are members of the given group id.  Recurses into contained groups for
295      * comprehensive list.
296      *
297      * <p>Will return a list of all principal ids for members this group.</p>
298      *
299      * @param groupId     Id string of group
300      * @return List of principal ids
301      * @throws IllegalArgumentException if the groupId is null or blank
302      */
303     @WebMethod(operationName = "getMemberPrincipalIds")
304     @XmlElementWrapper(name = "principalIds", required = true)
305     @XmlElement(name = "principalId", required = false)
306     @WebResult(name = "principalIds")
307     @Cacheable(value= GroupMember.Cache.NAME, key="'{getMemberPrincipalIds}' + 'groupId=' + #p0")
308 	List<String> getMemberPrincipalIds(@WebParam(name="groupId") String groupId) throws RiceIllegalArgumentException;
309 
310 
311     /**
312      * Returns all principal ids that are direct members of the given group id.
313      *
314      * <p>Will return a list of all principal ids for direct members this group.</p>
315      *
316      * @param groupId     Id string of group
317      * @return List of direct member principal ids.
318      * @throws IllegalArgumentException if the groupId is null or blank
319      */
320     @WebMethod(operationName = "getDirectMemberPrincipalIds")
321     @XmlElementWrapper(name = "principalIds", required = true)
322     @XmlElement(name = "principalId", required = false)
323     @WebResult(name = "principalIds")
324     @Cacheable(value= GroupMember.Cache.NAME, key="'{getDirectMemberPrincipalIds}' + 'groupId=' + #p0")
325 	List<String> getDirectMemberPrincipalIds(@WebParam(name="groupId") String groupId) throws RiceIllegalArgumentException;
326 
327 
328     /**
329      * Returns all group ids that are members of the given group id.  Recurses into contained groups for
330      * a comprehensive list.
331      *
332      * <p>Will return a list of all group ids for members this group.</p>
333      *
334      * @param groupId     Id string of group
335      * @return List of group ids
336      * @throws IllegalArgumentException if the groupId is null or blank
337      */
338     @WebMethod(operationName = "getMemberGroupIds")
339     @XmlElementWrapper(name = "groupIds", required = true)
340     @XmlElement(name = "groupId", required = false)
341     @WebResult(name = "groupIds")
342     @Cacheable(value= GroupMember.Cache.NAME, key="'{getMemberGroupIds}' + 'groupId=' + #p0")
343 	List<String> getMemberGroupIds( @WebParam(name="groupId") String groupId ) throws RiceIllegalArgumentException;
344 
345 
346     /**
347      * Returns all group ids that are direct members of the given group id.
348      *
349      * <p>Will return a list of all group ids for direct members this group.</p>
350      *
351      * @param groupId     Id string of group
352      * @return List of direct member group ids.
353      * @throws IllegalArgumentException if the groupId is null or blank
354      */
355     @WebMethod(operationName = "getDirectMemberOfGroup")
356     @XmlElementWrapper(name = "groupIds", required = true)
357     @XmlElement(name = "groupId", required = false)
358     @WebResult(name = "groupIds")
359     @Cacheable(value= GroupMember.Cache.NAME, key="'{getDirectMemberGroupIds}' + 'groupId=' + #p0")
360 	List<String> getDirectMemberGroupIds( @WebParam(name="groupId") String groupId ) throws RiceIllegalArgumentException;
361 
362 
363     /**
364      * Returns all parent groups ids that the given group id is a member of. Recurses parent groups for
365      * a comprehensive list.
366      *
367      * <p>Will return a list of all group ids that the given group id is a member of.</p>
368      *
369      * @param groupId     Id string of group
370      * @return List of parent group ids.
371      * @throws IllegalArgumentException if the groupId is null or blank
372      */
373     @WebMethod(operationName = "getParentGroupIds")
374     @XmlElementWrapper(name = "groupIds", required = true)
375     @XmlElement(name = "groupId", required = false)
376     @WebResult(name = "groupIds")
377     @Cacheable(value= GroupMember.Cache.NAME, key="'{getParentGroupIds}' + 'groupId=' + #p0")
378     List<String> getParentGroupIds(@WebParam(name="groupId") String groupId) throws RiceIllegalArgumentException;
379 
380 
381     /**
382      * Returns all parent groups ids that the given group id is a member of.
383      *
384      * <p>Will return a list of all group ids that the given group id is a member of.</p>
385      *
386      * @param groupId     Id string of group
387      * @return List of parent group ids.
388      * @throws IllegalArgumentException if the groupId is null or blank
389      */
390     @WebMethod(operationName = "getDirectParentGroupIds")
391     @XmlElementWrapper(name = "groupIds", required = true)
392     @XmlElement(name = "groupId", required = false)
393     @WebResult(name = "groupIds")
394     @Cacheable(value= GroupMember.Cache.NAME, key="'{getDirectParentGroupIds}' + 'groupId=' + #p0")
395     List<String> getDirectParentGroupIds(@WebParam(name="groupId") String groupId) throws RiceIllegalArgumentException;
396 
397 	/**
398 	 * Get all the attributes of the given group.
399      * @throws IllegalArgumentException if the groupId is null or blank
400 	 */
401     @WebMethod(operationName = "getAttributes")
402     @WebResult(name = "attributes")
403     @XmlJavaTypeAdapter(value = MapStringStringAdapter.class)
404     @Cacheable(value= Group.Cache.NAME, key="'{getAttributes}' + 'groupId=' + #p0")
405     Map<String, String> getAttributes( @WebParam(name="groupId") String groupId ) throws RiceIllegalArgumentException;
406 
407 
408     /**
409      * Get all GroupMembers all the groups with a given group id.
410      *
411      * <p>
412      * The collection of GroupMembers will contain members for a the group in no defined order.
413      * </p>
414      *
415      * @param groupId     Id of group
416      * @return Collection of GroupMembers.
417      * @throws IllegalArgumentException if the groupId is null or blank
418      */
419     @WebMethod(operationName = "getMembersOfGroup")
420     @XmlElementWrapper(name = "members", required = true)
421     @XmlElement(name = "member", required = false)
422     @WebResult(name = "members")
423     @Cacheable(value= GroupMember.Cache.NAME, key="'groupId=' + #p0")
424 	List<GroupMember> getMembersOfGroup( @WebParam(name="groupId") String groupId ) throws RiceIllegalArgumentException;
425 
426 
427     /**
428      * Get all GroupMembers all the groups with the given group ids.
429      *
430      * <p>
431      * The collection of GroupMembers will contain members for all the groups in no defined order.
432      * The values returned may or may not be grouped by group id.
433      * </p>
434      *
435      * @param groupIds     Ids of groups
436      * @return Collection of GroupMembers.
437      * @throws IllegalArgumentException if the groupIds is null or empty
438      */
439     @WebMethod(operationName = "getMembers")
440     @XmlElementWrapper(name = "members", required = true)
441     @XmlElement(name = "member", required = false)
442     @WebResult(name = "members")
443     @Cacheable(value= GroupMember.Cache.NAME, key="'groupIds=' + T(org.kuali.rice.core.api.cache.CacheKeyUtils).key(#p0)")
444 	List<GroupMember> getMembers( @WebParam(name="groupIds") List<String> groupIds ) throws RiceIllegalArgumentException;
445 
446 
447     /**
448      * Creates a new group using the given Group.
449      *
450      * <p>
451      * This will attempt to create a new Group
452      * </p>
453      *
454      * @param group The new group to be created
455      * @return a the Group that has been created.
456      * @throws IllegalArgumentException if the group is null
457      */
458     @WebMethod(operationName = "createGroup")
459     @WebResult(name = "group")
460     @CacheEvict(value={Group.Cache.NAME, GroupMember.Cache.NAME}, allEntries = true)
461 	Group createGroup(@WebParam(name="group") Group group) throws RiceIllegalArgumentException;
462 
463     /**
464      * Updates an existing group using the given Group.
465      *
466      * <p>
467      * This will attempt to update an existing Group.  For this to return without exceptions, the passed in Group
468      * must have it's Id set and be a valid group that already exists.
469      * </p>
470      *
471      * @param group The group to be updated
472      * @return a the Group that has been updated.
473      * @throws IllegalArgumentException if the group is null
474      */
475     @WebMethod(operationName = "updateGroup")
476     @WebResult(name = "group")
477     @CacheEvict(value={Group.Cache.NAME, GroupMember.Cache.NAME}, allEntries = true)
478 	Group updateGroup(@WebParam(name="group") Group group) throws RiceIllegalArgumentException;
479 
480 	/**
481      * Updates a group using the given Group.
482      *
483      * <p>
484      * This will attempt to update an existing group with data from the passed in group.  If the passed in groupId and the group.id values are different
485      * this method will inactivate the old group and create a new group with the same members with the passed in groups properties.
486      * </p>
487      *
488      * @param groupId Id of the Group to be updated
489      * @param group   Group object to use for update
490      * @return a the Group that has been updated.
491      * @throws IllegalArgumentException if the group is null or the groupId is null or blank
492      */
493     @WebMethod(operationName = "updateGroupWithId")
494     @WebResult(name = "group")
495     @CacheEvict(value={Group.Cache.NAME, GroupMember.Cache.NAME}, allEntries = true)
496     Group updateGroup(@WebParam(name="groupId") String groupId, @WebParam(name="group") Group group) throws RiceIllegalArgumentException;
497 
498     /**
499      * Creates a new group using the given GroupMember.
500      *
501      * <p>
502      * This will attempt to create a new GroupMember
503      * </p>
504      *
505      * @param groupMember The new groupMember to be created
506      * @return a the GroupMember that has been created.
507      * @throws IllegalArgumentException if the group is null
508      */
509     @WebMethod(operationName = "createGroupMember")
510     @WebResult(name = "groupMember")
511     @CacheEvict(value={GroupMember.Cache.NAME}, allEntries = true)
512 	GroupMember createGroupMember(@WebParam(name="groupMember") GroupMember groupMember) throws RiceIllegalArgumentException;
513 
514     /**
515      * Updates an existing group using the given GroupMember.
516      *
517      * <p>
518      * This will attempt to update an existing GroupMember.  For this to return without exceptions, the passed in
519      * GroupMember must have it's Id set and be a valid groupMember that already exists.
520      * </p>
521      *
522      * @param groupMember The groupMember to be updated
523      * @return a the GroupMember that has been updated.
524      * @throws IllegalArgumentException if the groupMember is null
525      */
526     @WebMethod(operationName = "updateGroupMember")
527     @WebResult(name = "groupMember")
528     @CacheEvict(value={GroupMember.Cache.NAME}, allEntries = true)
529 	GroupMember updateGroupMember(@WebParam(name="groupMember") GroupMember groupMember) throws RiceIllegalArgumentException;
530 
531     /**
532      * Adds the group with the id supplied in childId as a member of the group with the id supplied in parentId.
533      *
534      * @param childId Id of the Group to be added to the members of Parent
535      * @param parentId  Id of the Group object to add the member to
536      * @return true if the member was added successfully.
537      * @throws IllegalArgumentException if the childId, parentId is null or blank
538      */
539     @WebMethod(operationName = "addGroupToGroup")
540     @WebResult(name = "addedToGroup")
541     @CacheEvict(value={GroupMember.Cache.NAME}, allEntries = true)
542     boolean addGroupToGroup(@WebParam(name="childId") String childId, @WebParam(name="parentId") String parentId) throws RiceIllegalArgumentException;
543 
544     /**
545      * Removes the group with the id supplied in childId from the group with the id supplied in parentId.
546      *
547      * @param childId Id of the Group to be removed from the members of Parent
548      * @param parentId  Id of the Group object to remove the member from
549      * @return true if the member was removed successfully.
550      * @throws IllegalArgumentException if the childId, parentId is null or blank
551      */
552     @WebMethod(operationName = "removeGroupFromGroup")
553     @WebResult(name = "removedFromGroup")
554     @CacheEvict(value={GroupMember.Cache.NAME}, allEntries = true)
555     boolean removeGroupFromGroup(@WebParam(name="childId") String childId, @WebParam(name="parentId") String parentId) throws RiceIllegalArgumentException;
556 
557     /**
558      * Add the principal with the given principalId as a member of the group with the given groupId.
559      *
560      * @param principalId Id of the Principal to be added to the members of the Parent Group
561      * @param groupId  Id of the Group object to add the member to
562      * @return true if the member was added successfully.
563      * @throws IllegalArgumentException if the principalId, groupId is null or blank
564      */
565     @WebMethod(operationName = "addPrincipalToGroup")
566     @WebResult(name = "addedToGroup")
567     @CacheEvict(value={GroupMember.Cache.NAME}, allEntries = true)
568     boolean addPrincipalToGroup(@WebParam(name="principalId") String principalId, @WebParam(name="groupId") String groupId) throws RiceIllegalArgumentException;
569 
570     /**
571      * Removes the member principal with the given principalId from the group with the given groupId.
572      *
573      * @param principalId Id of the Principal to be removed from the members of the Parent Group
574      * @param groupId  Id of the Group object to remove the member from
575      * @return true if the member was removed successfully.
576      * @throws IllegalArgumentException if the principalId, groupId is null or blank
577      */
578     @WebMethod(operationName = "removePrincipalFromGroup")
579     @WebResult(name = "removedFromGroup")
580     @CacheEvict(value={GroupMember.Cache.NAME}, allEntries = true)
581     boolean removePrincipalFromGroup(@WebParam(name="principalId") String principalId, @WebParam(name="groupId") String groupId) throws RiceIllegalArgumentException;
582 
583     /**
584      * Removes all members from the group with the given groupId.
585      *
586      * @param groupId  Id of the Group object to remove the members from
587      * @throws IllegalArgumentException if the groupId is null or blank
588      */
589     @WebMethod(operationName = "removeAllMembers")
590     @CacheEvict(value={GroupMember.Cache.NAME}, allEntries = true)
591     void removeAllMembers( @WebParam(name="groupId") String groupId ) throws RiceIllegalArgumentException;
592 }