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.kns.datadictionary; 017 018 import org.kuali.rice.krad.datadictionary.DataDictionaryDefinitionBase; 019 import org.kuali.rice.krad.datadictionary.exception.DuplicateEntryException; 020 021 import java.util.ArrayList; 022 import java.util.LinkedHashMap; 023 import java.util.List; 024 import 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 042 public 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 }