001    package org.kuali.rice.kew.api.action;
002    
003    import java.io.Serializable;
004    import java.util.Collection;
005    import javax.xml.bind.annotation.XmlAccessType;
006    import javax.xml.bind.annotation.XmlAccessorType;
007    import javax.xml.bind.annotation.XmlAnyElement;
008    import javax.xml.bind.annotation.XmlElement;
009    import javax.xml.bind.annotation.XmlRootElement;
010    import javax.xml.bind.annotation.XmlType;
011    
012    import org.apache.commons.lang.StringUtils;
013    import org.joda.time.DateTime;
014    import org.kuali.rice.core.api.CoreConstants;
015    import org.kuali.rice.core.api.mo.AbstractDataTransferObject;
016    import org.kuali.rice.core.api.mo.ModelBuilder;
017    import org.w3c.dom.Element;
018    
019    @XmlRootElement(name = ActionItem.Constants.ROOT_ELEMENT_NAME)
020    @XmlAccessorType(XmlAccessType.NONE)
021    @XmlType(name = ActionItem.Constants.TYPE_NAME, propOrder = {
022        ActionItem.Elements.ID,
023        ActionItem.Elements.DATE_TIME_ASSIGNED,
024        ActionItem.Elements.ACTION_REQUEST_CD,
025        ActionItem.Elements.ACTION_REQUEST_ID,
026        ActionItem.Elements.DOCUMENT_ID,
027        ActionItem.Elements.DOC_TITLE,
028        ActionItem.Elements.DOC_LABEL,
029        ActionItem.Elements.DOC_HANDLER_U_R_L,
030        ActionItem.Elements.DOC_NAME,
031        ActionItem.Elements.RESPONSIBILITY_ID,
032        ActionItem.Elements.ROLE_NAME,
033        ActionItem.Elements.DATE_ASSIGNED_STRING,
034        ActionItem.Elements.ACTION_TO_TAKE,
035        ActionItem.Elements.DELEGATION_TYPE,
036        ActionItem.Elements.ACTION_ITEM_INDEX,
037        ActionItem.Elements.GROUP_ID,
038        ActionItem.Elements.PRINCIPAL_ID,
039        ActionItem.Elements.DELEGATOR_GROUP_ID,
040        ActionItem.Elements.DELEGATOR_PRINCIPAL_ID,
041        CoreConstants.CommonElements.FUTURE_ELEMENTS
042    })
043    public final class ActionItem
044        extends AbstractDataTransferObject
045        implements ActionItemContract
046    {
047    
048        @XmlElement(name = Elements.ID, required = false)
049        private final String id;
050        @XmlElement(name = Elements.DATE_TIME_ASSIGNED, required = true)
051        private final DateTime dateTimeAssigned;
052        @XmlElement(name = Elements.ACTION_REQUEST_CD, required = true)
053        private final String actionRequestCd;
054        @XmlElement(name = Elements.ACTION_REQUEST_ID, required = true)
055        private final String actionRequestId;
056        @XmlElement(name = Elements.DOCUMENT_ID, required = true)
057        private final String documentId;
058        @XmlElement(name = Elements.DOC_TITLE, required = true)
059        private final String docTitle;
060        @XmlElement(name = Elements.DOC_LABEL, required = true)
061        private final String docLabel;
062        @XmlElement(name = Elements.DOC_HANDLER_U_R_L, required = true)
063        private final String docHandlerURL;
064        @XmlElement(name = Elements.DOC_NAME, required = true)
065        private final String docName;
066        @XmlElement(name = Elements.RESPONSIBILITY_ID, required = true)
067        private final String responsibilityId;
068        @XmlElement(name = Elements.ROLE_NAME, required = false)
069        private final String roleName;
070        @XmlElement(name = Elements.DATE_ASSIGNED_STRING, required = false)
071        private final String dateAssignedString;
072        @XmlElement(name = Elements.ACTION_TO_TAKE, required = false)
073        private final String actionToTake;
074        @XmlElement(name = Elements.DELEGATION_TYPE, required = false)
075        private final String delegationType;
076        @XmlElement(name = Elements.ACTION_ITEM_INDEX, required = false)
077        private final Integer actionItemIndex;
078        @XmlElement(name = Elements.GROUP_ID, required = false)
079        private final String groupId;
080        @XmlElement(name = Elements.PRINCIPAL_ID, required = true)
081        private final String principalId;
082        @XmlElement(name = Elements.DELEGATOR_GROUP_ID, required = false)
083        private final String delegatorGroupId;
084        @XmlElement(name = Elements.DELEGATOR_PRINCIPAL_ID, required = false)
085        private final String delegatorPrincipalId;
086        @SuppressWarnings("unused")
087        @XmlAnyElement
088        private final Collection<Element> _futureElements = null;
089    
090        /**
091         * Private constructor used only by JAXB.
092         * 
093         */
094        private ActionItem() {
095            this.id = null;
096            this.dateTimeAssigned = null;
097            this.actionRequestCd = null;
098            this.actionRequestId = null;
099            this.documentId = null;
100            this.docTitle = null;
101            this.docLabel = null;
102            this.docHandlerURL = null;
103            this.docName = null;
104            this.responsibilityId = null;
105            this.roleName = null;
106            this.dateAssignedString = null;
107            this.actionToTake = null;
108            this.delegationType = null;
109            this.actionItemIndex = null;
110            this.groupId = null;
111            this.principalId = null;
112            this.delegatorGroupId = null;
113            this.delegatorPrincipalId = null;
114        }
115    
116        private ActionItem(Builder builder) {
117            this.id = builder.getId();
118            this.dateTimeAssigned = builder.getDateTimeAssigned();
119            this.actionRequestCd = builder.getActionRequestCd();
120            this.actionRequestId = builder.getActionRequestId();
121            this.documentId = builder.getDocumentId();
122            this.docTitle = builder.getDocTitle();
123            this.docLabel = builder.getDocLabel();
124            this.docHandlerURL = builder.getDocHandlerURL();
125            this.docName = builder.getDocName();
126            this.responsibilityId = builder.getResponsibilityId();
127            this.roleName = builder.getRoleName();
128            this.dateAssignedString = builder.getDateAssignedString();
129            this.actionToTake = builder.getActionToTake();
130            this.delegationType = builder.getDelegationType();
131            this.actionItemIndex = builder.getActionItemIndex();
132            this.groupId = builder.getGroupId();
133            this.principalId = builder.getPrincipalId();
134            this.delegatorGroupId = builder.getDelegatorGroupId();
135            this.delegatorPrincipalId = builder.getDelegatorPrincipalId();
136        }
137    
138        @Override
139        public String getId() {
140            return this.id;
141        }
142    
143        @Override
144        public DateTime getDateTimeAssigned() {
145            return this.dateTimeAssigned;
146        }
147    
148        @Override
149        public String getActionRequestCd() {
150            return this.actionRequestCd;
151        }
152    
153        @Override
154        public String getActionRequestId() {
155            return this.actionRequestId;
156        }
157    
158        @Override
159        public String getDocumentId() {
160            return this.documentId;
161        }
162    
163        @Override
164        public String getDocTitle() {
165            return this.docTitle;
166        }
167    
168        @Override
169        public String getDocLabel() {
170            return this.docLabel;
171        }
172    
173        @Override
174        public String getDocHandlerURL() {
175            return this.docHandlerURL;
176        }
177    
178        @Override
179        public String getDocName() {
180            return this.docName;
181        }
182    
183        @Override
184        public String getResponsibilityId() {
185            return this.responsibilityId;
186        }
187    
188        @Override
189        public String getRoleName() {
190            return this.roleName;
191        }
192    
193        @Override
194        public String getDateAssignedString() {
195            return this.dateAssignedString;
196        }
197    
198        @Override
199        public String getActionToTake() {
200            return this.actionToTake;
201        }
202    
203        @Override
204        public String getDelegationType() {
205            return this.delegationType;
206        }
207    
208        @Override
209        public Integer getActionItemIndex() {
210            return this.actionItemIndex;
211        }
212    
213        @Override
214        public String getGroupId() {
215            return this.groupId;
216        }
217    
218        @Override
219        public String getPrincipalId() {
220            return this.principalId;
221        }
222    
223        @Override
224        public String getDelegatorGroupId() {
225            return this.delegatorGroupId;
226        }
227    
228        @Override
229        public String getDelegatorPrincipalId() {
230            return this.delegatorPrincipalId;
231        }
232    
233    
234        /**
235         * A builder which can be used to construct {@link ActionItem} instances.  Enforces the constraints of the {@link ActionItemContract}.
236         * 
237         */
238        public final static class Builder
239            implements Serializable, ModelBuilder, ActionItemContract
240        {
241    
242            private String id;
243            private DateTime dateTimeAssigned;
244            private String actionRequestCd;
245            private String actionRequestId;
246            private String documentId;
247            private String docTitle;
248            private String docLabel;
249            private String docHandlerURL;
250            private String docName;
251            private String responsibilityId;
252            private String roleName;
253            private String dateAssignedString;
254            private String actionToTake;
255            private String delegationType;
256            private Integer actionItemIndex;
257            private String groupId;
258            private String principalId;
259            private String delegatorGroupId;
260            private String delegatorPrincipalId;
261    
262            private Builder(String documentId, String actionRequestCd, String actionRequestId,
263                    DateTime dateTimeAssigned, String docLabel, String docHanderlURL,
264                    String docName, String responsibilityId, String principalId) {
265                setDocumentId(documentId);
266                setActionRequestCd(actionRequestCd);
267                setActionRequestId(actionRequestId);
268                setDateTimeAssigned(dateTimeAssigned);
269                setDocLabel(docLabel);
270                setDocHandlerURL(docHanderlURL);
271                setDocName(docName);
272                setResponsibilityId(responsibilityId);
273                setPrincipalId(principalId);
274            }
275    
276            public static Builder create(String documentId, String actionRequestCd, String actionRequestId,
277                    DateTime dateTimeAssigned, String docLabel, String docHanderlURL,
278                    String docName, String responsibilityId, String principalId) {
279                return new Builder(documentId, actionRequestCd, actionRequestId, dateTimeAssigned, docLabel,
280                        docHanderlURL, docName, responsibilityId, principalId);
281            }
282    
283            public static Builder create(ActionItemContract contract) {
284                if (contract == null) {
285                    throw new IllegalArgumentException("contract was null");
286                }
287                Builder builder = create(contract.getDocumentId(), contract.getActionRequestCd(), contract.getActionRequestId(),
288                        contract.getDateTimeAssigned(), contract.getDocLabel(), contract.getDocHandlerURL(), contract.getDocName(),
289                        contract.getResponsibilityId(), contract.getPrincipalId());
290                builder.setId(contract.getId());
291                builder.setRoleName(contract.getRoleName());
292                builder.setDocTitle(contract.getDocTitle());
293                builder.setDateAssignedString(contract.getDateAssignedString());
294                builder.setActionToTake(contract.getActionToTake());
295                builder.setDelegationType(contract.getDelegationType());
296                builder.setActionItemIndex(contract.getActionItemIndex());
297                builder.setGroupId(contract.getGroupId());
298                builder.setPrincipalId(contract.getPrincipalId());
299                builder.setDelegatorGroupId(contract.getDelegatorGroupId());
300                builder.setDelegatorPrincipalId(contract.getDelegatorPrincipalId());
301                return builder;
302            }
303    
304            public ActionItem build() {
305                return new ActionItem(this);
306            }
307    
308            @Override
309            public String getId() {
310                return this.id;
311            }
312    
313            @Override
314            public DateTime getDateTimeAssigned() {
315                return this.dateTimeAssigned;
316            }
317    
318            @Override
319            public String getActionRequestCd() {
320                return this.actionRequestCd;
321            }
322    
323            @Override
324            public String getActionRequestId() {
325                return this.actionRequestId;
326            }
327    
328            @Override
329            public String getDocumentId() {
330                return this.documentId;
331            }
332    
333            @Override
334            public String getDocTitle() {
335                return this.docTitle;
336            }
337    
338            @Override
339            public String getDocLabel() {
340                return this.docLabel;
341            }
342    
343            @Override
344            public String getDocHandlerURL() {
345                return this.docHandlerURL;
346            }
347    
348            @Override
349            public String getDocName() {
350                return this.docName;
351            }
352    
353            @Override
354            public String getResponsibilityId() {
355                return this.responsibilityId;
356            }
357    
358            @Override
359            public String getRoleName() {
360                return this.roleName;
361            }
362    
363            @Override
364            public String getDateAssignedString() {
365                return this.dateAssignedString;
366            }
367    
368            @Override
369            public String getActionToTake() {
370                return this.actionToTake;
371            }
372    
373            @Override
374            public String getDelegationType() {
375                return this.delegationType;
376            }
377    
378            @Override
379            public Integer getActionItemIndex() {
380                return this.actionItemIndex;
381            }
382    
383            @Override
384            public String getGroupId() {
385                return this.groupId;
386            }
387    
388            @Override
389            public String getPrincipalId() {
390                return this.principalId;
391            }
392    
393            @Override
394            public String getDelegatorGroupId() {
395                return this.delegatorGroupId;
396            }
397    
398            @Override
399            public String getDelegatorPrincipalId() {
400                return this.delegatorPrincipalId;
401            }
402    
403            public void setId(String id) {
404                if (StringUtils.isWhitespace(id)) {
405                    throw new IllegalArgumentException("id is blank");
406                }
407                this.id = id;
408            }
409    
410            public void setDateTimeAssigned(DateTime dateTimeAssigned) {
411                if (dateTimeAssigned == null) {
412                    throw new IllegalArgumentException("dateTimeAssigned is null");
413                }
414                this.dateTimeAssigned = dateTimeAssigned;
415            }
416    
417            public void setActionRequestCd(String actionRequestCd) {
418                if (StringUtils.isBlank(actionRequestCd)) {
419                    throw new IllegalArgumentException("actionRequestCd is blank");
420                }
421                this.actionRequestCd = actionRequestCd;
422            }
423    
424            public void setActionRequestId(String actionRequestId) {
425                if (StringUtils.isBlank(actionRequestId)) {
426                    throw new IllegalArgumentException("actionRequestId is blank");
427                }
428                this.actionRequestId = actionRequestId;
429            }
430    
431            public void setDocumentId(String documentId) {
432                if (StringUtils.isBlank(documentId)) {
433                    throw new IllegalArgumentException("documentId is blank");
434                }
435                this.documentId = documentId;
436            }
437    
438            public void setDocTitle(String docTitle) {
439                if (StringUtils.isBlank(docTitle)) {
440                    throw new IllegalArgumentException("docTitle is blank");
441                }
442                this.docTitle = docTitle;
443            }
444    
445            public void setDocLabel(String docLabel) {
446                if (StringUtils.isBlank(docLabel)) {
447                    throw new IllegalArgumentException("docLabel is blank");
448                }
449                this.docLabel = docLabel;
450            }
451    
452            public void setDocHandlerURL(String docHandlerURL) {
453                if (StringUtils.isBlank(docHandlerURL)) {
454                    throw new IllegalArgumentException("docHandlerURL is blank");
455                }
456                this.docHandlerURL = docHandlerURL;
457            }
458    
459            public void setDocName(String docName) {
460                if (StringUtils.isBlank(docName)) {
461                    throw new IllegalArgumentException("docName is blank");
462                }
463                this.docName = docName;
464            }
465    
466            public void setResponsibilityId(String responsibilityId) {
467                if (StringUtils.isBlank(responsibilityId)) {
468                    throw new IllegalArgumentException("responsibilityId is blank");
469                }
470                this.responsibilityId = responsibilityId;
471            }
472    
473            public void setRoleName(String roleName) {
474                this.roleName = roleName;
475            }
476    
477            public void setDateAssignedString(String dateAssignedString) {
478                this.dateAssignedString = dateAssignedString;
479            }
480    
481            public void setActionToTake(String actionToTake) {
482                this.actionToTake = actionToTake;
483            }
484    
485            public void setDelegationType(String delegationType) {
486                this.delegationType = delegationType;
487            }
488    
489            public void setActionItemIndex(Integer actionItemIndex) {
490                this.actionItemIndex = actionItemIndex;
491            }
492    
493            public void setGroupId(String groupId) {
494                this.groupId = groupId;
495            }
496    
497            public void setPrincipalId(String principalId) {
498                if (StringUtils.isBlank(principalId)) {
499                    throw new IllegalArgumentException("principalId is blank");
500                }
501                this.principalId = principalId;
502            }
503    
504            public void setDelegatorGroupId(String delegatorGroupId) {
505                this.delegatorGroupId = delegatorGroupId;
506            }
507    
508            public void setDelegatorPrincipalId(String delegatorPrincipalId) {
509                this.delegatorPrincipalId = delegatorPrincipalId;
510            }
511    
512        }
513    
514    
515        /**
516         * Defines some internal constants used on this class.
517         * 
518         */
519        static class Constants {
520    
521            final static String ROOT_ELEMENT_NAME = "actionItem";
522            final static String TYPE_NAME = "ActionItemType";
523    
524        }
525    
526    
527        /**
528         * A private class which exposes constants which define the XML element names to use when this object is marshalled to XML.
529         * 
530         */
531        static class Elements {
532    
533            final static String ID = "id";
534            final static String DATE_TIME_ASSIGNED = "dateTimeAssigned";
535            final static String ACTION_REQUEST_CD = "actionRequestCd";
536            final static String ACTION_REQUEST_ID = "actionRequestId";
537            final static String DOCUMENT_ID = "documentId";
538            final static String DOC_TITLE = "docTitle";
539            final static String DOC_LABEL = "docLabel";
540            final static String DOC_HANDLER_U_R_L = "docHandlerURL";
541            final static String DOC_NAME = "docName";
542            final static String RESPONSIBILITY_ID = "responsibilityId";
543            final static String ROLE_NAME = "roleName";
544            final static String DATE_ASSIGNED_STRING = "dateAssignedString";
545            final static String ACTION_TO_TAKE = "actionToTake";
546            final static String DELEGATION_TYPE = "delegationType";
547            final static String ACTION_ITEM_INDEX = "actionItemIndex";
548            final static String GROUP_ID = "groupId";
549            final static String PRINCIPAL_ID = "principalId";
550            final static String DELEGATOR_GROUP_ID = "delegatorGroupId";
551            final static String DELEGATOR_PRINCIPAL_ID = "delegatorPrincipalId";
552    
553        }
554    
555    }