1
2
3
4
5
6
7
8 package org.asyrinx.joey.om;
9
10 import java.text.DateFormat;
11 import java.text.SimpleDateFormat;
12 import java.util.Collection;
13
14 import org.apache.commons.lang.StringUtils;
15
16 /***
17 * @author akima
18 */
19 public abstract class AbstractSearchCondition implements SearchCondition {
20
21 /***
22 *
23 */
24 public AbstractSearchCondition() {
25 super();
26 }
27
28 private int maxRecordCount = 10;
29
30 private DateFormat dateFormat = new SimpleDateFormat();
31
32 protected ConditionTranslator translater;
33
34 abstract protected void prepare();
35
36 /***
37 *
38 * @see org.asyrinx.joey.om.SearchCondition#attach(org.asyrinx.joey.om.ConditionTranslator)
39 */
40 public void attach(ConditionTranslator conditionTranslater) {
41 this.translater = conditionTranslater;
42 try {
43 prepare();
44 } finally {
45 this.translater = null;
46 }
47 }
48
49 /***
50 *
51 * @see org.asyrinx.joey.om.SearchCondition#getMaxRecordCount()
52 */
53 public int getMaxRecordCount() {
54 return maxRecordCount;
55 }
56
57 /***
58 *
59 * @see org.asyrinx.joey.om.SearchCondition#setMaxRecordCount(int)
60 */
61 public void setMaxRecordCount(int i) {
62 maxRecordCount = i;
63 }
64
65 protected final void addFrom(String tableName) {
66 if (StringUtils.isEmpty(tableName))
67 return;
68 translater.addFrom(tableName);
69 }
70
71 private boolean isAvailableValue(Object value) {
72 if (value == null)
73 return false;
74 if (value instanceof String)
75 return ((String) value).length() > 0;
76 if (value instanceof Collection)
77 return !((Collection) value).isEmpty();
78 return true;
79 }
80
81 protected final void addInt(String fieldName, Object value, Object operator) {
82 if (StringUtils.isEmpty(fieldName))
83 return;
84 if (!isAvailableValue(value))
85 return;
86 translater.addInt(fieldName, value, operator);
87 }
88
89 protected final void addInt(String fieldName, String value) {
90 addInt(fieldName, value, EQUAL);
91 }
92
93 protected final void addIntMin(String fieldName, String value) {
94 addInt(fieldName, value, GREATER_EQUAL);
95 }
96
97 protected final void addIntMax(String fieldName, String value) {
98 addInt(fieldName, value, LESS_EQUAL);
99 }
100
101 protected final void addLong(String fieldName, Object value, Object operator) {
102 if (StringUtils.isEmpty(fieldName))
103 return;
104 if (!isAvailableValue(value))
105 return;
106 translater.addLong(fieldName, value, operator);
107 }
108
109 protected final void addLong(String fieldName, String value) {
110 addLong(fieldName, value, EQUAL);
111 }
112
113 protected final void addLongMin(String fieldName, String value) {
114 addLong(fieldName, value, GREATER_EQUAL);
115 }
116
117 protected final void addLongMax(String fieldName, String value) {
118 addLong(fieldName, value, LESS_EQUAL);
119 }
120
121 protected final void addDate(String fieldName, Object value,
122 Object operator, DateFormat format) {
123 if (StringUtils.isEmpty(fieldName))
124 return;
125 if (!isAvailableValue(value))
126 return;
127 translater.addDate(fieldName, value, operator, format);
128 }
129
130 protected final void addDate(String fieldName, Object value, Object operator) {
131 addDate(fieldName, value, operator, getDateFormat());
132 }
133
134 protected final void addDate(String fieldName, String value) {
135 addDate(fieldName, value, EQUAL);
136 }
137
138 protected final void addDateMin(String fieldName, String value) {
139 addDate(fieldName, value, GREATER_EQUAL);
140 }
141
142 protected final void addDateMax(String fieldName, String value) {
143 addDate(fieldName, value, LESS_EQUAL);
144 }
145
146 protected final void addString(String fieldName, Object value,
147 Object operator) {
148 if (StringUtils.isEmpty(fieldName))
149 return;
150 if (!isAvailableValue(value))
151 return;
152 translater.addString(fieldName, value, operator);
153 }
154
155 protected final void addString(String fieldName, String value) {
156 if (StringUtils.isEmpty(fieldName))
157 return;
158 if (!isAvailableValue(value))
159 return;
160 if (value.indexOf("*") > -1)
161 translater.addString(fieldName, value, LIKE);
162 else
163 translater.addString(fieldName, value, EQUAL);
164 }
165
166 protected final void addAscendingOrderByColumn(String fieldName) {
167 if (StringUtils.isEmpty(fieldName))
168 return;
169 translater.addAscendingOrderByColumn(fieldName);
170 }
171
172 protected final void addDescendingOrderByColumn(String fieldName) {
173 if (StringUtils.isEmpty(fieldName))
174 return;
175 translater.addDescendingOrderByColumn(fieldName);
176 }
177
178 /***
179 * @return
180 */
181 public DateFormat getDateFormat() {
182 return dateFormat;
183 }
184
185 /***
186 * @param format
187 */
188 public void setDateFormat(DateFormat format) {
189 dateFormat = format;
190 }
191
192 public static final String EQUAL = "=";
193
194 public static final String GREATER_EQUAL = ">=";
195
196 public static final String GREATER = ">";
197
198 public static final String LESS_EQUAL = "<=";
199
200 public static final String LESS = "<";
201
202 public static final String LIKE = "like";
203
204 public static final String IN = "in";
205
206 public static final String NOT_IN = "not in";
207
208 /***
209 * @return
210 */
211 public ConditionTranslator getTranslater() {
212 return translater;
213 }
214
215 }