001/**
002 * Copyright 2005-2016 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 */
016package org.kuali.rice.kns.datadictionary;
017
018import org.kuali.rice.krad.datadictionary.DataDictionaryDefinitionBase;
019import org.kuali.rice.krad.datadictionary.exception.DuplicateEntryException;
020
021import java.util.ArrayList;
022import java.util.LinkedHashMap;
023import java.util.List;
024import java.util.Map;
025
026/**
027 *                  inquirySection defines the format and content of
028                 one section of the inquiry.
029                 DD:  See InquirySectionDefinition.java
030                 
031                numberOfColumns = the number of fields to be displayed in each row of the inquiry section.
032                For example, numberOfColumns = 2 indicates that the label and values for two fields will be
033                displayed in each row as follows:
034                    field1label field1value  |   field2label field2value
035                    field3label field3value  |   field4label field4value
036                etc.
037                 
038 * Contains section-related information for inquiry sections
039 * Note: the setters do copious amounts of validation, to facilitate generating errors during the parsing process.
040 */
041@Deprecated
042public class InquirySectionDefinition extends DataDictionaryDefinitionBase {
043    private static final long serialVersionUID = 1565114894539391362L;
044    
045        protected String title;
046    protected List<FieldDefinition> inquiryFields = new ArrayList<FieldDefinition>();
047    protected Map<String, FieldDefinition> inquiryFieldMap = new LinkedHashMap<String, FieldDefinition>();
048    protected Map inquiryCollections;
049    
050    protected Integer numberOfColumns = 1;
051    protected boolean defaultOpen = true;
052    
053    public InquirySectionDefinition() {}
054
055
056    /**
057     * @return title
058     */
059    public String getTitle() {
060        return title;
061    }
062
063    /**
064     * Sets title to the given value.
065     * 
066     * @param title
067     * @throws IllegalArgumentException if the given title is blank
068     */
069    public void setTitle(String title) {
070        this.title = title;
071    }
072
073    /**
074     * @return List of attributeNames of all FieldDefinitions associated with this InquirySection, in the order in
075     *         which they were added
076     */
077    public List<String> getInquiryFieldNames() {
078        List<String> itemNames = new ArrayList<String>();
079        itemNames.addAll(this.inquiryFieldMap.keySet());
080
081        return itemNames;
082    }
083
084    /**
085     * @return Collection of all FieldDefinitions associated with this InquirySection, in the order in which they
086     *         were added
087     */
088    public List<FieldDefinition> getInquiryFields() {
089        return inquiryFields;
090    }
091
092    /**
093     * Directly validate simple fields, call completeValidation on Definition fields.
094     * 
095     * @see org.kuali.rice.krad.datadictionary.DataDictionaryDefinition#completeValidation(java.lang.Class, java.lang.Object)
096     */
097    public void completeValidation(Class rootBusinessObjectClass, Class otherBusinessObjectClass) {
098        for (FieldDefinition inquiryField : inquiryFields ) {
099            inquiryField.completeValidation(rootBusinessObjectClass, null);
100        }
101    }
102
103    public String toString() {
104        return "InquirySectionDefinition '" + getTitle() + "'";
105    }
106
107    public Map getInquiryCollections() {
108        return inquiryCollections;
109    }
110
111    /**
112                   The inquiryCollection defines a collection within the Business Object which contains
113                   data that should be displayed with the BO when the inquiry is performed.
114
115                   Each inquiryCollection defines a set of data fields, nested inquiryCollections
116                   and summaryFields.  The summaryFields will be reported in the header of
117                   this inquiryCollection, .
118
119                   DD: See InquiryCollectionDefinition.java
120                   JSTL: The inquiryCollection element is a Map with the following keys:
121                       * name (String)
122                       * dataObjectClass (String)
123                       * numberOfColumns (String)
124                       * inquiryFields (Map)
125                       * inquiryCollections (Map, optional)
126                       * summaryTitle (String)
127                       * summaryFields (Map, optional)
128     */
129    public void setInquiryCollections(Map inquiryCollections) {
130        this.inquiryCollections = inquiryCollections;
131    }
132
133    public Integer getNumberOfColumns() {
134        return numberOfColumns;
135    }
136
137    /**
138                numberOfColumns = the number of fields to be displayed in each row of the inquiry section.
139                For example, numberOfColumns = 2 indicates that the label and values for two fields will be
140                displayed in each row as follows:
141                    field1label field1value  |   field2label field2value
142                    field3label field3value  |   field4label field4value
143                etc.
144     */
145    public void setNumberOfColumns(Integer numberOfColumns) {
146        this.numberOfColumns = numberOfColumns;
147    }
148
149
150    /**
151                JSTL: inquiryFields is a Map which is accessed using a
152                key of "inquiryFields".  This map contains the following types
153                of elements:
154                    * inquirySubSectionHeader
155                    * field
156                    * inquiryCollection
157                Each of these entries are keyed by "attributeName".
158                The associated value is the attributeName of the
159                mapped element.
160
161                  The inquirySubSectionHeader allows a separator containing text to
162                  separate groups of fields.  The name attribute is the displayed text.
163
164                  JSTL: inquirySubSectionHeader appears in the inquiryFields map as:
165                      * key = "attributeName"
166                      * value = name of inquirySubSectionHeader
167
168
169                    The field element defines the attributes of a single data field.
170
171                    DD:  See FieldDefinition.java
172                    JSTL: The field element is a Map which is accessed using
173                    a key of the attributeName.  This map contains the following keys:
174                        * attributeName (String)
175                        * forceInquiry (boolean String)
176                        * noInquiry (boolean String)
177                        * maxLength (String)
178
179                forceInquiry = true means that the displayed field value will
180                always be made inquirable (this attribute is not used within the code).
181
182                noInquiry = true means that the displayed field will never be made inquirable.
183
184                maxLength = the maximum allowable length of the field in the lookup result fields.  In other contexts,
185                like inquiries, this field has no effect.
186     */
187    public void setInquiryFields(List<FieldDefinition> inquiryFields) {
188        inquiryFieldMap.clear();
189        for (FieldDefinition inquiryField : inquiryFields ) {
190            if (inquiryField == null) {
191                throw new IllegalArgumentException("invalid (null) inquiryField");
192            }
193
194            String itemName = inquiryField.getAttributeName();
195            if (inquiryFieldMap.containsKey(itemName)) {
196                throw new DuplicateEntryException("duplicate itemName entry for item '" + itemName + "'");
197            }
198
199            inquiryFieldMap.put(itemName, inquiryField);        
200        }
201        this.inquiryFields = inquiryFields;
202    }
203
204
205        /**
206         * @return the defaultOpen
207         */
208        public boolean isDefaultOpen() {
209                return this.defaultOpen;
210        }
211
212
213        /**
214         * @param defaultOpen the defaultOpen to set
215         */
216        public void setDefaultOpen(boolean defaultOpen) {
217                this.defaultOpen = defaultOpen;
218        }
219
220}