001: package de.webman.content.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: import com.teamkonzept.webman.mainint.db.queries.*;
009: import com.teamkonzept.webman.mainint.events.*;
010: import com.teamkonzept.lib.*;
011: import com.teamkonzept.db.*;
012:
013: import java.sql.*;
014: import org.apache.log4j.Category;
015:
016: /**
017: * Loeschen eines Knotens aus dem ContentTree:
018: * aus DB loeschen und Neuaufbauen der NodeListe
019: *
020: * !!!CHecken, ob der zu loeschende node oder seine Kinder in der liste der offenen Nodes ist, wenn ja, dann raus aus der liste
021: *
022: * Reihenfolge der Params im String:
023: * 1.) ROLE
024: * 2.) CONTENT_NODE_ID
025: *
026: *
027: * @author $Author: alex $
028: * @version $Revision: 1.12 $
029: */
030: public class CENodeDeleteHandler extends DefaultEventHandler implements
031: ParameterTypes, FrameConstants, DatabaseDefaults {
032: /** Logging */
033: private static Category cat = Category
034: .getInstance(CENodeDeleteHandler.class);
035:
036: private CENodeDeleteHandler() {
037: }
038:
039: private static CENodeDeleteHandler instance = new CENodeDeleteHandler();
040:
041: public static CENodeDeleteHandler getInstance() {
042: return instance;
043: }
044:
045: public void handleEvent(TKEvent evt) throws TKException {
046: try {
047: CEUtils.checkEvent(evt);
048: String nodeParent = evt.getParameter(PARAMETER,
049: "CONTENT_NODE_PARENT");
050: String sNodeId = evt.getParameter(PARAMETER,
051: "CONTENT_NODE_ID");
052: String sType = evt.getParameter(PARAMETER,
053: "CONTENT_NODE_TYPE");
054: // wenn checked gesetzt ist, wurde schon eine Sicherheitsabfrage durchgefuehrt
055: boolean checked = evt.getParameter(PARAMETER, "CHECKED") != null;
056: TKVector depends = new TKVector();
057: boolean isDependent = CEUtils.checkDependencies(
058: new Integer(sNodeId), depends, true);
059: if (isDependent && !checked) {
060: // Sicherheitsabfrage
061: TKHTMLTemplate t = evt
062: .getPrepHTMLTemplate("warning_message.tmpl");
063: if (nodeParent != null)
064: t.set("CONTENT_NODE_PARENT", nodeParent);
065: t.set("CONTENT_NODE_ID", sNodeId);
066: t.set("CONTENT_NODE_TYPE", sType);
067: TKVector openNodes = new TKVector();
068: if (evt.getParams()
069: .hasMultiple(PARAMETER, "OPEN_NODES")) {
070: openNodes = evt.getParams().getVector(PARAMETER,
071: "OPEN_NODES");
072: } else {
073: openNodes.put(0, evt.getParameter(PARAMETER,
074: "OPEN_NODES"));
075: }
076: // die liste der offenen nodes kommt ins template
077: TKStandardIterator iterator1 = new TKStandardIterator(
078: openNodes, t.getListIterator(), "OPEN_NODES",
079: "OPEN_NODES");
080: t.setListIterator(iterator1);
081: t.setListIterator(new TKStandardPluginIterator(
082: "REFERENCES", null, depends, false, t
083: .getListIterator()));
084:
085: String navContext = evt.getParameter(PARAMETER,
086: "NAVIGATION_CONTEXT");
087: ContentContext ce;
088: if (navContext != null)
089: ce = new ContentContext(navContext);
090: else
091: ce = new ContentContext(evt.getParams());
092: t.set("NAVIGATION_CONTEXT", ce.calculateNavContext());
093: evt.finishTemplate(t);
094: return;
095: }
096: if (isDependent) {
097: TKQuery q = TKDBManager
098: .newQuery(TKDBContentTreeDependentST.class);
099: q.setQueryParams("CONTENT_NODE_ID",
100: new Integer(sNodeId));
101: q.execute();
102: TKDBResult dbrs = new TKDBResult(q.fetchResultSet());
103: TKDBResultRow row;
104: int curr = 0;
105: while ((row = (TKDBResultRow) dbrs.get(curr++)) != null) {
106: String delSiteNode = (String) row
107: .getColumn("SITE_NODE_ID");
108: cat.debug(".....so I DELETE site tree node "
109: + delSiteNode);
110: q = TKDBManager
111: .newQuery(TKDBSiteTreeDeleteNode.class);
112: q.setQueryParams("SITE_NODE_ID", new Integer(
113: delSiteNode));
114: q.execute();
115: }
116: cat
117: .debug(".....AND I DELETE all in DOCUMENT_CONTENT with content tree node "
118: + sNodeId);
119: q = TKDBManager
120: .newQuery(TKDBContentTreeDeleteDependentDC.class);
121: q.setQueryParams("CONTENT_NODE_ID",
122: new Integer(sNodeId));
123: q.execute();
124: }
125: TKQuery q = TKDBManager
126: .newQuery(TKDBContentTreeDeleteNode.class);
127: q.setQueryParams("CONTENT_NODE_ID", new Integer(sNodeId));
128: q.execute();
129: if (sType.equals(GROUP) || sType.equals(DIRECTORY_NODE)) {
130: TKVector openNodes = new TKVector();
131: if (evt.getParams()
132: .hasMultiple(PARAMETER, "OPEN_NODES")) {
133: openNodes = evt.getParams().getVector(PARAMETER,
134: "OPEN_NODES");
135: } else {
136: String openNode = evt.getParameter(PARAMETER,
137: "OPEN_NODES");
138: if (openNode != null)
139: openNodes.put(0, openNode);
140: }
141: if (openNodes.size() > 0)
142: openNodes = TreeUtils.updateOpenNodes(openNodes,
143: nodeParent, "1", sNodeId,
144: TKDBContentTreeIsChild.class);
145: TKHTMLTemplate frame = evt
146: .getPrepHTMLTemplate("f_ce.tmpl");
147: // behalte sortier-Parameter
148: CEUtils.keepSortParameter(evt, frame);
149:
150: HTMLUtils.fillFrameSet(frame, LEFT_FRAME_WIDTH,
151: "CE_SHOWLIST", "CE_EMPTY");
152: TKStandardIterator iterator1 = new TKStandardIterator(
153: openNodes, frame.getListIterator(),
154: "OPEN_NODES", "OPEN_NODES");
155: frame.setListIterator(iterator1);
156: evt.finishTemplate(frame);
157: } else {
158: // SINGLE
159: evt.getParams().put(PARAMETER, "RECALCULATE", "a");
160: CEBrowseHandler.getInstance().handleEvent(evt);
161: }
162: } catch (Throwable e) {
163: // TO DO : Analyze Exception !
164: throw WebmanExceptionHandler.getException(e);
165: }
166: }
167:
168: public boolean isHandler(TKEvent evt) {
169: return evt.getName().equalsIgnoreCase("CE_NODE_DELETE");
170: }
171: }
|