001: /*
002: * $Header: /cvsroot/webman-cms/source/webman/com/teamkonzept/webman/mainint/db/queries/Attic/TKDBPresRefInsert.java,v 1.6 2001/08/15 13:16:07 markus Exp $
003: *
004: */
005: /**
006: * Jedes Selectstatement erhaelt eine eigene Klasse
007: */package com.teamkonzept.webman.mainint.db.queries;
008:
009: import java.sql.*;
010:
011: import com.teamkonzept.db.*;
012: import com.teamkonzept.webman.mainint.WebmanExceptionHandler;
013: import com.teamkonzept.webman.mainint.db.queries.presentation.*;
014: import com.teamkonzept.lib.TKNull;
015:
016: /*
017: * TKDBPresRefInsert
018: * input "PRESENTATION_ID", "PRESENTATION_COMPONENT_IDX",
019: * "COMPONENT_TYPE", "INTEGRATION_TYPE",
020: * "INTEGRATION_NAME", "INTEGRATION_SHORTNAME", "SUB_PRESENTATION_ID",
021: *
022: * ouptut neu erzeugter DS aus PRESENTATION_REFERENCE
023: *
024: * erzeugt neuen Eintrag in PRESENTATION_COMPONENT + PRESENTATION_REFERENCE wenn
025: * PRESENTATION_COMPONENT_IDX nicht gesetzt wird.
026: * ist PRESENTATION_COMPONENT_IDX gesetzt dann wird nur ein neuer eintrag in
027: * PRESENTATION_REFERENCE erzeugt, in diesem Fall werden COMPONENT_TYPE, etc ignoriert und
028: * muessen nicht uebergeben werden
029: */
030: public class TKDBPresRefInsert extends TKExtendedPrepQuery {
031:
032: public final static boolean isPrepared = true;
033:
034: public final static String[] order = { "PRESENTATION_ID",
035: "PRESENTATION_COMPONENT_IDX", "COMPONENT_TYPE",
036: "INTEGRATION_TYPE", "INTEGRATION_NAME",
037: "INTEGRATION_SHORTNAME", "SUB_PRESENTATION_ID" };
038:
039: public final static Object[][] types = {
040: { "INTEGRATION_NAME", new Integer(Types.VARCHAR) },
041: { "INTEGRATION_SHORTNAME", new Integer(Types.VARCHAR) } };
042:
043: public final static boolean[] setRelevants = { true };
044:
045: /* public final static String sqlString =
046: "DECLARE @PIDX int " +
047: "DECLARE @PID int " +
048:
049: "SELECT @PID = ? " +
050: "SELECT @PIDX = ? " +
051:
052: "BEGIN TRANSACTION " +
053:
054: "IF (@PIDX IS NULL) " +
055: "BEGIN " +
056: "SELECT " +
057: " @PIDX=ISNULL(MAX(PRESENTATION_COMPONENT_IDX)+1, 0) " +
058: "FROM " +
059: " PRESENTATION_COMPONENT " +
060: "WHERE " +
061: " PRESENTATION_ID = @PID " +
062:
063: "INSERT INTO " +
064: " PRESENTATION_COMPONENT " +
065: " (PRESENTATION_ID, PRESENTATION_COMPONENT_IDX, " +
066: " COMPONENT_TYPE, INTEGRATION_TYPE, " +
067: " INTEGRATION_NAME, INTEGRATION_SHORTNAME) " +
068: "VALUES " +
069: " (@PID, @PIDX, ?, ?, ?, ?) " +
070: "END " +
071:
072: "INSERT INTO " +
073: " PRESENTATION_REFERENCE " +
074: " (PRESENTATION_ID, PRESENTATION_COMPONENT_IDX, " +
075: " SUB_PRESENTATION_ID) " +
076: "VALUES " +
077: " (@PID, @PIDX, ?) " +
078:
079: "SELECT " +
080: " * " +
081: "FROM " +
082: " PRESENTATION_REFERENCE " +
083: "WHERE " +
084: " PRESENTATION_ID = @PID " +
085: "AND " +
086: " PRESENTATION_COMPONENT_IDX = @PIDX " +
087:
088: "COMMIT ";*/
089:
090: protected static Class[] queryClasses = {
091: SelectMaxPresentationComponent.class,
092: InsertPresentationComponent.class,
093: InsertPresentationReference.class,
094: SelectPresentationReference.class };
095:
096: public boolean execute() {
097: try {
098: init(queryClasses);
099:
100: // SELECT @PID = ?
101: Integer presId = (Integer) queryParams
102: .get("PRESENTATION_ID");
103: // SELECT @PIDX = ?
104: Object presComp = queryParams
105: .get("PRESENTATION_COMPONENT_IDX");
106: boolean isNotOpen = aTKDBConnection.isAutoCommit();
107: if (isNotOpen) {
108: TKDBManager.beginTransaction();
109: }
110:
111: // IF (@PIDX IS NULL)
112: int pidx = 0;
113: if (presComp == null || presComp instanceof TKNull) {
114:
115: // SELECT @PIDX=ISNULL(MAX(PRESENTATION_COMPONENT_IDX)+1, 0) FROM PRESENTATION_COMPONENT WHERE PRESENTATION_ID = @PID
116: queries[0].setQueryParams("PRESENTATION_ID", presId);
117: queries[0].execute();
118: ResultSet rs = queries[0].fetchResultSet();
119: if (rs != null && rs.next()) {
120: pidx = rs.getInt(1) + 1;
121: }
122:
123: presComp = new Integer(pidx);
124: // INSERT INTO PRESENTATION_COMPONENT (PRESENTATION_ID, PRESENTATION_COMPONENT_IDX, COMPONENT_TYPE, INTEGRATION_TYPE, INTEGRATION_NAME, INTEGRATION_SHORTNAME) VALUES (@PID, @PIDX, ?, ?, ?, ?)
125: queries[1].setQueryParams("PRESENTATION_ID", presId);
126: queries[1].setQueryParams("PRESENTATION_COMPONENT_IDX",
127: presComp);
128: queries[1].setQueryParams("COMPONENT_TYPE", queryParams
129: .get("COMPONENT_TYPE"));
130: queries[1].setQueryParams("INTEGRATION_TYPE",
131: queryParams.get("INTEGRATION_TYPE"));
132: queries[1].setQueryParams("INTEGRATION_NAME",
133: queryParams.get("INTEGRATION_NAME"));
134: queries[1].setQueryParams("INTEGRATION_SHORTNAME",
135: queryParams.get("INTEGRATION_SHORTNAME"));
136: queries[1].execute();
137: }
138:
139: // INSERT INTO PRESENTATION_REFERENCE (PRESENTATION_ID, PRESENTATION_COMPONENT_IDX, SUB_PRESENTATION_ID) VALUES (@PID, @PIDX, ?)
140: queries[2].setQueryParams("PRESENTATION_ID", presId);
141: queries[2].setQueryParams("PRESENTATION_COMPONENT_IDX",
142: presComp);
143: queries[2].setQueryParams("SUB_PRESENTATION_ID",
144: queryParams.get("SUB_PRESENTATION_ID"));
145: queries[2].execute();
146:
147: if (isNotOpen) {
148: TKDBManager.commitTransaction();
149: }
150: // SELECT * FROM PRESENTATION_REFERENCE WHERE PRESENTATION_ID = @PID AND PRESENTATION_COMPONENT_IDX = @PIDX
151: queries[3].setQueryParams("PRESENTATION_ID", presId);
152: queries[3].setQueryParams("PRESENTATION_COMPONENT_IDX",
153: presComp);
154: queries[3].execute();
155: addResult(queries[3].fetchResultSet());
156:
157: } catch (Throwable sqle) {
158: TKDBManager.safeRollbackTransaction(sqle);
159: }
160: return hasResults();
161: }
162:
163: public void initQuery(Connection con) {
164: super.initQuery(con, isPrepared, order, types, setRelevants,
165: null);
166: }
167: }
|