001: package de.webman.form.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:
020: /**
021: * Testen des erzeugten Formulars durch Behandeln dieses selbst als Field
022: *
023: *
024: * @author $Author: alex $
025: * @version $Revision: 1.3 $
026: */
027: public class CTTestHandler extends DefaultEventHandler implements
028: ParameterTypes, FrameConstants, DatabaseDefaults {
029:
030: final static int MAX_FIELD_NAME_LENGTH = 80;
031:
032: private CTTestHandler() {
033: }
034:
035: private static CTTestHandler instance = new CTTestHandler();
036:
037: public static CTTestHandler getInstance() {
038: return instance;
039: }
040:
041: public void handleEvent(TKEvent evt) throws TKException {
042: try {
043: WebManEvent.checkEvent(evt.getRemoteUser(), evt.getName(),
044: ContextConstants.CONTENT_TREE);
045: int formType = Integer.parseInt(evt.getParameter(PARAMETER,
046: "FORM_TYPE"));
047: TKHTMLTemplate t = evt
048: .getPrepHTMLTemplate("ct_fields.tmpl");
049: TKHashtable fieldContext = new TKHashtable();
050: TKBaseField field = CTUtils.getStructure(formType);
051:
052: /*
053: testen eines forms: form muss die (nichtgespeicherte) Version
054: temporaer speichern, ein neues Objekt holen, dieses mit dieser
055: Version fuellen und als field anzeigen
056: */
057:
058: TKHashtable realData = (TKHashtable) field.compileData("",
059: evt.getParams().getClass(PARAMETER), fieldContext); // fieldData holen
060: TKBaseField tmpField = null;
061:
062: if (formType == FRAGMENT_FORM_TYPE) {
063: TKFieldSwitchData data = (TKFieldSwitchData) realData
064: .get(TKBaseField.SUB_TYPE_KEY);
065: tmpField = TKFieldRegistry.getFieldFromData(
066: data.alternative, data.data); // als fieldObj. holen
067: } else {
068: // inserted due to bug #397
069: if (realData.get(TKBaseField.NAME_KEY) == null) {
070: realData
071: .put(TKBaseField.NAME_KEY, CTUtils
072: .generateFieldName(realData.get(
073: TKBaseField.SHOW_NAME_KEY)
074: .toString(),
075: MAX_FIELD_NAME_LENGTH));
076: }
077:
078: tmpField = TKFieldRegistry.getFieldFromData(realData);
079: }
080:
081: TKFormDBData tmpDB = new TKFormDBData(0,
082: TEMP_CONTENT_FORM_TYPE); // tmp. speichern als neues form mit anderem form_type (42) SO DASS dieses dann nie in der Contenttyp-Liste auftaucht, da dort nur form_typen 69 aufgelistet werden!!!
083: TKFormDBInterface.New(tmpDB);
084: int tmpFid = tmpDB.form_id;
085: tmpField.insertIntoDB(tmpDB);
086: TKFormDBInterface.Put(tmpDB);
087:
088: tmpField.fillIntoTemplate(t, tmpField.getDefault(), ""); // tmpField jetzt anzeigen
089: CTUtils.keepCTContext(evt, t);
090: CTUtils.switchTest(t, true);
091: t.set("TMP_FORM_ID", Integer.toString(tmpFid)); // tmp. fid ins Template
092: WebManEvent.fillEventsIntoTemplate(evt.getRemoteUser(), t,
093: CONTENT_TREE);
094: evt.finishTemplate(t);
095: } catch (Throwable e) {
096: // TO DO : Analyze Exception !
097: throw WebmanExceptionHandler.getException(e);
098: }
099: }
100:
101: public boolean isHandler(TKEvent evt) {
102: return evt.getName().equalsIgnoreCase("CT_TEST");
103: }
104: }
|