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.responsibility;
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.exception.RiceIllegalStateException;
21  import org.kuali.rice.core.api.util.jaxb.MapStringStringAdapter;
22  import org.kuali.rice.kim.api.KimConstants;
23  import org.kuali.rice.kim.api.common.template.Template;
24  import org.kuali.rice.kim.api.common.template.TemplateQueryResults;
25  import org.springframework.cache.annotation.CacheEvict;
26  import org.springframework.cache.annotation.Cacheable;
27  
28  import javax.jws.WebMethod;
29  import javax.jws.WebParam;
30  import javax.jws.WebResult;
31  import javax.jws.WebService;
32  import javax.jws.soap.SOAPBinding;
33  import javax.xml.bind.annotation.XmlElement;
34  import javax.xml.bind.annotation.XmlElementWrapper;
35  import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
36  import java.util.List;
37  import java.util.Map;
38  
39  /**
40   * This service provides operations for determining what responsibility actions
41   * a principal has and for querying about responsibility data.  It also provides several
42   * write operations.
43   *
44   * <p>
45   * A responsibility represents an action that a principal is requested to
46   * take.  This is used for defining workflow actions (such as approve,
47   * acknowledge, fyi) that the principal has the responsibility to take.  The
48   * workflow engine integrates with this service to provide responsibility-driven routing.
49   * <p/>
50   *
51   * <p>
52   * A responsibility is very similar to a permission in a couple of ways.
53   * First of all, responsibilities are always granted to a role, never assigned
54   * directly to a principal or group.  Furthermore, in a similar fashion to
55   * permissions, a role has the concept of a responsibility template.  The
56   * responsibility template specifies what additional responsibility details
57   * need to be defined when the responsibility is created.
58   * <p/>
59   *
60   * @author Kuali Rice Team (rice.collab@kuali.org)
61   */
62  @WebService(name = "responsibilityService", targetNamespace = KimConstants.Namespaces.KIM_NAMESPACE_2_0)
63  @SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
64  public interface ResponsibilityService {
65  
66      /**
67       * This will create a {@link Responsibility} exactly like the responsibility passed in.
68       *
69       * @param responsibility the responsibility to create
70       * @return the id of the newly created object.  will never be null.
71       * @throws IllegalArgumentException if the responsibility is null
72       * @throws IllegalStateException if the responsibility is already existing in the system
73       */
74      @WebMethod(operationName="createResponsibility")
75      @WebResult(name = "responsibility")
76      @CacheEvict(value={Responsibility.Cache.NAME, Template.Cache.NAME + "{Responsibility}"}, allEntries = true)
77      Responsibility createResponsibility(@WebParam(name = "responsibility") Responsibility responsibility)
78              throws RiceIllegalArgumentException, RiceIllegalStateException;
79  
80      /**
81       * This will up ev a {@link Responsibility}.
82       *
83       * @param responsibility the responsibility to update
84       * @throws IllegalArgumentException if the responsibility is null
85       * @throws IllegalStateException if the responsibility does not exist in the system
86       */
87      @WebMethod(operationName="updateResponsibility")
88      @WebResult(name = "responsibility")
89      @CacheEvict(value={Responsibility.Cache.NAME, Template.Cache.NAME + "{Responsibility}"}, allEntries = true)
90      Responsibility updateResponsibility(@WebParam(name = "responsibility") Responsibility responsibility)
91              throws RiceIllegalArgumentException, RiceIllegalStateException;
92  
93      /**
94       * Gets a {@link Responsibility} from an id.
95       *
96       * <p>
97       *   This method will return null if the responsibility does not exist.
98       * </p>
99       *
100      * @param id the unique id to retrieve the responsibility by. cannot be null or blank.
101      * @return a {@link Responsibility} or null
102      * @throws IllegalArgumentException if the id is null or blank
103      */
104     @WebMethod(operationName = "getResponsibility")
105     @WebResult(name = "responsibility")
106     @Cacheable(value=Responsibility.Cache.NAME, key="'id=' + #p0")
107     Responsibility getResponsibility(@WebParam(name = "id") String id) throws RiceIllegalArgumentException;
108 
109     /**
110      * Finds a {@link Responsibility} for namespaceCode and name.
111      *
112      * @param namespaceCode the namespace code.  cannot be null or blank.
113      * @param name the responsibility name. cannot be null or blank.
114      * @return a {@link Responsibility} or null
115      * @throws IllegalArgumentException if the id or namespaceCode is null or blank
116      */
117     @WebMethod(operationName = "findRespByNamespaceCodeAndName")
118     @WebResult(name = "responsibility")
119     @Cacheable(value=Responsibility.Cache.NAME, key="'namespaceCode=' + #p0 + '|' + 'name=' + #p1")
120     Responsibility findRespByNamespaceCodeAndName(@WebParam(name = "namespaceCode") String namespaceCode,
121                                                   @WebParam(name = "name") String name) throws RiceIllegalArgumentException;
122     /**
123      * Gets a {@link Template} from an id.
124      *
125      * <p>
126      *   This method will return null if the template does not exist.
127      * </p>
128      *
129      * @param id the unique id to retrieve the template by. cannot be null or blank.
130      * @return a {@link Template} or null
131      * @throws IllegalArgumentException if the id is null or blank
132      */
133     @WebMethod(operationName = "getResponsibilityTemplate")
134     @WebResult(name = "template")
135     @Cacheable(value=Template.Cache.NAME + "{Responsibility}", key="'id=' + #p0")
136     Template getResponsibilityTemplate(@WebParam(name = "id") String id) throws RiceIllegalArgumentException;
137 
138     /**
139      * Finds a {@link Template} for namespaceCode and name.
140      *
141      * @param namespaceCode the namespace code.  cannot be null or blank.
142      * @param name the template name. cannot be null or blank.
143      * @return a {@link Template} or null
144      * @throws IllegalArgumentException if the id or namespaceCode is null or blank
145      */
146     @WebMethod(operationName = "findRespTemplateByNamespaceCodeAndName")
147     @WebResult(name = "template")
148     @Cacheable(value=Template.Cache.NAME + "{Responsibility}", key="'namespaceCode=' + #p0 + '|' + 'name=' + #p1")
149     Template findRespTemplateByNamespaceCodeAndName(@WebParam(name = "namespaceCode") String namespaceCode,
150                                                     @WebParam(name = "name") String name) throws RiceIllegalArgumentException;
151     /**
152      * Checks in a given principal id has a responsibility using the passed in responsibility information.
153      *
154      * @param principalId the principal id to check.  cannot be null or blank.
155      * @param namespaceCode the namespace code.  cannot be null or blank.
156      * @param respName the responsibility name. cannot be null or blank.
157      * @param qualification the qualification for the responsibility. cannot be null.
158      * @return true is principal has responsibility
159      * @throws IllegalArgumentException if the principalId, namespaceCode, respName is null or blank
160      * @throws IllegalArgumentException if the qualification is null
161      */
162     @WebMethod(operationName = "hasResponsibility")
163     @WebResult(name = "result")
164     boolean hasResponsibility(@WebParam(name = "principalId") String principalId,
165                               @WebParam(name = "namespaceCode") String namespaceCode,
166                               @WebParam(name = "respName") String respName,
167                               @XmlJavaTypeAdapter(value = MapStringStringAdapter.class)
168                               @WebParam(name = "qualification") Map<String, String> qualification) throws RiceIllegalArgumentException;
169 
170     /**
171      * Checks in a given principal id has a responsibility using the passed in responsibility <b>template</b> information.
172      *
173      * @param principalId the principal id to check.  cannot be null or blank.
174      * @param namespaceCode the namespace code.  cannot be null or blank.
175      * @param respTemplateName the responsibility template name. cannot be null or blank.
176      * @param qualification the qualification for the responsibility. cannot be null.
177      * @param respDetails the responsibility details. cannot be null.
178      * @return true is principal has responsibility
179      * @throws IllegalArgumentException if the principalId, namespaceCode, respName is null or blank
180      * @throws IllegalArgumentException if the qualification or responsibilityDetails is null
181      */
182     @WebMethod(operationName = "hasResponsibilityByTemplate")
183     @WebResult(name = "result")
184     boolean hasResponsibilityByTemplate(@WebParam(name = "principalId") String principalId,
185             @WebParam(name = "namespaceCode") String namespaceCode,
186             @WebParam(name = "respTemplateName") String respTemplateName,
187             @XmlJavaTypeAdapter(value = MapStringStringAdapter.class) @WebParam(
188                     name = "qualification") Map<String, String> qualification,
189             @XmlJavaTypeAdapter(value = MapStringStringAdapter.class) @WebParam(
190                     name = "respDetails") Map<String, String> respDetails) throws RiceIllegalArgumentException;
191 
192     /**
193      * Gets a List of {@link ResponsibilityAction} based on passed in responsibility information.
194      *
195      * @param namespaceCode the namespace code.  cannot be null or blank.
196      * @param respName the responsibility name. cannot be null or blank.
197      * @param qualification the qualification for the responsibility. cannot be null.
198      * @return an immutable list of ResponsibilityAction. Will not return null.
199      * @throws IllegalArgumentException if the namespaceCode, respName is null or blank
200      * @throws IllegalArgumentException if the qualification or respDetails is null
201      */
202     @WebMethod(operationName = "getResponsibilityActions")
203     @XmlElementWrapper(name = "responsibilityActions", required = true)
204     @XmlElement(name = "responsibilityAction", required = false)
205     @WebResult(name = "responsibilityActions")
206     List<ResponsibilityAction> getResponsibilityActions(@WebParam(name = "namespaceCode") String namespaceCode,
207                                                         @WebParam(name = "respName") String respName,
208                                                         @XmlJavaTypeAdapter(value = MapStringStringAdapter.class)
209                                                         @WebParam(name = "qualification") Map<String, String> qualification) throws RiceIllegalArgumentException;
210 
211     /**
212      * Gets a List of {@link ResponsibilityAction} based on passed in responsibility template information.
213      *
214      * @param namespaceCode the namespace code.  cannot be null or blank.
215      * @param respTemplateName the responsibility name. cannot be null or blank.
216      * @param qualification the qualification for the responsibility. cannot be null.
217      * @param respDetails the responsibility details. can be null.
218      * @return an immutable list of ResponsibilityAction. Will not return null.
219      * @throws IllegalArgumentException if the namespaceCode, respName is null or blank
220      * @throws IllegalArgumentException if the qualification or respDetails is null
221      */
222     @WebMethod(operationName = "getResponsibilityActionsByTemplate")
223     @XmlElementWrapper(name = "responsibilityActions", required = true)
224     @XmlElement(name = "responsibilityAction", required = false)
225     @WebResult(name = "responsibilityActions")
226     List<ResponsibilityAction> getResponsibilityActionsByTemplate(
227             @WebParam(name = "namespaceCode") String namespaceCode,
228             @WebParam(name = "responsibilityTemplateName") String respTemplateName,
229             @XmlJavaTypeAdapter(value = MapStringStringAdapter.class) @WebParam(
230                     name = "qualification") Map<String, String> qualification,
231             @XmlJavaTypeAdapter(value = MapStringStringAdapter.class) @WebParam(
232                     name = "respDetails") Map<String, String> respDetails) throws RiceIllegalArgumentException;
233 
234     /**
235      * Gets a List of roleIds that the responsibility is associated with.
236      *
237      * @param id the unique id to retrieve the roleIds for. cannot be null or blank.
238      * @return an immutable list of roleIds. Will not return null.
239      * @throws IllegalArgumentException if the id is null or blank or if the qualification is null
240      */
241     @WebMethod(operationName = "getRoleIdsForResponsibility")
242     @XmlElementWrapper(name = "roleIds", required = true)
243     @XmlElement(name = "roleId", required = false)
244     @WebResult(name = "roleIds")
245     List<String> getRoleIdsForResponsibility(@WebParam(name = "id") String id) throws RiceIllegalArgumentException;
246 
247     /**
248      * This method find Responsibilities based on a query criteria.  The criteria cannot be null.
249      *
250      * @param queryByCriteria the criteria.  Cannot be null.
251      * @return query results.  will never return null.
252      * @throws IllegalArgumentException if the queryByCriteria is null
253      */
254     @WebMethod(operationName = "findResponsibilities")
255     @WebResult(name = "results")
256     ResponsibilityQueryResults findResponsibilities(@WebParam(name = "query") QueryByCriteria queryByCriteria) throws RiceIllegalArgumentException;
257 
258 
259     /**
260      * This method find Responsibility Templates based on a query criteria.  The criteria cannot be null.
261      *
262      * @param queryByCriteria the criteria.  Cannot be null.
263      * @return query results.  will never return null.
264      * @throws IllegalArgumentException if the queryByCriteria is null
265      */
266     @WebMethod(operationName = "findResponsibilityTemplates")
267     @WebResult(name = "results")
268     TemplateQueryResults findResponsibilityTemplates(@WebParam(name = "query") QueryByCriteria queryByCriteria) throws RiceIllegalArgumentException;
269 }