1 package de.webman.form.eventhandler; 2 3 import com.teamkonzept.web.*; 4 import com.teamkonzept.webman.*; 5 import com.teamkonzept.webman.db.TKWebmanDBManager; 6 import com.teamkonzept.webman.mainint.*; 7 import com.teamkonzept.webman.mainint.db.*; 8 import com.teamkonzept.webman.mainint.db.queries.*; 9 import com.teamkonzept.webman.mainint.events.*; 10 import com.teamkonzept.lib.*; 11 import com.teamkonzept.field.*; 12 import com.teamkonzept.field.db.*; 13 import com.teamkonzept.db.*; 14 import com.teamkonzept.publishing.markups.*; 15 import de.webman.form.Form; 16 import de.webman.form.FormDependencies; 17 18 24 public class CTSaveHandler 25 extends DefaultEventHandler 26 implements ParameterTypes, 27 FrameConstants, 28 DatabaseDefaults 29 { 30 31 34 private static final CTSaveHandler INSTANCE = new CTSaveHandler(); 35 36 39 private CTSaveHandler () 40 { 41 } 43 44 49 public static CTSaveHandler getInstance () 50 { 51 return INSTANCE; 52 } 53 54 60 public void handleEvent (TKEvent event) 61 throws TKException 62 { 63 try 64 { 65 WebManEvent.checkEvent(event.getRemoteUser(), event.getName(), ContextConstants.CONTENT_TREE); 67 68 String id = event.getParameter(PARAMETER, "FORM_ID"); 70 Integer formId = (id != null && id.trim().length() > 0) ? Integer.valueOf(id) : (Integer ) null; 71 Integer formType = Integer.valueOf(event.getParameter(PARAMETER, "FORM_TYPE")); 72 73 TKBaseField field = CTUtils.getStructure(formType.intValue()); 75 TKHashtable realData = (TKHashtable) field.compileData("", event.getParams().getClass(PARAMETER), new TKHashtable()); 76 TKBaseField saveField = null; 77 78 if (formType.intValue() == FRAGMENT_FORM_TYPE) 79 { 80 TKFieldSwitchData data = (TKFieldSwitchData) realData.get(TKBaseField.SUB_TYPE_KEY); 82 saveField = TKFieldRegistry.getFieldFromData(data.alternative, data.data); 83 84 String errorPath = TKFieldGroup.CLASS_ID + "." + TKBaseField.SUB_TYPE_KEY + "." + data.alternative + "."; 86 87 if (CTUtils.isAmbiguousFormName(formId, saveField.getName().toUpperCase())) 88 { 89 refuse(event, "FORM_NAME#" + errorPath + saveField.getType() + "." + TKBaseField.NAME_KEY); 91 return; 92 } 93 94 if (CTUtils.isAmbiguousFormDescription(formId, saveField.getShowName())) 95 { 96 refuse(event, "FORM_DESCRIPTION#" + errorPath + saveField.getType() + "." + TKBaseField.SHOW_NAME_KEY); 98 return; 99 } 100 } 101 else 102 { 103 String name = (String ) realData.get(TKBaseField.NAME_KEY); 105 106 if (name == null || name.trim().length() == 0) 107 { 108 realData.put(TKBaseField.NAME_KEY, CTUtils.generateFieldName(realData.get(TKBaseField.SHOW_NAME_KEY).toString(), TKInputField.SMALL_DEFAULT_LENGTH)); 110 } 111 112 saveField = TKFieldRegistry.getFieldFromData(realData); 114 115 if (CTUtils.isAmbiguousFormDescription(formId, saveField.getShowName())) 116 { 117 refuse(event, "FORM_DESCRIPTION#" + saveField.getType() + "." + TKBaseField.SHOW_NAME_KEY); 119 return; 120 } 121 } 122 123 if (CTUtils.isUnsafeFormModification(event)) 124 { 125 TKFormDBData data = new TKFormDBData(formId.intValue(), formType.intValue()); 127 TKFormDBInterface.Get(data); 128 129 if (! TKFieldRegistry.getFieldFromDB(data).equals(saveField)) 130 { 131 Form form = new Form(formId); 133 134 TKVector contents = FormDependencies.getDependingContents(form, new TKVector(), false); 136 137 if (contents.size() > 0) 138 { 139 forward(event, form, contents); 141 return; 142 } 143 } 144 } 145 146 TKFormDBData formDB = null; 147 148 if (formId == null) 149 { 150 formDB = new TKFormDBData(0, formType.intValue()); 152 TKFormDBInterface.New(formDB); 153 formId = new Integer (formDB.form_id); 154 } 155 else 156 { 157 formDB = new TKFormDBData(formId.intValue(), formType.intValue()); 159 } 160 161 saveField.insertIntoDB(formDB); 163 TKFormDBInterface.Put(formDB); 164 165 TKHTMLTemplate t = event.getPrepHTMLTemplate("ct_aftersave.tmpl"); 167 t.set("FORM_ID", formId); 168 t.set("FORM_TYPE", event.getParameter(PARAMETER, "FORM_TYPE")); 169 t.set("UPBASE", event.getParameter(PARAMETER, "UPBASE")); 170 WebManEvent.fillEventsIntoTemplate(event.getRemoteUser(), t, CONTENT_TREE); 171 event.finishTemplate(t); 172 } 173 catch (NumberFormatException ne) 174 { 175 throw new TKUserException("Eine Ihrer Eingaben war im falschen Format " + ne.getMessage(), INPUT, USER_SEVERITY, true,ne); 176 } 177 catch (Throwable e) 178 { 179 throw WebmanExceptionHandler.getException(e); 182 } 183 } 184 185 192 public boolean isHandler (TKEvent event) 193 { 194 return event.getName().equalsIgnoreCase("CT_SAVE"); 195 } 196 197 204 private void refuse (TKEvent event, String error) 205 throws Throwable 206 { 207 TKHTMLTemplate t = event.getPrepHTMLTemplate("ct_fields.tmpl"); 208 209 TKBaseField field = CTUtils.getStructure(Integer.valueOf(event.getParameter(PARAMETER, "FORM_TYPE")).intValue()); 210 field.fillIntoTemplate(t, field.compileData("", event.getParams().getClass(PARAMETER), new TKHashtable()), ""); 211 212 if (event.getParameter(PARAMETER, "FORM_ID") != null) 213 { 214 t.set("FORM_ID", event.getParameter(PARAMETER, "FORM_ID")); 215 } 216 217 t.set("FORM_TYPE", event.getParameter(PARAMETER, "FORM_TYPE")); 218 t.set("UPBASE", event.getParameter(PARAMETER, "UPBASE")); 219 t.set("ERROR", error); 220 221 WebManEvent.fillEventsIntoTemplate(event.getRemoteUser(), t, CONTENT_TREE); 222 event.finishTemplate(t); 223 } 224 225 233 private void forward (TKEvent event, 234 Form form, 235 TKVector dependencies) 236 throws Throwable 237 { 238 TKHTMLTemplate t = event.getPrepHTMLTemplate("ct_dependency.tmpl"); 239 240 t.set("NEXT_EVENT", event.getName()); 241 t.set("FORCE_MODIFICATION", "1"); 242 t.set("FORM_DESCRIPTION", form.getDescription()); 243 t.setListIterator(new TKStandardPluginIterator("REFERENCES", null, dependencies, false, t.getListIterator())); 244 t.setListIterator(new TKStandardPluginIterator("PARAMETERS", null, CTUtils.getParameterList(event.getParams().getClass(PARAMETER)), false, t.getListIterator())); 245 246 WebManEvent.fillEventsIntoTemplate(event.getRemoteUser(), t, CONTENT_TREE); 247 event.finishTemplate(t); 248 } 249 250 } 251 | Popular Tags |