001 /**
002 * Copyright 2005-2014 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.kns.datadictionary;
017
018 import org.kuali.rice.krad.bo.BusinessObject;
019 import org.kuali.rice.krad.datadictionary.exception.DuplicateEntryException;
020
021 import java.util.ArrayList;
022 import java.util.HashMap;
023 import java.util.List;
024 import java.util.Map;
025 /**
026 The inquiryCollection defines a collection within the Business Object which contains
027 data that should be displayed with the BO when the inquiry is performed.
028
029 Each inquiryCollection defines a set of data fields, nested inquiryCollections
030 and summaryFields. The summaryFields will be reported in the header of
031 this inquiryCollection, .
032
033 DD: See InquiryCollectionDefinition.java
034 JSTL: The inquiryCollection element is a Map with the following keys:
035 * name (String)
036 * dataObjectClass (String)
037 * numberOfColumns (String)
038 * inquiryFields (Map)
039 * inquiryCollections (Map, optional)
040 * summaryTitle (String)
041 * summaryFields (Map, optional)
042 */
043 @Deprecated
044 public class InquiryCollectionDefinition extends FieldDefinition implements CollectionDefinitionI {
045 private static final long serialVersionUID = 2257743293609536893L;
046
047 protected Class<? extends BusinessObject> businessObjectClass;
048
049 protected Integer numberOfColumns = 1;
050
051 protected Map<String,FieldDefinition> inquiryFieldMap = new HashMap<String, FieldDefinition>();
052 protected Map<String,InquiryCollectionDefinition> inquiryCollectionMap = new HashMap<String, InquiryCollectionDefinition>();
053 protected Map<String,FieldDefinitionI> summaryFieldMap = new HashMap<String, FieldDefinitionI>();
054 protected List<FieldDefinition> inquiryFields = new ArrayList<FieldDefinition>();
055 protected List<InquiryCollectionDefinition> inquiryCollections = new ArrayList<InquiryCollectionDefinition>();
056 protected List<FieldDefinition> summaryFields = new ArrayList<FieldDefinition>();
057
058 protected String summaryTitle;
059
060
061 public InquiryCollectionDefinition() {}
062
063 public Class<? extends BusinessObject> getBusinessObjectClass() {
064 return businessObjectClass;
065 }
066
067 /**
068 This attribute is used in many contexts, for example, in maintenance docs, it's used to specify the classname
069 of the BO being maintained.
070 */
071 public void setBusinessObjectClass(Class<? extends BusinessObject> businessObjectClass) {
072 this.businessObjectClass = businessObjectClass;
073 }
074
075 public Integer getNumberOfColumns() {
076 return numberOfColumns;
077 }
078
079 /**
080 numberOfColumns = the number of fields to be displayed in each row of the inquiry section.
081 For example, numberOfColumns = 2 indicates that the label and values for two fields will be
082 displayed in each row as follows:
083 field1label field1value | field2label field2value
084 field3label field3value | field4label field4value
085 etc.
086 */
087 public void setNumberOfColumns(Integer numberOfColumns) {
088 this.numberOfColumns = numberOfColumns;
089 }
090
091 public String getName() {
092 return getAttributeName();
093 }
094
095 public List<? extends CollectionDefinitionI> getCollections() {
096 return inquiryCollections;
097 }
098
099 public List<? extends FieldDefinitionI> getFields() {
100 return inquiryFields;
101 }
102
103 public boolean getIncludeAddLine() {
104 return false;
105 }
106
107 public boolean isAlwaysAllowCollectionDeletion() {
108 return false;
109 }
110
111 public boolean hasSummaryField(String key) {
112 return summaryFieldMap.containsKey(key);
113 }
114
115 /**
116 The title element is used specify the title that will appear in the header
117 of an Inquiry or Lookup screen.
118 */
119 public void setSummaryTitle(String summaryTitle) {
120 this.summaryTitle = summaryTitle;
121 }
122
123 public String getSummaryTitle() {
124 return this.summaryTitle;
125 }
126
127 public List<FieldDefinition> getInquiryFields() {
128 return this.inquiryFields;
129 }
130
131 /**
132 JSTL: inquiryFields is a Map which is accessed using a
133 key of "inquiryFields". This map contains the following types
134 of elements:
135 * inquirySubSectionHeader
136 * field
137 * inquiryCollection
138 Each of these entries are keyed by "attributeName".
139 The associated value is the attributeName of the
140 mapped element.
141
142 The inquirySubSectionHeader allows a separator containing text to
143 separate groups of fields. The name attribute is the displayed text.
144
145 DD: See InquirySubSectionHeaderDefinition.
146 JSTL: inquirySubSectionHeader appears in the inquiryFields map as:
147 * key = "attributeName"
148 * value = name of inquirySubSectionHeader
149
150
151 The field element defines the attributes of a single data field.
152
153 DD: See FieldDefinition.java
154 JSTL: The field element is a Map which is accessed using
155 a key of the attributeName. This map contains the following keys:
156 * attributeName (String)
157 * forceInquiry (boolean String)
158 * noInquiry (boolean String)
159 * maxLength (String)
160
161 forceInquiry = true means that the displayed field value will
162 always be made inquirable (this attribute is not used within the code).
163
164 noInquiry = true means that the displayed field will never be made inquirable.
165
166 maxLength = the maximum allowable length of the field in the lookup result fields. In other contexts,
167 like inquiries, this field has no effect.
168
169 */
170 public void setInquiryFields(List<FieldDefinition> inquiryFields) {
171 inquiryFieldMap.clear();
172 for ( FieldDefinition inquiryField : inquiryFields ) {
173 if (inquiryField == null) {
174 throw new IllegalArgumentException("invalid (null) inquiryField");
175 }
176
177 String itemName = inquiryField.getAttributeName();
178 if (inquiryFieldMap.containsKey(itemName)) {
179 throw new DuplicateEntryException(
180 "duplicate itemName entry for item '" + itemName + "'");
181 }
182
183 inquiryFieldMap.put(itemName, inquiryField);
184 }
185
186 this.inquiryFields = inquiryFields;
187 }
188
189 public List<InquiryCollectionDefinition> getInquiryCollections() {
190 return inquiryCollections;
191 }
192
193 /**
194 inquirySections allows inquiry to be presented in sections.
195 Each section can have a different format.
196 */
197 public void setInquiryCollections(List<InquiryCollectionDefinition> inquiryCollections) {
198 inquiryCollectionMap.clear();
199 for ( InquiryCollectionDefinition inquiryCollection : inquiryCollections ) {
200 if (inquiryCollection == null) {
201 throw new IllegalArgumentException(
202 "invalid (null) inquiryCollection");
203 }
204
205 String fieldName = inquiryCollection.getName();
206 if (inquiryCollectionMap.containsKey(fieldName)) {
207 throw new DuplicateEntryException(
208 "duplicate fieldName entry for field '" + fieldName + "'");
209 }
210
211 inquiryCollectionMap.put(fieldName, inquiryCollection);
212 }
213 this.inquiryCollections = inquiryCollections;
214 }
215
216 public List<FieldDefinition> getSummaryFields() {
217 return this.summaryFields;
218 }
219
220 /**
221 The inquirySummaryField indicates which fields are to appear in
222 the header line of each record in a collection. For example,
223 the header of an address record may contain something like:
224 "Address ( Purchase_Order - San Francisco )"
225 where the two summary fields are:
226 Vendor Type = "Purchase_Order"
227 Vendor City = "San Francisco"
228
229 DD: See FieldDefinition.java
230 */
231 public void setSummaryFields(List<FieldDefinition> summaryFields) {
232 summaryFieldMap.clear();
233 for ( FieldDefinition inquiryField : summaryFields ) {
234 if (inquiryField == null) {
235 throw new IllegalArgumentException("invalid (null) summaryField");
236 }
237
238 String itemName = inquiryField.getAttributeName();
239 if (summaryFieldMap.containsKey(itemName)) {
240 throw new DuplicateEntryException(
241 "duplicate itemName entry for item '" + itemName + "'");
242 }
243
244 summaryFieldMap.put(itemName, inquiryField);
245 }
246 this.summaryFields = summaryFields;
247 }
248
249
250 }