KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > teamkonzept > webman > mainint > db > queries > TKDBContentTreeDeleteNode


1 package com.teamkonzept.webman.mainint.db.queries;
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.db.queries.CheckTableExistence;
8 import com.teamkonzept.webman.mainint.WebmanExceptionHandler;
9 import com.teamkonzept.webman.db.TKWebmanDBManager;
10
11 /*
12  * TKDBContentTreeDeleteNode
13  * Loescht einen Nodes und alle Seine Kinder, sowie alle
14  * Eintraege in den entspr. CONTENT Tabellen
15  * Input: CONTENT_NODE_ID
16  * Output: Keiner
17  * @author
18  * @version
19  */

20 public class TKDBContentTreeDeleteNode extends TKExtendedPrepQuery
21 {
22
23     public final static boolean ISPREPARED = true;
24     public final static String JavaDoc[] PARAMORDER = { "CONTENT_NODE_ID" };
25     public final static Object JavaDoc[][] TYPES = null;
26     public final static boolean[] SETRELEVANTS = { false };
27     private final static int TABLE_EXIST_QUERY = 0;
28
29     private int i = 1;
30
31     protected static Class JavaDoc[] queryClasses = {
32
33         CheckTableExistence.class, // [0]
34
CreateTempTableContentId.class, // [1]
35
CreateTempTableInstanceId.class, // [2]
36

37         SelectLeftRightNrFromContentTree.class, // [3]
38

39         InsertTempTable4InstanceId.class, // [4]
40
InsertTempTable3ContentId.class, // [5]
41

42         DeleteFromContentValue.class, // [6]
43
DeleteFromContentNode.class, // [7]
44
DeleteFromStructuredContent.class, // [8]
45
DeleteFromContentVersion.class, // [9]
46
DeleteFromContentInstance.class, // [10]
47
DeleteFromContentAttribute.class, // [11]
48
DeleteFromContentAttributeValue.class, // [12]
49
DeleteFromContent.class, // [13]
50
DeleteFromContentTree.class, // [14]
51

52         UpdateContentTreeRightNr.class, // [15]
53
UpdateContentTreeLeftNr.class // [16]
54

55         //DropTempTable3.class, // [17]
56
//DropTempTable4.class // [18]
57

58     };
59
60     public boolean execute()
61     {
62     try
63     {
64         init(queryClasses); // init query objects
65

66
67         // SELECT @N_ID = ?
68
Integer JavaDoc nodeId = (Integer JavaDoc) queryParams.get("CONTENT_NODE_ID");
69
70         boolean isNotOpen = aTKDBConnection.isAutoCommit();
71         if (isNotOpen)
72         {
73         TKDBManager.beginTransaction(); // begin transaction
74
}
75
76         //create temporary tables WEBMAN_TEMP3 and WEBMAN_TEMP4
77

78         queries[TABLE_EXIST_QUERY].setQueryParams("TABLE_NAME",
79               TKWebmanDBManager.getDBVendor()==QueryConstants.POSTGRESQL?"webman_temp_3":"WEBMAN_TEMP_3"); // check existence!!!
80
queries[TABLE_EXIST_QUERY].execute();
81         ResultSet exist = queries[TABLE_EXIST_QUERY].fetchResultSet();
82         if (exist == null || !exist.next())
83         {
84           queries[i].execute(); // [1]
85
}
86
87         i++; // [2]
88
queries[TABLE_EXIST_QUERY].setQueryParams("TABLE_NAME",
89               TKWebmanDBManager.getDBVendor()==QueryConstants.POSTGRESQL?"webman_temp_4":"WEBMAN_TEMP_4"); // check existence!!!
90
queries[TABLE_EXIST_QUERY].execute();
91         exist = queries[TABLE_EXIST_QUERY].fetchResultSet();
92         if (exist == null || !exist.next())
93         {
94           queries[i].execute();
95         }
96         // OLD: SELECT @L_NR = LEFT_NR, @R_NR = RIGHT_NR FROM CONTENT_TREE WHERE CONTENT_NODE_ID = ?
97
// NEW: SELECT LEFT_NR, RIGHT_NR FROM CONTENT_TREE WHERE CONTENT_NODE_ID = ?
98
// CLASS: SelectLeftRightNrFromContentTree.class
99
// PARAMS: NODE_ID
100
Object JavaDoc leftNr = null;
101         Object JavaDoc rightNr = null;
102         ResultSet rs = null;
103         i++; // [3]
104
queries[i].setQueryParams("NODE_ID", nodeId);
105         queries[i].execute();
106         rs = queries[i].fetchResultSet();
107         if (rs != null && rs.next())
108         {
109         leftNr = rs.getObject(1);
110         rightNr = rs.getObject(2);
111         }
112
113         // SELECT @DIFF = @R_NR - @L_NR + 1
114
int leftVal = 0;
115         int rightVal = 0;
116         if (leftNr != null && leftNr instanceof Number JavaDoc)
117         {
118         leftVal = ((Number JavaDoc) leftNr).intValue();
119         }
120         if (rightNr != null && rightNr instanceof Number JavaDoc)
121         {
122         rightVal = ((Number JavaDoc) rightNr).intValue();
123         }
124         Integer JavaDoc diff = new Integer JavaDoc(rightVal - leftVal + 1);
125
126         //INSERT INTO WEBMAN_TEMP4 (INSTANCE_ID) SELECT CI.INSTANCE_ID FROM CONTENT_TREE CT, CONTENT_INSTANCE CI
127
//WHERE CT.CONTENT_NODE_ID = CI.CONTENT_NODE_ID AND CT.LEFT_NR >= ? AND CT.RIGHT_NR <= ?
128
i++; // [4]
129
queries[i].setQueryParams("LEFT_ID",leftNr);
130         queries[i].setQueryParams("RIGHT_ID",rightNr);
131         queries[i].execute();
132
133         //INSERT INTO WEBMAN_TEMP3 (CONTENT_ID) SELECT C.CONTENT_ID FROM WEBMAN_TEMP4 T, CONTENT_VERSION CV, CONTENT C
134
//WHERE T.INSTANCE_ID = CV.INSTANCE_ID AND CV.CONTENT_ID = C.CONTENT_ID
135
i++; // [5]
136
queries[i].execute();
137
138         // OLD: DELETE FROM CONTENT_VALUE WHERE CONTENT_ID IN (SELECT CONTENT_ID FROM #temp)
139
// NEW: DELETE FROM CONTENT_VALUE WHERE CONTENT_ID IN (SELECT CONTENT_ID FROM WEBMAN_TEMP_3)
140
// CLASS: DeleteFromContentValue.class
141
// PARAMS: LEFT_NR, RIGHT_NR
142
i++; // [6]
143
queries[i].execute();
144
145         // OLD: DELETE FROM CONTENT_NODE WHERE CONTENT_ID IN (SELECT CONTENT_ID FROM #temp)
146
// NEW: DELETE FROM CONTENT_NODE WHERE CONTENT_ID IN (SELECT CONTENT_ID FROM WEBMAN_TEMP_3)
147
// CLASS: DeleteFromContentNode.class
148
// PARAMS: LEFT_NR, RIGHT_NR
149
i++; // [7]
150
queries[i].execute();
151
152         // OLD: DELETE FROM STRUCTURED_CONTENT WHERE CONTENT_ID IN (SELECT CONTENT_ID FROM #temp)
153
// NEW: DELETE FROM STRUCTURED_CONTENT WHERE CONTENT_ID IN (SELECT CONTENT_ID FROM WEBMAN_TEMP_3)
154
// CLASS: DeleteFromStructuredContent.class
155
// PARAMS: LEFT_NR, RIGHT_NR
156
i++; // [8]
157
queries[i].execute();
158
159         // OLD: DELETE FROM CONTENT_VERSION WHERE INSTANCE_ID IN (SELECT INSTANCE_ID FROM #temp2)
160
// NEW: DELETE FROM CONTENT_VERSION WHERE INSTANCE_ID IN (SELECT INSTANCE_ID FROM WEBMAN_TEMP_4)
161
// CLASS: DeleteFromContentVersion.class
162
// PARAMS: LEFT_NR, RIGHT_NR
163
i++; // [9]
164
queries[i].execute();
165
166         // OLD: DELETE FROM CONTENT_INSTANCE WHERE INSTANCE_ID IN (SELECT INSTANCE_ID FROM #temp2)
167
// NEW: DELETE FROM CONTENT_INSTANCE WHERE INSTANCE_ID IN (SELECT INSTANCE_ID FROM WEBMAN_TEMP_4)
168
// CLASS: DeleteFromContentInstance.class
169
// PARAMS: LEFT_NR, RIGHT_NR
170
i++; // [10]
171
queries[i].execute();
172
173         // CLASS: DeleteFromContentAttribute.class
174
i++; // [11]
175
queries[i].execute();
176
177         // CLASS: DeleteFromContentAttributeValue.class
178
i++; // [12]
179
queries[i].execute();
180
181         // OLD: DELETE FROM CONTENT WHERE CONTENT_ID IN (SELECT CONTENT_ID FROM #temp)
182
// NEW: DELETE FROM CONTENT WHERE CONTENT_ID IN (SELECT CONTENT_ID FROM WEBMAN_TEMP_3)
183
// CLASS: DeleteFromContent.class
184
// PARAMS: LEFT_NR, RIGHT_NR
185
i++; // [13]
186
queries[i].execute();
187
188         // OLD: DELETE FROM CONTENT_TREE WHERE LEFT_NR >= @L_NR AND RIGHT_NR <= @R_NR
189
// NEW: DELETE FROM CONTENT_TREE WHERE LEFT_NR >= ? AND RIGHT_NR <= ?
190
// CLASS: DeleteFromContentTree.class
191
// PARAMS: LEFT_NR, RIGHT_NR
192
i++; // [14]
193
queries[i].setQueryParams("LEFT_NR", leftNr);
194         queries[i].setQueryParams("RIGHT_NR", rightNr);
195         queries[i].execute();
196
197         // OLD: UPDATE CONTENT_TREE SET RIGHT_NR = RIGHT_NR - @DIFF WHERE RIGHT_NR > @R_NR
198
// NEW: UPDATE CONTENT_TREE SET RIGHT_NR = RIGHT_NR - ? WHERE RIGHT_NR > ?
199
// CLASS: UpdateContentTreeRightNr.class
200
// PARAMS: DIFF, RIGHT_NR
201
i++; // [15]
202
queries[i].setQueryParams("DIFF", diff);
203         queries[i].setQueryParams("RIGHT_NR", rightNr);
204         queries[i].execute();
205
206         // OLD: UPDATE CONTENT_TREE SET LEFT_NR = LEFT_NR - @DIFF WHERE LEFT_NR > @L_NR
207
// NEW: UPDATE CONTENT_TREE SET LEFT_NR = LEFT_NR - ? WHERE LEFT_NR > ?
208
// CLASS: UpdateContentTreeLeftNr.class
209
// PARAMS: DIFF, LEFT_NR
210
i++; // [16]
211
queries[i].setQueryParams("DIFF", diff);
212         queries[i].setQueryParams("LEFT_NR", leftNr);
213         queries[i].execute();
214
215         // drop temporary tables WEBMAN_TEMP3 and WEBMAN_TEMP4
216
//i++; // [17]
217
//queries[i].execute();
218
//i++; // [18]
219
//queries[i].execute();
220

221         // COMMIT TRANSACTION
222

223         if (isNotOpen)
224         {
225         aTKDBConnection.commitTransaction(); // commit all changes
226
}
227
228     }
229     catch(Throwable JavaDoc t)
230     {
231         TKDBManager.safeRollbackTransaction(t);
232     }
233     return hasResults();
234     }
235
236     public void initQuery(Connection con)
237     {
238     super.initQuery(con,
239             ISPREPARED,
240             PARAMORDER, TYPES, SETRELEVANTS, null);
241     }
242 }
243
Popular Tags