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 021 import javax.xml.bind.annotation.XmlAccessType; 022 import javax.xml.bind.annotation.XmlAccessorType; 023 import javax.xml.bind.annotation.XmlAnyElement; 024 import javax.xml.bind.annotation.XmlElement; 025 import javax.xml.bind.annotation.XmlRootElement; 026 import javax.xml.bind.annotation.XmlType; 027 028 import org.apache.commons.lang.StringUtils; 029 import org.kuali.rice.core.api.CoreConstants; 030 import org.kuali.rice.core.api.mo.AbstractDataTransferObject; 031 import org.kuali.rice.core.api.mo.ModelBuilder; 032 import org.kuali.rice.kew.api.document.DocumentContentUpdate; 033 import org.kuali.rice.kew.api.document.DocumentUpdate; 034 import org.w3c.dom.Element; 035 036 @XmlRootElement(name = DocumentActionParameters.Constants.ROOT_ELEMENT_NAME) 037 @XmlAccessorType(XmlAccessType.NONE) 038 @XmlType(name = DocumentActionParameters.Constants.TYPE_NAME, propOrder = { 039 DocumentActionParameters.Elements.DOCUMENT_ID, 040 DocumentActionParameters.Elements.PRINCIPAL_ID, 041 DocumentActionParameters.Elements.ANNOTATION, 042 DocumentActionParameters.Elements.DOCUMENT_UPDATE, 043 DocumentActionParameters.Elements.DOCUMENT_CONTENT_UPDATE, 044 CoreConstants.CommonElements.FUTURE_ELEMENTS 045 }) 046 public final class DocumentActionParameters extends AbstractDataTransferObject { 047 048 private static final long serialVersionUID = -7589214734683758734L; 049 050 @XmlElement(name = Elements.DOCUMENT_ID, required = true) 051 private final String documentId; 052 053 @XmlElement(name = Elements.PRINCIPAL_ID, required = true) 054 private final String principalId; 055 056 @XmlElement(name = Elements.ANNOTATION, required = false) 057 private final String annotation; 058 059 @XmlElement(name = Elements.DOCUMENT_UPDATE, required = false) 060 private final DocumentUpdate documentUpdate; 061 062 @XmlElement(name = Elements.DOCUMENT_CONTENT_UPDATE, required = false) 063 private final DocumentContentUpdate documentContentUpdate; 064 065 @SuppressWarnings("unused") 066 @XmlAnyElement 067 private final Collection<Element> _futureElements = null; 068 069 private DocumentActionParameters() { 070 this.documentId = null; 071 this.principalId = null; 072 this.annotation = null; 073 this.documentUpdate = null; 074 this.documentContentUpdate = null; 075 } 076 077 private DocumentActionParameters(Builder builder) { 078 this.documentId = builder.getDocumentId(); 079 this.principalId = builder.getPrincipalId(); 080 this.annotation = builder.getAnnotation(); 081 this.documentUpdate = builder.getDocumentUpdate(); 082 this.documentContentUpdate = builder.getDocumentContentUpdate(); 083 } 084 085 public static DocumentActionParameters create(String documentId, String principalId) { 086 return create(documentId, principalId, ""); 087 } 088 089 public static DocumentActionParameters create(String documentId, String principalId, String annotation) { 090 Builder builder = Builder.create(documentId, principalId); 091 builder.setAnnotation(annotation); 092 return builder.build(); 093 } 094 095 public String getDocumentId() { 096 return documentId; 097 } 098 099 public String getPrincipalId() { 100 return principalId; 101 } 102 103 public String getAnnotation() { 104 return annotation; 105 } 106 107 public DocumentUpdate getDocumentUpdate() { 108 return documentUpdate; 109 } 110 111 public DocumentContentUpdate getDocumentContentUpdate() { 112 return documentContentUpdate; 113 } 114 115 /** 116 * A builder which can be used to construct {@link DocumentActionParameters} instances. 117 * 118 */ 119 public final static class Builder implements Serializable, ModelBuilder { 120 121 private static final long serialVersionUID = -9209748637365086000L; 122 123 private String documentId; 124 private String principalId; 125 private String annotation; 126 private DocumentUpdate documentUpdate; 127 private DocumentContentUpdate documentContentUpdate; 128 129 private Builder(String documentId, String principalId) { 130 setDocumentId(documentId); 131 setPrincipalId(principalId); 132 } 133 134 public static Builder create(String documentId, String principalId) { 135 return new Builder(documentId, principalId); 136 } 137 138 public DocumentActionParameters build() { 139 return new DocumentActionParameters(this); 140 } 141 142 public String getDocumentId() { 143 return documentId; 144 } 145 146 public void setDocumentId(String documentId) { 147 if (StringUtils.isBlank(documentId)) { 148 throw new IllegalArgumentException("documentId was null or blank"); 149 } 150 this.documentId = documentId; 151 } 152 153 public String getPrincipalId() { 154 return principalId; 155 } 156 157 public void setPrincipalId(String principalId) { 158 if (StringUtils.isBlank(principalId)) { 159 throw new IllegalArgumentException("principalId was null or blank"); 160 } 161 this.principalId = principalId; 162 } 163 164 public String getAnnotation() { 165 return annotation; 166 } 167 168 public void setAnnotation(String annotation) { 169 this.annotation = annotation; 170 } 171 172 public DocumentUpdate getDocumentUpdate() { 173 return documentUpdate; 174 } 175 176 public void setDocumentUpdate(DocumentUpdate documentUpdate) { 177 this.documentUpdate = documentUpdate; 178 } 179 180 public DocumentContentUpdate getDocumentContentUpdate() { 181 return documentContentUpdate; 182 } 183 184 public void setDocumentContentUpdate(DocumentContentUpdate documentContentUpdate) { 185 this.documentContentUpdate = documentContentUpdate; 186 } 187 188 } 189 190 /** 191 * Defines some internal constants used on this class. 192 */ 193 static class Constants { 194 final static String ROOT_ELEMENT_NAME = "documentActionParameters"; 195 final static String TYPE_NAME = "DocumentActionParametersType"; 196 } 197 198 /** 199 * A private class which exposes constants which define the XML element names to use when this object is marshalled to XML. 200 */ 201 static class Elements { 202 final static String DOCUMENT_ID = "documentId"; 203 final static String PRINCIPAL_ID = "principalId"; 204 final static String ANNOTATION = "annotation"; 205 final static String DOCUMENT_UPDATE = "documentUpdate"; 206 final static String DOCUMENT_CONTENT_UPDATE = "documentContentUpdate"; 207 } 208 209 }