KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > outerj > daisy > query > model > AbstractFunction


1 /*
2  * Copyright 2004 Outerthought bvba and Schaubroeck nv
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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 package org.outerj.daisy.query.model;
17
18 import org.outerj.daisy.query.QueryContext;
19 import org.outerj.daisy.repository.query.QueryException;
20 import org.outerj.daisy.repository.query.EvaluationContext;
21
22 import java.util.List JavaDoc;
23 import java.util.ArrayList JavaDoc;
24 import java.util.Iterator JavaDoc;
25 import java.sql.PreparedStatement JavaDoc;
26 import java.sql.SQLException JavaDoc;
27
28 public abstract class AbstractFunction implements Function {
29     protected List JavaDoc params = new ArrayList JavaDoc(4);
30     private int line = -1;
31     private int column = -1;
32
33     public void setLocation(int line, int column) {
34         this.line = line;
35         this.column = column;
36     }
37
38     public String JavaDoc getLocation() {
39         if (line == -1 && column == -1)
40             return "(location unknown)";
41         else
42             return "line " + line + ", column " + column;
43     }
44
45     public int getLine() {
46         return line;
47     }
48
49     public int getColumn() {
50         return column;
51     }
52
53     public void addParam(ValueExpr param) {
54         params.add(param);
55     }
56
57     protected ValueExpr getParam(int index) {
58         return (ValueExpr)params.get(index);
59     }
60
61     public void prepare(QueryContext context) throws QueryException {
62         if (params.size() == 0)
63             return;
64         Iterator JavaDoc paramsIt = params.iterator();
65         while (paramsIt.hasNext()) {
66             ((ValueExpr)paramsIt.next()).prepare(context);
67         }
68     }
69
70     public String JavaDoc getSqlPreConditions(SqlGenerationContext context) throws QueryException {
71         if (params.size() == 0)
72             return null;
73         StringBuffer JavaDoc preConds = new StringBuffer JavaDoc();
74         Iterator JavaDoc paramsIt = params.iterator();
75         while (paramsIt.hasNext()) {
76             ValueExpr param = (ValueExpr)paramsIt.next();
77             String JavaDoc preCond = param.getSqlPreConditions(context);
78             if (preCond != null) {
79                 if (preConds.length() > 0)
80                     preConds.append(" and ");
81                 preConds.append(preCond);
82             }
83         }
84         return preConds.length() > 0 ? preConds.toString() : null;
85     }
86
87     public int bindPreConditions(PreparedStatement JavaDoc stmt, int bindPos) throws SQLException JavaDoc, QueryException {
88         if (params.size() == 0)
89             return bindPos;
90         Iterator JavaDoc paramsIt = params.iterator();
91         while (paramsIt.hasNext()) {
92             ValueExpr param = (ValueExpr)paramsIt.next();
93             bindPos = param.bindPreConditions(stmt, bindPos);
94         }
95         return bindPos;
96     }
97
98     public boolean isSymbolicIdentifier() {
99         return false;
100     }
101
102     public boolean isMultiValue() {
103         return false;
104     }
105
106     public boolean isOutputOnly() {
107         Iterator JavaDoc paramsIt = params.iterator();
108         while (paramsIt.hasNext()) {
109             ValueExpr param = (ValueExpr)paramsIt.next();
110             if (param.isOutputOnly())
111                 return true;
112         }
113         return false;
114     }
115
116     public AclConditionViolation isAclAllowed() {
117         Iterator JavaDoc paramsIt = params.iterator();
118         while (paramsIt.hasNext()) {
119             ValueExpr param = (ValueExpr)paramsIt.next();
120             AclConditionViolation violation = param.isAclAllowed();
121             if (violation != null)
122                 return violation;
123         }
124         return null;
125     }
126
127     public Object JavaDoc translateSymbolic(ValueExpr valueExpr, EvaluationContext evaluationContext) throws QueryException {
128         throw new QueryException("translateSymbolic should not be called if isSymbolic returns false");
129     }
130
131     public void generateSqlValueExpr(StringBuffer JavaDoc sql, SqlGenerationContext context) throws QueryException {
132         Iterator JavaDoc paramsIt = params.iterator();
133         boolean first = true;
134         while (paramsIt.hasNext()) {
135             if (first)
136                 first = false;
137             else
138                 sql.append(", ");
139             ValueExpr param = (ValueExpr)paramsIt.next();
140             param.generateSqlValueExpr(sql, context);
141         }
142     }
143
144     public int bindValueExpr(PreparedStatement JavaDoc stmt, int bindPos, QValueType valueType, EvaluationContext evaluationContext) throws SQLException JavaDoc, QueryException {
145         Iterator JavaDoc paramsIt = params.iterator();
146         while (paramsIt.hasNext()) {
147             ValueExpr param = (ValueExpr)paramsIt.next();
148             bindPos = param.bindValueExpr(stmt, bindPos, valueType, evaluationContext);
149         }
150         return bindPos;
151     }
152
153     public String JavaDoc getExpression() {
154         StringBuffer JavaDoc expression = new StringBuffer JavaDoc();
155         expression.append(getFunctionName()).append("(");
156         boolean first = true;
157         Iterator JavaDoc paramsIt = params.iterator();
158         while (paramsIt.hasNext()) {
159             if (first)
160                 first = false;
161             else
162                 expression.append(", ");
163             ValueExpr valueExpr = (ValueExpr)paramsIt.next();
164             expression.append(valueExpr.getExpression());
165         }
166         expression.append(")");
167         return expression.toString();
168     }
169
170     public boolean canTestAppliesTo() {
171         Iterator JavaDoc paramsIt = params.iterator();
172         while (paramsIt.hasNext()) {
173             ValueExpr param = (ValueExpr)paramsIt.next();
174             if (!param.canTestAppliesTo())
175                 return false;
176         }
177         return true;
178     }
179 }
180
Popular Tags