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