001 /**
002 * Copyright 2005-2011 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 if (StringUtils.isBlank(docHandlerURL)) {
467 throw new IllegalArgumentException("docHandlerURL is blank");
468 }
469 this.docHandlerURL = docHandlerURL;
470 }
471
472 public void setDocName(String docName) {
473 if (StringUtils.isBlank(docName)) {
474 throw new IllegalArgumentException("docName is blank");
475 }
476 this.docName = docName;
477 }
478
479 public void setResponsibilityId(String responsibilityId) {
480 if (StringUtils.isBlank(responsibilityId)) {
481 throw new IllegalArgumentException("responsibilityId is blank");
482 }
483 this.responsibilityId = responsibilityId;
484 }
485
486 public void setRoleName(String roleName) {
487 this.roleName = roleName;
488 }
489
490 public void setDateAssignedString(String dateAssignedString) {
491 this.dateAssignedString = dateAssignedString;
492 }
493
494 public void setActionToTake(String actionToTake) {
495 this.actionToTake = actionToTake;
496 }
497
498 public void setDelegationType(DelegationType delegationType) {
499 this.delegationType = delegationType;
500 }
501
502 public void setActionItemIndex(Integer actionItemIndex) {
503 this.actionItemIndex = actionItemIndex;
504 }
505
506 public void setGroupId(String groupId) {
507 this.groupId = groupId;
508 }
509
510 public void setPrincipalId(String principalId) {
511 if (StringUtils.isBlank(principalId)) {
512 throw new IllegalArgumentException("principalId is blank");
513 }
514 this.principalId = principalId;
515 }
516
517 public void setDelegatorGroupId(String delegatorGroupId) {
518 this.delegatorGroupId = delegatorGroupId;
519 }
520
521 public void setDelegatorPrincipalId(String delegatorPrincipalId) {
522 this.delegatorPrincipalId = delegatorPrincipalId;
523 }
524
525 }
526
527
528 /**
529 * Defines some internal constants used on this class.
530 *
531 */
532 static class Constants {
533
534 final static String ROOT_ELEMENT_NAME = "actionItem";
535 final static String TYPE_NAME = "ActionItemType";
536
537 }
538
539
540 /**
541 * A private class which exposes constants which define the XML element names to use when this object is marshalled to XML.
542 *
543 */
544 static class Elements {
545
546 final static String ID = "id";
547 final static String DATE_TIME_ASSIGNED = "dateTimeAssigned";
548 final static String ACTION_REQUEST_CD = "actionRequestCd";
549 final static String ACTION_REQUEST_ID = "actionRequestId";
550 final static String DOCUMENT_ID = "documentId";
551 final static String DOC_TITLE = "docTitle";
552 final static String DOC_LABEL = "docLabel";
553 final static String DOC_HANDLER_U_R_L = "docHandlerURL";
554 final static String DOC_NAME = "docName";
555 final static String RESPONSIBILITY_ID = "responsibilityId";
556 final static String ROLE_NAME = "roleName";
557 final static String DATE_ASSIGNED_STRING = "dateAssignedString";
558 final static String ACTION_TO_TAKE = "actionToTake";
559 final static String DELEGATION_TYPE = "delegationType";
560 final static String ACTION_ITEM_INDEX = "actionItemIndex";
561 final static String GROUP_ID = "groupId";
562 final static String PRINCIPAL_ID = "principalId";
563 final static String DELEGATOR_GROUP_ID = "delegatorGroupId";
564 final static String DELEGATOR_PRINCIPAL_ID = "delegatorPrincipalId";
565
566 }
567
568 }