KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > de > webman > content > workflow > db > queries > DeleteContent


1 package de.webman.content.workflow.db.queries;
2
3 import java.sql.*;
4
5 import com.teamkonzept.db.*;
6 import com.teamkonzept.webman.mainint.db.queries.version.*;
7 import com.teamkonzept.webman.mainint.db.queries.CheckTableExistence;
8 import com.teamkonzept.webman.db.TKWebmanDBManager;
9 /**
10  * Aufräumen alter Contentversionen
11  * ToDo: Content Attribute ??
12  * ToDo: Wert der CONTENT_ID in CONTENT_VERSION ?? null ?
13  * @author $Author: sebastian $
14  * @version $Revision: 1.8 $
15  */

16 public class DeleteContent extends TKExtendedPrepQuery {
17
18     public final static boolean IS_PREPARED =
19         true;
20
21     public final static String JavaDoc[] PARAM_ORDER =
22         { "CONTENT_ID", "INSTANCE_ID" };
23
24     public final static Object JavaDoc[][] PARAM_TYPES =
25         null;
26
27     public final static boolean[] SET_RELEVANTS =
28         { false };
29
30     /** enthält die benötigten Teilqueries */
31     protected static Class JavaDoc[] queryClasses = {
32         //[0]SELECT TABLE_NAME FROM USER_CATALOG WHERE TABLE_NAME = ?
33
CheckTableExistence.class,
34         //[1]CREATE GLOBAL TEMPORARY TABLE WEBMAN_TEMP_CONTENT_VERSION (CONTENT_ID int)
35
CreateTempTableContentVersion.class,
36         //[2]INSERT INTO WEBMAN_TEMP_CONTENT_VERSION (CONTENT_ID)
37
// SELECT CONTENT_ID FROM CONTENT_VERSION WHERE CONTENT_ID < ? AND INSTANCE_ID = ?
38
InsertTempTableContentVersion.class,
39         //[3]UPDATE CONTENT_VERSION SET CONTENT_ID = NULL WHERE CONTENT_ID < ? AND INSTANCE_ID = ?
40
SetContentVersionNullWithInstance.class,
41         //[4]DELETE FROM CONTENT_VALUE WHERE CONTENT_ID IN (SELECT DISTINCT CONTENT_ID FROM WEBMAN_TEMP_CONTENT_VERSION)
42
DeleteContentValueSubTemp.class,
43         //[5]DELETE FROM CONTENT_NODE WHERE CONTENT_ID IN (SELECT DISTINCT CONTENT_ID FROM WEBMAN_TEMP_CONTENT_VERSION)
44
DeleteContentNodeSubTemp.class,
45         //[6]DELETE FROM CONTENT WHERE CONTENT_ID IN (SELECT DISTINCT CONTENT_ID FROM WEBMAN_TEMP_CONTENT_VERSION)
46
DeleteContentSubTemp.class,
47         //[7]DELETE FROM CONTENT_ATTRIBUTE_VALUE WHERE CONTENT_ID IN SELECT DISTINCT CONTENT_ID FROM WEBMAN_TEMP_CONTENT_VERSION)
48
DeleteContentAttributesSubTemp.class,
49         //[8]DELETE FROM CONTENT_ATTRIBUTE WHERE NOT ( VALUE_ID IN (SELECT VALUE_ID FROM CONTENT_ATTRIBUTE_VALUE) )
50
DeleteContentAttributesSubContent.class,
51         //[9]DROP TABLE WEBMAN_TEMP_CONTENT_VERSION
52
DropTempTableContentVersion.class
53     };
54
55     public boolean execute()
56     {
57     try
58     {
59         init(queryClasses); // init query objects
60

61         boolean isNotOpen = aTKDBConnection.isAutoCommit();
62         if (isNotOpen)
63         {
64         TKDBManager.beginTransaction();
65         }
66
67         Object JavaDoc contentId = queryParams.get("CONTENT_ID");
68         Object JavaDoc instanceId = queryParams.get("INSTANCE_ID");
69
70         //check existence of temporary table
71
// wozu ist diese Abfrage gut ? zumal die
72
// tabelle die existiert einfach weiter benutzt wird
73
// eigendlich müsste man doch dafür sorgen,das jeder User
74
// seine eigene Tabelle bekommt
75
// (Abfrage funktioniert bei Postgres eh nicht, da temporäre Tabellen nicht in PG_tables hinterlegt werden)
76

77         queries[0].setQueryParams("TABLE_NAME",
78           TKWebmanDBManager.getDBVendor()==QueryConstants.POSTGRESQL?"webman_temp_content_version":"WEBMAN_TEMP_CONTENT_VERSION");
79         queries[0].execute();
80         ResultSet exist = queries[0].fetchResultSet();
81         if (exist == null || !exist.next())
82             queries[1].execute();
83
84         //fill temporary table
85
queries[2].setQueryParams("CONTENT_ID", contentId);
86         queries[2].setQueryParams("INSTANCE_ID", instanceId);
87         queries[2].execute();
88
89         //set content_id in table content_version to null
90
queries[3].setQueryParams("CONTENT_ID", contentId);
91         queries[3].setQueryParams("INSTANCE_ID", instanceId);
92         queries[3].execute();
93
94         //delete from table content_value
95
queries[4].execute();
96         //delete from table content_node
97
queries[5].execute();
98         //delete from table content
99
queries[6].execute();
100         // delete contentattribute
101
queries[7].execute();
102         queries[8].execute();
103
104         //drop temporary table
105
queries[9].execute();
106
107         if (isNotOpen)
108         {
109             aTKDBConnection.commitTransaction(); // commit all changes
110
}
111
112     }
113     catch(Throwable JavaDoc t)
114     {
115         TKDBManager.safeRollbackTransaction(t);
116     }
117     return hasResults();
118     }
119
120     public void initQuery(Connection con) {
121         super.initQuery(
122             con,
123             IS_PREPARED,
124             PARAM_ORDER,
125             PARAM_TYPES,
126             SET_RELEVANTS,
127             null );
128     }
129 }
130
131
Popular Tags