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 de.webman.acl.*;
007: import com.teamkonzept.webman.mainint.db.queries.*;
008: import com.teamkonzept.webman.mainint.events.*;
009: import com.teamkonzept.lib.*;
010: import com.teamkonzept.field.*;
011: import com.teamkonzept.field.db.*;
012: import com.teamkonzept.db.*;
013: import de.webman.content.workflow.*;
014: import java.sql.*;
015: import de.webman.template.jsp.JSPTemplate;
016: import de.webman.template.jsp.WSP;
017: import de.webman.template.xslt.XSLTTemplate;
018: import de.webman.content.eventhandler.*;
019:
020: import org.w3c.dom.Document;
021: import org.w3c.dom.Node;
022: import org.w3c.dom.Element;
023:
024: import javax.servlet.http.HttpSession;
025:
026: /**
027: * editieren eines Contents:
028: * verschiedene Faelle unterscheiden und entspr. verzweigen:
029: * Formulartyp mit Content aufbauen (ce_fields)
030: *
031: * ermitteln des absoluten pfades ab documentroot bis zu aktuellem Knoten und setzten ins Template!
032: * (UPBASE)
033: *
034: * @param CONTENT_NODE_ID, CONTENT_FORM, CONTENT_NAME, CONTENT_ID durchschleifen!
035: * @author $Author: alex $
036: * @version $Revision: 1.26 $
037: */
038: public class CEEditHandler extends DefaultEventHandler implements
039: DatabaseDefaults, ParameterTypes, FrameConstants {
040: /**
041: * Konstruktor private, da Singleton
042: */
043: private CEEditHandler() {
044: }
045:
046: /** Singleton Instanz */
047: private static CEEditHandler instance = new CEEditHandler();
048:
049: /**
050: * Zugriff auf Singleton
051: */
052: public static CEEditHandler getInstance() {
053: return instance;
054: }
055:
056: /**
057: * Handles the specified event.
058: *
059: * @param evt the event to be handled.
060: * @throws TKException if any error occurred during event handling.
061: */
062: public void handleEvent(TKEvent evt) throws TKException {
063: TKBaseField field = null;
064: try {
065: CEUtils.checkEvent(evt);
066: TKHTMLTemplate t = evt
067: .getPrepHTMLTemplate("ce_fields.tmpl");
068: ContentContext ceContext;
069:
070: String doPreview = evt
071: .getParameter(PARAMETER, "DO_PREVIEW");
072:
073: if (doPreview != null) {
074: t.set("DO_PREVIEW", doPreview);
075: }
076:
077: String event = evt.getName();
078: if (event.equalsIgnoreCase("CE_REVERT"))
079: event = null;
080:
081: // statische Daten der Versionsverwaltung abrufen
082: VersionStatics statics = VersionStatics.setup();
083:
084: // Intershop Special
085: if (evt.getName().equalsIgnoreCase("CE_CATFORM")
086: || evt.getName().equalsIgnoreCase("CE_PRODFORM")) {
087: ceContext = new ContentContext(evt.getParameter(
088: PARAMETER, "NAVIGATION_CONTEXT"));
089: String iID = evt.getParameter(PARAMETER, "INSTANCE_ID");
090: if (iID != null) {
091: //ceContext.sInstanceId = iID;
092: ceContext.instanceId = ceContext.string2Int(iID);
093: String nID = evt.getParameter(PARAMETER,
094: "CONTENT_NODE_ID");
095: ceContext.conNodeId = ceContext.string2Int(nID);
096: // ceContext.sConNodeId = nID;
097: }
098: } else {
099: ceContext = new ContentContext(evt.getParams());
100: }
101: Integer version = event == null ? new Integer(-1)
102: : ceContext.string2Int(evt.getParameter(
103: "VERSION_ID", event));
104: if (version.intValue() >= 0)
105: ceContext.versionId = version;
106:
107: if (ceContext.toStatusId.intValue() < 0) {
108: VersionStatus newStatus = VersionStatus
109: .lookupNewContent(statics);
110: ceContext.toStatusId = newStatus == null ? new Integer(
111: VersionStatus.defaultNewStatus) : new Integer(
112: newStatus.status_id);
113: }
114:
115: // Bei GroupContent wird hier der neue Namen geholt!
116: if (ceContext.conNodeName == null) {
117: if (evt.getName().equalsIgnoreCase("CE_CATFORM")
118: || evt.getName()
119: .equalsIgnoreCase("CE_PRODFORM"))
120: ceContext.conNodeName = evt.getParameter(PARAMETER,
121: "NEW_GROUP_CONTENT_NAME");
122: else
123: ceContext.conNodeName = ceContext
124: .getParam("NEW_GROUP_CONTENT_NAME");
125: }
126: boolean neuerGroupContent = false;
127: if (ceContext.conNodeShortName == null) {
128: if (evt.getName().equals("CE_CATFORM")
129: || evt.getName().equals("CE_PRODFORM"))
130: ceContext.conNodeShortName = evt.getParameter(
131: PARAMETER, "NEW_GROUP_CONTENT_SHORTNAME");
132: else
133: ceContext.conNodeShortName = ceContext
134: .getParam("NEW_GROUP_CONTENT_SHORTNAME");
135: neuerGroupContent = true;
136: }
137: // falls neuer GroupContent überprüfung später !!!
138: if (!neuerGroupContent)
139: CEUtils.isValidPathname(ceContext.conNodeShortName);
140:
141: // Formdata holen
142: TKFormDBData data = new TKFormDBData(ceContext.formId
143: .intValue());
144: TKFormDBInterface.Get(data);
145: field = TKFieldRegistry.getFieldFromDB(data);
146: if (ceContext.instanceId.intValue() == -1) {
147: field.fillIntoTemplate(t, field.getDefault(), "");
148: } else if (ceContext.versionId.intValue() >= 0) {
149: // vorhandene content version
150: TKContentDBData cdata = new TKContentDBData(
151: ceContext.instanceId.intValue(),
152: ceContext.versionId.intValue());
153:
154: TKContentDBInterface.Get(cdata);
155: Object contentData = field.getDataFromDB(cdata);
156:
157: field.fillIntoTemplate(t, contentData, "");
158: // ?t.set("CONTENT_ID", new Integer(cdata.content_id));
159:
160: } else {
161: throw new Exception(
162: "doCEEdit: No transitionable version there");
163: }
164: ceContext.fillIntoTemplate(t);
165: // Bei Gruppen die UPBASE des Gruppenknoten setzen
166: String groupContentID = evt.getParameter(PARAMETER,
167: "GROUP_CONTENT_NODE_ID");
168: if (groupContentID != null && groupContentID.length() > 0)
169: t.set("UPBASE", CEUtils.getCurrentPath(new Integer(
170: groupContentID)));
171: else {
172: if (ceContext.conNodeId.intValue() != -1)
173: t.set("UPBASE", CEUtils
174: .getCurrentPath(ceContext.conNodeId));
175: }
176:
177: if (ceContext.getNavigationContext() != null) {
178: ContentContext oldContext = new ContentContext(evt
179: .getParameter(PARAMETER, "NAVIGATION_CONTEXT"));
180: t.set("NAVIGATION_CONTEXT", oldContext
181: .calculateNavContext());
182: }
183: if (evt.getName().equalsIgnoreCase("CE_VIEW")) {
184: t.set("VIEW_ONLY", "true");
185: }
186: // Achtung bei neuem Content !
187: WebManEvent.fillEventsIntoTemplate(evt.getRemoteUser(), t,
188: ContextConstants.CONTENT_EDIT,
189: Policy.CONTENT_TREE_ID, ceContext.conNodeId);
190: evt.finishTemplate(t);
191: } catch (TKFieldDataDBError error) {
192: Object[] data = { field.getShowName() };
193: // Formular hat sich incompatibel geändert
194: throw new TKException("Incompatible change", FORM_CHANGE,
195: HIGH_SEVERITY, false, data, null);
196: } catch (Throwable e) {
197: // TO DO : Analyze Exception !
198: throw WebmanExceptionHandler.getException(e);
199: }
200: }
201:
202: public boolean isHandler(TKEvent evt) {
203: return (evt.getName().equalsIgnoreCase("CE_EDIT")
204: || evt.getName().equalsIgnoreCase("CE_VIEW")
205: || evt.getName().equalsIgnoreCase("CE_REVERT") || evt
206: .getName().equalsIgnoreCase("CE_CONTENT_VERSION_EDIT"));
207:
208: }
209: }
|