001 /** 002 * Copyright 2005-2013 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 }