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.krad.datadictionary;
017
018 import org.apache.commons.lang.StringUtils;
019 import org.kuali.rice.krad.datadictionary.exception.AttributeValidationException;
020 import org.kuali.rice.krad.datadictionary.validation.capability.CollectionSizeConstrainable;
021
022 /**
023 * A single Collection attribute definition in the DataDictionary, which contains information relating to the display, validation,
024 * and general maintenance of a specific Collection attribute of an entry.
025 *
026 *
027 */
028 public class CollectionDefinition extends DataDictionaryDefinitionBase implements CollectionSizeConstrainable{
029 private static final long serialVersionUID = -2644072136271281041L;
030
031 protected String dataObjectClass;
032 protected String name;
033 protected String label;
034 protected String shortLabel;
035 protected String elementLabel;
036
037 protected String summary;
038
039 protected String description;
040
041 protected Integer minOccurs;
042 protected Integer maxOccurs;
043
044 public CollectionDefinition() {
045 //empty
046 }
047
048 public String getName() {
049 return name;
050 }
051
052 public void setName(String name) {
053 if (StringUtils.isBlank(name)) {
054 throw new IllegalArgumentException("invalid (blank) name");
055 }
056 this.name = name;
057 }
058
059 public String getLabel() {
060 return label;
061 }
062
063 public void setLabel(String label) {
064 if (StringUtils.isBlank(label)) {
065 throw new IllegalArgumentException("invalid (blank) label");
066 }
067 this.label = label;
068 }
069
070 /**
071 * @return the shortLabel, or the label if no shortLabel has been set
072 */
073 public String getShortLabel() {
074 return (shortLabel != null) ? shortLabel : label;
075 }
076
077 public void setShortLabel(String shortLabel) {
078 if (StringUtils.isBlank(shortLabel)) {
079 throw new IllegalArgumentException("invalid (blank) shortLabel");
080 }
081 this.shortLabel = shortLabel;
082 }
083
084 /**
085 * Gets the elementLabel attribute.
086 * @return Returns the elementLabel.
087 */
088 public String getElementLabel() {
089 return elementLabel;
090 }
091
092 /**
093 * The elementLabel defines the name to be used for a single object
094 * within the collection. For example: "Address" may be the name
095 * of one object within the "Addresses" collection.
096 */
097 public void setElementLabel(String elementLabel) {
098 this.elementLabel = elementLabel;
099 }
100
101 public String getSummary() {
102 return summary;
103 }
104
105 /**
106 * The summary element is used to provide a short description of the
107 * attribute or collection. This is designed to be used for help purposes.
108 */
109 public void setSummary(String summary) {
110 this.summary = summary;
111 }
112
113 public String getDescription() {
114 return description;
115 }
116
117 /**
118 * The description element is used to provide a long description of the
119 * attribute or collection. This is designed to be used for help purposes.
120 */
121 public void setDescription(String description) {
122 this.description = description;
123 }
124
125
126 /**
127 * @return the dataObjectClass
128 */
129 public String getDataObjectClass() {
130 return this.dataObjectClass;
131 }
132
133 /**
134 * @param objectClass the dataObjectClass to set
135 */
136 public void setDataObjectClass(String dataObjectClass) {
137 this.dataObjectClass = dataObjectClass;
138 }
139
140 /**
141 * Directly validate simple fields, call completeValidation on Definition fields.
142 *
143 * @see org.kuali.rice.krad.datadictionary.DataDictionaryEntry#completeValidation()
144 */
145 public void completeValidation(Class rootBusinessObjectClass, Class otherBusinessObjectClass) {
146 if (!DataDictionary.isCollectionPropertyOf(rootBusinessObjectClass, name)) {
147 throw new AttributeValidationException("property '" + name + "' is not a collection property of class '" + rootBusinessObjectClass + "' (" + "" + ")");
148 }
149 }
150
151
152 /**
153 * @see java.lang.Object#toString()
154 */
155 @Override
156 public String toString() {
157 return "CollectionDefinition for collection " + getName();
158 }
159
160 /**
161 * @see org.kuali.rice.krad.datadictionary.validation.constraint.CollectionSizeConstraint#getMaximumNumberOfElements()
162 */
163 @Override
164 public Integer getMaximumNumberOfElements() {
165 return this.maxOccurs;
166 }
167
168 /**
169 * @see org.kuali.rice.krad.datadictionary.validation.constraint.CollectionSizeConstraint#getMinimumNumberOfElements()
170 */
171 @Override
172 public Integer getMinimumNumberOfElements() {
173 return this.minOccurs;
174 }
175
176 /**
177 * @return the minOccurs
178 */
179 public Integer getMinOccurs() {
180 return this.minOccurs;
181 }
182
183 /**
184 * @param minOccurs the minOccurs to set
185 */
186 public void setMinOccurs(Integer minOccurs) {
187 this.minOccurs = minOccurs;
188 }
189
190 /**
191 * @return the maxOccurs
192 */
193 public Integer getMaxOccurs() {
194 return this.maxOccurs;
195 }
196
197 /**
198 * @param maxOccurs the maxOccurs to set
199 */
200 public void setMaxOccurs(Integer maxOccurs) {
201 this.maxOccurs = maxOccurs;
202 }
203
204 }