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