KickJava   Java API By Example, From Geeks To Geeks.

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


1 package com.teamkonzept.webman.mainint.db.queries;
2
3 import java.util.Enumeration JavaDoc;
4 import java.sql.*;
5 import java.io.*;
6 import com.teamkonzept.db.*;
7 //import com.teamkonzept.db.atomic.content.*;
8
//import com.teamkonzept.db.atomic.CheckTableExistence;
9
import com.teamkonzept.webman.mainint.db.queries.CheckTableExistence;
10 import com.teamkonzept.webman.mainint.db.queries.content.*;
11 import com.teamkonzept.webman.mainint.WebmanExceptionHandler;
12 import com.teamkonzept.lib.TKNull;
13
14 /*
15  * TKDBContentTreeGetOpen
16  * gibt eine teilweise geoeffneten Baum zurueck
17  * Input: NODE_ID des zu oefneten Knotens
18  * Output: CONTENT_NODE_ID, CONTENT_NODE_NAME, CONTENT_NODE_SHORTNAME
19  * CONTENT_NODE_TYPE, CONTENT_FORM, CONTENT_NODE_PARENT, NODE_ID
20  * wenn die NODE_ID = CONTENT_NODE_ID dann ist dieser Knoten oeffenbar, aber geschlossen
21  * wenn die NODE_ID = NULL dann ist dieser ein Blatt
22  * wenn die NODE_ID = CONTENT_NODE_PARENT dann ist dieser Knoten oeffenbar und offen
23  */

