001: package de.webman.content.eventhandler;
002:
003: import com.teamkonzept.web.*;
004: import com.teamkonzept.webman.*;
005: import com.teamkonzept.webman.mainint.*;
006: import com.teamkonzept.webman.mainint.db.queries.*;
007: import com.teamkonzept.webman.mainint.events.*;
008: import com.teamkonzept.lib.*;
009: import com.teamkonzept.db.*;
010: import de.webman.acl.*;
011:
012: //import com.klg.jprobe.profiler.api.JPPerformanceAPI;
013:
014: /**
015: * oeffnet oder schliesst ein Verzeichnis im Tree -- kann mehrere Aeste oeffnen --
016: * NODE_ID ist die id des jeweils zu oeffnenden node:
017: * - bei geschlossenen dirs ist die NODE_ID = der CONTENT_NODE_ID,
018: * d.h. dass das noch geschlossene dir geoeffnet wird
019: * - bei offenen dirs ist die NODE_ID die id des parents des zu schliessenden node,
020: * d.h. dass nicht explizit geschlossen wird, sondern das parentdir des noch offenen
021: * dirs geoeffnet wird, damit ist das zu schliessende dir dann auch zu
022: * @author $Author: sebastian $
023: * @version $Revision: 1.6 $
024: */
025: public class CEOpenMultDirHandler extends DefaultEventHandler implements
026: ParameterTypes, FrameConstants {
027: /** empty constructor */
028: private CEOpenMultDirHandler() {
029: }
030:
031: private static CEOpenMultDirHandler instance = new CEOpenMultDirHandler();
032:
033: public static CEOpenMultDirHandler getInstance() {
034: return instance;
035: }
036:
037: public void handleEvent(TKEvent evt) throws TKException {
038: try {
039: CEUtils.checkEvent(evt);
040:
041: //JPPerformanceAPI.getInstance().clear();
042: // openNodeId enthaelt die id des neu zu oeffnenden node
043: // closeNodeId enthaelt die id des zu schliessenden node bei einem geschlossenen
044: // node, -1 bei einem offenen node
045: TKHTMLTemplate left = evt
046: .getPrepHTMLTemplate("ce_nodeList.tmpl");
047: // behalte sortier-Parameter
048: CEUtils.keepSortParameter(evt, left);
049:
050: String dest = evt
051: .getParameter(PARAMETER, "CONTENT_NODE_ID");
052: String openNodeId = evt.getParameter(PARAMETER, "NODE_ID");
053: String closeNodeId = evt.getParameter(PARAMETER,
054: "CONTENT_NODE_PARENT");
055:
056: TKVector openNodes = new TKVector();
057: if (evt.getParams().hasMultiple(PARAMETER, "OPEN_NODES")) {
058: openNodes = evt.getParams().getVector(PARAMETER,
059: "OPEN_NODES");
060: } else {
061: openNodes.put(0, evt.getParameter(PARAMETER,
062: "OPEN_NODES"));
063: }
064: openNodes = TreeUtils.updateOpenNodes(openNodes,
065: openNodeId, closeNodeId, dest,
066: TKDBContentTreeIsChild.class);
067:
068: // und fuer jedes element wird
069: // dann mit TKDBContentTreeGetOpen der entspr. teilbaum geholt
070: // die teilbaeume muessen jetzt gemischt werden
071: TKDBResult tree = null;
072: TKDBResult branch;
073: TKQuery q;
074: int size = openNodes.size();
075: for (int i = 0; i < size; i++) {
076: String id = (String) openNodes.get(i);
077: if (id != null) {
078: q = TKDBManager
079: .newQuery(TKDBContentTreeGetOpen.class);
080: //q = TKDBManager.newQuery( "TKDBContentTreeGetOpenUser" );
081: if (id.equals("-1")) {
082: q.setQueryParams("NODE_ID", TKNull.NULL);
083: //q.setQueryParams( "USER_ID", new Integer(this.userId) );
084: } else {
085: q.setQueryParams("NODE_ID", new Integer(id));
086: //q.setQueryParams( "USER_ID", new Integer(this.userId) );
087: }
088: q.execute();
089: branch = new TKDBResult(q.fetchResultSet());
090: if (tree != null) {
091: tree = TreeUtils.mergeIntoTree(tree, branch,
092: "CONTENT_NODE_ID");
093: } else {
094: tree = branch;
095: }
096: }
097: }
098:
099: // add allowed events to each node
100: WebManEvent.fillInContentEvents(evt.getRemoteUser(), evt
101: .getName(), CONTENT_EDIT, tree);
102:
103: // die liste der jetzt offenen nodes kommt ins template
104: TKStandardIterator iterator1 = new TKStandardIterator(
105: openNodes, left.getListIterator(), "OPEN_NODES",
106: "OPEN_NODES");
107: left.setListIterator(iterator1);
108:
109: int maxDepth = TreeUtils.getMaxDepth(tree, "CONTENT");
110: TKOpenContentTreeIterator iterator2 = new TKOpenContentTreeIterator(
111: tree, left.getListIterator(), "CE_NODE_LIST",
112: Integer.parseInt(dest), maxDepth);
113: left.setListIterator(iterator2);
114:
115: left.set("MAXDEPTH_PLUS_ONE", Integer
116: .toString(maxDepth + 1));
117: left.set("MAXDEPTH_PLUS_TWO", Integer
118: .toString(maxDepth + 2));
119:
120: left.set("RTARGET", RIGHT_TARGET);
121: left.set("LTARGET", LEFT_TARGET);
122: // dupliziertool
123: LoginFactory factory = LoginFactory.getInstance();
124: Login login = factory.getLogin(evt.getRemoteUser());
125: Event event = EventFactory.getInstance().getEvent(
126: "DU_START");
127: if (login.isAllowed(event.getID(),
128: ContextConstants.DUPLICATION_TOOL)) {
129: left.set("DU_START", "1");
130: }
131: // neu ordnen
132: event = EventFactory.getInstance().getEvent(
133: "CE_ARRANGE_START");
134: if (login.isAllowed(event.getID(),
135: ContextConstants.CONTENT_EDIT)) {
136: left.set("CE_ARRANGE_START", "1");
137: }
138:
139: evt.finishTemplate(left);
140: //JPPerformanceAPI.getInstance().save("user");
141: } catch (Throwable e) {
142: // TO DO : Analyze Exception !
143: throw WebmanExceptionHandler.getException(e);
144: }
145: }
146:
147: public boolean isHandler(TKEvent evt) {
148: return evt.getName().equalsIgnoreCase("CE_OPEN_MULTDIR");
149: }
150: }
|