KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > teamkonzept > webman > mainint > db > queries > oracle > TKDBContentTreeInsertNode


1 package com.teamkonzept.webman.mainint.db.queries.oracle;
2
3 import java.sql.*;
4 import java.util.Enumeration JavaDoc;
5 import com.teamkonzept.db.*;
6 import com.teamkonzept.webman.mainint.db.queries.content.*;
7 import com.teamkonzept.webman.mainint.WebmanExceptionHandler;
8
9 /*
10  * TKDBContentTreeInsertNode
11  * Fuegt einen neuen Knoten unterhalb eines Parent Nodes ein
12  * Input: NODE_ID (Knoten des Parents ) und die neuen Werte
13  * "CONTENT_NODE_NAME", "CONTENT_NODE_TYPE", "CONTENT_FORM"
14  * Output: der neu erzeugte Datensatz
15  */

16 public class TKDBContentTreeInsertNode extends TKExtendedPrepQuery
17 {
18
19     public final static boolean isPrepared = true;
20
21     public final static String JavaDoc[] paramOrder = { "NODE_ID",
22     "CONTENT_NODE_NAME", "CONTENT_NODE_SHORTNAME",
23     "CONTENT_NODE_TYPE", "CONTENT_FORM",
24     "TREE_ID", "PROTOTYPE_ID"
25     };
26
27     public final static Object JavaDoc[][] types =
28     { {"CONTENT_NODE_NAME", new Integer JavaDoc(Types.VARCHAR)},
29     {"CONTENT_NODE_SHORTNAME", new Integer JavaDoc(Types.VARCHAR)}
30     };
31
32     public final static boolean[] setRelevants = { true };
33
34 /* public final static String sqlString =
35         "DECLARE @PR_NR INT " +
36         "DECLARE @N_ID INT " +
37         "DECLARE @ID INT " +
38
39         "BEGIN TRANSACTION " +
40
41         "SELECT @N_ID = ? " +
42
43         "SELECT " +
44         " @PR_NR=RIGHT_NR " +
45         "FROM " +
46         " CONTENT_TREE " +
47         "WHERE " +
48         " CONTENT_NODE_ID = @N_ID " +
49
50         "UPDATE " +
51         " CONTENT_TREE " +
52         "SET " +
53         " RIGHT_NR = RIGHT_NR + 2 " +
54         "WHERE " +
55         " RIGHT_NR >= @PR_NR " +
56
57         "UPDATE " +
58         " CONTENT_TREE " +
59         "SET " +
60         " LEFT_NR = LEFT_NR + 2 " +
61         "WHERE " +
62         " LEFT_NR > @PR_NR " +
63
64         "SELECT " +
65         " @ID = MAX(CONTENT_NODE_ID) + 1 " +
66         "FROM " +
67         " CONTENT_TREE " +
68
69         "INSERT INTO " +
70         "CONTENT_TREE " +
71         " (CONTENT_NODE_ID, CONTENT_NODE_NAME, CONTENT_NODE_SHORTNAME, " +
72         " CONTENT_NODE_TYPE, LEFT_NR, RIGHT_NR, " +
73         " CONTENT_FORM, CONTENT_NODE_PARENT, TREE_ID, PROTOTYPE_ID) " +
74         "VALUES " +
75         " (@ID, ?, ?, ?, @PR_NR, @PR_NR + 1, ?, @N_ID, ?, ?) " +
76
77         "COMMIT TRANSACTION " +
78
79         "SELECT " +
80         " CONTENT_NODE_ID, CONTENT_NODE_NAME, CONTENT_NODE_SHORTNAME, " +
81         " CONTENT_NODE_TYPE, LEFT_NR, RIGHT_NR, " +
82         " CONTENT_FORM " +
83         "FROM " +
84         " CONTENT_TREE " +
85         "WHERE " +
86         " CONTENT_NODE_ID = @ID "; */

87
88     protected static Class JavaDoc[] queryClasses = {
89     SelectRightNrFromContentTree.class,
90     UpdateContentTreeRightNrEqual.class,
91     UpdateContentTreeLeftnrGreater.class,
92     SelectMaxContentTree.class,
93     InsertContentTreePrototype.class,
94     SelectContentTree.class
95     };
96
97     public boolean execute()
98     {
99     try
100     {
101
102         init(queryClasses); // init query objects
103

104         Object JavaDoc nid = queryParams.get("NODE_ID");
105
106         boolean isNotOpen = aTKDBConnection.isAutoCommit();
107         if (isNotOpen)
108         {
109         TKDBManager.beginTransaction();
110         }
111
112         // SELECT @PR_NR=RIGHT_NR FROM CONTENT_TREE WHERE CONTENT_NODE_ID = @N_ID
113
queries[0].setQueryParams("NODE_ID", nid);
114           queries[0].execute();
115         Object JavaDoc prNr = null;
116         ResultSet rs = queries[0].fetchResultSet();
117         if (rs != null && rs.next())
118         {
119         prNr = rs.getObject(1);
120         }
121
122         // UPDATE CONTENT_TREE SET RIGHT_NR = RIGHT_NR + 2 WHERE RIGHT_NR >= @PR_NR
123
queries[1].setQueryParams("PR_NR", prNr);
124         queries[1].execute();
125
126         // UPDATE CONTENT_TREE SET LEFT_NR = LEFT_NR + 2 WHERE LEFT_NR > @PR_NR
127
queries[2].setQueryParams("PR_NR", prNr);
128         queries[2].execute();
129
130         // SELECT @ID = MAX(CONTENT_NODE_ID) + 1 FROM CONTENT_TREE
131
Object JavaDoc id = null;
132         Integer JavaDoc prNrPlusOne = null;
133         queries[3].execute();
134         rs = queries[3].fetchResultSet();
135         if (rs != null && rs.next())
136         {
137         id = rs.getObject(1);
138         }
139
140         if (prNr != null && prNr instanceof Number JavaDoc)
141         {
142         prNrPlusOne = new Integer JavaDoc(((Number JavaDoc) prNr).intValue() + 1);
143         }
144
145         // INSERT INTO CONTENT_TREE (CONTENT_NODE_ID, CONTENT_NODE_NAME, CONTENT_NODE_SHORTNAME,
146
// CONTENT_NODE_TYPE, LEFT_NR, RIGHT_NR, CONTENT_FORM, CONTENT_NODE_PARENT, TREE_ID, PROTOTYPE_ID)
147
// VALUES (@ID, ?, ?, ?, @PR_NR, @PR_NR + 1, ?, @N_ID, ?, ?)
148
queries[4].setQueryParams("ID", id);
149         queries[4].setQueryParams("PR_NR", prNr);
150         queries[4].setQueryParams("PR_NR_PLUS_ONE", prNrPlusOne);
151         queries[4].setQueryParams("NODE_ID", queryParams.get("NODE_ID"));
152         queries[4].setQueryParams("CONTENT_NODE_NAME",
153                       queryParams.get("CONTENT_NODE_NAME"));
154         queries[4].setQueryParams("CONTENT_NODE_SHORTNAME",
155                       queryParams.
156                       get("CONTENT_NODE_SHORTNAME"));
157         queries[4].setQueryParams("CONTENT_NODE_TYPE",
158                       queryParams.get("CONTENT_NODE_TYPE"));
159         queries[4].setQueryParams("CONTENT_FORM",
160                       queryParams.get("CONTENT_FORM"));
161         queries[4].setQueryParams("TREE_ID", queryParams.get("TREE_ID"));
162         queries[4].setQueryParams("PROTOTYPE_ID",
163                       queryParams.get("PROTOTYPE_ID"));
164         queries[4].execute();
165
166         if (isNotOpen)
167         {
168         TKDBManager.commitTransaction();
169         }
170
171         // SELECT CONTENT_NODE_ID, CONTENT_NODE_NAME, CONTENT_NODE_SHORTNAME,
172
// CONTENT_NODE_TYPE, LEFT_NR, RIGHT_NR, CONTENT_FORM
173
// FROM CONTENT_TREE WHERE CONTENT_NODE_ID = @ID
174
queries[5].setQueryParams("ID", id);
175         queries[5].execute();
176         addResult(queries[5].fetchResultSet());
177
178     }
179     catch(Throwable JavaDoc t)
180     {
181         TKDBManager.safeRollbackTransaction(t);
182     }
183     return hasResults();
184     }
185
186     public void initQuery(Connection con)
187     {
188     super.initQuery(con,
189             isPrepared, paramOrder, types, setRelevants, null);
190     }
191 }
192
Popular Tags