View Javadoc

1   /*
2    * Joey and its relative products are published under the terms
3    * of the Apache Software License.
4    */
5   /*
6    * Created on 2003/12/29
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 }