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 }