001: /*
002: Mdarad-Toolobox is a collection of tools for Architected RAD
003: (Rapid Application Development) based on an MDA approach.
004: The toolbox contains frameworks and generators for many environments
005: (JAVA, J2EE, Hibernate, .NET, C++, etc.) which allow to generate
006: applications from a design Model
007: Copyright (C) 2004-2005 Elapse Technologies Inc.
008:
009: This library is free software; you can redistribute it and/or
010: modify it under the terms of the GNU General Public
011: License as published by the Free Software Foundation; either
012: version 2.1 of the License, or (at your option) any later version.
013:
014: This library is distributed in the hope that it will be useful,
015: but WITHOUT ANY WARRANTY; without even the implied warranty of
016: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
017: General Public License for more details.
018:
019: You should have received a copy of the GNU General Public
020: License along with this library; if not, write to the Free Software
021: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
022: */
023: package org.mdarad.framework.util.struts.criteria;
024:
025: import java.io.Serializable;
026: import java.util.Locale;
027:
028: import org.mdarad.framework.expr.Criterion;
029: import org.mdarad.framework.expr.Operator;
030: import org.mdarad.framework.expr.OperatorType;
031:
032: /**
033: * This abstract class is a search criterion that uses an operator (ex: =, <, >, etc).
034: * USAGE: To use the search criterion, the implementation should derive from
035: * <code>FormCriterionWithOperator</code> and implements the method
036: * {@link #getOperators()() getOperators}.
037: * @author Philippe Brouillette
038: * @version 1.0
039: */
040: public abstract class FormCriterionWithOperator extends FormCriterion
041: implements Serializable {
042:
043: /**
044: * Constructor that takes all the properties to initialize a search
045: * criterion. By default, the criterion is dynamic.
046: * @param name name of the criterion. This name must be unique
047: * as it is a key in a map.
048: * @param associatedEntity class type associated to this criterion
049: * @param property property used for the query criterion
050: * @param bundleName bundle name
051: * @param locale locale information
052: * @see FormCriterion#FormCriterion(String, CriterionProperty, String, Locale) FormCriterion
053: */
054: public FormCriterionWithOperator(String name,
055: Class associatedEntity, CriterionProperty property,
056: String bundleName, Locale locale) {
057: super (name, associatedEntity, property, bundleName, locale);
058:
059: }
060:
061: /**
062: * Constructor that takes all the properties to initialize a search
063: * criterion.
064: * @param name name of the criterion. This name must be unique
065: * as it is a key in a map.
066: * @param associatedEntity class type associated to this criterion
067: * @param property property used for the query criterion
068: * @param bundleName bundle name
069: * @param locale locale information
070: * @param isDynamic boolean that indicates if the criterion is dynamic
071: * @see FormCriterion#FormCriterion(String, CriterionProperty, String, Locale) FormCriterion
072: */
073: public FormCriterionWithOperator(String name,
074: Class associatedEntity, CriterionProperty property,
075: String bundleName, Locale locale, boolean isDynamic) {
076: super (name, associatedEntity, property, bundleName, locale,
077: isDynamic);
078:
079: }
080:
081: /**
082: * Constructor that clones a query criterion. This constructor is used
083: * to instanciate a criterion in a search form when the form
084: * contains dynamic criteria.
085: * @param criterion query criterion that must be of
086: * type <code>FormCriterionWithOperator</code>
087: * @see FormCriterion#FormCriterion(FormCriterion) FormCriterion
088: */
089: public FormCriterionWithOperator(FormCriterionWithOperator criterion) {
090: super (criterion);
091: }
092:
093: private Operator operator;
094:
095: /**
096: * Returns the list of operators that can be used with this criterion. The operator
097: * must be instanciated as {@link Operator Operator}.
098: * @return array of operators
099: */
100: abstract public Operator[] getOperators();
101:
102: /**
103: * Return the opertator selected in the user interface as a string
104: * @return the selected operator as a string.
105: */
106: public String getOperator() {
107: if (operator != null) {
108: return operator.getKey();
109: } else
110: return new String();
111: }
112:
113: /**
114: * Return the operator as an object type {@link Operator Operator}
115: * @return operator as an object.
116: */
117: public Operator getOperatorObject() {
118: return operator;
119: }
120:
121: /**
122: * Method that set an operator using a string.
123: * @param operator stirng that contains the key of the operator.
124: */
125: public void setOperator(String operator) {
126: Operator[] operators = getOperators();
127: for (int i = 0; i < operators.length; i++) {
128: if (operators[i].getKey().equals(operator)) {
129: this .operator = operators[i];
130: }
131: }
132: }
133:
134: /**
135: * Method that returns the criterion from the expression
136: * framework. ({@link Criterion})
137: * <p><b>NOTE:</b> The implementation must take care of the type
138: * of operator that is used to determine the criterion to use.
139: * @return the criterion
140: */
141: public Criterion getExprCriterion() {
142: Criterion crit = null;
143: OperatorType type = getOperatorObject().getType();
144: crit = new Criterion(getAssociatedEntity(), getProperty()
145: .getName(), type, getValue(), getLocale());
146:
147: return crit;
148: }
149: }
|