01: package dinamica;
02:
03: import electric.xml.*;
04:
05: /**
06: * Generic Transaction to execute one or more simple
07: * action queries like INSERT, UPDATE or DELETE.<br>
08: * This module requires one or more extra elements in config.xml
09: * called "query", containing the filename of the SQL file
10: * to load and execute. Input parameters will be automatically
11: * replaced if config.xml contains validator=true.<br>
12: * Please remember that if you are going to execute more than one
13: * statement you have to activate JDBC transactions in your config.xml
14: * file. Also note that this class extends dinamica.GenericTransaction
15: * and it will invoke it parent's service() method before proceeding to
16: * execute the queries defined via "query" elements in config.xml, it means
17: * that if you defined one or more recordsets in config.xml, these will be created
18: * BEFORE the DML queries are executed.<br><br>
19: * Last update: jan-03-2005
20: * @author Martin Cordova (dinamica@martincordova.com)
21: */
22: public class GenericTableManager extends GenericTransaction {
23:
24: /* (non-Javadoc)
25: * @see dinamica.GenericTransaction#service(dinamica.Recordset)
26: */
27: public int service(Recordset inputParams) throws Throwable {
28:
29: //reuse superclass code
30: super .service(inputParams);
31:
32: //get database channel
33: Db db = getDb();
34:
35: //get config object
36: Config c = getConfig();
37:
38: //read xml - search for all <query> elements in config.xml
39: Document doc = c.getDocument();
40: Elements q = doc.getRoot().getElements("query");
41:
42: if (q != null) {
43: //execute every query
44: while (q.hasMoreElements()) {
45:
46: //read template filename
47: Element e = q.next();
48: String queryName = e.getString();
49:
50: //load sql template
51: String sql = getResource(queryName);
52:
53: //check if the "params" attribute is present
54: String rsName = e.getAttribute("params");
55:
56: //replace markers using a specific recordset
57: if (rsName != null && !rsName.equals("")) {
58: Recordset rs = getRecordset(rsName);
59: if (rs.getRecordCount() == 0)
60: throw new Throwable(
61: "This recordset ["
62: + rsName
63: + "] is empty and cannot be used to replace values in SQL template.");
64: else {
65: rs.first();
66: sql = this .getSQL(sql, rs);
67: }
68: }
69:
70: //replace -remaining- markers using request parameters
71: sql = this .getSQL(sql, inputParams);
72:
73: //execute query
74: db.exec(sql);
75:
76: }
77: }
78:
79: return 0; //OK
80:
81: }
82:
83: }
|