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