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.ArrayList; 020 import java.util.Collection; 021 import java.util.List; 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 030 import org.kuali.rice.core.api.CoreConstants; 031 import org.kuali.rice.core.api.mo.ModelBuilder; 032 import org.kuali.rice.kew.api.KewApiConstants; 033 import org.kuali.rice.kew.api.actionlist.DisplayParameters; 034 import org.w3c.dom.Element; 035 036 037 /** 038 * Specifies a set of Action codes. 039 * 040 * @author Kuali Rice Team (rice.collab@kuali.org) 041 */ 042 @XmlRootElement(name = ActionSet.Constants.ROOT_ELEMENT_NAME) 043 @XmlAccessorType(XmlAccessType.NONE) 044 @XmlType(name = ActionSet.Constants.TYPE_NAME, propOrder = { 045 ActionSet.Elements.ACTION_SET_LIST, 046 CoreConstants.CommonElements.FUTURE_ELEMENTS 047 }) 048 public final class ActionSet implements Serializable, ActionSetContract { 049 050 private static final long serialVersionUID = 7857749268529671300L; 051 052 @XmlElement(name = Elements.ACTION_SET_LIST, required = false) 053 private List<String> actionSetList; 054 055 @SuppressWarnings("unused") 056 @XmlAnyElement 057 private final Collection<Element> _futureElements = null; 058 059 /** 060 * Private constructor used only by JAXB. 061 * 062 */ 063 private ActionSet() { 064 this.actionSetList = null; 065 } 066 067 /** 068 * Constructs an ActionSet from the given builder. This constructor is private and should only 069 * ever be invoked from the builder. 070 * 071 * @param builder the Builder from which to construct the ActionSet 072 */ 073 private ActionSet(Builder builder) { 074 this.actionSetList = builder.getActionSet(); 075 } 076 077 @Override 078 public boolean hasAction(String actionCode) { 079 return actionSetList.contains(actionCode); 080 } 081 082 @Override 083 public boolean addAction(String actionCode) { 084 if (!actionSetList.contains(actionCode)) { 085 actionSetList.add(actionCode); 086 return true; 087 } 088 return false; 089 } 090 091 @Override 092 public boolean removeAction(String actionCode) { 093 return actionSetList.remove(actionCode); 094 } 095 096 // some convienance methods for common actions 097 @Override 098 public boolean hasApprove() { 099 return hasAction(KewApiConstants.ACTION_TAKEN_APPROVED_CD); 100 } 101 102 @Override 103 public boolean hasComplete() { 104 return hasAction(KewApiConstants.ACTION_TAKEN_COMPLETED_CD); 105 } 106 107 @Override 108 public boolean hasAcknowledge() { 109 return hasAction(KewApiConstants.ACTION_TAKEN_ACKNOWLEDGED_CD); 110 } 111 112 @Override 113 public boolean hasFyi() { 114 return hasAction(KewApiConstants.ACTION_TAKEN_FYI_CD); 115 } 116 117 @Override 118 public boolean hasDisapprove() { 119 return hasAction(KewApiConstants.ACTION_TAKEN_DENIED_CD); 120 } 121 122 @Override 123 public boolean hasCancel() { 124 return hasAction(KewApiConstants.ACTION_TAKEN_CANCELED_CD); 125 } 126 127 @Override 128 public boolean hasRouted() { 129 return hasAction(KewApiConstants.ACTION_TAKEN_ROUTED_CD); 130 } 131 132 @Override 133 public boolean addApprove() { 134 return addAction(KewApiConstants.ACTION_TAKEN_APPROVED_CD); 135 } 136 137 @Override 138 public boolean addComplete() { 139 return addAction(KewApiConstants.ACTION_TAKEN_COMPLETED_CD); 140 } 141 142 @Override 143 public boolean addAcknowledge() { 144 return addAction(KewApiConstants.ACTION_TAKEN_ACKNOWLEDGED_CD); 145 } 146 147 @Override 148 public boolean addFyi() { 149 return addAction(KewApiConstants.ACTION_TAKEN_FYI_CD); 150 } 151 152 @Override 153 public boolean addDisapprove() { 154 return addAction(KewApiConstants.ACTION_TAKEN_DENIED_CD); 155 } 156 157 @Override 158 public boolean addCancel() { 159 return addAction(KewApiConstants.ACTION_TAKEN_CANCELED_CD); 160 } 161 162 @Override 163 public boolean addRouted() { 164 return addAction(KewApiConstants.ACTION_TAKEN_ROUTED_CD); 165 } 166 167 /** 168 * A builder which can be used to construct {@link DisplayParameters} instances. Enforces the constraints of the {@link DocumentContentContract}. 169 */ 170 public final static class Builder implements Serializable, ModelBuilder, ActionSetContract { 171 172 private List<String> actionSet; 173 174 /** 175 * Private constructor for creating a builder with all of it's required attributes. 176 */ 177 private Builder(List<String> actionSet) { 178 setActionSetList(actionSet); 179 } 180 181 public static Builder create() { 182 return new Builder(new ArrayList<String>()); 183 } 184 185 /** 186 * Creates a builder by populating it with data from the given {@linkActionSet}. 187 * 188 * @param contract the contract from which to populate this builder 189 * @return an instance of the builder populated with data from the contract 190 */ 191 public static Builder create(ActionSetContract contract) { 192 if (contract == null) { 193 throw new IllegalArgumentException("contract was null"); 194 } 195 Builder builder = create(); 196 return builder; 197 } 198 199 public ActionSet build() { 200 return new ActionSet(this); 201 } 202 public List<String> getActionSet() { 203 return this.actionSet; 204 } 205 public void setActionSetList(List<String> actionSet) { 206 this.actionSet = actionSet; 207 } 208 209 @Override 210 public boolean hasAction(String actionCode) { 211 return actionSet.contains(actionCode); 212 } 213 214 @Override 215 public boolean addAction(String actionCode) { 216 if (!actionSet.contains(actionCode)) { 217 actionSet.add(actionCode); 218 return true; 219 } 220 return false; 221 } 222 223 @Override 224 public boolean removeAction(String actionCode) { 225 return actionSet.remove(actionCode); 226 } 227 228 @Override 229 public boolean hasApprove() { 230 return hasAction(KewApiConstants.ACTION_TAKEN_APPROVED_CD); 231 } 232 233 @Override 234 public boolean hasComplete() { 235 return hasAction(KewApiConstants.ACTION_TAKEN_COMPLETED_CD); 236 } 237 238 @Override 239 public boolean hasAcknowledge() { 240 return hasAction(KewApiConstants.ACTION_TAKEN_ACKNOWLEDGED_CD); 241 } 242 243 @Override 244 public boolean hasFyi() { 245 return hasAction(KewApiConstants.ACTION_TAKEN_FYI_CD); 246 } 247 248 @Override 249 public boolean hasDisapprove() { 250 return hasAction(KewApiConstants.ACTION_TAKEN_DENIED_CD); 251 } 252 253 @Override 254 public boolean hasCancel() { 255 return hasAction(KewApiConstants.ACTION_TAKEN_CANCELED_CD); 256 } 257 258 @Override 259 public boolean hasRouted() { 260 return hasAction(KewApiConstants.ACTION_TAKEN_ROUTED_CD); 261 } 262 263 @Override 264 public boolean addApprove() { 265 return addAction(KewApiConstants.ACTION_TAKEN_APPROVED_CD); 266 } 267 268 @Override 269 public boolean addComplete() { 270 return addAction(KewApiConstants.ACTION_TAKEN_COMPLETED_CD); 271 } 272 273 /** 274 * This overridden method ... 275 * 276 * @see org.kuali.rice.kew.api.action.ActionSetContract#addAcknowledge() 277 */ 278 @Override 279 public boolean addAcknowledge() { 280 return addAction(KewApiConstants.ACTION_TAKEN_ACKNOWLEDGED_CD); 281 } 282 283 @Override 284 public boolean addFyi() { 285 return addAction(KewApiConstants.ACTION_TAKEN_FYI_CD); 286 } 287 288 @Override 289 public boolean addDisapprove() { 290 return addAction(KewApiConstants.ACTION_TAKEN_DENIED_CD); 291 } 292 293 @Override 294 public boolean addCancel() { 295 return addAction(KewApiConstants.ACTION_TAKEN_CANCELED_CD); 296 } 297 298 @Override 299 public boolean addRouted() { 300 return addAction(KewApiConstants.ACTION_TAKEN_ROUTED_CD); 301 } 302 } 303 304 /** 305 * Defines some internal constants used on this class. 306 * 307 */ 308 static class Constants { 309 310 final static String ROOT_ELEMENT_NAME = "actionSet"; 311 final static String TYPE_NAME = "ActionSetType"; 312 } 313 314 /** 315 * A private class which exposes constants which define the XML element names to use when this object is marshalled to XML. 316 * 317 */ 318 static class Elements { 319 320 final static String ACTION_SET_LIST = "actionSetList"; 321 } 322 }