001 /** 002 * Copyright 2005-2014 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.preferences; 017 018 import java.io.Serializable; 019 import java.util.Collection; 020 import java.util.Collections; 021 import java.util.HashMap; 022 import java.util.Map; 023 024 import javax.xml.bind.annotation.XmlAccessType; 025 import javax.xml.bind.annotation.XmlAccessorType; 026 import javax.xml.bind.annotation.XmlAnyElement; 027 import javax.xml.bind.annotation.XmlElement; 028 import javax.xml.bind.annotation.XmlRootElement; 029 import javax.xml.bind.annotation.XmlType; 030 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; 031 032 import org.apache.commons.lang.StringUtils; 033 import org.kuali.rice.core.api.CoreConstants; 034 import org.kuali.rice.core.api.mo.AbstractDataTransferObject; 035 import org.kuali.rice.core.api.mo.ModelBuilder; 036 import org.kuali.rice.core.api.util.jaxb.MapStringStringAdapter; 037 import org.kuali.rice.core.api.util.jaxb.MultiValuedStringMapAdapter; 038 import org.kuali.rice.kew.api.KewApiConstants; 039 import org.w3c.dom.Element; 040 041 /** 042 * An immutable data transfer object implementing {@link PreferencesContract}. 043 * 044 * p>When loaded, Preferences could be in a state where they require being saved to the database. 045 * If this is the case then {{@link #requiresSave} will evaluate to true. 046 * 047 * @see PreferencesContract 048 * 049 * @author Kuali Rice Team (rice.collab@kuali.org) 050 */ 051 @XmlRootElement(name = Preferences.Constants.ROOT_ELEMENT_NAME) 052 @XmlAccessorType(XmlAccessType.NONE) 053 @XmlType(name = Preferences.Constants.TYPE_NAME, propOrder = { 054 Preferences.Elements.REQUIRES_SAVE, 055 Preferences.Elements.EMAIL_NOTIFICATION, 056 Preferences.Elements.NOTIFY_PRIMARY_DELEGATION, 057 Preferences.Elements.NOTIFY_SECONDARY_DELEGATION, 058 Preferences.Elements.OPEN_NEW_WINDOW, 059 Preferences.Elements.SHOW_ACTION_REQUESTED, 060 Preferences.Elements.SHOW_DATE_CREATED, 061 Preferences.Elements.SHOW_DOCUMENT_STATUS, 062 Preferences.Elements.SHOW_APP_DOC_STATUS, 063 Preferences.Elements.SHOW_DOC_TYPE, 064 Preferences.Elements.SHOW_INITIATOR, 065 Preferences.Elements.SHOW_DOC_TITLE, 066 Preferences.Elements.SHOW_WORKGROUP_REQUEST, 067 Preferences.Elements.SHOW_DELEGATOR, 068 Preferences.Elements.SHOW_CLEAR_FYI, 069 Preferences.Elements.PAGE_SIZE, 070 Preferences.Elements.REFRESH_RATE, 071 Preferences.Elements.COLOR_SAVED, 072 Preferences.Elements.COLOR_INITIATED, 073 Preferences.Elements.COLOR_DISAPPROVED, 074 Preferences.Elements.COLOR_ENROUTE, 075 Preferences.Elements.COLOR_APPROVED, 076 Preferences.Elements.COLOR_FINAL, 077 Preferences.Elements.COLOR_DISAPPROVE_CANCEL, 078 Preferences.Elements.COLOR_PROCESSED, 079 Preferences.Elements.COLOR_EXCEPTION, 080 Preferences.Elements.COLOR_CANCELED, 081 Preferences.Elements.DELEGATOR_FILTER, 082 Preferences.Elements.USE_OUTBOX, 083 Preferences.Elements.SHOW_DATE_APPROVED, 084 Preferences.Elements.SHOW_CURRENT_NODE, 085 Preferences.Elements.PRIMARY_DELEGATE_FILTER, 086 Preferences.Elements.NOTIFY_ACKNOWLEDGE, 087 Preferences.Elements.NOTIFY_APPROVE, 088 Preferences.Elements.NOTIFY_COMPLETE, 089 Preferences.Elements.NOTIFY_FYI, 090 Preferences.Elements.DOCUMENT_TYPE_NOTIFICATION_PREFERENCES, 091 Preferences.Elements.DOCUMENT_TYPE_NOTIFICATION_PREFERENCE_MAP, 092 CoreConstants.CommonElements.FUTURE_ELEMENTS 093 }) 094 public final class Preferences extends AbstractDataTransferObject implements PreferencesContract { 095 096 private static final long serialVersionUID = 642820621349964439L; 097 098 @XmlElement(name = Elements.REQUIRES_SAVE) 099 private final boolean requiresSave; 100 @XmlElement(name = Elements.EMAIL_NOTIFICATION) 101 private final String emailNotification; 102 @XmlElement(name = Elements.NOTIFY_PRIMARY_DELEGATION) 103 private final String notifyPrimaryDelegation; 104 @XmlElement(name = Elements.NOTIFY_SECONDARY_DELEGATION) 105 private final String notifySecondaryDelegation; 106 @XmlElement(name = Elements.OPEN_NEW_WINDOW) 107 private final String openNewWindow; 108 @XmlElement(name = Elements.SHOW_ACTION_REQUESTED) 109 private final String showActionRequested; 110 @XmlElement(name = Elements.SHOW_DATE_CREATED) 111 private final String showDateCreated; 112 @XmlElement(name = Elements.SHOW_DOCUMENT_STATUS) 113 private final String showDocumentStatus; 114 @XmlElement(name = Elements.SHOW_APP_DOC_STATUS) 115 private final String showAppDocStatus; 116 @XmlElement(name = Elements.SHOW_DOC_TYPE) 117 private final String showDocType; 118 @XmlElement(name = Elements.SHOW_INITIATOR) 119 private final String showInitiator; 120 @XmlElement(name = Elements.SHOW_DOC_TITLE) 121 private final String showDocTitle; 122 @XmlElement(name = Elements.SHOW_WORKGROUP_REQUEST) 123 private final String showWorkgroupRequest; 124 @XmlElement(name = Elements.SHOW_DELEGATOR) 125 private final String showDelegator; 126 @XmlElement(name = Elements.SHOW_CLEAR_FYI) 127 private final String showClearFyi; 128 @XmlElement(name = Elements.PAGE_SIZE) 129 private final String pageSize; 130 @XmlElement(name = Elements.REFRESH_RATE) 131 private final String refreshRate; 132 @XmlElement(name = Elements.COLOR_SAVED) 133 private final String colorSaved; 134 @XmlElement(name = Elements.COLOR_INITIATED) 135 private final String colorInitiated; 136 @XmlElement(name = Elements.COLOR_DISAPPROVED) 137 private final String colorDisapproved; 138 @XmlElement(name = Elements.COLOR_ENROUTE) 139 private final String colorEnroute; 140 @XmlElement(name = Elements.COLOR_APPROVED) 141 private final String colorApproved; 142 @XmlElement(name = Elements.COLOR_FINAL) 143 private final String colorFinal; 144 @XmlElement(name = Elements.COLOR_DISAPPROVE_CANCEL) 145 private final String colorDisapproveCancel; 146 @XmlElement(name = Elements.COLOR_PROCESSED) 147 private final String colorProcessed; 148 @XmlElement(name = Elements.COLOR_EXCEPTION) 149 private final String colorException; 150 @XmlElement(name = Elements.COLOR_CANCELED) 151 private final String colorCanceled; 152 @XmlElement(name = Elements.DELEGATOR_FILTER) 153 private final String delegatorFilter; 154 @XmlElement(name = Elements.USE_OUTBOX) 155 private final String useOutbox; 156 @XmlElement(name = Elements.SHOW_DATE_APPROVED) 157 private final String showDateApproved; 158 @XmlElement(name = Elements.SHOW_CURRENT_NODE) 159 private final String showCurrentNode; 160 @XmlElement(name = Elements.PRIMARY_DELEGATE_FILTER) 161 private final String primaryDelegateFilter; 162 @XmlElement(name = Elements.NOTIFY_ACKNOWLEDGE) 163 private final String notifyAcknowledge; 164 @XmlElement(name = Elements.NOTIFY_APPROVE) 165 private final String notifyApprove; 166 167 //TODO: fix this type in Rice 3.0 168 @XmlElement(name = Elements.NOTIFY_COMPLETE) 169 private final String notifyCompelte; 170 @XmlElement(name = Elements.NOTIFY_FYI) 171 private final String notifyFYI; 172 173 /* 174 * @Deprecated for 2.1.1. Invalid @XmlJavaTypeAdapter. Use documentTypeNotitificationPreferenceMap instead. 175 */ 176 @XmlElement(name = Elements.DOCUMENT_TYPE_NOTIFICATION_PREFERENCES) 177 @XmlJavaTypeAdapter(MultiValuedStringMapAdapter.class) 178 @Deprecated 179 private Map<String, String> documentTypeNotificationPreferences; 180 181 @XmlElement(name = Elements.DOCUMENT_TYPE_NOTIFICATION_PREFERENCE_MAP) 182 @XmlJavaTypeAdapter(MapStringStringAdapter.class) 183 private Map<String, String> documentTypeNotificationPreferenceMap; 184 185 @SuppressWarnings("unused") 186 @XmlAnyElement 187 private final Collection<Element> _futureElements = null; 188 189 private Preferences() { 190 this.emailNotification = null; 191 this.notifyPrimaryDelegation = null; 192 this.notifySecondaryDelegation = null; 193 this.openNewWindow = null; 194 this.showActionRequested = null; 195 this.showDateCreated = null; 196 this.showDocumentStatus = null; 197 this.showAppDocStatus = null; 198 this.showDocType = null; 199 this.showInitiator = null; 200 this.showDocTitle = null; 201 this.showWorkgroupRequest = null; 202 this.showDelegator = null; 203 this.showClearFyi = null; 204 this.pageSize = null; 205 this.refreshRate = null; 206 this.colorSaved = null; 207 this.colorInitiated = null; 208 this.colorDisapproved = null; 209 this.colorEnroute = null; 210 this.colorApproved = null; 211 this.colorFinal = null; 212 this.colorDisapproveCancel = null; 213 this.colorProcessed = null; 214 this.colorException = null; 215 this.colorCanceled = null; 216 this.delegatorFilter = null; 217 this.useOutbox = null; 218 this.showDateApproved = null; 219 this.showCurrentNode = null; 220 this.primaryDelegateFilter = null; 221 this.notifyAcknowledge = null; 222 this.notifyApprove = null; 223 this.notifyCompelte = null; 224 this.notifyFYI = null; 225 this.documentTypeNotificationPreferences = null; 226 this.documentTypeNotificationPreferenceMap = Collections.emptyMap(); 227 228 this.requiresSave = false; 229 } 230 231 public Preferences(Builder builder) { 232 this.emailNotification = builder.getEmailNotification(); 233 this.notifyPrimaryDelegation = builder.getNotifyPrimaryDelegation(); 234 this.notifySecondaryDelegation = builder.getNotifySecondaryDelegation(); 235 this.openNewWindow = builder.getOpenNewWindow(); 236 this.showActionRequested = builder.getShowActionRequested(); 237 this.showDateCreated = builder.getShowDateCreated(); 238 this.showDocumentStatus = builder.getShowDocumentStatus(); 239 this.showAppDocStatus = builder.getShowAppDocStatus(); 240 this.showDocType = builder.getShowDocType(); 241 this.showInitiator = builder.getShowInitiator(); 242 this.showDocTitle = builder.getShowDocTitle(); 243 this.showWorkgroupRequest = builder.getShowWorkgroupRequest(); 244 this.showDelegator = builder.getShowDelegator(); 245 this.showClearFyi = builder.getShowClearFyi(); 246 this.pageSize = builder.getPageSize(); 247 this.refreshRate = builder.getRefreshRate(); 248 this.colorSaved = builder.getColorSaved(); 249 this.colorInitiated = builder.getColorInitiated(); 250 this.colorDisapproved = builder.getColorDisapproved(); 251 this.colorEnroute = builder.getColorEnroute(); 252 this.colorApproved = builder.getColorApproved(); 253 this.colorFinal = builder.getColorFinal(); 254 this.colorDisapproveCancel = builder.getColorDisapproveCancel(); 255 this.colorProcessed = builder.getColorProcessed(); 256 this.colorException = builder.getColorException(); 257 this.colorCanceled = builder.getColorCanceled(); 258 this.delegatorFilter = builder.getDelegatorFilter(); 259 this.useOutbox = builder.getUseOutbox(); 260 this.showDateApproved = builder.getShowDateApproved(); 261 this.showCurrentNode = builder.getShowCurrentNode(); 262 this.primaryDelegateFilter = builder.getPrimaryDelegateFilter(); 263 this.requiresSave = builder.isRequiresSave(); 264 this.notifyAcknowledge = builder.getNotifyAcknowledge(); 265 this.notifyApprove = builder.getNotifyApprove(); 266 this.notifyCompelte = builder.getNotifyComplete(); 267 this.notifyFYI = builder.getNotifyFYI(); 268 this.documentTypeNotificationPreferences = null; 269 this.documentTypeNotificationPreferenceMap = builder.getDocumentTypeNotificationPreferences(); 270 } 271 272 @Override 273 public boolean isRequiresSave() { 274 return requiresSave; 275 } 276 277 @Override 278 public String getEmailNotification() { 279 return emailNotification; 280 } 281 282 @Override 283 public String getNotifyPrimaryDelegation() { 284 return notifyPrimaryDelegation; 285 } 286 287 @Override 288 public String getNotifySecondaryDelegation() { 289 return notifySecondaryDelegation; 290 } 291 292 @Override 293 public String getOpenNewWindow() { 294 return openNewWindow; 295 } 296 297 @Override 298 public String getShowActionRequested() { 299 return showActionRequested; 300 } 301 302 @Override 303 public String getShowDateCreated() { 304 return showDateCreated; 305 } 306 307 @Override 308 public String getShowDocumentStatus() { 309 return showDocumentStatus; 310 } 311 312 @Override 313 public String getShowAppDocStatus() { 314 return showAppDocStatus; 315 } 316 317 @Override 318 public String getShowDocType() { 319 return showDocType; 320 } 321 322 @Override 323 public String getShowInitiator() { 324 return showInitiator; 325 } 326 327 @Override 328 public String getShowDocTitle() { 329 return showDocTitle; 330 } 331 332 @Override 333 public String getShowWorkgroupRequest() { 334 return showWorkgroupRequest; 335 } 336 337 @Override 338 public String getShowDelegator() { 339 return showDelegator; 340 } 341 342 @Override 343 public String getShowClearFyi() { 344 return showClearFyi; 345 } 346 347 @Override 348 public String getPageSize() { 349 return pageSize; 350 } 351 352 @Override 353 public String getRefreshRate() { 354 return refreshRate; 355 } 356 357 @Override 358 public String getColorSaved() { 359 return colorSaved; 360 } 361 362 @Override 363 public String getColorInitiated() { 364 return colorInitiated; 365 } 366 367 @Override 368 public String getColorDisapproved() { 369 return colorDisapproved; 370 } 371 372 @Override 373 public String getColorEnroute() { 374 return colorEnroute; 375 } 376 377 @Override 378 public String getColorApproved() { 379 return colorApproved; 380 } 381 382 @Override 383 public String getColorFinal() { 384 return colorFinal; 385 } 386 387 @Override 388 public String getColorDisapproveCancel() { 389 return colorDisapproveCancel; 390 } 391 392 @Override 393 public String getColorProcessed() { 394 return colorProcessed; 395 } 396 397 @Override 398 public String getColorException() { 399 return colorException; 400 } 401 402 @Override 403 public String getColorCanceled() { 404 return colorCanceled; 405 } 406 407 @Override 408 public String getDelegatorFilter() { 409 return delegatorFilter; 410 } 411 412 @Override 413 public String getUseOutbox() { 414 return useOutbox; 415 } 416 417 @Override 418 public String getShowDateApproved() { 419 return showDateApproved; 420 } 421 422 @Override 423 public String getShowCurrentNode() { 424 return showCurrentNode; 425 } 426 427 @Override 428 public String getPrimaryDelegateFilter() { 429 return primaryDelegateFilter; 430 } 431 432 @Override 433 public String getNotifyComplete() { 434 return this.notifyCompelte; 435 } 436 437 @Override 438 public String getNotifyApprove() { 439 return this.notifyApprove; 440 } 441 442 @Override 443 public String getNotifyAcknowledge() { 444 return this.notifyAcknowledge; 445 } 446 447 @Override 448 public String getNotifyFYI() { 449 return this.notifyFYI; 450 } 451 452 public String getDocumentTypeNotificationPreference(String documentType) { 453 String preferenceName = documentType.replace(KewApiConstants.DOCUMENT_TYPE_NOTIFICATION_DELIMITER, "."); 454 String preferenceValue = this.getDocumentTypeNotificationPreferences().get(preferenceName); 455 if(StringUtils.isNotBlank(preferenceValue)) { 456 return preferenceValue; 457 } 458 return null; 459 } 460 461 @Override 462 public Map<String, String> getDocumentTypeNotificationPreferences() { 463 return this.documentTypeNotificationPreferenceMap == null ? this.documentTypeNotificationPreferences : this.documentTypeNotificationPreferenceMap ; 464 } 465 466 public boolean isUsingOutbox() { 467 if (this.getUseOutbox() != null && this.getUseOutbox().equals(Constants.PREFERENCES_YES_VAL)) { 468 return true; 469 } 470 return false; 471 } 472 473 public final static class Builder 474 implements Serializable, ModelBuilder, PreferencesContract 475 { 476 477 private boolean requiresSave = false; 478 479 private String emailNotification; 480 private String notifyPrimaryDelegation; 481 private String notifySecondaryDelegation; 482 private String openNewWindow; 483 private String showActionRequested; 484 private String showDateCreated; 485 private String showDocumentStatus; 486 private String showAppDocStatus; 487 private String showDocType; 488 private String showInitiator; 489 private String showDocTitle; 490 private String showWorkgroupRequest; 491 private String showDelegator; 492 private String showClearFyi; 493 private String pageSize; 494 private String refreshRate; 495 private String colorSaved; 496 private String colorInitiated; 497 private String colorDisapproved; 498 private String colorEnroute; 499 private String colorApproved; 500 private String colorFinal; 501 private String colorDissapproveCancel; 502 private String colorProcessed; 503 private String colorException; 504 private String colorCanceled; 505 private String delegatorFilter; 506 private String useOutbox; 507 private String showDateApproved; 508 private String showCurrentNode; 509 private String primaryDelegateFilter; 510 private String notifyAcknowledge; 511 private String notifyApprove; 512 private String notifyComplete; 513 private String notifyFYI; 514 private Map<String, String> documentTypeNotificationPreferences; 515 516 private Builder() { 517 this.documentTypeNotificationPreferences = new HashMap<String, String>(); 518 } 519 520 private Builder(String emailNotification, String notifyPrimaryDelegation, String notifySecondaryDelegation, 521 String openNewWindow, String showActionRequested, String showDateCreated, String showDocumentStatus, 522 String showAppDocStatus, String showDocType, String showInitiator, String showDocTitle, 523 String showWorkgroupRequest, String showDelegator, String showClearFyi, String pageSize, String refreshRate, 524 String colorSaved, String colorInitiated, String colorDisapproved, String colorEnroute, 525 String colorApproved, String colorFinal, String colorDissapproveCancel, String colorProcessed, 526 String colorException, String colorCanceled, String delegatorFilter, String useOutbox, 527 String showDateApproved, String showCurrentNode, String primaryDelegateFilter, String notifyAcknowledge, 528 String notifyApprove, String notifyComplete, String notifyFYI, Map<String, String> documentTypeNotificationPreferences, 529 boolean requiresSave) { 530 this.emailNotification = emailNotification; 531 this.notifyPrimaryDelegation = notifyPrimaryDelegation; 532 this.notifySecondaryDelegation = notifySecondaryDelegation; 533 this.openNewWindow = openNewWindow; 534 this.showActionRequested = showActionRequested; 535 this.showDateCreated = showDateCreated; 536 this.showDocumentStatus = showDocumentStatus; 537 this.showAppDocStatus = showAppDocStatus; 538 this.showDocType = showDocType; 539 this.showInitiator = showInitiator; 540 this.showDocTitle = showDocTitle; 541 this.showWorkgroupRequest = showWorkgroupRequest; 542 this.showDelegator = showDelegator; 543 this.showClearFyi = showClearFyi; 544 this.pageSize = pageSize; 545 this.refreshRate = refreshRate; 546 this.colorSaved = colorSaved; 547 this.colorInitiated = colorInitiated; 548 this.colorDisapproved = colorDisapproved; 549 this.colorEnroute = colorEnroute; 550 this.colorApproved = colorApproved; 551 this.colorFinal = colorFinal; 552 this.colorDissapproveCancel = colorDissapproveCancel; 553 this.colorProcessed = colorProcessed; 554 this.colorException = colorException; 555 this.colorCanceled = colorCanceled; 556 this.delegatorFilter = delegatorFilter; 557 this.useOutbox = useOutbox; 558 this.showDateApproved = showDateApproved; 559 this.showCurrentNode = showCurrentNode; 560 this.primaryDelegateFilter = primaryDelegateFilter; 561 this.requiresSave = requiresSave; 562 this.notifyAcknowledge = notifyAcknowledge; 563 this.notifyApprove = notifyApprove; 564 this.notifyComplete = notifyComplete; 565 this.notifyFYI = notifyFYI; 566 this.documentTypeNotificationPreferences = documentTypeNotificationPreferences; 567 } 568 569 public Preferences build() { 570 return new Preferences(this); 571 } 572 573 public static Builder create() { 574 return new Builder(); 575 } 576 577 public static Builder create(String emailNotification, String notifyPrimaryDelegation, String notifySecondaryDelegation, 578 String openNewWindow, String showActionRequested, String showDateCreated, String showDocumentStatus, 579 String showAppDocStatus, String showDocType, String showInitiator, String showDocTitle, 580 String showWorkgroupRequest, String showDelegator, String showClearFyi, String pageSize, String refreshRate, 581 String colorSaved, String colorInitiated, String colorDisapproved, String colorEnroute, 582 String colorApproved, String colorFinal, String colorDissapproveCancel, String colorProcessed, 583 String colorException, String colorCanceled, String delegatorFilter, String useOutbox, 584 String showDateApproved, String showCurrentNode, String primaryDelegateFilter, String notifyAcknowledge, 585 String notifyApprove, String notifyComplete, String notifyFYI, Map<String, String> documentTypeNotificationPreferences, 586 boolean requiresSave) { 587 return new Builder(emailNotification, notifyPrimaryDelegation, notifySecondaryDelegation, openNewWindow, showActionRequested, showDateCreated, 588 showDocumentStatus, showAppDocStatus, showDocType, showInitiator, showDocTitle, showWorkgroupRequest, showDelegator, showClearFyi, 589 pageSize, refreshRate, colorSaved, colorInitiated, colorDisapproved, colorEnroute, colorApproved, colorFinal, colorDissapproveCancel, 590 colorProcessed, colorException, colorCanceled, delegatorFilter, useOutbox, showDateApproved, showCurrentNode, primaryDelegateFilter, 591 notifyAcknowledge, notifyApprove, notifyComplete, notifyFYI, documentTypeNotificationPreferences, requiresSave); 592 } 593 594 public static Builder create(PreferencesContract contract) { 595 if (contract == null) { 596 throw new IllegalArgumentException("contract was null"); 597 } 598 Builder builder = create(contract.getEmailNotification(), contract.getNotifyPrimaryDelegation(), contract.getNotifySecondaryDelegation(), contract.getOpenNewWindow(), 599 contract.getShowActionRequested(), contract.getShowDateCreated(), contract.getShowDocumentStatus(), contract.getShowAppDocStatus(), contract.getShowDocType(), 600 contract.getShowInitiator(), contract.getShowDocTitle(), contract.getShowWorkgroupRequest(), contract.getShowDelegator(), contract.getShowClearFyi(), 601 contract.getPageSize(), contract.getRefreshRate(), contract.getColorSaved(), contract.getColorInitiated(), contract.getColorDisapproved(), 602 contract.getColorEnroute(), contract.getColorApproved(), contract.getColorFinal(), contract.getColorDisapproveCancel(), contract.getColorProcessed(), 603 contract.getColorException(), contract.getColorCanceled(), contract.getDelegatorFilter(), contract.getUseOutbox(), contract.getShowDateApproved(), 604 contract.getShowCurrentNode(), contract.getPrimaryDelegateFilter(), contract.getNotifyAcknowledge(), contract.getNotifyApprove(), contract.getNotifyComplete(), 605 contract.getNotifyFYI(), contract.getDocumentTypeNotificationPreferences(), contract.isRequiresSave()); 606 return builder; 607 } 608 609 public static Builder create(Map<String, String> map, Map<String, String> documentTypeNotificationPreferences, boolean requiresSave) { 610 Builder builder = create(map.get(KEYS.EMAIL_NOTIFICATION), map.get(KEYS.NOTIFY_PRIMARY_DELEGATION), map.get(KEYS.NOTIFY_SECONDARY_DELEGATION), map.get(KEYS.OPEN_NEW_WINDOW), 611 map.get(KEYS.SHOW_ACTION_REQUESTED), map.get(KEYS.SHOW_DATE_CREATED), map.get(KEYS.SHOW_DOCUMENT_STATUS), map.get(KEYS.SHOW_APP_DOC_STATUS), map.get(KEYS.SHOW_DOC_TYPE), 612 map.get(KEYS.SHOW_INITIATOR), map.get(KEYS.SHOW_DOC_TITLE), map.get(KEYS.SHOW_GROUP_REQUEST), map.get(KEYS.SHOW_DELEGATOR), map.get(KEYS.SHOW_CLEAR_FYI), 613 map.get(KEYS.PAGE_SIZE), map.get(KEYS.REFRESH_RATE), map.get(KEYS.COLOR_SAVED), map.get(KEYS.COLOR_INITIATED), map.get(KEYS.COLOR_DISAPPROVED), 614 map.get(KEYS.COLOR_ENROUTE), map.get(KEYS.COLOR_APPROVED), map.get(KEYS.COLOR_FINAL), map.get(KEYS.COLOR_DISAPPROVE_CANCEL), map.get(KEYS.COLOR_PROCESSED), 615 map.get(KEYS.COLOR_EXCEPTION), map.get(KEYS.COLOR_CANCELED), map.get(KEYS.DELEGATOR_FILTER), map.get(KEYS.USE_OUT_BOX), map.get(KEYS.SHOW_DATE_APPROVED), 616 map.get(KEYS.SHOW_CURRENT_NODE), map.get(KEYS.PRIMARY_DELEGATE_FILTER), map.get(KEYS.NOTIFY_ACKNOWLEDGE), map.get(KEYS.NOTIFY_APPROVE), map.get(KEYS.NOTIFY_COMPLETE), 617 map.get(KEYS.NOTIFY_FYI), documentTypeNotificationPreferences, requiresSave); 618 return builder; 619 } 620 621 public synchronized boolean isRequiresSave() { 622 return requiresSave; 623 } 624 625 public synchronized void setRequiresSave(boolean requiresSave) { 626 this.requiresSave = requiresSave; 627 } 628 629 public synchronized String getEmailNotification() { 630 return emailNotification; 631 } 632 633 public synchronized void setEmailNotification(String emailNotification) { 634 this.emailNotification = emailNotification; 635 } 636 637 public synchronized String getNotifyPrimaryDelegation() { 638 return notifyPrimaryDelegation; 639 } 640 641 public synchronized void setNotifyPrimaryDelegation(String notifyPrimaryDelegation) { 642 this.notifyPrimaryDelegation = notifyPrimaryDelegation; 643 } 644 645 public synchronized String getNotifySecondaryDelegation() { 646 return notifySecondaryDelegation; 647 } 648 649 public synchronized void setNotifySecondaryDelegation(String notifySecondaryDelegation) { 650 this.notifySecondaryDelegation = notifySecondaryDelegation; 651 } 652 653 public synchronized String getOpenNewWindow() { 654 return openNewWindow; 655 } 656 657 public synchronized void setOpenNewWindow(String openNewWindow) { 658 this.openNewWindow = openNewWindow; 659 } 660 661 public synchronized String getShowActionRequested() { 662 return showActionRequested; 663 } 664 665 public synchronized void setShowActionRequested(String showActionRequested) { 666 this.showActionRequested = showActionRequested; 667 } 668 669 public synchronized String getShowDateCreated() { 670 return showDateCreated; 671 } 672 673 public synchronized void setShowDateCreated(String showDateCreated) { 674 this.showDateCreated = showDateCreated; 675 } 676 677 public synchronized String getShowDocumentStatus() { 678 return showDocumentStatus; 679 } 680 681 public synchronized void setShowDocumentStatus(String showDocumentStatus) { 682 this.showDocumentStatus = showDocumentStatus; 683 } 684 685 public synchronized String getShowAppDocStatus() { 686 return showAppDocStatus; 687 } 688 689 public synchronized void setShowAppDocStatus(String showAppDocStatus) { 690 this.showAppDocStatus = showAppDocStatus; 691 } 692 693 public synchronized String getShowDocType() { 694 return showDocType; 695 } 696 697 public synchronized void setShowDocType(String showDocType) { 698 this.showDocType = showDocType; 699 } 700 701 public synchronized String getShowInitiator() { 702 return showInitiator; 703 } 704 705 public synchronized void setShowInitiator(String showInitiator) { 706 this.showInitiator = showInitiator; 707 } 708 709 public synchronized String getShowDocTitle() { 710 return showDocTitle; 711 } 712 713 public synchronized void setShowDocTitle(String showDocTitle) { 714 this.showDocTitle = showDocTitle; 715 } 716 717 public synchronized String getShowWorkgroupRequest() { 718 return showWorkgroupRequest; 719 } 720 721 public synchronized void setShowWorkgroupRequest(String showWorkgroupRequest) { 722 this.showWorkgroupRequest = showWorkgroupRequest; 723 } 724 725 public synchronized String getShowDelegator() { 726 return showDelegator; 727 } 728 729 public synchronized void setShowDelegator(String showDelegator) { 730 this.showDelegator = showDelegator; 731 } 732 733 public synchronized String getShowClearFyi() { 734 return showClearFyi; 735 } 736 737 public synchronized void setShowClearFyi(String showClearFyi) { 738 this.showClearFyi = showClearFyi; 739 } 740 741 public synchronized String getPageSize() { 742 return pageSize; 743 } 744 745 public synchronized void setPageSize(String pageSize) { 746 this.pageSize = pageSize; 747 } 748 749 public synchronized String getRefreshRate() { 750 return refreshRate; 751 } 752 753 public synchronized void setRefreshRate(String refreshRate) { 754 this.refreshRate = refreshRate; 755 } 756 757 public synchronized String getColorSaved() { 758 return colorSaved; 759 } 760 761 public synchronized void setColorSaved(String colorSaved) { 762 this.colorSaved = colorSaved; 763 } 764 765 public synchronized String getColorInitiated() { 766 return colorInitiated; 767 } 768 769 public synchronized void setColorInitiated(String colorInitiated) { 770 this.colorInitiated = colorInitiated; 771 } 772 773 public synchronized String getColorDisapproved() { 774 return colorDisapproved; 775 } 776 777 public synchronized void setColorDisapproved(String colorDisapproved) { 778 this.colorDisapproved = colorDisapproved; 779 } 780 781 public synchronized String getColorEnroute() { 782 return colorEnroute; 783 } 784 785 public synchronized void setColorEnroute(String colorEnroute) { 786 this.colorEnroute = colorEnroute; 787 } 788 789 public synchronized String getColorApproved() { 790 return colorApproved; 791 } 792 793 public synchronized void setColorApproved(String colorApproved) { 794 this.colorApproved = colorApproved; 795 } 796 797 public synchronized String getColorFinal() { 798 return colorFinal; 799 } 800 801 public synchronized void setColorFinal(String colorFinal) { 802 this.colorFinal = colorFinal; 803 } 804 805 public synchronized String getColorDisapproveCancel() { 806 return colorDissapproveCancel; 807 } 808 809 public synchronized void setColorDissapproveCancel(String colorDissapproveCancel) { 810 this.colorDissapproveCancel = colorDissapproveCancel; 811 } 812 813 public synchronized String getColorProcessed() { 814 return colorProcessed; 815 } 816 817 public synchronized void setColorProcessed(String colorProcessed) { 818 this.colorProcessed = colorProcessed; 819 } 820 821 public synchronized String getColorException() { 822 return colorException; 823 } 824 825 public synchronized void setColorException(String colorException) { 826 this.colorException = colorException; 827 } 828 829 public synchronized String getColorCanceled() { 830 return colorCanceled; 831 } 832 833 public synchronized void setColorCanceled(String colorCanceled) { 834 this.colorCanceled = colorCanceled; 835 } 836 837 public synchronized String getDelegatorFilter() { 838 return delegatorFilter; 839 } 840 841 public synchronized void setDelegatorFilter(String delegatorFilter) { 842 this.delegatorFilter = delegatorFilter; 843 } 844 845 public synchronized String getUseOutbox() { 846 return useOutbox; 847 } 848 849 public synchronized void setUseOutbox(String useOutbox) { 850 this.useOutbox = useOutbox; 851 } 852 853 public synchronized String getShowDateApproved() { 854 return showDateApproved; 855 } 856 857 public synchronized void setShowDateApproved(String showDateApproved) { 858 this.showDateApproved = showDateApproved; 859 } 860 861 public synchronized String getShowCurrentNode() { 862 return showCurrentNode; 863 } 864 865 public synchronized void setShowCurrentNode(String showCurrentNode) { 866 this.showCurrentNode = showCurrentNode; 867 } 868 869 public synchronized String getPrimaryDelegateFilter() { 870 return primaryDelegateFilter; 871 } 872 873 public synchronized void setPrimaryDelegateFilter(String primaryDelegateFilter) { 874 this.primaryDelegateFilter = primaryDelegateFilter; 875 } 876 877 public synchronized String getNotifyAcknowledge() { 878 return this.notifyAcknowledge; 879 } 880 881 public synchronized void setNotifyAcknowledge(String notifyAcknowledge) { 882 this.notifyAcknowledge = notifyAcknowledge; 883 } 884 885 public synchronized String getNotifyApprove() { 886 return this.notifyApprove; 887 } 888 889 public synchronized void setNotifyApprove(String notifyApprove) { 890 this.notifyApprove = notifyApprove; 891 } 892 893 public synchronized String getNotifyComplete() { 894 return this.notifyComplete; 895 } 896 897 public synchronized void setNotifyComplete(String notifyComplete) { 898 this.notifyComplete = notifyComplete; 899 } 900 901 public synchronized String getNotifyFYI() { 902 return this.notifyFYI; 903 } 904 905 public synchronized void setNotifyFYI(String notifyFYI) { 906 this.notifyFYI = notifyFYI; 907 } 908 909 public synchronized String getDocumentTypeNotificationPreference(String documentType) { 910 String preferenceName = documentType.replace(KewApiConstants.DOCUMENT_TYPE_NOTIFICATION_DELIMITER, "."); 911 String preferenceValue = this.documentTypeNotificationPreferences.get(preferenceName); 912 if(StringUtils.isNotBlank(preferenceValue)) { 913 return preferenceValue; 914 } 915 return null; 916 } 917 918 public synchronized void setDocumentTypeNotificationPreference(String documentType, String preference) { 919 documentType = documentType.replace(KewApiConstants.DOCUMENT_TYPE_NOTIFICATION_DELIMITER, "."); 920 this.documentTypeNotificationPreferences.put(documentType, preference); 921 } 922 923 public synchronized Map<String, String> getDocumentTypeNotificationPreferences() { 924 if(this.documentTypeNotificationPreferences == null) { 925 this.documentTypeNotificationPreferences = new HashMap<String, String>(); 926 } 927 return this.documentTypeNotificationPreferences; 928 } 929 930 public synchronized void setDocumentTypeNotificationPreferences(Map<String, String> documentTypeNotificationPreferences) { 931 this.documentTypeNotificationPreferences = documentTypeNotificationPreferences; 932 } 933 934 public synchronized void addDocumentTypeNotificationPreference(String documentType, String preference) { 935 this.getDocumentTypeNotificationPreferences().put(documentType, preference); 936 } 937 938 public synchronized void removeDocumentTypeNotificationPreference(String documentType) { 939 this.getDocumentTypeNotificationPreferences().remove(documentType); 940 } 941 } 942 943 static class Constants { 944 static final String ROOT_ELEMENT_NAME = "preferences"; 945 static final String TYPE_NAME = "PreferencesType"; 946 static final String PREFERENCES_YES_VAL = "yes"; 947 } 948 949 /** 950 * A private class which exposes constants which define the XML element names to use when this object is marshalled to XML. 951 * 952 */ 953 static class Elements { 954 955 static final String REQUIRES_SAVE = "requiresSave"; 956 static final String EMAIL_NOTIFICATION = "emailNotification"; 957 static final String NOTIFY_PRIMARY_DELEGATION = "notifyPrimaryDelegation"; 958 static final String NOTIFY_SECONDARY_DELEGATION = "notifySecondaryDelegation"; 959 static final String OPEN_NEW_WINDOW = "openNewWindow"; 960 static final String SHOW_ACTION_REQUESTED = "showActionRequested"; 961 static final String SHOW_DATE_CREATED = "showDateCreated"; 962 static final String SHOW_DOCUMENT_STATUS = "showDocumentStatus"; 963 static final String SHOW_APP_DOC_STATUS = "showAppDocStatus"; 964 static final String SHOW_DOC_TYPE = "showDocType"; 965 static final String SHOW_INITIATOR = "showInitiator"; 966 static final String SHOW_DOC_TITLE = "showDocTitle"; 967 static final String SHOW_WORKGROUP_REQUEST = "showWorkgroupRequest"; 968 static final String SHOW_DELEGATOR = "showDelegator"; 969 static final String SHOW_CLEAR_FYI = "showClearFyi"; 970 static final String PAGE_SIZE = "pageSize"; 971 static final String REFRESH_RATE = "refreshRate"; 972 static final String COLOR_SAVED = "colorSaved"; 973 static final String COLOR_INITIATED = "colorInitiated"; 974 static final String COLOR_DISAPPROVED = "colorDisapproved"; 975 static final String COLOR_ENROUTE = "colorEnroute"; 976 static final String COLOR_APPROVED = "colorApproved"; 977 static final String COLOR_FINAL = "colorFinal"; 978 static final String COLOR_DISAPPROVE_CANCEL = "colorDisapproveCancel"; 979 static final String COLOR_PROCESSED = "colorProcessed"; 980 static final String COLOR_EXCEPTION = "colorException"; 981 static final String COLOR_CANCELED = "colorCanceled"; 982 static final String DELEGATOR_FILTER = "delegatorFilter"; 983 static final String USE_OUTBOX = "useOutbox"; 984 static final String SHOW_DATE_APPROVED = "showDateApproved"; 985 static final String SHOW_CURRENT_NODE = "showCurrentNode"; 986 static final String PRIMARY_DELEGATE_FILTER = "primaryDelegateFilter"; 987 static final String NOTIFY_ACKNOWLEDGE = "notifyAcknowledge"; 988 static final String NOTIFY_APPROVE = "notifyApprove"; 989 static final String NOTIFY_COMPLETE = "notifyCompelte"; 990 static final String NOTIFY_FYI = "notifyFYI"; 991 static final String DOCUMENT_TYPE_NOTIFICATION_PREFERENCES = "documentTypeNotificationPreferences"; 992 static final String DOCUMENT_TYPE_NOTIFICATION_PREFERENCE_MAP = "documentTypeNotificationPreferenceMap"; 993 } 994 995 public static class KEYS { 996 public static final String COLOR_DISAPPROVED = "DOCUMENT_STATUS_COLOR_D"; 997 public static final String COLOR_DISAPPROVE_CANCEL = "DOCUMENT_STATUS_COLOR_C"; 998 public static final String COLOR_APPROVED = "DOCUMENT_STATUS_COLOR_A"; 999 public static final String COLOR_CANCELED = "DOCUMENT_STATUS_COLOR_X"; 1000 public static final String COLOR_SAVED = "DOCUMENT_STATUS_COLOR_S"; 1001 public static final String COLOR_ENROUTE = "DOCUMENT_STATUS_COLOR_R"; 1002 public static final String COLOR_PROCESSED = "DOCUMENT_STATUS_COLOR_P"; 1003 public static final String COLOR_INITIATED = "DOCUMENT_STATUS_COLOR_I"; 1004 public static final String COLOR_FINAL = "DOCUMENT_STATUS_COLOR_F"; 1005 public static final String COLOR_EXCEPTION = "DOCUMENT_STATUS_COLOR_E"; 1006 public static final String REFRESH_RATE = "REFRESH_RATE"; 1007 public static final String OPEN_NEW_WINDOW = "OPEN_ITEMS_NEW_WINDOW"; 1008 public static final String SHOW_DOC_TYPE = "DOC_TYPE_COL_SHOW_NEW"; 1009 public static final String SHOW_DOC_TITLE = "TITLE_COL_SHOW_NEW"; 1010 public static final String SHOW_ACTION_REQUESTED = "ACTION_REQUESTED_COL_SHOW_NEW"; 1011 public static final String SHOW_INITIATOR = "INITIATOR_COL_SHOW_NEW"; 1012 public static final String SHOW_DELEGATOR = "DELEGATOR_COL_SHOW_NEW"; 1013 public static final String SHOW_DATE_CREATED = "DATE_CREATED_COL_SHOW_NEW"; 1014 public static final String SHOW_DOCUMENT_STATUS = "DOCUMENT_STATUS_COL_SHOW_NEW"; 1015 public static final String SHOW_APP_DOC_STATUS = "APP_DOC_STATUS_COL_SHOW_NEW"; 1016 public static final String SHOW_GROUP_REQUEST = "WORKGROUP_REQUEST_COL_SHOW_NEW"; 1017 public static final String SHOW_CLEAR_FYI = "CLEAR_FYI_COL_SHOW_NEW"; 1018 public static final String PAGE_SIZE = "ACTION_LIST_SIZE_NEW"; 1019 public static final String EMAIL_NOTIFICATION = "EMAIL_NOTIFICATION"; 1020 public static final String NOTIFY_PRIMARY_DELEGATION = "EMAIL_NOTIFY_PRIMARY"; 1021 public static final String NOTIFY_SECONDARY_DELEGATION = "EMAIL_NOTIFY_SECONDARY"; 1022 public static final String DEFAULT_COLOR = "white"; 1023 public static final String DEFAULT_ACTION_LIST_SIZE = "10"; 1024 public static final String DEFAULT_REFRESH_RATE = "15"; 1025 public static final String ERR_KEY_REFRESH_RATE_WHOLE_NUM = "preferences.refreshRate"; 1026 public static final String ERR_KEY_ACTION_LIST_PAGE_SIZE_WHOLE_NUM = "preferences.pageSize"; 1027 public static final String DELEGATOR_FILTER = "DELEGATOR_FILTER"; 1028 public static final String PRIMARY_DELEGATE_FILTER = "PRIMARY_DELEGATE_FILTER"; 1029 public static final String USE_OUT_BOX = "USE_OUT_BOX"; 1030 public static final String SHOW_DATE_APPROVED = "LAST_APPROVED_DATE_COL_SHOW_NEW"; 1031 public static final String SHOW_CURRENT_NODE = "CURRENT_NODE_COL_SHOW_NEW"; 1032 public static final String NOTIFY_ACKNOWLEDGE = "NOTIFY_ACKNOWLEDGE"; 1033 public static final String NOTIFY_APPROVE = "NOTIFY_APPROVE"; 1034 public static final String NOTIFY_COMPLETE = "NOTIFY_COMPLETE"; 1035 public static final String NOTIFY_FYI = "NOTIFY_FYI"; 1036 public static final String DOCUMENT_TYPE_NOTIFICATION_PREFERENCES = "DOCUMENT_TYPE_NOTIFICATION_PREFERENCES"; 1037 } 1038 1039 public static class Cache { 1040 public static final String NAME = KewApiConstants.Namespaces.KEW_NAMESPACE_2_0 + "/" + Preferences.Constants.TYPE_NAME; 1041 } 1042 1043 }