001 /** 002 * Copyright 2005-2013 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.document; 017 018 import org.kuali.rice.core.api.CoreConstants; 019 import org.kuali.rice.core.api.mo.AbstractDataTransferObject; 020 import org.kuali.rice.core.api.mo.ModelObjectUtils; 021 import org.w3c.dom.Element; 022 023 import javax.xml.bind.annotation.XmlAccessType; 024 import javax.xml.bind.annotation.XmlAccessorType; 025 import javax.xml.bind.annotation.XmlAnyElement; 026 import javax.xml.bind.annotation.XmlElement; 027 import javax.xml.bind.annotation.XmlElementWrapper; 028 import javax.xml.bind.annotation.XmlRootElement; 029 import javax.xml.bind.annotation.XmlType; 030 import java.util.Collection; 031 import java.util.Collections; 032 import java.util.Set; 033 034 @XmlRootElement(name = OrchestrationConfig.Constants.ROOT_ELEMENT_NAME) 035 @XmlAccessorType(XmlAccessType.NONE) 036 @XmlType(name = OrchestrationConfig.Constants.TYPE_NAME, propOrder = { 037 OrchestrationConfig.Elements.ACTION_TAKEN_ID, 038 OrchestrationConfig.Elements.NODE_NAMES, 039 CoreConstants.CommonElements.FUTURE_ELEMENTS 040 }) 041 public final class OrchestrationConfig extends AbstractDataTransferObject { 042 043 @XmlElement(name = Elements.ACTION_TAKEN_ID, required = true) 044 private final String actionTakenId; 045 046 @XmlElementWrapper(name = Elements.NODE_NAMES, required = false) 047 @XmlElement(name = Elements.NODE_NAME, required = false) 048 private final Set<String> nodeNames; 049 050 @SuppressWarnings("unused") 051 @XmlAnyElement 052 private final Collection<Element> _futureElements = null; 053 054 @SuppressWarnings("unused") 055 private OrchestrationConfig() { 056 this.actionTakenId = null; 057 this.nodeNames = null; 058 } 059 060 private OrchestrationConfig(String actionTakenId, Set<String> nodeNames) { 061 this.actionTakenId = actionTakenId; 062 this.nodeNames = ModelObjectUtils.createImmutableCopy(nodeNames); 063 } 064 065 public static OrchestrationConfig create(String actionTakenId, Set<String> nodeNames) { 066 return new OrchestrationConfig(actionTakenId, nodeNames); 067 } 068 069 /** 070 * Returns the id of the {@link org.kuali.rice.kew.api.action.ActionTaken} against which any action 071 * requests that are processed by the orchestration should be associated. This is generally the action that was 072 * submitted which triggered the orchestration process. Should never return a null or blank value. 073 * 074 * @return the id of the action taken to link deactivated requests with during orchestration 075 */ 076 public String getActionTakenId() { 077 return actionTakenId; 078 } 079 080 /** 081 * Returns the Set of node names to which to orchestrate the document, may be an empty set in which case the 082 * document will be orchestrated from it's current position through the termination of it's entire workflow process. 083 * 084 * @return the set of node names to which to orchestrate the document, will never be null but may be empty 085 */ 086 public Set<String> getNodeNames() { 087 return nodeNames; 088 } 089 090 /** 091 * Defines some internal constants used on this class. 092 */ 093 static class Constants { 094 final static String ROOT_ELEMENT_NAME = "orchestrationConfig"; 095 final static String TYPE_NAME = "OrchestrationConfigType"; 096 } 097 098 /** 099 * A private class which exposes constants which define the XML element names to use when this object is marshalled 100 * to XML. 101 */ 102 static class Elements { 103 final static String ACTION_TAKEN_ID = "actionTakenId"; 104 final static String NODE_NAMES = "nodeNames"; 105 final static String NODE_NAME = "nodeName"; 106 } 107 108 }