001: package de.webman.duplication.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.db.queries.duplication.*;
011: import com.teamkonzept.webman.mainint.events.*;
012: import com.teamkonzept.lib.*;
013: import com.teamkonzept.db.*;
014:
015: import java.sql.*;
016: import java.io.*;
017: import org.apache.log4j.Category;
018:
019: /**
020: *
021: *
022: *
023: * @author $Author: ralf $
024: * @version $Revision: 1.4 $
025: */
026: public class DUMultiDuplicateHandler extends DefaultEventHandler
027: implements ParameterTypes, FrameConstants, DatabaseDefaults {
028: /**
029: * the log category
030: */
031: private static Category CAT = Category
032: .getInstance(DUMultiDuplicateHandler.class);
033:
034: private DUMultiDuplicateHandler() {
035: }
036:
037: private static DUMultiDuplicateHandler instance = new DUMultiDuplicateHandler();
038:
039: public static DUMultiDuplicateHandler getInstance() {
040: return instance;
041: }
042:
043: public void handleEvent(TKEvent evt) throws TKException {
044: try {
045:
046: TKParams params = evt.getParams();
047:
048: String numberOfCopiesString = params.get("PAR",
049: "NUMBER_OF_COPIES");
050: //String numberingDirection = params.get( "PAR", "NUM_DIRECTION" );
051:
052: if (numberOfCopiesString != null
053: && !numberOfCopiesString.equals("")) {
054: // Falls dieser Parameter nicht bereitgestellt wird, so wird nur einmal dupliziert
055: NameAssembler nameAssembler = new NameAssembler(params);
056:
057: Integer numberOfCopies = new Integer(
058: numberOfCopiesString);
059: for (int i = 0; i < numberOfCopies.intValue(); i++) {
060:
061: Integer[] newRootIDs = new Integer[2];
062: //doDuDuplicate((i == numberOfCopies.intValue() -1), newRootIDs);
063: //doDURenameDuplicates(i+1 , numberOfCopies, newRootIDs);
064:
065: DUDuplicateHandler.getInstance().doDuDuplicate(
066: i == numberOfCopies.intValue() - 1,
067: newRootIDs, evt);
068: String nameExtension = nameAssembler.assemble(i,
069: null);
070: doDURenameDuplicates(nameExtension, newRootIDs, evt);
071: // note: this is a hack!!! oracle 9i throws an exception otherwise!
072: TKDBConnectionManager.getInstance()
073: .closeConnection();
074: }
075:
076: } else {// Nur eine Kopie
077: DUDuplicateHandler.getInstance().doDuDuplicate(evt);
078: }
079: } catch (Throwable e) {
080: // TO DO : Analyze Exception !
081: throw WebmanExceptionHandler.getException(e);
082: }
083: }
084:
085: public boolean isHandler(TKEvent evt) {
086: return evt.getName().equalsIgnoreCase("DU_MULTI_DUPLICATE");
087: }
088:
089: /**
090: * Umbenennt Knoten oder ganze Bäume
091: *
092: * @param
093: */
094: //doDURenameDuplicates(int copyNr, Integer numOfCopies, Integer[] newRootIDs)
095: public boolean doDURenameDuplicates(String nameExtension,
096: Integer[] newRootIDs, TKEvent evt) throws Throwable {
097: TKParams params = evt.getParams();
098:
099: //if(printwriter != null) printwriter.println("doDURenameDuplicates called with copyNr " + copyNr + " numOfCopies " + numOfCopies +
100: // " newRootIDs[0] " + newRootIDs[0] + " newRootIDs[1] "+newRootIDs[1] );
101: Integer contentRoot = newRootIDs[0];
102: Integer siteRoot = newRootIDs[1];
103:
104: String extModeStr = params.get("PAR", "NAME_EXTENSION"); // NAME_EXTENSION: Nein (0) Ja (1) oder Recursiv (2)
105:
106: int extMode;
107:
108: if (extModeStr == null || extModeStr.equals("")) {
109: extMode = 0;
110: } else {
111: try {
112: extMode = (new Integer(extModeStr)).intValue();
113: } catch (NumberFormatException e) {
114: CAT
115: .warn(
116: " Exception caught by DuplicateServlet.doDuMultiDuplicate() ",
117: e);
118: extMode = 0;
119: }
120: }
121:
122: // if(printwriter != null) printwriter.println(" nameExtension " + nameExtension);
123: if (extMode == 2) {
124: if (contentRoot != null) {
125: //printwriter.println("doDURenameDuplicates contentRoot " + contentRoot);
126: TKQuery qContentRename = TKDBManager
127: .newQuery(TKDBContentTreeRenameRecursive.class);
128: qContentRename
129: .setQueryParams("NAME_EXT", nameExtension);
130: qContentRename.setQueryParams("ROOT_ID", contentRoot);
131: if (true) {
132: qContentRename
133: .setQueryParams("POS", new Integer(1));
134: // Wenn dieser Queryparameter nicht geestzt ist, wird die Extension hinten angehangt
135: }
136: qContentRename.execute();
137: qContentRename.close();
138: //printwriter.println("TKDBContentTreeRenameRecursive executed witth contentRoot " + contentRoot);
139: }
140: if (siteRoot != null) {// Auch im Sitetree Recursives Umbenennen der neu erzeugten Knoten
141: TKQuery qSiteRename = TKDBManager
142: .newQuery(TKDBSiteTreeRenameRecursive.class);
143: qSiteRename.setQueryParams("NAME_EXT", nameExtension);
144: qSiteRename.setQueryParams("ROOT_ID", siteRoot);
145: if (true) {
146: qSiteRename.setQueryParams("POS", new Integer(1));
147: // Wenn dieser Queryparameter nicht geestzt ist, wird die Extension hinten angehangt
148: }
149: qSiteRename.execute();
150: qSiteRename.close();
151: }
152: }
153: if (extMode >= 1) {// Umbenennen der Roots der neuen Subtrees
154:
155: TKQuery TKDBContentNodeNameExtend = TKDBManager
156: .newQuery(TKDBContentNodeNameExtend.class);
157: TKDBContentNodeNameExtend.setQueryParams("NAME_EXT",
158: nameExtension);
159: TKDBContentNodeNameExtend.setQueryParams("CONTENT_NODE_ID",
160: contentRoot);
161: if (true) {
162: TKDBContentNodeNameExtend.setQueryParams("POS",
163: new Integer(1));
164: // Wenn dieser Queryparameter nicht geestzt ist, wird die Extension hinten angehangt
165: }
166: //TKLog.println("executing with nameExtension "+ nameExtension + " contentRoot " + contentRoot +""+ TKDBContentNodeNameExtend);
167:
168: TKDBContentNodeNameExtend.execute();
169: //if(printwriter != null) printwriter.println("TKDBContentNodeNameExtend contentRoot " + contentRoot);
170: TKDBContentNodeNameExtend.close();
171: if (siteRoot != null) {
172: TKQuery TKDBSiteNodeNameExtend = TKDBManager
173: .newQuery(TKDBSiteNodeNameExtend.class);
174: TKDBSiteNodeNameExtend.setQueryParams("NAME_EXT",
175: nameExtension);
176: TKDBSiteNodeNameExtend.setQueryParams("SITE_NODE_ID",
177: siteRoot);
178: if (true) {
179: TKDBSiteNodeNameExtend.setQueryParams("POS",
180: new Integer(1));
181: // Wenn dieser Queryparameter nicht geestzt ist, wird die Extension hinten angehangt
182: }
183: TKDBSiteNodeNameExtend.execute();
184: TKDBSiteNodeNameExtend.close();
185: }
186: }
187: return true;
188: }
189:
190: }
|