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.krms.api.repository.agenda;
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
033 /**
034 * Concrete model object implementation of KRMS AgendaTreeRuleEntry
035 * immutable.
036 * Instances of AgendaTreeRuleEntry can be (un)marshalled to and from XML.
037 *
038 * @author Kuali Rice Team (rice.collab@kuali.org)
039 *
040 */
041 @XmlRootElement(name = AgendaTreeRuleEntry.Constants.ROOT_ELEMENT_NAME)
042 @XmlAccessorType(XmlAccessType.NONE)
043 @XmlType(name = AgendaTreeRuleEntry.Constants.TYPE_NAME, propOrder = {
044 AgendaTreeRuleEntry.Elements.AGENDA_ITEM_ID,
045 AgendaTreeRuleEntry.Elements.RULE_ID,
046 AgendaTreeRuleEntry.Elements.IF_TRUE,
047 AgendaTreeRuleEntry.Elements.IF_FALSE,
048 CoreConstants.CommonElements.FUTURE_ELEMENTS
049 })
050 public final class AgendaTreeRuleEntry extends AbstractDataTransferObject implements AgendaTreeEntryDefinitionContract {
051
052 private static final long serialVersionUID = 8594116503548506936L;
053
054 @XmlElement(name = Elements.AGENDA_ITEM_ID, required = true)
055 private final String agendaItemId;
056
057 @XmlElement(name = Elements.RULE_ID, required = true)
058 private final String ruleId;
059
060 @XmlElement(name = Elements.IF_TRUE, required = false)
061 private final AgendaTreeDefinition ifTrue;
062
063 @XmlElement(name = Elements.IF_FALSE, required = false)
064 private final AgendaTreeDefinition ifFalse;
065
066 @SuppressWarnings("unused")
067 @XmlAnyElement
068 private final Collection<org.w3c.dom.Element> _futureElements = null;
069
070 /**
071 * This constructor should never be called.
072 * It is only present for use during JAXB unmarshalling.
073 */
074 private AgendaTreeRuleEntry() {
075 this.agendaItemId = null;
076 this.ruleId = null;
077 this.ifTrue = null;
078 this.ifFalse = null;
079 }
080
081 /**
082 * Constructs a AgendaTreeRuleEntry from the given builder.
083 * This constructor is private and should only ever be invoked from the builder.
084 *
085 * @param builder the Builder from which to construct the AgendaTreeRuleEntry
086 */
087 private AgendaTreeRuleEntry(Builder builder) {
088 this.agendaItemId = builder.getAgendaItemId();
089 this.ruleId = builder.getRuleId();
090 this.ifTrue = builder.getIfTrue() == null ? null : builder.getIfTrue().build();
091 this.ifFalse = builder.getIfFalse() == null ? null : builder.getIfFalse().build();
092 }
093
094 @Override
095 public String getAgendaItemId() {
096 return agendaItemId;
097 }
098
099 /**
100 * Returns the rule id.
101 * @return ruleId of the AgendaTreeRuleEntry
102 */
103 public String getRuleId() {
104 return this.ruleId;
105 }
106
107 /**
108 * Returns the AgendaTreeDefinition for ifTrue.
109 * @return {@link AgendaTreeDefinition} for ifTrue
110 */
111 public AgendaTreeDefinition getIfTrue() {
112 return this.ifTrue;
113 }
114
115 /**
116 * Returns the AgendaTreeDefinition for ifFalse.
117 * @return {@link AgendaTreeDefinition} for ifFalse
118 */
119 public AgendaTreeDefinition getIfFalse() {
120 return this.ifFalse;
121 }
122
123 /**
124 * This builder is used to construct instances of AgendaTreeRuleEntry.
125 * It enforces the constraints of the {@link AgendaTreeEntryDefinitionContract}.
126 */
127 public static class Builder implements AgendaTreeEntryDefinitionContract, Serializable {
128
129 private static final long serialVersionUID = 3548736700798501429L;
130
131 private String agendaItemId;
132 private String ruleId;
133 private AgendaTreeDefinition.Builder ifTrue;
134 private AgendaTreeDefinition.Builder ifFalse;
135
136 /**
137 * Private constructor for creating a builder with all of it's required attributes.
138 *
139 * @param agendaItemId the agendaItemId value to set, must not be null or blank
140 * @param ruleId the propId value to set, must not be null or blank
141 */
142 private Builder(String agendaItemId, String ruleId) {
143 setAgendaItemId(agendaItemId);
144 setRuleId(ruleId);
145 }
146
147 /**
148 * Create a builder using the given values
149 *
150 * @param agendaItemId the agendaItemId value to set, must not be null or blank
151 * @param ruleId the propId value to set, must not be null or blank
152 * @return Builder with the given values set
153 */
154 public static Builder create(String agendaItemId, String ruleId){
155 return new Builder(agendaItemId, ruleId);
156 }
157
158 @Override
159 public String getAgendaItemId() {
160 return this.agendaItemId;
161 }
162
163 /**
164 * Returns the rule id.
165 * @return ruleId of the AgendaTreeRuleEntry
166 */
167 public String getRuleId() {
168 return this.ruleId;
169 }
170
171 /**
172 * Returns the AgendaTreeDefinition.Builder for ifTrue.
173 * @return {@link AgendaTreeDefinition.Builder} for ifTrue
174 */
175 public AgendaTreeDefinition.Builder getIfTrue() {
176 return this.ifTrue;
177 }
178
179 /**
180 * Returns the AgendaTreeDefinition.Builder for ifFalse.
181 * @return {@link AgendaTreeDefinition.Builder} for ifFalse
182 */
183 public AgendaTreeDefinition.Builder getIfFalse() {
184 return this.ifFalse;
185 }
186
187 /**
188 * Sets the agendaItemId, cannot be null or blank.
189 * @param agendaItemId the agendaItemId value to set, must not be null or blank
190 * @throws IllegalArgumentException if agendaItemId is null or blank.
191 */
192 public void setAgendaItemId(String agendaItemId) {
193 if (StringUtils.isBlank(agendaItemId)) {
194 throw new IllegalArgumentException("agendaItemId was null or blank");
195 }
196 this.agendaItemId = agendaItemId;
197 }
198
199 /**
200 * @param ruleId the propId value to set, must not be null or blank
201 * @throws IllegalArgumentException if ruleId is null or blank.
202 */
203 public void setRuleId(String ruleId) {
204 if (StringUtils.isBlank(ruleId)) {
205 throw new IllegalArgumentException("ruleId was null or blank");
206 }
207 this.ruleId = ruleId;
208 }
209
210 /**
211 * Set the ifTrue {@link AgendaTreeDefinition.Builder}
212 * @param ifTrue {@link AgendaTreeDefinition.Builder} for ifTrue
213 */
214 public void setIfTrue(AgendaTreeDefinition.Builder ifTrue) {
215 this.ifTrue = ifTrue;
216 }
217
218 /**
219 * Set the ifFalse {@link AgendaTreeDefinition.Builder}
220 * @param ifFalse {@link AgendaTreeDefinition.Builder} for ifFalse
221 */
222 public void setIfFalse(AgendaTreeDefinition.Builder ifFalse) {
223 this.ifFalse = ifFalse;
224 }
225
226 /**
227 * Build the {@link AgendaTreeRuleEntry} with the builders values
228 * @return {@link AgendaTreeRuleEntry} with the builders values
229 */
230 public AgendaTreeRuleEntry build() {
231 return new AgendaTreeRuleEntry(this);
232 }
233
234 }
235
236 /**
237 * Defines some internal constants used on this class.
238 */
239 static class Constants {
240 final static String ROOT_ELEMENT_NAME = "agendaTreeRuleEntry";
241 final static String TYPE_NAME = "AgendaTreeRuleEntryType";
242 }
243
244 /**
245 * A private class which exposes constants which define the XML element names to use
246 * when this object is marshalled to XML.
247 */
248 static class Elements {
249 final static String AGENDA_ITEM_ID = "agendaItemId";
250 final static String RULE_ID = "ruleId";
251 final static String IF_TRUE = "ifTrue";
252 final static String IF_FALSE = "ifFalse";
253 }
254
255 }