01: /*
02: * Copyright 2006 Davide Deidda
03: *
04: * Licensed under the Apache License, Version 2.0 (the "License");
05: * you may not use this file except in compliance with the License.
06: * You may obtain a copy of the License at
07: *
08: * http://www.apache.org/licenses/LICENSE-2.0
09: *
10: * Unless required by applicable law or agreed to in writing, software
11: * distributed under the License is distributed on an "AS IS" BASIS,
12: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13: * See the License for the specific language governing permissions and
14: * limitations under the License.
15: */
16:
17: /*
18: * CompositeQueryFilter.java
19: *
20: * Created on 28 aprile 2005, 20.37
21: */
22:
23: package it.biobytes.ammentos.query;
24:
25: import java.util.*;
26:
27: /**
28: *
29: * @author davide
30: */
31: public class CompositeQueryFilter implements QueryFilter {
32: private List<QueryFilter> m_filters;
33: private int m_previousAppender;
34:
35: /** Creates a new instance of CompositeQueryFilter */
36: public CompositeQueryFilter() {
37: this (APP_AND);
38: }
39:
40: public CompositeQueryFilter(int previousAppender) {
41: m_previousAppender = previousAppender;
42: m_filters = new ArrayList<QueryFilter>();
43: }
44:
45: public void addFilter(QueryFilter filter) {
46: m_filters.add(filter);
47: }
48:
49: public int setParamValues(java.sql.PreparedStatement pstmt,
50: int initialIndex) throws java.sql.SQLException {
51: for (QueryFilter filter : m_filters) {
52: initialIndex = filter.setParamValues(pstmt, initialIndex);
53: }
54:
55: return initialIndex;
56: }
57:
58: public String getSql() {
59: StringBuilder res = new StringBuilder();
60:
61: res.append(" (");
62:
63: int i = 0;
64: for (QueryFilter filter : m_filters) {
65: if (filter != null) {
66: if (i != 0) {
67: res.append(filter.getPreviousAppender());
68: }
69: res.append(filter.getSql());
70: }
71: i++;
72: }
73: res.append(")");
74:
75: return res.toString();
76: }
77:
78: public String getPreviousAppender() {
79: String res = " AND ";
80: switch (m_previousAppender) {
81: case APP_AND:
82: res = " AND ";
83: break;
84: case APP_OR:
85: res = " OR ";
86: break;
87: }
88: return res;
89: }
90:
91: }
|