001: package de.webman.documenttype.eventhandler;
002:
003: import com.teamkonzept.web.*;
004: import com.teamkonzept.webman.*;
005: import com.teamkonzept.webman.db.TKWebmanDBManager;
006: import com.teamkonzept.webman.mainint.*;
007: import com.teamkonzept.webman.mainint.db.*;
008:
009: import com.teamkonzept.webman.mainint.db.queries.*;
010: import com.teamkonzept.webman.mainint.events.*;
011: import com.teamkonzept.lib.*;
012: import com.teamkonzept.field.*;
013: import com.teamkonzept.field.db.*;
014: import com.teamkonzept.db.*;
015: import com.teamkonzept.publishing.markups.*;
016:
017: import java.sql.*;
018: import java.io.*;
019:
020: /**
021: * doPRCopy
022: *
023: * Kopieren einer Presentation
024: * danach linke Liste neu, rechts Liste aller Componenten dieser Presentation
025: *
026: * @author $Author: alex $
027: * @version $Revision: 1.3 $
028: */
029: public class DTCopyPresHandler extends DefaultEventHandler implements
030: ParameterTypes, FrameConstants, DatabaseDefaults {
031: private DTCopyPresHandler() {
032: }
033:
034: private static DTCopyPresHandler instance = new DTCopyPresHandler();
035:
036: public static DTCopyPresHandler getInstance() {
037: return instance;
038: }
039:
040: public void handleEvent(TKEvent evt) throws TKException {
041: try {
042: WebManEvent.checkEvent(evt.getRemoteUser(), evt.getName(),
043: ContextConstants.PRESENTATIONS);
044:
045: // ALLES NOCH IN EINE TRANSAKTION !!
046: // zu kopierende Präsentation
047: String presIdAlt = evt.getParameter(PARAMETER,
048: "PRESENTATION_ID");
049: // Neue Namen
050: String neuerName = evt.getParameter(PARAMETER,
051: "PRESENTATION_NAME");
052: String neuerKurzName = evt.getParameter(PARAMETER,
053: "PRESENTATION_SHORTNAME");
054: String templateID = evt.getParameter(PARAMETER,
055: "TEMPLATE_ID");
056:
057: // erster Schritt -> Presentation neu einfuegen
058: TKQuery q = TKDBManager.newQuery(TKDBPresInsert.class);
059: q.setQueryParams("PRESENTATION_NAME", neuerName);
060: q.setQueryParams("PRESENTATION_SHORTNAME", neuerKurzName);
061: q.setQueryParams("TEMPLATE_ID", new Integer(templateID));
062: q.execute();
063: ResultSet rs = q.fetchResultSet();
064: Integer presId = null; // die neue ID !
065: if (rs.next()) {
066: presId = new Integer(rs.getInt("PRESENTATION_ID"));
067: }
068:
069: // 2. Alle Presentation_components kopieren
070: // 3. Alle Presentation_Content kopieren
071: q = TKDBManager.newQuery(TKDBPresCompGet.class);
072: q.setQueryParams("PRESENTATION_ID", new Integer(presIdAlt));
073: q.execute();
074: rs = q.fetchResultSet();
075: while (rs.next()) {
076: TKQuery insert = TKDBManager
077: .newQuery(TKDBPresContInsert.class);
078: insert.setQueryParams("PRESENTATION_ID", presId);
079: insert.setQueryParams("COMPONENT_TYPE", new Integer(rs
080: .getInt("COMPONENT_TYPE")));
081: insert.setQueryParams("INTEGRATION_TYPE", new Integer(
082: rs.getInt("INTEGRATION_TYPE")));
083: String name = rs.getString("INTEGRATION_NAME");
084: insert.setQueryParams("INTEGRATION_NAME", name);
085: insert.setQueryParams("INTEGRATION_SHORTNAME", rs
086: .getString("INTEGRATION_SHORTNAME"));
087: insert.setQueryParams("FORM_ID", new Integer(rs
088: .getInt("FORM_ID")));
089: insert.execute();
090: }
091: // 4. Alle Presentation Refrenzen kopieren
092: // erstmal getype Referenzen, die Eintraege in den
093: q = TKDBManager.newQuery(TKDBPresCompGetRef.class);
094: q.setQueryParams("PRESENTATION_ID", new Integer(presIdAlt));
095:
096: q.execute();
097: rs = q.fetchResultSet();
098: Integer insertID = null;
099: Integer markPresCompID = new Integer(-1); // merkt sich aktuelle ID zur Vermeidung von Mehrfacheinträgen ->alex
100: while (rs.next()) {
101: // hier achten auf 1 zu n Beziehung !!!
102: Integer neuCompID = new Integer(rs
103: .getInt("PRESENTATION_COMPONENT_IDX"));
104:
105: TKQuery insert;
106: if (neuCompID.intValue() == markPresCompID.intValue()) {
107: // nur Referenz einfuegen
108: insert = TKDBManager.newQuery(TKDBPresRefIns.class);
109: insert.setQueryParams("PRESENTATION_COMPONENT_IDX",
110: insertID);
111: } else {
112: insert = TKDBManager
113: .newQuery(TKDBPresRefInsert.class);
114: insert.setQueryParams("COMPONENT_TYPE",
115: new Integer(rs.getInt("COMPONENT_TYPE")));
116: insert.setQueryParams("INTEGRATION_TYPE",
117: new Integer(rs.getInt("INTEGRATION_TYPE")));
118: String name = rs.getString("INTEGRATION_NAME");
119: insert.setQueryParams("INTEGRATION_NAME", name);
120: insert.setQueryParams("INTEGRATION_SHORTNAME", rs
121: .getString("INTEGRATION_SHORTNAME"));
122: }
123: insert.setQueryParams("PRESENTATION_ID", presId);
124: insert.setQueryParams("SUB_PRESENTATION_ID",
125: new Integer(rs.getInt("SUB_PRESENTATION_ID")));
126: insert.execute();
127: if (neuCompID.intValue() != markPresCompID.intValue()) {
128: ResultSet rs2 = insert.fetchResultSet();
129: if (rs2.next())
130: insertID = new Integer(rs2
131: .getInt("PRESENTATION_COMPONENT_IDX"));
132: }
133: markPresCompID = neuCompID; // Merker umsetzen
134: }
135:
136: // jetzt freie Referenzen
137: q = TKDBManager.newQuery(TKDBPresCompGetFreeRef.class);
138: q.setQueryParams("PRESENTATION_ID", new Integer(presIdAlt));
139:
140: q.execute();
141: rs = q.fetchResultSet();
142: while (rs.next()) {
143: TKQuery insert = TKDBManager
144: .newQuery(TKDBPresCompInsert.class);
145: insert.setQueryParams("COMPONENT_TYPE", new Integer(rs
146: .getInt("COMPONENT_TYPE")));
147: insert.setQueryParams("INTEGRATION_TYPE", new Integer(
148: rs.getInt("INTEGRATION_TYPE")));
149: String name = rs.getString("INTEGRATION_NAME");
150: insert.setQueryParams("INTEGRATION_NAME", name);
151: insert.setQueryParams("INTEGRATION_SHORTNAME", rs
152: .getString("INTEGRATION_SHORTNAME"));
153: insert.setQueryParams("PRESENTATION_ID", presId);
154: insert.execute();
155: }
156:
157: // und Frameset aufbauen !
158: TKHTMLTemplate frame = evt.getPrepHTMLTemplate("f_pr.tmpl");
159: HTMLUtils.fillFrameSet(frame, LEFT_FRAME_WIDTH_SMALL,
160: "PR_SHOWLIST", "PR_EMPTY");
161: WebManEvent.fillEventsIntoTemplate(evt.getRemoteUser(),
162: frame, PRESENTATIONS);
163: evt.finishTemplate(frame);
164: } catch (Throwable e) {
165: // TO DO : Analyze Exception !
166: throw WebmanExceptionHandler.getException(e);
167: }
168: }
169:
170: public boolean isHandler(TKEvent evt) {
171: return evt.getName().equalsIgnoreCase("PR_COPY_PRES");
172: }
173: }
|