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.kuali.rice.core.api.CoreConstants;
019 import org.kuali.rice.core.api.mo.AbstractDataTransferObject;
020 import org.kuali.rice.core.api.mo.ModelBuilder;
021 import org.kuali.rice.core.api.util.jaxb.MapStringStringAdapter;
022 import org.w3c.dom.Element;
023
024 import javax.xml.bind.annotation.XmlAccessType;
025 import javax.xml.bind.annotation.XmlAccessorType;
026 import javax.xml.bind.annotation.XmlAnyElement;
027 import javax.xml.bind.annotation.XmlElement;
028 import javax.xml.bind.annotation.XmlElementWrapper;
029 import javax.xml.bind.annotation.XmlRootElement;
030 import javax.xml.bind.annotation.XmlType;
031 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
032 import java.io.Serializable;
033 import java.util.Collection;
034 import java.util.Collections;
035 import java.util.List;
036 import java.util.Map;
037
038 @XmlRootElement(name = RuleReportCriteria.Constants.ROOT_ELEMENT_NAME)
039 @XmlAccessorType(XmlAccessType.NONE)
040 @XmlType(name = RuleReportCriteria.Constants.TYPE_NAME, propOrder = {
041 RuleReportCriteria.Elements.RULE_DESCRIPTION,
042 RuleReportCriteria.Elements.DOCUMENT_TYPE_NAME,
043 RuleReportCriteria.Elements.RULE_TEMPLATE_NAME,
044 RuleReportCriteria.Elements.ACTION_REQUEST_CODES,
045 RuleReportCriteria.Elements.RESPONSIBLE_PRINCIPAL_ID,
046 RuleReportCriteria.Elements.RESPONSIBLE_GROUP_ID,
047 RuleReportCriteria.Elements.RESPONSIBLE_ROLE_NAME,
048 RuleReportCriteria.Elements.RULE_EXTENSIONS,
049 RuleReportCriteria.Elements.ACTIVE,
050 RuleReportCriteria.Elements.CONSIDER_GROUP_MEMBERSHIP,
051 RuleReportCriteria.Elements.INCLUDE_DELEGATIONS,
052 CoreConstants.CommonElements.FUTURE_ELEMENTS
053 })
054 public final class RuleReportCriteria
055 extends AbstractDataTransferObject
056 implements RuleReportCriteriaContract
057 {
058
059 @XmlElement(name = Elements.RULE_DESCRIPTION, required = false)
060 private final String ruleDescription;
061 @XmlElement(name = Elements.DOCUMENT_TYPE_NAME, required = false)
062 private final String documentTypeName;
063 @XmlElement(name = Elements.RULE_TEMPLATE_NAME, required = false)
064 private final String ruleTemplateName;
065 @XmlElementWrapper(name = Elements.ACTION_REQUEST_CODES, required = false)
066 @XmlElement(name = Elements.ACTION_REQUEST_CODE, required = false)
067 private final List<String> actionRequestCodes;
068 @XmlElement(name = Elements.RESPONSIBLE_PRINCIPAL_ID, required = false)
069 private final String responsiblePrincipalId;
070 @XmlElement(name = Elements.RESPONSIBLE_GROUP_ID, required = false)
071 private final String responsibleGroupId;
072 @XmlElement(name = Elements.RESPONSIBLE_ROLE_NAME, required = false)
073 private final String responsibleRoleName;
074 @XmlElement(name = Elements.RULE_EXTENSIONS, required = false)
075 @XmlJavaTypeAdapter(value = MapStringStringAdapter.class)
076 private final Map<String, String> ruleExtensions;
077 @XmlElement(name = Elements.ACTIVE, required = false)
078 private final boolean active;
079 @XmlElement(name = Elements.CONSIDER_GROUP_MEMBERSHIP, required = false)
080 private final boolean considerGroupMembership;
081 @XmlElement(name = Elements.INCLUDE_DELEGATIONS, required = false)
082 private final boolean includeDelegations;
083 @SuppressWarnings("unused")
084 @XmlAnyElement
085 private final Collection<Element> _futureElements = null;
086
087 /**
088 * Private constructor used only by JAXB.
089 *
090 */
091 private RuleReportCriteria() {
092 this.ruleDescription = null;
093 this.documentTypeName = null;
094 this.ruleTemplateName = null;
095 this.actionRequestCodes = null;
096 this.responsiblePrincipalId = null;
097 this.responsibleGroupId = null;
098 this.responsibleRoleName = null;
099 this.ruleExtensions = null;
100 this.active = false;
101 this.considerGroupMembership = false;
102 this.includeDelegations = false;
103 }
104
105 private RuleReportCriteria(Builder builder) {
106 this.ruleDescription = builder.getRuleDescription();
107 this.documentTypeName = builder.getDocumentTypeName();
108 this.ruleTemplateName = builder.getRuleTemplateName();
109 this.actionRequestCodes = builder.getActionRequestCodes();
110 this.responsiblePrincipalId = builder.getResponsiblePrincipalId();
111 this.responsibleGroupId = builder.getResponsibleGroupId();
112 this.responsibleRoleName = builder.getResponsibleRoleName();
113 this.ruleExtensions = builder.getRuleExtensions();
114 this.active = builder.isActive();
115 this.considerGroupMembership = builder.isConsiderGroupMembership();
116 this.includeDelegations = builder.isIncludeDelegations();
117 }
118
119 @Override
120 public String getRuleDescription() {
121 return this.ruleDescription;
122 }
123
124 @Override
125 public String getDocumentTypeName() {
126 return this.documentTypeName;
127 }
128
129 @Override
130 public String getRuleTemplateName() {
131 return this.ruleTemplateName;
132 }
133
134 @Override
135 public List<String> getActionRequestCodes() {
136 return this.actionRequestCodes;
137 }
138
139 @Override
140 public String getResponsiblePrincipalId() {
141 return this.responsiblePrincipalId;
142 }
143
144 @Override
145 public String getResponsibleGroupId() {
146 return this.responsibleGroupId;
147 }
148
149 @Override
150 public String getResponsibleRoleName() {
151 return this.responsibleRoleName;
152 }
153
154 @Override
155 public Map<String, String> getRuleExtensions() {
156 return this.ruleExtensions;
157 }
158
159 @Override
160 public boolean isActive() {
161 return this.active;
162 }
163
164 @Override
165 public boolean isConsiderGroupMembership() {
166 return this.considerGroupMembership;
167 }
168
169 @Override
170 public boolean isIncludeDelegations() {
171 return this.includeDelegations;
172 }
173
174
175 /**
176 * A builder which can be used to construct {@link RuleReportCriteria} instances. Enforces the constraints of the {@link RuleReportCriteriaContract}.
177 *
178 */
179 public final static class Builder
180 implements Serializable, ModelBuilder, RuleReportCriteriaContract
181 {
182
183 private String ruleDescription;
184 private String documentTypeName;
185 private String ruleTemplateName;
186 private List<String> actionRequestCodes;
187 private String responsiblePrincipalId;
188 private String responsibleGroupId;
189 private String responsibleRoleName;
190 private Map<String, String> ruleExtensions;
191 private boolean active;
192 private boolean considerGroupMembership;
193 private boolean includeDelegations;
194
195 private Builder() {
196 setActive(true);
197 setConsiderGroupMembership(true);
198 }
199
200 public static Builder create() {
201 return new Builder();
202 }
203
204 public static Builder create(RuleReportCriteriaContract contract) {
205 if (contract == null) {
206 throw new IllegalArgumentException("contract was null");
207 }
208 Builder builder = create();
209 builder.setRuleDescription(contract.getRuleDescription());
210 builder.setDocumentTypeName(contract.getDocumentTypeName());
211 builder.setRuleTemplateName(contract.getRuleTemplateName());
212 builder.setActionRequestCodes(contract.getActionRequestCodes());
213 builder.setResponsiblePrincipalId(contract.getResponsiblePrincipalId());
214 builder.setResponsibleGroupId(contract.getResponsibleGroupId());
215 builder.setResponsibleRoleName(contract.getResponsibleRoleName());
216 builder.setRuleExtensions(contract.getRuleExtensions());
217 builder.setActive(contract.isActive());
218 builder.setConsiderGroupMembership(contract.isConsiderGroupMembership());
219 builder.setIncludeDelegations(contract.isIncludeDelegations());
220 return builder;
221 }
222
223 public RuleReportCriteria build() {
224 return new RuleReportCriteria(this);
225 }
226
227 @Override
228 public String getRuleDescription() {
229 return this.ruleDescription;
230 }
231
232 @Override
233 public String getDocumentTypeName() {
234 return this.documentTypeName;
235 }
236
237 @Override
238 public String getRuleTemplateName() {
239 return this.ruleTemplateName;
240 }
241
242 @Override
243 public List<String> getActionRequestCodes() {
244 return this.actionRequestCodes;
245 }
246
247 @Override
248 public String getResponsiblePrincipalId() {
249 return this.responsiblePrincipalId;
250 }
251
252 @Override
253 public String getResponsibleGroupId() {
254 return this.responsibleGroupId;
255 }
256
257 @Override
258 public String getResponsibleRoleName() {
259 return this.responsibleRoleName;
260 }
261
262 @Override
263 public Map<String, String> getRuleExtensions() {
264 return this.ruleExtensions;
265 }
266
267 @Override
268 public boolean isActive() {
269 return this.active;
270 }
271
272 @Override
273 public boolean isConsiderGroupMembership() {
274 return this.considerGroupMembership;
275 }
276
277 @Override
278 public boolean isIncludeDelegations() {
279 return this.includeDelegations;
280 }
281
282 public void setRuleDescription(String ruleDescription) {
283
284 this.ruleDescription = ruleDescription;
285 }
286
287 public void setDocumentTypeName(String documentTypeName) {
288
289 this.documentTypeName = documentTypeName;
290 }
291
292 public void setRuleTemplateName(String ruleTemplateName) {
293
294 this.ruleTemplateName = ruleTemplateName;
295 }
296
297 public void setActionRequestCodes(List<String> actionRequestCodes) {
298
299 this.actionRequestCodes = actionRequestCodes;
300 }
301
302 public void setResponsiblePrincipalId(String responsiblePrincipalId) {
303
304 this.responsiblePrincipalId = responsiblePrincipalId;
305 }
306
307 public void setResponsibleGroupId(String responsibleGroupId) {
308
309 this.responsibleGroupId = responsibleGroupId;
310 }
311
312 public void setResponsibleRoleName(String responsibleRoleName) {
313
314 this.responsibleRoleName = responsibleRoleName;
315 }
316
317 public void setRuleExtensions(Map<String, String> ruleExtensions) {
318
319 this.ruleExtensions = Collections.unmodifiableMap(ruleExtensions);
320 }
321
322 public void setActive(boolean active) {
323
324 this.active = active;
325 }
326
327 public void setConsiderGroupMembership(boolean considerGroupMembership) {
328
329 this.considerGroupMembership = considerGroupMembership;
330 }
331
332 public void setIncludeDelegations(boolean includeDelegations) {
333
334 this.includeDelegations = includeDelegations;
335 }
336
337 }
338
339
340 /**
341 * Defines some internal constants used on this class.
342 *
343 */
344 static class Constants {
345
346 final static String ROOT_ELEMENT_NAME = "ruleReportCriteria";
347 final static String TYPE_NAME = "RuleReportCriteriaType";
348
349 }
350
351
352 /**
353 * A private class which exposes constants which define the XML element names to use when this object is marshalled to XML.
354 *
355 */
356 static class Elements {
357
358 final static String RULE_DESCRIPTION = "ruleDescription";
359 final static String DOCUMENT_TYPE_NAME = "documentTypeName";
360 final static String RULE_TEMPLATE_NAME = "ruleTemplateName";
361 final static String ACTION_REQUEST_CODES = "actionRequestCodes";
362 final static String ACTION_REQUEST_CODE = "actionRequestCode";
363 final static String RESPONSIBLE_PRINCIPAL_ID = "responsiblePrincipalId";
364 final static String RESPONSIBLE_GROUP_ID = "responsibleGroupId";
365 final static String RESPONSIBLE_ROLE_NAME = "responsibleRoleName";
366 final static String RULE_EXTENSIONS = "ruleExtensions";
367 final static String ACTIVE = "active";
368 final static String CONSIDER_GROUP_MEMBERSHIP = "considerGroupMembership";
369 final static String INCLUDE_DELEGATIONS = "includeDelegations";
370
371 }
372
373 }