1 package com.instantbank.component.job.util;
2
3 import java.util.ArrayList;
4 import java.util.Hashtable;
5 import java.util.Enumeration;
6 import java.util.StringTokenizer;
7 import java.io.Serializable;
8
9 import com.instantbank.component.job.util.Alias;
10 import com.instantbank.component.job.util.Field;
11 import com.instantbank.component.job.util.ParticipantTable;
12 import com.instantbank.component.job.util.JoinElement;
13
14 import com.instantbank.common.utilcomponents.LetterTemplateGlobals;
15 import com.instantbank.common.utilcomponents.Debug;
16
17
23 public class AuxGenerateSQLtext
24 implements Serializable {
25
26
29 private String rootType;
30
31
35 private Hashtable systemAlias;
36
37
41 private Hashtable systemFields;
42
43
44 private Debug debug = null;
45
46
47
54 public AuxGenerateSQLtext(Hashtable systemFields, Hashtable systemAlias,
55 String rootType) {
56 debug = new Debug();
57 debug.setDebugginOn(false);
58 debug.setPreMessage("** AuxGenerateSQLtext");
59
60 this.systemFields = systemFields;
61 this.systemAlias = systemAlias;
62 this.rootType = rootType;
63 }
64
65
66
71 public String beginSELECT() {
72 String answer = null;
73 if(rootType.equals(LetterTemplateGlobals.ROOT_AGREEMENTS)) {
74 answer = " AGREEMENTS.AGRM_CODE AS AGRCODE ";
75 }
76 return answer;
77 }
78
79
80
86 public String alias(long fieldId) {
87 Field element = (Field)systemFields.get(new Long(fieldId));
88 return element.getTableAlias();
89 }
90
91
92
98 public String fieldColumn(long fieldId) {
99 Field element = (Field)systemFields.get(new Long(fieldId));
100 return element.getFieldColumn();
101 }
102
103
104
110 public String rename(long fieldId) {
111 String answer = "";
112
113 String tableAlias = alias(fieldId);
114 Alias element = (Alias)systemAlias.get(tableAlias + "|" + rootType);
115
116 String fieldCategory = element.getFieldCategory();
117 if(fieldCategory.equals(LetterTemplateGlobals.TEMPORAL_FIELDS)
118 || fieldCategory.equals(LetterTemplateGlobals.DERIVED_FIELDS)) {
119 answer = " AS " + tableAlias + "_" + fieldColumn(fieldId);
120 }
121 return answer;
122 }
123
124
125
130 public String rootParticipant() {
131 String answer = null;
132 if(rootType.equals(LetterTemplateGlobals.ROOT_AGREEMENTS)) {
133 answer = "AGREEMENTS";
134 }
135 return answer;
136 }
137
138
139
150 public int findAlias(ArrayList participantTables, String alias) {
151 int sizeParticipants = participantTables.size();
152 boolean found = false;
153 ParticipantTable element;
154 int answer = -1;
155
156 for(int i = 0; (i < sizeParticipants && !found); i++) {
157 element = (ParticipantTable)(participantTables.get(i));
158 String aliasParticipant = element.getAlias();
159 if(aliasParticipant.equals(alias)) {
160 found = true;
161 answer = i;
162 }
163 }
164 return answer;
165 }
166
167
168
174 public JoinElement buildJoinElement(String alias) {
175 Alias element = (Alias)systemAlias.get(alias + "|" + rootType);
176
177 String parentAlias = element.getParentTableAlias();
178 debug.println("parentAlias=" + parentAlias);
179 String parentColumn = element.getParentJoinColumn();
180 String sonAlias = alias;
181 String sonColumn = element.getSonJoinColumn();
182 String joinType = "";
183 if(element.getJoinType().equals(LetterTemplateGlobals.OUTER_JOIN)) {
184 joinType = "(+)";
185 }
186 return new JoinElement
187 (parentAlias, parentColumn, sonAlias, sonColumn, joinType);
188 }
189
190
191
200 public int findParent(ArrayList joinList, String alias) {
201 boolean found = false;
202 JoinElement element;
203 int answer = -1;
204
205 int sizeJoinList = joinList.size();
206 String parentAlias = parentTableAlias(alias);
207 for(int i = 0; (i < sizeJoinList && !found); i++) {
208 element = (JoinElement)(joinList.get(i));
209 String sonAliasJoin = element.getSonAlias();
210 if(sonAliasJoin.equals(parentAlias)) {
211 found = true;
212 answer = i;
213 }
214 }
215 return answer;
216 }
217
218
219
225 public String parentTableAlias(String alias) {
226 Alias element = (Alias)systemAlias.get(alias + "|" + rootType);
227 return (element.getParentTableAlias());
228 }
229
230
231
240 public String value(String value, String ruleOperator, long fieldId) {
241 ArrayList tokens = new ArrayList();
242 String token;
243 String answer = null;
244
245 Field element = (Field)systemFields.get(new Long(fieldId));
246 String dataType = element.getDataType();
247 boolean valueHasSpecialDateVariables =
248 (value.indexOf(LetterTemplateGlobals.SYSDATE) >= 0)
249 || (value.indexOf(LetterTemplateGlobals.COMPANY_DATE) >= 0);
250
251 if(!ruleOperator.equals("BETWEEN") && !ruleOperator.equals("IN")) {
252
253 if(dataType.equals(LetterTemplateGlobals.FIELD_NUMERIC)) {
254 answer = value.trim();
255 }
256 else if(dataType.equals(LetterTemplateGlobals.FIELD_DATE)
257 && !valueHasSpecialDateVariables) {
258 answer = "TO_DATE('" + value.trim() + "','MM-DD-YYYY')";
259 }
260 else if(dataType.equals(LetterTemplateGlobals.FIELD_DATE)
261 && valueHasSpecialDateVariables) {
262 answer = value.trim();
263 }
264 else {
265 answer = "'" + value.trim() + "'";
266 }
267 }
268 else {
269 StringTokenizer valueTokens = new StringTokenizer(value, ",");
270 while(valueTokens.hasMoreTokens()) {
271 token = valueTokens.nextToken();
272 boolean tokenHasSpecialDateVariables =
273 (token.indexOf(LetterTemplateGlobals.SYSDATE) >= 0)
274 || (token.indexOf(LetterTemplateGlobals.COMPANY_DATE) >= 0);
275 if(dataType.equals(LetterTemplateGlobals.FIELD_NUMERIC)) {
276 token = token.trim();
277 }
278 else if(dataType.equals(LetterTemplateGlobals.FIELD_DATE)
279 && !tokenHasSpecialDateVariables) {
280 token = "TO_DATE('" + token.trim() + "','MM-DD-YYYY')";
281 }
282 else if(dataType.equals(LetterTemplateGlobals.FIELD_DATE)
283 && tokenHasSpecialDateVariables) {
284 token = token.trim();
285 }
286 else {
287 token = "'" + token.trim() + "'";
288 }
289 tokens.add(token);
290 }
291
292 if(ruleOperator.equals("BETWEEN")) {
293 answer = (String)tokens.get(0) + " AND " + (String)tokens.get(1);
294 }
295 else {
296 answer = "(";
297 int sizeTokens = tokens.size();
298 for(int i = 0; i < sizeTokens; i++) {
299 token = (String)(tokens.get(i));
300 answer += token;
301 answer += (i != sizeTokens - 1) ? "," : "";
302 }
303 answer += ")";
304 }
305 }
306 return answer;
307 }
308
309
310
316 public String endWHERE(String companyId) {
317 String answer = null;
318 if(rootType.equals(LetterTemplateGlobals.ROOT_AGREEMENTS)) {
319 answer = " (AGREEMENTS.AGRM_CMP_ID = " + companyId + ")";
320 }
321 return answer;
322 }
323
324
325
331 public String category(String alias) {
332 Alias element = (Alias)systemAlias.get(alias + "|" + rootType);
333 return (element.getFieldCategory());
334 }
335
336
337
343 public String realTable(String alias) {
344 Alias element = (Alias)systemAlias.get(alias + "|" + rootType);
345 return (element.getRealTable());
346 }
347
348
349
356 public String builtTable(String alias) {
357 Alias element = (Alias)systemAlias.get(alias + "|" + rootType);
358 return (element.getBuiltTable());
359 }
360
361
362
370 public String direction(String direction) {
371 if(direction.equals(LetterTemplateGlobals.DESCENDING_DIRECTION)) {
372 return "DESC";
373 }
374 else {
375 return "";
376 }
377 }
378 }
379