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.field.*;
012: import com.teamkonzept.field.db.*;
013: import com.teamkonzept.db.*;
014: import de.webman.content.workflow.*;
015: import de.webman.util.legacy.Legacy;
016: import java.sql.*;
017:
018: /**
019: * Speichern eines neuen Node
020: * a) DirNode speichern, linke Liste neu aufbauen, rechts leer
021: * b) GroupNode speichern, linke Liste neu aufbauen, rechts Groupeditmaske (ce_conList) mit leerer Liste und New-Button
022: * c) SingleNode speichern, linke Liste neu aufbauen, rechts SingleEditmaske mit leerem Contentform (ce_fields)
023: *
024: * @author $Author: alex $
025: * @version $Revision: 1.10 $
026: */
027: public class CESaveNewNodeHandler extends DefaultEventHandler implements
028: ParameterTypes, FrameConstants, DatabaseDefaults {
029: /** Konstruktor private - Singleton ! */
030: private CESaveNewNodeHandler() {
031: }
032:
033: /** Singleton Instanz */
034: private static CESaveNewNodeHandler instance = new CESaveNewNodeHandler();
035:
036: public static CESaveNewNodeHandler getInstance() {
037: return instance;
038: }
039:
040: public void handleEvent(TKEvent evt) throws TKException {
041: try {
042: CEUtils.checkEvent(evt);
043: // statische Daten der Versionsverwaltung abrufen
044: // VersionStatics statics = VersionStatics.setup();
045:
046: String sNodeType = evt.getParameter(PARAMETER,
047: "NEW_NODE_TYPE");
048: String sConForm = (evt.getParameter(PARAMETER,
049: "NEW_CONTENT_NODE_FORM")) == null ? "" : evt
050: .getParameter(PARAMETER, "NEW_CONTENT_NODE_FORM");
051: if (!sNodeType.equals(DIRECTORY_NODE)
052: && sConForm.equals("")) {
053: throw new TKUserException("Kein Formular definiert",
054: NO_FORM_DEFINED, USER_SEVERITY, false, null);
055: }
056: if (sNodeType.equals(SINGLE)) {
057: evt.getParams()
058: .put(PARAMETER, "CONTENT_FORM", sConForm);
059: CEEditHandler.getInstance().handleEvent(evt);
060: return;
061: }
062: String sParId = evt.getParameter(PARAMETER,
063: "CONTENT_NODE_ID");
064: String sNodeName = evt.getParameter(PARAMETER,
065: "NEW_CONTENT_NODE_NAME");
066: String sNodeShortName = evt.getParameter(PARAMETER,
067: "CONTENT_NODE_SHORTNAME");
068: // String navigationContext = evt.getNotNullParameter(PARAMETER, "NAVIGATION_CONTEXT");
069: if (!sNodeType.equals(SINGLE)
070: && !CEUtils.isValidPathname(sNodeShortName))
071: throw new TKUserException("Kein gültiger Pfadname",
072: NO_VALID_PATHNAME, USER_SEVERITY, true, null);
073:
074: TKQuery q = TKDBManager
075: .newQuery(TKDBContentTreeInsertNode.class);
076: q.setQueryParams("NODE_ID", new Integer(sParId));
077: q.setQueryParams("CONTENT_NODE_NAME", sNodeName);
078: q.setQueryParams("CONTENT_NODE_SHORTNAME", sNodeShortName);
079: q.setQueryParams("CONTENT_NODE_TYPE",
080: new Integer(sNodeType));
081: q.setQueryParams("TREE_ID", new Integer(0));
082: q.setQueryParams("PROTOTYPE_ID", TKNull.NULL);
083:
084: if (sNodeType.equals(DIRECTORY_NODE)) {
085: q.setQueryParams("CONTENT_FORM", TKNull.NULL);
086: } else {
087: q.setQueryParams("CONTENT_FORM", new Integer(sConForm));
088: }
089: q.execute();
090: ResultSet rs = q.fetchResultSet();
091: TKHTMLTemplate frame = null;
092: if (sNodeType.equals(DIRECTORY_NODE)) {
093: // DirectoryNode
094: frame = evt.getPrepHTMLTemplate("f_ce.tmpl");
095: HTMLUtils.fillFrameSet(frame, LEFT_FRAME_WIDTH,
096: "CE_SHOWLIST", "CE_EMPTY");
097: } else if (sNodeType.equals(GROUP)) {
098: // Group
099: frame = evt.getPrepHTMLTemplate("f_ce.tmpl");
100: HTMLUtils.fillFrameSet(frame, LEFT_FRAME_WIDTH,
101: "CE_SHOWLIST", "CE_GROUP_LIST");
102: } else {
103: // Single
104: // kein Template -> es wird an den CEEditHandler weitergeleitet!
105: frame = evt.getPrepHTMLTemplate("ce_fields.tmpl"); // wird aus Bequemlichkeit erstmal erzeugt !
106: // HTMLUtils.fillFrameSet( frame, LEFT_FRAME_WIDTH, "CE_SHOWLIST", "CE_EDIT" );
107: }
108: // params fuer doEdit/doGroupList neu setzen entsprechend des neu gespeicherten Nodes !!!
109: String newDestination = "";
110: int newNodeId = 0;
111: // int instId = 0;
112: if (rs.next()) {
113:
114: newNodeId = rs.getInt("CONTENT_NODE_ID"); // neue Id des eben gespeicherten node
115: newDestination = Integer.toString(newNodeId);
116: frame.set("CONTENT_NODE_ID", Integer
117: .toString(newNodeId));
118:
119: if (sNodeType.equals(SINGLE)) {
120: /*
121: einfach mal auskommentiert, vielleicgt geht es ja !
122: TKContentInstanceDBData instDB = new TKContentInstanceDBData(newNodeId, "default" );
123: TKContentInstanceDBInterface.New( instDB );
124:
125: instId = instDB.instance_id;
126: TKContentDBData conDB = new TKContentDBData(instId, "%WebManThread.doCESave", evt.getRemoteUser() );
127: VersionStatus newStatus = VersionStatus.lookupNewContent(statics);
128: conDB.status_id = newStatus == null ? VersionStatus.defaultNewStatus : newStatus.status_id;
129: TKContentDBInterface.New( conDB );
130:
131: TKFormDBData data = new TKFormDBData( Integer.parseInt( sConForm ) );
132: TKFormDBInterface.Get( data );
133: TKBaseField field = TKFieldRegistry.getFieldFromDB( data );
134: field.insertDataIntoDB( conDB, field.getDefault() );
135: TKContentDBInterface.Put( conDB );
136: */
137: // frame.set( "INSTANCE_ID", Integer.toString( instId ) );
138: } else if (sNodeType.equals(GROUP)) {
139: frame.set("GROUP_CONTENT_NODE_ID", Integer
140: .toString(newNodeId));
141: frame.set("GROUP_CONTENT_NODE_NAME", sNodeName);
142: frame.set("GROUP_CONTENT_NODE_SHORTNAME",
143: sNodeShortName);
144: }
145: }
146: if (sNodeType.equals(SINGLE)) {
147: // Einfach direkt weiterschicken
148: evt.getParams().put(PARAMETER, "CONTENT_NODE_NAME",
149: sNodeName);
150: evt.getParams().put(PARAMETER,
151: "CONTENT_NODE_SHORTNAME", sNodeShortName);
152: evt.getParams().put(PARAMETER, "CONTENT_NODE_TYPE",
153: sNodeType);
154: evt.getParams()
155: .put(PARAMETER, "CONTENT_FORM", sConForm);
156: evt.getParams().put(PARAMETER, "INSTANCE_ID",
157: new Integer(-1));
158: evt.getParams().put(PARAMETER, "CONTENT_NODE_ID",
159: Integer.toString(newNodeId));
160: CEEditHandler.getInstance().handleEvent(evt);
161: return;
162: }
163: frame.set("CONTENT_NODE_NAME", sNodeName);
164: frame.set("CONTENT_NODE_SHORTNAME", sNodeShortName);
165: frame.set("CONTENT_NODE_TYPE", sNodeType);
166: frame.set("CONTENT_FORM", sConForm);
167: TKVector openNodes = new TKVector();
168: if (evt.getParams().hasMultiple(PARAMETER, "OPEN_NODES")) {
169: openNodes = evt.getParams().getVector(PARAMETER,
170: "OPEN_NODES");
171: } else {
172: //openNodes.put( 0, evt.getParameter( PARAMETER, "OPEN_NODES" )==null?"-1":evt.getParameter( PARAMETER, "OPEN_NODES" ) );
173: openNodes.put(0, evt.getParameter(PARAMETER,
174: "OPEN_NODES"));
175: }
176: if (sNodeType.equals(DIRECTORY_NODE)) {
177: openNodes.addElement(Integer.toString(newNodeId));
178: }
179: TKStandardIterator iterator1 = new TKStandardIterator(
180: openNodes, frame.getListIterator(), "OPEN_NODES",
181: "OPEN_NODES");
182: frame.setListIterator(iterator1);
183:
184: frame.set("DESTINATION", newDestination);
185: evt.finishTemplate(frame);
186: } catch (Throwable e) {
187: // TO DO : Analyze Exception !
188: throw WebmanExceptionHandler.getException(e);
189: }
190: }
191:
192: public boolean isHandler(TKEvent evt) {
193: return evt.getName().equalsIgnoreCase("CE_SAVE_NEW_NODE");
194: }
195: }
|