001: package de.webman.sitetree.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: import java.util.*;
020:
021: /**
022: * Oeffnen eines Dirs im Sitetree
023: *
024: * @author $Author: mischa $
025: * @version $Revision: 1.4 $
026: */
027: public class STArrangeOpenDirHandler extends DefaultEventHandler
028: implements ParameterTypes, FrameConstants, DatabaseDefaults {
029: private STArrangeOpenDirHandler() {
030: }
031:
032: private static STArrangeOpenDirHandler instance = new STArrangeOpenDirHandler();
033:
034: public static STArrangeOpenDirHandler getInstance() {
035: return instance;
036: }
037:
038: public void handleEvent(TKEvent evt) throws TKException {
039: try {
040: WebManEvent.checkEvent(evt.getRemoteUser(), evt.getName(),
041: ContextConstants.SITE_TREE);
042: TKHTMLTemplate t = evt
043: .getPrepHTMLTemplate("st_arrange.tmpl");
044: String dest = evt.getParameter(PARAMETER, "SITE_NODE_ID");
045: String openNodeId = evt.getParameter(PARAMETER, "NODE_ID");
046: String closeNodeId = evt.getParameter(PARAMETER,
047: "SITE_NODE_PARENT");
048:
049: TKVector openNodes = new TKVector();
050: if (evt.getParams().hasMultiple(PARAMETER, "OPEN_NODES")) {
051: openNodes = evt.getParams().getVector(PARAMETER,
052: "OPEN_NODES");
053: } else {
054: openNodes.put(0, evt.getParameter(PARAMETER,
055: "OPEN_NODES"));
056: }
057: openNodes = TreeUtils.updateOpenNodes(openNodes,
058: openNodeId, closeNodeId, dest,
059: TKDBSiteTreeIsChild.class);
060:
061: TKDBResult tree = null;
062: TKDBResult branch;
063: TKQuery q;
064: int size = openNodes.size();
065: for (int i = 0; i < size; i++) {
066: String id = (String) openNodes.get(i);
067: if (id != null) {
068: q = TKDBManager.newQuery(TKDBSiteTreeGetOpen.class);
069: if (id.equals("-1")) {
070: q.setQueryParams("NODE_ID", TKNull.NULL);
071: } else {
072: q.setQueryParams("NODE_ID", new Integer(id));
073: }
074: q.execute();
075: branch = new TKDBResult(q.fetchResultSet());
076: if (tree != null) {
077: tree = TreeUtils.mergeIntoTree(tree, branch,
078: "SITE_NODE_ID");
079: } else {
080: tree = branch;
081: }
082: }
083: }
084:
085: // die liste der jetzt offenen nodes kommt ins template
086: TKStandardIterator iterator1 = new TKStandardIterator(
087: openNodes, t.getListIterator(), "OPEN_NODES",
088: "OPEN_NODES");
089: t.setListIterator(iterator1);
090:
091: int maxDepth = TreeUtils.getMaxDepth(tree, "SITE");
092: TKOpenSiteTreeIterator iterator = new TKOpenSiteTreeIterator(
093: tree, t.getListIterator(), "ST_NODE_LIST", Integer
094: .parseInt(dest), maxDepth);
095: t.setListIterator(iterator);
096: t.set("MAXDEPTH_PLUS_ONE", Integer.toString(maxDepth + 1));
097: t.set("MAXDEPTH_PLUS_TWO", Integer.toString(maxDepth + 2));
098: evt.finishTemplate(t);
099: } catch (Throwable e) {
100: // TO DO : Analyze Exception !
101: throw WebmanExceptionHandler.getException(e);
102: }
103: }
104:
105: public boolean isHandler(TKEvent evt) {
106: return evt.getName().equalsIgnoreCase("ST_ARRANGE_OPENDIR");
107: }
108: }
|