001: /*
002: * ====================================================================
003: * JAFFA - Java Application Framework For All
004: *
005: * Copyright (C) 2002 JAFFA Development Group
006: *
007: * This library is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU Lesser General Public
009: * License as published by the Free Software Foundation; either
010: * version 2.1 of the License, or (at your option) any later version.
011: *
012: * This library is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this library; if not, write to the Free Software
019: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
020: *
021: * Redistribution and use of this software and associated documentation ("Software"),
022: * with or without modification, are permitted provided that the following conditions are met:
023: * 1. Redistributions of source code must retain copyright statements and notices.
024: * Redistributions must also contain a copy of this document.
025: * 2. Redistributions in binary form must reproduce the above copyright notice,
026: * this list of conditions and the following disclaimer in the documentation
027: * and/or other materials provided with the distribution.
028: * 3. The name "JAFFA" must not be used to endorse or promote products derived from
029: * this Software without prior written permission. For written permission,
030: * please contact mail to: jaffagroup@yahoo.com.
031: * 4. Products derived from this Software may not be called "JAFFA" nor may "JAFFA"
032: * appear in their names without prior written permission.
033: * 5. Due credit should be given to the JAFFA Project (http://jaffa.sourceforge.net).
034: *
035: * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
036: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
037: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
038: * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
039: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
040: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
041: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
042: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
043: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
044: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
045: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
046: * SUCH DAMAGE.
047: * ====================================================================
048: */
049:
050: package org.jaffa.components.finder;
051:
052: import java.util.*;
053: import org.jaffa.datatypes.Formatter;
054: import org.jaffa.util.MessageHelper;
055: import org.apache.log4j.Logger;
056: import org.jaffa.datatypes.Parser;
057: import org.jaffa.config.Config;
058:
059: /**
060: * This class holds the values displayed in a Criteria dropdown. Currently the labels are hard-coded for each of the value.
061: * @author GautamJ
062: */
063: public class CriteriaDropDownOptions {
064:
065: private static final Logger log = Logger
066: .getLogger(CriteriaDropDownOptions.class);
067: private static final Map c_allCriteriaDropDownOptions = new LinkedHashMap();
068: private static final Map c_numericalCriteriaDropDownOptions = new LinkedHashMap();
069: private static final Map c_dateCriteriaDropDownOptions = new LinkedHashMap();
070: private static final Map c_booleanCriteriaDropDownOptions = new LinkedHashMap();
071: private static final Map c_dropDownCriteriaDropDownOptions = new LinkedHashMap();
072: private static final Map c_maxRecordsDropDownOptions = new LinkedHashMap();
073: private static Long c_defaultMaxRecordsDropDownOption = null;
074:
075: static {
076: c_booleanCriteriaDropDownOptions
077: .put(
078: "",
079: MessageHelper
080: .tokenize("label.Jaffa.Inquiry.BooleanCriteriaDropDownOption.Any"));
081: c_booleanCriteriaDropDownOptions
082: .put(
083: "true",
084: MessageHelper
085: .tokenize("label.Jaffa.Inquiry.BooleanCriteriaDropDownOption.True"));
086: c_booleanCriteriaDropDownOptions
087: .put(
088: "false",
089: MessageHelper
090: .tokenize("label.Jaffa.Inquiry.BooleanCriteriaDropDownOption.False"));
091:
092: c_dropDownCriteriaDropDownOptions
093: .put(
094: CriteriaField.RELATIONAL_EQUALS,
095: MessageHelper
096: .tokenize("label.Jaffa.Inquiry.CriteriaDropDownOption.Equals"));
097: c_dropDownCriteriaDropDownOptions
098: .put(
099: CriteriaField.RELATIONAL_NOT_EQUALS,
100: MessageHelper
101: .tokenize("label.Jaffa.Inquiry.CriteriaDropDownOption.NotEquals"));
102: c_dropDownCriteriaDropDownOptions
103: .put(
104: CriteriaField.RELATIONAL_GREATER_THAN,
105: MessageHelper
106: .tokenize("label.Jaffa.Inquiry.CriteriaDropDownOption.GreaterThan"));
107: c_dropDownCriteriaDropDownOptions
108: .put(
109: CriteriaField.RELATIONAL_SMALLER_THAN,
110: MessageHelper
111: .tokenize("label.Jaffa.Inquiry.CriteriaDropDownOption.SmallerThan"));
112: c_dropDownCriteriaDropDownOptions
113: .put(
114: CriteriaField.RELATIONAL_GREATER_THAN_EQUAL_TO,
115: MessageHelper
116: .tokenize("label.Jaffa.Inquiry.CriteriaDropDownOption.GreaterThanEqualTo"));
117: c_dropDownCriteriaDropDownOptions
118: .put(
119: CriteriaField.RELATIONAL_SMALLER_THAN_EQUAL_TO,
120: MessageHelper
121: .tokenize("label.Jaffa.Inquiry.CriteriaDropDownOption.SmallerThanEqualTo"));
122: c_dropDownCriteriaDropDownOptions
123: .put(
124: CriteriaField.RELATIONAL_IS_NOT_NULL,
125: MessageHelper
126: .tokenize("label.Jaffa.Inquiry.CriteriaDropDownOption.IsNotNull"));
127: c_dropDownCriteriaDropDownOptions
128: .put(
129: CriteriaField.RELATIONAL_IS_NULL,
130: MessageHelper
131: .tokenize("label.Jaffa.Inquiry.CriteriaDropDownOption.IsNull"));
132:
133: c_numericalCriteriaDropDownOptions
134: .putAll(c_dropDownCriteriaDropDownOptions);
135: c_numericalCriteriaDropDownOptions
136: .put(
137: CriteriaField.RELATIONAL_BETWEEN,
138: MessageHelper
139: .tokenize("label.Jaffa.Inquiry.CriteriaDropDownOption.Between"));
140: c_numericalCriteriaDropDownOptions
141: .put(
142: CriteriaField.RELATIONAL_IN,
143: MessageHelper
144: .tokenize("label.Jaffa.Inquiry.CriteriaDropDownOption.In"));
145:
146: c_dateCriteriaDropDownOptions
147: .putAll(c_numericalCriteriaDropDownOptions);
148:
149: c_allCriteriaDropDownOptions
150: .putAll(c_numericalCriteriaDropDownOptions);
151: c_allCriteriaDropDownOptions
152: .put(
153: CriteriaField.RELATIONAL_BEGINS_WITH,
154: MessageHelper
155: .tokenize("label.Jaffa.Inquiry.CriteriaDropDownOption.BeginsWith"));
156: c_allCriteriaDropDownOptions
157: .put(
158: CriteriaField.RELATIONAL_ENDS_WITH,
159: MessageHelper
160: .tokenize("label.Jaffa.Inquiry.CriteriaDropDownOption.EndsWith"));
161: c_allCriteriaDropDownOptions
162: .put(
163: CriteriaField.RELATIONAL_LIKE,
164: MessageHelper
165: .tokenize("label.Jaffa.Inquiry.CriteriaDropDownOption.Like"));
166:
167: // Determine the values to be displayed by the 'MaxRecords' dropdown of the Finder/Lookup criteria screens, and its default value
168: Long[] maxRecordsDropDownOptions = null;
169: try {
170: String str = (String) Config.getProperty(
171: Config.PROP_FINDER_MAX_RECORDS_DROP_DOWN_OPTIONS,
172: null);
173: if (str != null && str.trim().length() > 0) {
174: if (log.isDebugEnabled())
175: log
176: .debug("The String '"
177: + str
178: + "' will be used for displaying the values in the 'MaxRecords' dropdown of the Finder/Lookup criteria screens");
179: List list = new ArrayList();
180: for (StringTokenizer tknzr = new StringTokenizer(str,
181: ", "); tknzr.hasMoreTokens();)
182: list.add(Parser.parseInteger(tknzr.nextToken()));
183: c_defaultMaxRecordsDropDownOption = (Long) list.get(0);
184: Collections.sort(list);
185: maxRecordsDropDownOptions = (Long[]) list
186: .toArray(new Long[0]);
187: } else {
188: if (log.isDebugEnabled())
189: log
190: .debug("No value specified for the property 'framework.finder.maxRecordsDropDownOptions'. The default string '25,50,100,500,1000,2500,5000' will be used for displaying the values in the 'MaxRecords' dropdown of the Finder/Lookup criteria screens");
191: }
192: } catch (Exception e) {
193: // do nothing.. just log a warning
194: log
195: .warn(
196: "Error thrown while reading the property 'framework.finder.maxRecordsDropDownOptions'. Will use the default values '25,50,100,500,1000,2500,5000'",
197: e);
198: } finally {
199: if (maxRecordsDropDownOptions == null) {
200: maxRecordsDropDownOptions = new Long[] { new Long(25),
201: new Long(50), new Long(100), new Long(500),
202: new Long(1000), new Long(2500), new Long(5000) };
203: c_defaultMaxRecordsDropDownOption = new Long(25);
204: }
205: }
206: for (int i = 0; i < maxRecordsDropDownOptions.length; i++)
207: c_maxRecordsDropDownOptions.put(
208: maxRecordsDropDownOptions[i], Formatter
209: .format(maxRecordsDropDownOptions[i]));
210: c_maxRecordsDropDownOptions
211: .put(
212: new Long(0),
213: MessageHelper
214: .tokenize("label.Jaffa.Inquiry.MaxRecordsDropDownOption.Unlimited"));
215: }
216:
217: /** Returns a Map containg value-label pairs to be displayed in a criteria dropdown field.
218: * @return a Map containg value-label pairs to be displayed in a criteria dropdown field.
219: */
220: public static Map getAllCriteriaDropDownOptions() {
221: return c_allCriteriaDropDownOptions;
222: }
223:
224: /** Returns a Map containg value-label pairs to be displayed in a criteria dropdown field.
225: * This will not have the BeginsWith, EndWith and Like options, since they are meaningless for numerical fields.
226: * @return a Map containg value-label pairs to be displayed in a criteria dropdown field.
227: */
228: public static Map getNumericalCriteriaDropDownOptions() {
229: return c_numericalCriteriaDropDownOptions;
230: }
231:
232: /** Returns a Map containg value-label pairs to be displayed in a criteria dropdown field.
233: * This will not have the BeginsWith, EndWith and Like options, since they are meaningless for date fields.
234: * @return a Map containg value-label pairs to be displayed in a criteria dropdown field.
235: */
236: public static Map getDateCriteriaDropDownOptions() {
237: return c_dateCriteriaDropDownOptions;
238: }
239:
240: /** Returns a Map containg value-label pairs to be displayed in a criteria dropdown field.
241: * This will not have the Between and In options, since they are not supported for DropDown fields.
242: * This will not have the BeginsWith, EndWith and Like options, since they are meaningless for DropDown fields.
243: * @return a Map containg value-label pairs to be displayed in a criteria dropdown field.
244: */
245: public static Map getDropDownCriteriaDropDownOptions() {
246: return c_dropDownCriteriaDropDownOptions;
247: }
248:
249: /** Returns a Map containg value-label pairs to be displayed in a criteria dropdown for Boolean fields.
250: * @return a Map containg value-label pairs to be displayed in a criteria dropdown for Boolean fields.
251: */
252: public static Map getBooleanCriteriaDropDownOptions() {
253: return c_booleanCriteriaDropDownOptions;
254: }
255:
256: /** Returns a Map containg value-label pairs to be displayed in a dropdown for selecting the Max Records to be displayed in the Results page.
257: * The key will be a Long object, while the value will be a formatted String object.
258: * @return a Map containg value-label pairs to be displayed in a dropdown for selecting the Max Records to be displayed in the Results page.
259: */
260: public static Map getMaxRecordsDropDownOptions() {
261: return c_maxRecordsDropDownOptions;
262: }
263:
264: /** Returns the default value to be displayed in the 'MaxRecords' dropdown of the Finder/Lookup criteria screens.
265: * @return the default value to be displayed in the 'MaxRecords' dropdown of the Finder/Lookup criteria screens.
266: */
267: public static Long getDefaultMaxRecordsDropDownOption() {
268: return c_defaultMaxRecordsDropDownOption;
269: }
270:
271: }
|