View Javadoc
1   /**
2    * Copyright 2005-2014 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.kew.api.rule;
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.exception.RiceIllegalStateException;
22  import org.kuali.rice.core.api.util.jaxb.DateTimeAdapter;
23  import org.kuali.rice.kew.api.KewApiConstants;
24  import org.springframework.cache.annotation.Cacheable;
25  
26  import javax.jws.WebMethod;
27  import javax.jws.WebParam;
28  import javax.jws.WebResult;
29  import javax.jws.WebService;
30  import javax.jws.soap.SOAPBinding;
31  import javax.xml.bind.annotation.XmlElement;
32  import javax.xml.bind.annotation.XmlElementWrapper;
33  import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
34  import java.util.List;
35  
36  @WebService(name = "ruleService", targetNamespace = KewApiConstants.Namespaces.KEW_NAMESPACE_2_0)
37  @SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
38  public interface RuleService {
39      /**
40       * gets a Rule identified by the passed in id
41       *
42       * @param id unique id for the Rule
43       *
44       * @return Rule with the passed in unique id
45       *
46       * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException if {@code id} is null
47       * @throws org.kuali.rice.core.api.exception.RiceIllegalStateException if Rule does not exist
48       */
49      @WebMethod(operationName = "getRule")
50      @WebResult(name = "rule")
51      @Cacheable(value=Rule.Cache.NAME, key="'id=' + #p0")
52  	Rule getRule(@WebParam(name="id") String id)
53          throws RiceIllegalArgumentException, RiceIllegalStateException;
54  
55      /**
56       * gets a Rule identified by the passed in rule name
57       *
58       * @param name name of the Rule
59       *
60       * @return Rule with the passed in unique id
61       *
62       * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException if {@code name} is null
63       * @throws org.kuali.rice.core.api.exception.RiceIllegalStateException if Rule does not exist
64       */
65      @WebMethod(operationName = "getRuleByName")
66      @WebResult(name = "rule")
67      @Cacheable(value=Rule.Cache.NAME, key="'name=' + #p0")
68  	Rule getRuleByName(@WebParam(name="name") String name)
69          throws RiceIllegalArgumentException, RiceIllegalStateException;
70  
71      /**
72       * gets a list of Rules with the specified templateId
73       *
74       * @param templateId unique id for the Rule
75       *
76       * @return Rules with the passed in templateId, or an empty list if none exist
77       *
78       * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException if {@code templateId} is null
79       */
80      @WebMethod(operationName = "getRuleByTemplateId")
81      @WebResult(name = "rules")
82      @XmlElementWrapper(name = "rules", required = true)
83      @XmlElement(name = "rule", required = true)
84      @Cacheable(value=Rule.Cache.NAME, key="'templateId=' + #p0")
85  	List<Rule> getRulesByTemplateId(@WebParam(name="templateId") String templateId)
86          throws RiceIllegalArgumentException;
87  
88      /**
89       * Gets a list of Rules with the specified templateId and documentTypeName.  Scales up the hierarchy of
90       * documentTypes
91       *
92       * @param templateName unique name for the Rule Template.  Cannot be null or empty
93       * @param documentTypeName documentTypeName for Rule.  Cannot be null or empty
94       *
95       * @return Rules with the passed in templateId, documentTypeName (or parent document type)or an empty list if none exist
96       *
97       * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException if {@code id} is null
98       */
99      @WebMethod(operationName = "getRulesByTemplateNameAndDocumentTypeName")
100     @WebResult(name = "rules")
101     @XmlElementWrapper(name = "rules", required = true)
102     @XmlElement(name = "rule", required = true)
103     @Cacheable(value=Rule.Cache.NAME, key="'templateName=' + #p0 + '|' + 'documentTypeName=' + #p1")
104 	List<Rule> getRulesByTemplateNameAndDocumentTypeName(@WebParam(name = "templateName") String templateName,
105             @WebParam(name = "documentTypeName") String documentTypeName)
106         throws RiceIllegalArgumentException;
107 
108     /**
109      * Gets a list of Rules with the specified templateId and documentTypeName.  Scales up the hierarchy of
110      * documentTypes
111      *
112      * @param templateName unique name for the Rule Template.  Cannot be null or empty
113      * @param documentTypeName documentTypeName for Rule.  Cannot be null or empty
114      * @param effectiveDate date for rule effectiveness. Can be null.  If null, current time is used.
115      *
116      * @return Rules with the passed in templateId, documentTypeName (or parent document type)or an empty list if none exist
117      *
118      * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException if {@code id} is null
119      */
120     @WebMethod(operationName = "getRulesByTemplateNameAndDocumentTypeNameAndEffectiveDate")
121     @WebResult(name = "rules")
122     @XmlElementWrapper(name = "rules", required = true)
123     @XmlElement(name = "rule", required = true)
124 	List<Rule> getRulesByTemplateNameAndDocumentTypeNameAndEffectiveDate(@WebParam(name = "templateName") String templateName,
125             @WebParam(name = "documentTypeName") String documentTypeName,
126             @XmlJavaTypeAdapter(value = DateTimeAdapter.class) @WebParam(name = "effectiveDate") DateTime effectiveDate)
127         throws RiceIllegalArgumentException;
128 
129     /**
130      * Query for rules based on the given search criteria which is a Map of rule field names to values.
131      *
132      * <p>
133      * This method returns it's results as a List of Rules that match the given search criteria.
134      * </p>
135      *
136      * @param queryByCriteria the criteria.  Cannot be null.
137      * @return a list of Rule objects in which the given criteria match Rule properties.  An empty list is returned if an invalid or
138      *         non-existent criteria is supplied.
139      */
140     @WebMethod(operationName = "findRules")
141     @WebResult(name = "findRules")
142     RuleQueryResults findRules(@WebParam(name = "query") QueryByCriteria queryByCriteria)
143         throws RiceIllegalArgumentException;
144 
145     /**
146      * Executes a simulation of a document to get all previous and future route information
147      *
148      * @param reportCriteria criteria for the rule report to follow
149      *
150      * @return list of Rules representing the results of the rule report
151      *
152      * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException if {@code reportCriteria} is null
153      */
154     @WebMethod(operationName = "ruleReport")
155     @WebResult(name = "rules")
156     @XmlElementWrapper(name = "rules", required = true)
157     @XmlElement(name = "rule", required = true)
158     List<Rule> ruleReport(
159             @WebParam(name = "ruleCriteria") RuleReportCriteria reportCriteria)
160             throws RiceIllegalArgumentException;
161 
162 
163     /**
164      * gets a RuleTemplate identified by the passed in id
165      *
166      * @param id unique id for the RuleTemplate
167      *
168      * @return RuleTemplate with the passed in unique id
169      *
170      * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException if {@code id} is null
171      * @throws org.kuali.rice.core.api.exception.RiceIllegalStateException if RuleTemplate does not exist
172      */
173     @WebMethod(operationName = "getRuleTemplate")
174     @WebResult(name = "ruleTemplate")
175     @Cacheable(value=RuleTemplate.Cache.NAME, key="'id=' + #p0")
176     RuleTemplate getRuleTemplate(@WebParam(name = "id") String id) throws RiceIllegalArgumentException;
177 
178     /**
179      * gets a RuleTemplate identified by the passed in name
180      *
181      * @param name unique name for the RuleTemplate
182      *
183      * @return RuleTemplate with the passed in unique name
184      *
185      * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException if {@code name} is null
186      * @throws org.kuali.rice.core.api.exception.RiceIllegalStateException if RuleTemplate does not exist
187      */
188     @WebMethod(operationName = "getRuleTemplateByName")
189     @WebResult(name = "ruleTemplate")
190     @Cacheable(value=RuleTemplate.Cache.NAME, key="'name=' + #p0")
191     RuleTemplate getRuleTemplateByName(@WebParam(name = "name") String name) throws RiceIllegalArgumentException;
192 
193     /**
194      * Query for rules based on the given search criteria which is a Map of ruleTemplate field names to values.
195      *
196      * <p>
197      * This method returns it's results as a List of RuleTemplates that match the given search criteria.
198      * </p>
199      *
200      * @param queryByCriteria the criteria.  Cannot be null.
201      * @return a list of RuleTemplate objects in which the given criteria match RuleTemplate properties.
202      * An empty list is returned if an invalid or non-existent criteria is supplied.
203      */
204     @WebMethod(operationName = "findRuleTemplates")
205     @WebResult(name = "findRuleTemplates")
206     RuleTemplateQueryResults findRuleTemplates(@WebParam(name = "query") QueryByCriteria queryByCriteria)
207         throws RiceIllegalArgumentException;
208 
209     /**
210      * gets a RuleResponsibility identified by the passed in responsibilityId
211      *
212      * @param responsibilityId unique id for the RuleResponsibility
213      *
214      * @return RuleResponsibility with the passed in unique responsibilityId
215      *
216      * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException if {@code id} is null
217      * @throws org.kuali.rice.core.api.exception.RiceIllegalStateException if RuleResponsibility does not exist
218      */
219     @WebMethod(operationName = "getRuleResponsibility")
220     @WebResult(name = "ruleResponsibility")
221     @Cacheable(value=RuleResponsibility.Cache.NAME, key="'responsibilityId=' + #p0")
222     RuleResponsibility getRuleResponsibility(@WebParam(name = "responsibilityId") String responsibilityId) throws RiceIllegalArgumentException;
223 
224     /**
225      * gets a RuleDelegations identified by the passed in id for responsibility
226      *
227      * @param id unique id for the RuleDelegation's Responsibility
228      *
229      * @return List of RuleDelegations with the provided ReponsibilityId.  Returns an empty list if none exist.
230      *
231      * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException if {@code id} is null
232      */
233     @WebMethod(operationName = "getRuleDelegationsByResponsiblityId")
234     @XmlElementWrapper(name = "ruleDelegations", required = true)
235     @XmlElement(name = "ruleDelegation", required = false)
236     @WebResult(name = "ruleDelegations")
237     @Cacheable(value=RuleDelegation.Cache.NAME, key="'id=' + #p0")
238 	List<RuleDelegation> getRuleDelegationsByResponsibiltityId(@WebParam(name="id") String id)
239         throws RiceIllegalArgumentException;
240 }