1 package net.sf.sapjcosupport;
2
3 import java.util.HashMap;
4 import java.util.Map;
5
6 /**
7 * Class that encapsulates the concept of a search criterion.
8 * <br/>
9 * It allows you to specify the search criteria for the SAP Search Help.
10 * <p/>
11 * <u>Remark:</u> If multiple search criteria are defined for a search, the criteria that operate
12 * on the same SAP field are considered <code>OR</code>-conditions. Criteria that operate on different
13 * SAP fields are considered <code>AND</code>-conditions.
14 *
15 * @author Jo Vandermeeren
16 * @since Mar 21, 2006 - 12:45:38 PM
17 */
18 public class SearchCriterion {
19 private String field, lowLimit, highLimit, option;
20
21 /**
22 * Option: field value equals value of lower limit
23 */
24 public static final String EQUAL = "EQ";
25 /**
26 * Option: field value contains the pattern in lower limit value
27 */
28 public static final String CONTAINS_PATTERN = "CP";
29 /**
30 * Option: field value is between value of lower and higher limit
31 */
32 public static final String BETWEEN = "BT";
33 /**
34 * Option: field value is not between value of lower and higher limit
35 */
36 public static final String NOT_BETWEEN = "NB";
37 /**
38 * Option: field valie is not equal to value of lower limit
39 */
40 public static final String NOT_EQUAL = "NE";
41 /**
42 * Option: field value does not contain the pattern in lower limit value
43 */
44 public static final String CONTAINS_NOT_PATTERN = "NP";
45 /**
46 * Option: field value is greater than value of lower limit
47 */
48 public static final String GREATER = "GT";
49 /**
50 * Option: field value is less than value of lower limit
51 */
52 public static final String LESS = "LT";
53 /**
54 * Option: field value is greater or equal to value of lower limit
55 */
56 public static final String GREATER_OR_EQUAL = "GE";
57 /**
58 * Option: field value is less or equal to value of lower limit
59 */
60 public static final String LESS_OR_EQUAL = "LE";
61
62 private boolean included;
63
64 /**
65 * Gets the option that is associated with this search criterion.
66 *
67 * @return option for this search criterion
68 */
69 public String getOption() {
70 return option;
71 }
72
73 /**
74 * Sets the option of the search criterion.
75 * <p/>
76 * Please use the constants defined in this class to assign an option.
77 * Some options require 2 parameters to operate correctly, e.g. {@link #BETWEEN}.
78 * You can assign those parameters by calling the {@link #setHighLimit} and {@link #setLowLimit}
79 * methods. If only 1 parameter is required, assign it to as the lower limit and leave the high limit blank.
80 * <p/>
81 * Possible options are:
82 * <ul>
83 * <li>EQUAL</li>
84 * <li>CONTAINS_PATTERN</li>
85 * <li>BETWEEN</li>
86 * <li>NOT_BETWEEN</li>
87 * <li>NOT_EQUAL</li>
88 * <li>CONTAINS_NOT_PATTERN</li>
89 * <li>GREATER</li>
90 * <li>LESS</li>
91 * <li>GREATER_OR_EQUAL</li>
92 * <li>LESS_OR_EQUAL</li>
93 * </ul>
94 *
95 * @param option option for this search criterion (please use the constants defined in this class)
96 */
97 public void setOption(String option) {
98 this.option = option;
99 }
100
101 /**
102 * Gets the SAP field to which this search criterion applies.
103 *
104 * @return SAP field name
105 */
106 public String getField() {
107 return field;
108 }
109
110 /**
111 * Sets the SAP field to which this search criterion applies
112 *
113 * @param field SAP field name
114 */
115 public void setField(String field) {
116 this.field = field;
117 }
118
119 /**
120 * Sets the sign of this search criterion.
121 * <p/>
122 * The sign of a search criterion defines if the items that match this criterion should be
123 * excluded or included from the results. This allows more complex queries, e.g.
124 * <i>Select all materials beginning with "ES", but exclude those ending with "MF"</i>.
125 *
126 * @param include true if you want to include results that match this criterion
127 */
128 public void setIncluded(boolean include) {
129 included = include;
130 }
131
132 /**
133 * Returns true if items that match this criterion should be included in the results.
134 *
135 * @return true if matches of this criterion will be included in the results
136 */
137 public boolean isIncluded() {
138 return included;
139 }
140
141 /**
142 * Gets the lower limit associated with this search criterion's option.
143 * <p/>
144 * If only one parameter is required for the specified option, this method returns that single limit.
145 *
146 * @return lower limit for specified option
147 */
148 public String getLowLimit() {
149 return lowLimit;
150 }
151
152 /**
153 * Sets the lower limit for the option that is associated with this search helper.
154 * <p/>
155 * If only one parameter is required for the specified option, please use this method to assign that single limit.
156 *
157 * @param lowLimit lower limit for specified option
158 */
159 public void setLowLimit(String lowLimit) {
160 this.lowLimit = lowLimit;
161 }
162
163 /**
164 * Gets the higher limit associated with this search criterion's option.
165 *
166 * @return higher limit for specified option
167 */
168 public String getHighLimit() {
169 return highLimit;
170 }
171
172 /**
173 * Sets the higher limit for the option that is associated with this search helper.
174 *
175 * @param highLimit higher limit for specified option
176 */
177 public void setHighLimit(String highLimit) {
178 this.highLimit = highLimit;
179 }
180
181 /**
182 * Helper method to convert a <code>SearchCriterion</code> object to a <code>Map</code>.
183 *
184 * @return Map containing the criterion properties
185 */
186 public Map toMap() {
187 Map selectionRow = new HashMap(5);
188
189 selectionRow.put("SHLPFIELD", getField());
190 selectionRow.put("SIGN", isIncluded() ? "I" : "E");
191 selectionRow.put("OPTION", getOption());
192 selectionRow.put("LOW", getLowLimit());
193 selectionRow.put("HIGH", getHighLimit());
194 return selectionRow;
195 }
196 }