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.kew.api.rule; 017 018 import org.joda.time.DateTime; 019 import org.kuali.rice.core.api.criteria.QueryByCriteria; 020 import org.kuali.rice.core.api.exception.RiceIllegalArgumentException; 021 import org.kuali.rice.core.api.exception.RiceIllegalStateException; 022 import org.kuali.rice.core.api.util.jaxb.DateTimeAdapter; 023 import org.kuali.rice.kew.api.KewApiConstants; 024 import org.springframework.cache.annotation.Cacheable; 025 026 import javax.jws.WebMethod; 027 import javax.jws.WebParam; 028 import javax.jws.WebResult; 029 import javax.jws.WebService; 030 import javax.jws.soap.SOAPBinding; 031 import javax.xml.bind.annotation.XmlElement; 032 import javax.xml.bind.annotation.XmlElementWrapper; 033 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; 034 import java.util.List; 035 036 @WebService(name = "ruleService", targetNamespace = KewApiConstants.Namespaces.KEW_NAMESPACE_2_0) 037 @SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED) 038 public interface RuleService { 039 /** 040 * gets a Rule identified by the passed in id 041 * 042 * @param id unique id for the Rule 043 * 044 * @return Rule with the passed in unique id 045 * 046 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException if {@code id} is null 047 * @throws org.kuali.rice.core.api.exception.RiceIllegalStateException if Rule does not exist 048 */ 049 @WebMethod(operationName = "getRule") 050 @WebResult(name = "rule") 051 @Cacheable(value=Rule.Cache.NAME, key="'id=' + #p0") 052 Rule getRule(@WebParam(name="id") String id) 053 throws RiceIllegalArgumentException, RiceIllegalStateException; 054 055 /** 056 * gets a Rule identified by the passed in rule name 057 * 058 * @param name name of the Rule 059 * 060 * @return Rule with the passed in unique id 061 * 062 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException if {@code name} is null 063 * @throws org.kuali.rice.core.api.exception.RiceIllegalStateException if Rule does not exist 064 */ 065 @WebMethod(operationName = "getRuleByName") 066 @WebResult(name = "rule") 067 @Cacheable(value=Rule.Cache.NAME, key="'name=' + #p0") 068 Rule getRuleByName(@WebParam(name="name") String name) 069 throws RiceIllegalArgumentException, RiceIllegalStateException; 070 071 /** 072 * gets a list of Rules with the specified templateId 073 * 074 * @param templateId unique id for the Rule 075 * 076 * @return Rules with the passed in templateId, or an empty list if none exist 077 * 078 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException if {@code templateId} is null 079 */ 080 @WebMethod(operationName = "getRuleByTemplateId") 081 @WebResult(name = "rules") 082 @XmlElementWrapper(name = "rules", required = true) 083 @XmlElement(name = "rule", required = true) 084 @Cacheable(value=Rule.Cache.NAME, key="'templateId=' + #p0") 085 List<Rule> getRulesByTemplateId(@WebParam(name="templateId") String templateId) 086 throws RiceIllegalArgumentException; 087 088 /** 089 * Gets a list of Rules with the specified templateId and documentTypeName. Scales up the hierarchy of 090 * documentTypes 091 * 092 * @param templateName unique name for the Rule Template. Cannot be null or empty 093 * @param documentTypeName documentTypeName for Rule. Cannot be null or empty 094 * 095 * @return Rules with the passed in templateId, documentTypeName (or parent document type)or an empty list if none exist 096 * 097 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException if {@code id} is null 098 */ 099 @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 }