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.document;
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 import org.joda.time.DateTime;
027 import org.kuali.rice.core.api.CoreConstants;
028 import org.kuali.rice.core.api.mo.AbstractDataTransferObject;
029 import org.kuali.rice.core.api.mo.ModelBuilder;
030 import org.w3c.dom.Element;
031
032 @XmlRootElement(name = DocumentStatusTransition.Constants.ROOT_ELEMENT_NAME)
033 @XmlAccessorType(XmlAccessType.NONE)
034 @XmlType(name = DocumentStatusTransition.Constants.TYPE_NAME, propOrder = {
035 DocumentStatusTransition.Elements.ID,
036 DocumentStatusTransition.Elements.DOCUMENT_ID,
037 DocumentStatusTransition.Elements.OLD_APP_DOC_STATUS,
038 DocumentStatusTransition.Elements.NEW_APP_DOC_STATUS,
039 DocumentStatusTransition.Elements.STATUS_TRANSITION_DATE,
040 CoreConstants.CommonElements.FUTURE_ELEMENTS
041 })
042 public final class DocumentStatusTransition
043 extends AbstractDataTransferObject
044 implements DocumentStatusTransitionContract
045 {
046
047 @XmlElement(name = Elements.ID, required = false)
048 private final String id;
049 @XmlElement(name = Elements.DOCUMENT_ID, required = false)
050 private final String documentId;
051 @XmlElement(name = Elements.OLD_APP_DOC_STATUS, required = false)
052 private final String oldStatus;
053 @XmlElement(name = Elements.NEW_APP_DOC_STATUS, required = false)
054 private final String newStatus;
055 @XmlElement(name = Elements.STATUS_TRANSITION_DATE, required = false)
056 private final DateTime statusTransitionDate;
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 DocumentStatusTransition() {
066 this.id = null;
067 this.documentId = null;
068 this.oldStatus = null;
069 this.newStatus = null;
070 this.statusTransitionDate = null;
071 }
072
073 private DocumentStatusTransition(Builder builder) {
074 this.id = builder.getId();
075 this.documentId = builder.getDocumentId();
076 this.oldStatus = builder.getOldStatus();
077 this.newStatus = builder.getNewStatus();
078 this.statusTransitionDate = builder.getStatusTransitionDate();
079 }
080
081 @Override
082 public String getId() {
083 return this.id;
084 }
085
086 @Override
087 public String getDocumentId() {
088 return this.documentId;
089 }
090
091 @Override
092 public String getOldStatus() {
093 return this.oldStatus;
094 }
095
096 @Override
097 public String getNewStatus() {
098 return this.newStatus;
099 }
100
101 @Override
102 public DateTime getStatusTransitionDate() {
103 return this.statusTransitionDate;
104 }
105
106
107 /**
108 * A builder which can be used to construct {@link DocumentStatusTransition} instances. Enforces the constraints of the {@link DocumentStatusTransitionContract}.
109 *
110 */
111 public final static class Builder
112 implements Serializable, ModelBuilder, DocumentStatusTransitionContract
113 {
114
115 private String id;
116 private String documentId;
117 private String oldStatus;
118 private String newStatus;
119 private DateTime statusTransitionDate;
120
121 private Builder(String documentId, String oldStatus, String newStatus) {
122 setDocumentId(documentId);
123 setOldStatus(oldStatus);
124 setNewStatus(newStatus);
125 }
126
127 public static Builder create(String documentId, String oldStatus, String newStatus) {
128 return new Builder(documentId, oldStatus, newStatus);
129 }
130
131 public static Builder create(DocumentStatusTransitionContract contract) {
132 if (contract == null) {
133 throw new IllegalArgumentException("contract was null");
134 }
135 Builder builder = create(contract.getDocumentId(), contract.getOldStatus(), contract.getNewStatus());
136 builder.setId(contract.getId());
137 builder.setStatusTransitionDate(contract.getStatusTransitionDate());
138 return builder;
139 }
140
141 public DocumentStatusTransition build() {
142 return new DocumentStatusTransition(this);
143 }
144
145 @Override
146 public String getId() {
147 return this.id;
148 }
149
150 @Override
151 public String getDocumentId() {
152 return this.documentId;
153 }
154
155 @Override
156 public String getOldStatus() {
157 return this.oldStatus;
158 }
159
160 @Override
161 public String getNewStatus() {
162 return this.newStatus;
163 }
164
165 @Override
166 public DateTime getStatusTransitionDate() {
167 return this.statusTransitionDate;
168 }
169
170 public void setId(String id) {
171 // TODO add validation of input value if required and throw IllegalArgumentException if needed
172 this.id = id;
173 }
174
175 public void setDocumentId(String documentId) {
176 // TODO add validation of input value if required and throw IllegalArgumentException if needed
177 this.documentId = documentId;
178 }
179
180 public void setOldStatus(String oldStatus) {
181 // TODO add validation of input value if required and throw IllegalArgumentException if needed
182 this.oldStatus = oldStatus;
183 }
184
185 public void setNewStatus(String newStatus) {
186 // TODO add validation of input value if required and throw IllegalArgumentException if needed
187 this.newStatus = newStatus;
188 }
189
190 public void setStatusTransitionDate(DateTime statusTransitionDate) {
191 // TODO add validation of input value if required and throw IllegalArgumentException if needed
192 this.statusTransitionDate = statusTransitionDate;
193 }
194
195 }
196
197
198 /**
199 * Defines some internal constants used on this class.
200 *
201 */
202 static class Constants {
203
204 final static String ROOT_ELEMENT_NAME = "documentStatusTransition";
205 final static String TYPE_NAME = "DocumentStatusTransitionType";
206
207 }
208
209
210 /**
211 * A private class which exposes constants which define the XML element names to use when this object is marshalled to XML.
212 *
213 */
214 static class Elements {
215
216 final static String ID = "id";
217 final static String DOCUMENT_ID = "documentId";
218 final static String OLD_APP_DOC_STATUS = "oldStatus";
219 final static String NEW_APP_DOC_STATUS = "newStatus";
220 final static String STATUS_TRANSITION_DATE = "statusTransitionDate";
221
222 }
223
224 }