1 package com.instantbank.collections.commonQueuing.web;
2
3 import java.io.ByteArrayInputStream;
4 import java.io.IOException;
5 import java.util.Hashtable;
6 import oracle.xml.parser.v2.DOMParser;
7 import oracle.xml.parser.v2.XMLDocument;
8 import oracle.xml.parser.v2.XMLNode;
9 import oracle.xml.parser.v2.XMLParseException;
10 import oracle.xml.parser.v2.XSLException;
11 import org.w3c.dom.Element;
12 import org.w3c.dom.NodeList;
13 import org.xml.sax.SAXException;
14 import com.instantbank.collections.commonQueuing.ejb.QueueServices;
15 import com.instantbank.collections.commonQueuing.ejb.QueueServicesHome;
16 import com.instantbank.collections.security.ejb.SecurityServices;
17 import com.instantbank.collections.security.ejb.SecurityServicesHome;
18 import com.instantbank.collections.util.InstantbankException;
19 import com.instantbank.collections.util.ServiceLocator;
20 import com.instantbank.collections.util.StringFormat;
21
22 class Field {
23 public String tableName;
24 public String tableAlias;
25 public String displayName;
26 public String name;
27 public String type;
28 public String menu;
29 }
30
31 class GroupItem {
32 public String id;
33 public int level;
34 public String name;
35
36
37 public GroupItem(String id, int level, String name) {
38 this.id = id;
39 this.level = level;
40 this.name = name;
41 }
42 }
43
44 public class FieldsTransformer {
45
46
47 private Long companyId;
48 private Hashtable fieldsTable;
49 private Hashtable groupsUserTable;
50 private String objectType;
51 private QueueServices queueServices;
52 private int vectorPosition = 0;
53
54
55 public FieldsTransformer(Long companyId, String objectType) throws InstantbankException {
56 this.companyId = companyId;
57 this.objectType = objectType;
58 init();
59 initUsers();
60 }
61
62
63 private String connectorPosition(String value) {
64 if(value.equals("")) {
65 return "0";
66 }
67 if(value.equals("AND")) {
68 return "1";
69 }
70 if(value.equals("OR")) {
71 return "2";
72 }
73 if(value.equals("OR THE")) {
74 return "3";
75 }
76 return "0";
77 }
78
79
80 public String getCategoryOptions() {
81 DOMParser docParser = new DOMParser();
82 XMLDocument inxml;
83 XMLNode node;
84 NodeList nodeList;
85 String queueSelect = "";
86 Element root;
87 ByteArrayInputStream stream = null;
88 String xmlString;
89
90 try {
91 QueueServicesHome home = (QueueServicesHome)ServiceLocator.instance().createEJB("QueueServicesHome", QueueServicesHome.class, false);
92 QueueServices queueServices = home.create();
93 xmlString = queueServices.getCategories(objectType);
94 stream = new ByteArrayInputStream(xmlString.getBytes());
95 docParser.setValidationMode(false);
96 docParser.parse(stream);
97 inxml = docParser.getDocument();
98 root = inxml.getDocumentElement();
99 nodeList = root.getChildNodes();
100 for(int i = 0; i < nodeList.getLength(); i++) {
101 node = (XMLNode)nodeList.item(i);
102 queueSelect += "<option value='" + node.valueOf("./categories") + "'>" + node.valueOf("./name") + "</option>";
103 }
104 }
105 catch(Exception e) {
106 }
107 return queueSelect;
108 }
109
110
111 private int getFieldPosition(XMLNode node) throws XSLException {
112 Field f;
113 boolean fieldFound;
114 int fieldPosition = -1;
115
116 for(int j = 0; j < fieldsTable.size(); j++) {
117 f = (Field)fieldsTable.get(new Integer(j));
118 fieldFound = true;
119 if(!f.name.equals(node.valueOf("./fieldname"))) {
120 fieldFound = false;
121 }
122 if(!f.tableAlias.equals(node.valueOf("./tablealias"))) {
123 fieldFound = false;
124 }
125 if(fieldFound) {
126 fieldPosition = j;
127 break;
128 }
129 }
130 return fieldPosition;
131 }
132
133
134 public String getFieldsArray() {
135
136 Field f;
137 String fieldsArray = "";
138 int i = 0;
139
140 fieldsArray = "function loadFields() {\n";
141 fieldsArray += "fields = new Object();\n";
142 try {
143 for(i = 0; i < fieldsTable.size(); i++) {
144 f = (Field)fieldsTable.get(new Integer(i));
145 fieldsArray += "fields[" + i + "] = new field('" + f.tableName + "','" + f.tableAlias + "',";
146 fieldsArray += "'" + f.name + "','" + f.displayName + "',";
147 fieldsArray += "'" + f.type + "','" + f.menu + "');\n";
148 }
149 fieldsArray += "numFields = " + i + ";\n";
150 fieldsArray += "}";
151 }
152 catch(Exception e) {
153 fieldsArray += "/* Error: " + e.getClass().getName() + " " + e.getMessage() + " */\n";
154 fieldsArray += "numFields = 0\n";
155 fieldsArray += "}";
156 }
157 return fieldsArray;
158 }
159
160
161 public String getGroupsUserArray() {
162 GroupItem item;
163 String usersArray;
164 int i = 0;
165
166 usersArray = "";
167 try {
168 for(i = 0; i < groupsUserTable.size(); i++) {
169 item = (GroupItem)groupsUserTable.get(new Integer(i));
170 usersArray += "groupsUsers[" + i + "] = new groupUser('" + item.id + "'," + item.level + ",'" + StringFormat.toSafeJavaString(item.name) + "',false);\n";
171 }
172 usersArray += "numUsers = " + i + ";\n";
173 }
174 catch(Exception e) {
175 usersArray += "/* Error: " + e.getClass().getName() + " " + e.getMessage() + " */\n";
176 usersArray += "numUsers = 0\n";
177 }
178 return usersArray;
179 }
180
181
182 public String getMenus() {
183 DOMParser docParser = new DOMParser();
184 Hashtable ht = new Hashtable();
185 String htObject;
186 String htObjectValues;
187 Hashtable htValues = new Hashtable();
188 int i = 0;
189 XMLDocument inxml;
190 String menuArray = "";
191 NodeList nodeList;
192 XMLNode node;
193 NodeList nodeListValues;
194 XMLNode nodeValues;
195 Element root;
196 Element rootValues;
197 ByteArrayInputStream stream = null;
198 String xmlString;
199 int y = 0;
200
201 try {
202 menuArray = "function loadMenus() {\n";
203 menuArray += "var values;\n";
204 menuArray += "menus = new Object();\n";
205
206 xmlString = queueServices.getMenus(companyId, objectType);
207 stream = new ByteArrayInputStream(xmlString.getBytes());
208 docParser.setValidationMode(false);
209 docParser.parse(stream);
210 inxml = docParser.getDocument();
211 root = inxml.getDocumentElement();
212 nodeList = root.getChildNodes();
213 for(i = 0; i < nodeList.getLength(); i++) {
214 node = (XMLNode)nodeList.item(i);
215 htObject = (String)ht.get(node.valueOf("./Name"));
216 if(htObject == null) {
217 nodeListValues = nodeList.item(i).getChildNodes();
218 menuArray += "values = new Object();\n";
219 for(y = 3; y < nodeListValues.getLength(); y++) {
220 nodeValues = (XMLNode)nodeListValues.item(y);
221 htObjectValues = (String)htValues.get(nodeValues.valueOf("./Value/InternalValue"));
222 if(htObjectValues == null) {
223 menuArray += "values[" + (y - 3) + "] = new value('" + nodeValues.valueOf("./InternalValue") + "','" + nodeValues.valueOf("./Display") + "');\n";
224 }
225 }
226 menuArray += "menus[" + i + "] = new menu('" + node.valueOf("./Name") + "'," + (y - 3) + ",values);\n";
227 menuArray += "\n";
228 }
229 }
230 menuArray += "numMenus = " + i + ";\n";
231 menuArray += "}";
232 }
233 catch(Exception e) {
234 menuArray += "/* Error: " + e.getClass().getName() + " " + e.getMessage() + " */\n";
235 menuArray += "numMenus = 0\n";
236 menuArray += "}";
237 }
238 return menuArray;
239 }
240
241
242 public String getQueueTypesOptions() {
243 DOMParser docParser = new DOMParser();
244 XMLDocument inxml;
245 XMLNode node;
246 NodeList nodeList;
247 String queueSelect = "";
248 Element root;
249 ByteArrayInputStream stream = null;
250 String xmlString;
251
252 try {
253 QueueServicesHome home = (QueueServicesHome)ServiceLocator.instance().createEJB("QueueServicesHome", QueueServicesHome.class, false);
254 QueueServices queueServices = home.create();
255 xmlString = queueServices.getQueueTypes(companyId, objectType);
256 stream = new ByteArrayInputStream(xmlString.getBytes());
257 docParser.setValidationMode(false);
258 docParser.parse(stream);
259 inxml = docParser.getDocument();
260 root = inxml.getDocumentElement();
261 nodeList = root.getChildNodes();
262 for(int i = 0; i < nodeList.getLength(); i++) {
263 node = (XMLNode)nodeList.item(i);
264 queueSelect += "<option value='" + node.valueOf("./id") + "'>" + node.valueOf("./name") + " - " + node.valueOf("./description") + "</option>";
265 }
266 }
267 catch(Exception e) {
268 queueSelect += "<-- " + e.getClass().getName() + " " + e.getMessage() + " -->";
269 }
270 return queueSelect;
271 }
272
273
274 public String getQueueTypesVector() {
275 DOMParser docParser = new DOMParser();
276 XMLDocument inxml;
277 XMLNode node;
278 NodeList nodeList;
279 Element parent;
280 String resultVector = "var queueTypesVector = new Array();\n";
281 ByteArrayInputStream stream = null;
282 String xmlString;
283
284 try {
285 QueueServicesHome home = (QueueServicesHome)ServiceLocator.instance().createEJB("QueueServicesHome", QueueServicesHome.class, false);
286 QueueServices queueServices = home.create();
287 xmlString = queueServices.getQueueTypes(companyId, objectType);
288 stream = new ByteArrayInputStream(xmlString.getBytes());
289 docParser.setValidationMode(false);
290 docParser.parse(stream);
291 inxml = docParser.getDocument();
292 parent = inxml.getDocumentElement();
293 nodeList = parent.getChildNodes();
294 for(int i = 0; i < nodeList.getLength(); i++) {
295 node = (XMLNode)nodeList.item(i);
296 resultVector += "queueTypesVector[" + i + "]= new Array();\n";
297 resultVector += "queueTypesVector[" + i + "][0]='" + node.valueOf("./id") + "';\n";
298 resultVector += "queueTypesVector[" + i + "][1]='" + StringFormat.toSafeJavaString(node.valueOf("./category")) + "';\n";
299 resultVector += "queueTypesVector[" + i + "][2]='" + StringFormat.toSafeJavaString(node.valueOf("./name")) + "';\n";
300 resultVector += "queueTypesVector[" + i + "][3]='" + StringFormat.toSafeJavaString(node.valueOf("./description")) + "';\n";
301 resultVector += "queueTypesVector[" + i + "][4]='" + StringFormat.toSafeJavaString(node.valueOf("./lastChangedDate")) + "';\n";
302 resultVector += "queueTypesVector[" + i + "][5]='" + StringFormat.toSafeJavaString(node.valueOf("./latChangedById")) + "';\n";
303 resultVector += "queueTypesVector[" + i + "][6]='" + StringFormat.toSafeJavaString(node.valueOf("./lastChangedByName")) + "';\n";
304 resultVector += "queueTypesVector[" + i + "][7]='N';\n";
305 }
306 }
307 catch(Exception e) {
308 resultVector += "/* " + e.getClass().getName() + " " + e.getMessage() + "*/";
309 }
310 finally {
311 return resultVector;
312 }
313 }
314
315
316 public String getRulesArray(String rules) {
317 DOMParser docParser = new DOMParser();
318 Field f;
319 boolean fieldFound;
320 int fieldPosition;
321 int i = 0;
322 XMLDocument inxml;
323 XMLNode node;
324 NodeList nodeList;
325 Element root;
326 String rulesArray = "";
327 ByteArrayInputStream stream = null;
328
329 try {
330 stream = new ByteArrayInputStream(rules.getBytes());
331 docParser.setValidationMode(false);
332 docParser.parse(stream);
333 inxml = docParser.getDocument();
334 root = inxml.getDocumentElement();
335 nodeList = root.getChildNodes();
336 rulesArray += "rules = new Object();\n";
337 for(i = 0; i < nodeList.getLength(); i++) {
338 node = (XMLNode)nodeList.item(i);
339 fieldPosition = getFieldPosition(node);
340 rulesArray += "rules[" + i + "] = new rule(";
341 rulesArray += "'" + node.valueOf("./test") + "',";
342 rulesArray += "'" + fieldPosition + "',";
343 rulesArray += "'" + operatorPosition(node.valueOf("./operator")) + "',";
344 rulesArray += "'" + StringFormat.toSafeJavaString(node.valueOf("./value")) + "',";
345 rulesArray += "'" + connectorPosition(node.valueOf("./connector")) + "');\n";
346 }
347 }
348 catch(Exception e) {
349 rulesArray += "/* Exception: " + e.getClass().getName() + " " + e.getMessage() + " */";
350 }
351 rulesArray += "numRules = " + i + ";\n";
352 rulesArray += "\n";
353 return rulesArray;
354 }
355
356
357 public String getSelectedFields(String user) throws XMLParseException, XSLException, SAXException, IOException {
358 String array = "selectedFields = new Object();\n";
359 DOMParser docParser = new DOMParser();
360 String fieldName;
361 int fieldPosition;
362 XMLDocument inxml;
363 XMLNode node;
364 NodeList nodeList;
365 Element root;
366 ByteArrayInputStream stream = null;
367 int i = 0;
368
369 try {
370 stream = new ByteArrayInputStream(user.getBytes());
371 docParser.setValidationMode(false);
372 docParser.parse(stream);
373 inxml = docParser.getDocument();
374 root = inxml.getDocumentElement();
375 nodeList = root.getChildNodes();
376 int fieldsPosition = -1;
377 for(i = 0; i < nodeList.getLength(); i++) {
378 node = (XMLNode)nodeList.item(i);
379 fieldPosition = getFieldPosition(node);
380 array += "selectedFields[" + i + "] = " + fieldPosition + ";\n";
381 }
382 }
383 catch(Exception e) {
384 }
385 array += "numSelectedFields = " + i + ";\n";
386 array += "\n";
387 return array;
388 }
389
390
391 public String getSelectedUsersArray(String user) throws XMLParseException, XSLException, SAXException, IOException {
392 DOMParser docParser = new DOMParser();
393 int i = 0;
394 XMLDocument inxml;
395 XMLNode node;
396 NodeList nodeList;
397 Element root;
398 ByteArrayInputStream stream = null;
399 String userArray = "selectedUsers = new Object();\n";
400
401 try {
402 stream = new ByteArrayInputStream(user.getBytes());
403 docParser.setValidationMode(false);
404 docParser.parse(stream);
405 inxml = docParser.getDocument();
406 root = inxml.getDocumentElement();
407 nodeList = root.getChildNodes();
408 for(i = 0; i < nodeList.getLength(); i++) {
409 node = (XMLNode)nodeList.item(i);
410 userArray += "selectedUsers[" + i + "] = " + userPosition(node.valueOf("./userid")) + ";\n";
411 }
412 }
413 catch(Exception e) {
414 }
415 userArray += "numSelectedUsers = " + i + ";\n";
416 userArray += "\n";
417 return userArray;
418 }
419
420
421 public String getSortArray(String sort) throws XMLParseException, XSLException, SAXException, IOException {
422 DOMParser docParser = new DOMParser();
423 String fieldName;
424 int fieldPosition;
425 int i = 0;
426 XMLDocument inxml;
427 XMLNode node;
428 NodeList nodeList;
429 Element root;
430 String sortArray = "sorts = new Object();\n";
431 ByteArrayInputStream stream = null;
432
433 try {
434 stream = new ByteArrayInputStream(sort.getBytes());
435 docParser.setValidationMode(false);
436 docParser.parse(stream);
437 inxml = docParser.getDocument();
438 root = inxml.getDocumentElement();
439 nodeList = root.getChildNodes();
440 for(i = 0; i < nodeList.getLength(); i++) {
441 node = (XMLNode)nodeList.item(i);
442 fieldPosition = getFieldPosition(node);
443 sortArray += "sorts[" + i + "] = new sort('" + fieldPosition + "',";
444 sortArray += "'" + node.valueOf("./direction") + "');\n";
445 }
446 }
447 catch(Exception e) {
448 }
449 sortArray += "numSort = " + i + ";\n";
450 sortArray += "\n";
451 return sortArray;
452 }
453
454
455 private void init() throws InstantbankException {
456 DOMParser docParser = new DOMParser();
457 XMLDocument doc;
458 Field f;
459 XMLNode node;
460 NodeList nodeList;
461 Element root;
462 ByteArrayInputStream stream = null;
463 String xmlString;
464
465 try {
466 fieldsTable = new Hashtable();
467 QueueServicesHome home = (QueueServicesHome)ServiceLocator.instance().createEJB("QueueServicesHome", QueueServicesHome.class, false);
468 queueServices = home.create();
469 xmlString = queueServices.getFields(companyId, objectType);
470 stream = new ByteArrayInputStream(xmlString.getBytes());
471 docParser.setValidationMode(false);
472 docParser.parse(stream);
473 doc = docParser.getDocument();
474 root = doc.getDocumentElement();
475 nodeList = root.getChildNodes();
476 for(int i = 0; i < nodeList.getLength(); i++) {
477 node = (XMLNode)nodeList.item(i);
478 f = new Field();
479 f.tableName = node.valueOf("./tablename");
480 f.tableAlias = node.valueOf("./alias");
481 f.name = node.valueOf("./name");
482 f.displayName = node.valueOf("./display");
483 f.type = node.valueOf("./type");
484 f.menu = node.valueOf("./menu");
485 fieldsTable.put(new Integer(i), f);
486 }
487 }
488 catch(Exception e) {
489 throw new InstantbankException(e, "212001", "Failed to initialize FieldsTransformer");
490 }
491 }
492
493
494 private void initUsers() throws InstantbankException {
495 DOMParser docParser = new DOMParser();
496 XMLDocument inxml;
497 GroupItem item;
498 int nlLength;
499 XMLNode node;
500 NodeList nodeList;
501 NodeList nodeListGroup;
502 NodeList nodeListUser;
503 Element root;
504 ByteArrayInputStream stream = null;
505 String xmlString = "";
506
507 vectorPosition = 0;
508 try {
509 groupsUserTable = new Hashtable();
510 SecurityServicesHome home = (SecurityServicesHome)ServiceLocator.instance().createEJB("SecurityServicesHome", SecurityServicesHome.class, false);
511 SecurityServices securityServices = home.create();
512 xmlString = securityServices.getGroupsUsers(companyId);
513 stream = new ByteArrayInputStream(xmlString.getBytes());
514 docParser.setValidationMode(false);
515 docParser.parse(stream);
516 inxml = docParser.getDocument();
517 root = inxml.getDocumentElement();
518 nodeList = root.getChildNodes();
519 nlLength = nodeList.getLength();
520 for(int i = 0; i < nlLength; i++) {
521 node = (XMLNode)nodeList.item(i);
522 item = new GroupItem("0", 0, node.valueOf("./name"));
523 groupsUserTable.put(new Integer(vectorPosition), item);
524 nodeListUser = node.selectNodes("./ChildUsers");
525 vectorPosition++;
526 if(nodeListUser.getLength() > 0) {
527 setChildrenUser(node, 0, 0);
528 }
529 nodeListGroup = node.selectNodes("./ChildGroups");
530 if(nodeListGroup.getLength() > 0) {
531 setChildrenGroupd(node, 0, 0);
532 }
533 }
534 }
535 catch(Exception e) {
536 }
537 }
538
539
540 private String operatorPosition(String value) {
541 if(value.equals("=")) {
542 return "0";
543 }
544 if(value.equals("BETWEEN")) {
545 return "1";
546 }
547 if(value.equals("<>")) {
548 return "2";
549 }
550 if(value.equals(">")) {
551 return "3";
552 }
553 if(value.equals(">=")) {
554 return "4";
555 }
556 if(value.equals("<")) {
557 return "5";
558 }
559 if(value.equals("<=")) {
560 return "6";
561 }
562 return "0";
563 }
564
565
566 private void setChildrenUser(XMLNode parent, int position, int hierarchy) throws XSLException {
567 XMLNode childNode;
568 GroupItem item;
569 NodeList nlChild;
570 int nlChildLen;
571 NodeList nlChildren;
572
573 nlChildren = parent.selectNodes("./ChildUsers/User");
574 nlChildLen = nlChildren.getLength();
575 int k = 0;
576 hierarchy = hierarchy + 1;
577 for(k = 0; k < nlChildLen; k++) {
578 childNode = (XMLNode)nlChildren.item(k);
579 item = new GroupItem(childNode.valueOf("./id"), hierarchy, childNode.valueOf("./name"));
580 groupsUserTable.put(new Integer(vectorPosition), item);
581 vectorPosition++;
582 }
583 }
584
585
586 public void setChildrenGroupd(XMLNode parent, int position, int hierarchy) throws XSLException {
587 XMLNode childNode;
588 GroupItem item;
589 NodeList nlChild;
590 int nlChildLen;
591 NodeList nlChildren;
592 NodeList nlChildUser;
593
594 nlChildren = parent.selectNodes("./ChildGroups/Group");
595 nlChildLen = nlChildren.getLength();
596 int k = 0;
597 hierarchy = hierarchy + 1;
598 for(k = 0; k < nlChildLen; k++) {
599 childNode = (XMLNode)nlChildren.item(k);
600 item = new GroupItem("0", hierarchy, childNode.valueOf("./name"));
601 groupsUserTable.put(new Integer(vectorPosition), item);
602 vectorPosition++;
603 nlChildUser = childNode.selectNodes("./ChildUsers");
604 if(nlChildUser.getLength() > 0) {
605 setChildrenUser(childNode, 0, hierarchy);
606 }
607 nlChild = childNode.selectNodes("./ChildGroups");
608 if(nlChild.getLength() > 0) {
609 setChildrenGroupd(childNode, 0, hierarchy);
610 }
611 }
612 }
613
614
615 private String userPosition(String id) {
616 GroupItem item;
617
618 for(int i = 0; i < groupsUserTable.size(); i++) {
619 item = (GroupItem)groupsUserTable.get(new Integer(i));
620 if(item.id.equals(id)) {
621 return "" + i;
622 }
623 }
624 return "-1";
625 }
626 }
627
628