001    /**
002     * Copyright 2005-2012 The Kuali Foundation
003     *
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.opensource.org/licenses/ecl2.php
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.rice.kim.api.group;
017    
018    import org.kuali.rice.core.api.criteria.QueryByCriteria;
019    import org.kuali.rice.core.api.exception.RiceIllegalArgumentException;
020    import org.kuali.rice.core.api.util.jaxb.MapStringStringAdapter;
021    import org.kuali.rice.kim.api.KimConstants;
022    import org.springframework.cache.annotation.CacheEvict;
023    import org.springframework.cache.annotation.Cacheable;
024    
025    import javax.jws.WebMethod;
026    import javax.jws.WebParam;
027    import javax.jws.WebResult;
028    import javax.jws.WebService;
029    import javax.jws.soap.SOAPBinding;
030    import javax.xml.bind.annotation.XmlElement;
031    import javax.xml.bind.annotation.XmlElementWrapper;
032    import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
033    import java.util.Collection;
034    import java.util.List;
035    import java.util.Map;
036    
037    @WebService(name = "groupService", targetNamespace = KimConstants.Namespaces.KIM_NAMESPACE_2_0)
038    @SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
039    public interface GroupService {
040    
041        /**
042         * Get all the groups for a given principal.
043         *
044         * <p>
045         * This will include all groups directly assigned as well as those inferred
046         * by the fact that they are members of higher level groups.
047         * </p>
048         *
049         * @param principalId The id of the Principal
050         * @return a list of Group objects in which the given Principal is a member of.  An empty list is returned if an invalid or
051         *         non-existant principalId is supplied.
052         * @throws IllegalArgumentException if the principalId is null or blank
053         */
054        @WebMethod(operationName = "getGroupsByPrincipalId")
055        @XmlElementWrapper(name = "groups", required = true)
056        @XmlElement(name = "group", required = false)
057        @WebResult(name = "groups")
058        @Cacheable(value= Group.Cache.NAME, key="'principalId=' + #p0")
059        List<Group> getGroupsByPrincipalId(@WebParam(name = "principalId") String principalId) throws RiceIllegalArgumentException;
060    
061    
062        /**
063         * Get all the groups within a namespace for a given principal.
064         *
065         * <p>
066         * This will include all groups directly assigned as well as those inferred
067         * by the fact that they are members of higher level groups, and filtered by Group namespace.
068         * </p>
069         *
070         * @param principalId The id of the Principal
071         * @param namespaceCode The namespace code of the desired Groups to return
072         * @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
073         *         non-existant principalId is supplied.
074         * @throws IllegalArgumentException if the principalId, namespaceCode is null or blank
075         */
076        @WebMethod(operationName = "getGroupsByPrincipalIdAndNamespaceCode")
077        @XmlElementWrapper(name = "groups", required = true)
078        @XmlElement(name = "group", required = false)
079        @WebResult(name = "groups")
080        @Cacheable(value= Group.Cache.NAME, key="'principalId=' + #p0 + '|' + 'namespaceCode=' + #p1")
081        List<Group> getGroupsByPrincipalIdAndNamespaceCode(@WebParam(name = "principalId") String principalId,
082                @WebParam(name = "namespaceCode") String namespaceCode) throws RiceIllegalArgumentException;
083    
084        /**
085         * Query for groups based on the given search criteria which is a Map of group field names to values.
086         *
087         * <p>
088         * This method returns it's results as a List of group ids that match the given search criteria.
089         * </p>
090         *
091         * @param queryByCriteria the criteria.  Cannot be null.
092         * @return a list of groupId Strings in which the given criteria match Group properties.  An empty list is returned if an invalid or
093         *         non-existent criteria is supplied.
094         * @throws IllegalArgumentException if the queryByCriteria is null
095         */
096        @WebMethod(operationName = "findGroupIds")
097        @XmlElementWrapper(name = "groupIds", required = true)
098        @XmlElement(name = "groupId", required = false)
099        @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 = "getGroupByNameAndNamespaceCode")
158        @WebResult(name = "group")
159        @Cacheable(value= Group.Cache.NAME, key="'namespaceCode=' + #p0 + '|' + 'groupName=' + #p1")
160        Group getGroupByNameAndNamespaceCode(@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={Group.Cache.NAME,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={Group.Cache.NAME, 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={Group.Cache.NAME,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={Group.Cache.NAME,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={Group.Cache.NAME,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={Group.Cache.NAME,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={Group.Cache.NAME,GroupMember.Cache.NAME}, allEntries = true)
591        void removeAllMembers( @WebParam(name="groupId") String groupId ) throws RiceIllegalArgumentException;
592    }