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.action;
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.ModelBuilder;
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.XmlRootElement;
028 import javax.xml.bind.annotation.XmlType;
029 import java.io.Serializable;
030 import java.util.Collection;
031
032
033 /**
034 * A transport object representing an action a user might take
035 *
036 * @author Kuali Rice Team (rice.collab@kuali.org)
037 */
038 @XmlRootElement(name = RoutingReportActionToTake.Constants.ROOT_ELEMENT_NAME)
039 @XmlAccessorType(XmlAccessType.NONE)
040 @XmlType(name = RoutingReportActionToTake.Constants.TYPE_NAME, propOrder = {
041 RoutingReportActionToTake.Elements.ACTION_TO_PERFORM,
042 RoutingReportActionToTake.Elements.PRINCIPAL_ID,
043 RoutingReportActionToTake.Elements.NODE_NAME,
044 CoreConstants.CommonElements.FUTURE_ELEMENTS
045 })
046 public final class RoutingReportActionToTake
047 extends AbstractDataTransferObject
048 implements RoutingReportActionToTakeContract
049 {
050
051 @XmlElement(name = Elements.ACTION_TO_PERFORM, required = false)
052 private final String actionToPerform;
053 @XmlElement(name = Elements.PRINCIPAL_ID, required = false)
054 private final String principalId;
055 @XmlElement(name = Elements.NODE_NAME, required = false)
056 private final String nodeName;
057 @SuppressWarnings("unused")
058 @XmlAnyElement
059 private final Collection<Element> _futureElements = null;
060
061 /**
062 * Private constructor used only by JAXB.
063 *
064 */
065 private RoutingReportActionToTake() {
066 this.actionToPerform = null;
067 this.principalId = null;
068 this.nodeName = null;
069 }
070
071 private RoutingReportActionToTake(Builder builder) {
072 this.actionToPerform = builder.getActionToPerform();
073 this.principalId = builder.getPrincipalId();
074 this.nodeName = builder.getNodeName();
075 }
076
077 @Override
078 public String getActionToPerform() {
079 return this.actionToPerform;
080 }
081
082 @Override
083 public String getPrincipalId() {
084 return this.principalId;
085 }
086
087 @Override
088 public String getNodeName() {
089 return this.nodeName;
090 }
091
092
093 /**
094 * A builder which can be used to construct {@link RoutingReportActionToTake} instances. Enforces the constraints of the {@link RoutingReportActionToTakeContract}.
095 *
096 */
097 public final static class Builder
098 implements Serializable, ModelBuilder, RoutingReportActionToTakeContract
099 {
100
101 private String actionToPerform;
102 private String principalId;
103 private String nodeName;
104
105 private Builder(String actionToPerform, String principalId, String nodeName) {
106 this.setActionToPerform(actionToPerform);
107 this.setPrincipalId(principalId);
108 this.setNodeName(nodeName);
109 }
110
111 public static Builder create(String actionToPerform, String principalId, String nodeName) {
112 return new Builder(actionToPerform, principalId, nodeName);
113 }
114
115 public static Builder create(RoutingReportActionToTakeContract contract) {
116 if (contract == null) {
117 throw new IllegalArgumentException("contract was null");
118 }
119 return create(contract.getActionToPerform(), contract.getPrincipalId(), contract.getNodeName());
120 }
121
122 public RoutingReportActionToTake build() {
123 return new RoutingReportActionToTake(this);
124 }
125
126 @Override
127 public String getActionToPerform() {
128 return this.actionToPerform;
129 }
130
131 @Override
132 public String getPrincipalId() {
133 return this.principalId;
134 }
135
136 @Override
137 public String getNodeName() {
138 return this.nodeName;
139 }
140
141 public void setActionToPerform(String actionToPerform) {
142 this.actionToPerform = actionToPerform;
143 }
144
145 public void setPrincipalId(String principalId) {
146 this.principalId = principalId;
147 }
148
149 public void setNodeName(String nodeName) {
150 this.nodeName = nodeName;
151 }
152
153 }
154
155
156 /**
157 * Defines some internal constants used on this class.
158 *
159 */
160 static class Constants {
161
162 final static String ROOT_ELEMENT_NAME = "routingReportActionToTake";
163 final static String TYPE_NAME = "RoutingReportActionToTakeType";
164
165 }
166
167
168 /**
169 * A private class which exposes constants which define the XML element names to use when this object is marshalled to XML.
170 *
171 */
172 static class Elements {
173
174 final static String ACTION_TO_PERFORM = "actionToPerform";
175 final static String PRINCIPAL_ID = "principalId";
176 final static String NODE_NAME = "nodeName";
177
178 }
179
180 }