24 public class TKDBContentTreeGetOpen extends TKExtendedPrepQuery
25 {
26     public final static boolean ISPREPARED = true;
27     public final static String JavaDoc[] PARAMORDER = { "NODE_ID" };
28     public final static Object JavaDoc[][] TYPES = null;
29     public final static boolean[] SETRELEVANTS = { true };
30
31     protected static Class JavaDoc[] queryClasses = {
32     CheckTableExistence.class, // [0]
33
SelectContentNodeIdFromContentTree.class, // [1]
34
SelectLeftRightNrFromContentTree.class, // [2]
35
CreateTempTableContentNodeId.class, // [3]
36
CreateTempTableContentNodeIdNodeId.class, // [4]
37
InsertIntoTempSelectContentNodeIdLeftRightFromContentTree.class, // [5]
38
InsertTempTableContentNodeIdNodeId.class, // [6]
39
UpdateTempTableContentNodeIdNodeId.class, // [7]
40
UpdateTempTableContentNodeIdNodeId2.class, // [8]
41
SelectFromContentTreeContentInstanceTempTable.class, // [9]
42
};
43
44     public boolean execute()
45     {
46     try
47     {
48         init(queryClasses); // init query objects
49

50         // SELECT @N_ID = ?
51
Object JavaDoc nid = queryParams.get("NODE_ID");
52
53         boolean isNotOpen = aTKDBConnection.isAutoCommit();
54
55         if (isNotOpen)
56         {
57         TKDBManager.beginTransaction(); // begin transaction
58
}
59
60         // IF (@N_ID IS NULL)
61
if (nid == null || nid instanceof TKNull)
62         {
63         // SELECT @N_ID = CONTENT_NODE_ID FROM CONTENT_TREE WHERE CONTENT_NODE_PARENT IS NULL
64
queries[1].execute();
65         ResultSet rs = queries[1].fetchResultSet();
66         if (rs != null && rs.next())
67         {
68             nid = rs.getObject(1);
69         }
70         }
71         // SELECT @LNR = LEFT_NR, @RNR = RIGHT_NR FROM CONTENT_TREE WHERE CONTENT_NODE_ID = @N_ID
72
Object JavaDoc lnr = null;
73         Object JavaDoc rnr = null;
74         queries[2].setQueryParams("NODE_ID", nid);
75         queries[2].execute();
76         ResultSet rs = queries[2].fetchResultSet();
77         if (rs != null && rs.next())
78         {
79         lnr = rs.getObject(1);
80         rnr = rs.getObject(2);
81         }
82
83         queries[0].setQueryParams("TABLE_NAME", "WEBMAN_TEMP"); // check existence!!!
84
queries[0].execute();
85         ResultSet exist = queries[0].fetchResultSet();
86         if (exist == null || !exist.next())
87             queries[3].execute();
88         queries[0].setQueryParams("TABLE_NAME", "WEBMAN_TEMP_2"); // check existence!!!
89
queries[0].execute();
90         exist = queries[0].fetchResultSet();
91         if (exist == null || !exist.next())
92             queries[4].execute();
93         // OLD:
94
// SELECT CONTENT_NODE_ID INTO #temp FROM CONTENT_TREE " +
95
// WHERE LEFT_NR <= @LNR AND RIGHT_NR >= @RNR " +
96

97         // NEW:
98
// INSERT INTO WEBMAN_TEMP SELECT CONTENT_NODE_ID FROM CONTENT_TREE WHERE LEFT_NR <= @LNR AND RIGHT_NR >= @RNR
99
queries[5].setQueryParams("LEFT_NR", lnr);
100         queries[5].setQueryParams("RIGHT_NR", rnr);
101         queries[5].execute();
102
103         // INSERT INTO #temp2 SELECT CONTENT_NODE_ID, CONTENT_NODE_ID FROM CONTENT_TREE
104
// WHERE CONTENT_NODE_PARENT IN ( SELECT CONTENT_NODE_ID FROM #temp )
105
// OR
106
// CONTENT_NODE_ID IN ( SELECT CONTENT_NODE_ID FROM #temp )
107
queries[6].execute();
108
109         // OLD:
110
// UPDATE #temp2 SET NODE_ID = CT.CONTENT_NODE_PARENT FROM
111
// #temp T, CONTENT_TREE CT WHERE CT.CONTENT_NODE_ID = #temp2.CONTENT_NODE_ID
112
// AND CT.CONTENT_NODE_ID = T.CONTENT_NODE_ID
113
// NEW:
114
// UPDATE WEBMAN_TEMP_2 SET NODE_ID =
115
// (SELECT CT.CONTENT_NODE_PARENT FROM CONTENT_TREE CT, WEBMAN_TEMP T
116
// WHERE CT.CONTENT_NODE_ID = WEBMAN_TEMP_2.CONTENT_NODE_ID
117
// AND CT.CONTENT_NODE_ID = T.CONTENT_NODE_ID)
118
// WHERE CONTENT_NODE_ID IN (SELECT CONTENT_NODE_ID FROM WEBMAN_TEMP)
119
queries[7].execute();
120
121         // OLD:
122
// UPDATE #temp2 SET NODE_ID = NULL FROM CONTENT_TREE CT
123
// WHERE CT.CONTENT_NODE_ID = #temp2.CONTENT_NODE_ID AND CT.CONTENT_NODE_TYPE > 1
124
// NEW: UPDATE WEBMAN_TEMP_2 SET NODE_ID =
125
// (SELECT NULL FROM CONTENT_TREE CT, WEBMAN_TEMP T WHERE CT.CONTENT_NODE_ID = WEBMAN_TEMP_2.CONTENT_NODE_ID AND CT.CONTENT_NODE_TYPE > 1) WHERE CONTENT_NODE_ID IN (SELECT T.CONTENT_NODE_ID FROM WEBMAN_TEMP T, CONTENT_TREE CT WHERE CT.CONTENT_NODE_ID = WEBMAN_TEMP_2.CONTENT_NODE_ID AND CT.CONTENT_NODE_TYPE > 1)
126
queries[8].execute();
127         // SELECT CT.CONTENT_NODE_ID, CI.INSTANCE_ID, CI.NAME, CT.CONTENT_NODE_NAME,
128
// CT.CONTENT_NODE_SHORTNAME, CT.CONTENT_NODE_TYPE, CT.LEFT_NR, CT.RIGHT_NR,
129
// CT.CONTENT_FORM, CT.CONTENT_NODE_PARENT, T.NODE_ID
130
// FROM CONTENT_TREE CT, CONTENT_INSTANCE CI, #temp2 T
131
// WHERE
132
// CT.CONTENT_NODE_ID = T.CONTENT_NODE_ID AND CI.CONTENT_NODE_ID =* CT.CONTENT_NODE_ID
133
// ORDER BY
134
// CT.LEFT_NR
135

136
137         queries[9].execute();
138         addResult(queries[9].fetchResultSet());
139
140         if (isNotOpen)
141         {
142         aTKDBConnection.commitTransaction(); // commit all changes
143
}
144
145     }
146     catch(Throwable JavaDoc t)
147     {
148         TKDBManager.safeRollbackTransaction(t);
149     }
150     return hasResults();
151     }
152
153     public void initQuery(Connection con)
154     {
155     super.initQuery(con,
156             ISPREPARED, PARAMORDER, TYPES, SETRELEVANTS, null);
157     }
158 }
159
Popular Tags