1 5 package com.teamkonzept.webman.attr; 6 7 import java.util.*; 8 9 import com.teamkonzept.lib.*; 10 import com.teamkonzept.publishing.markups.*; 11 12 public class TKWMAttrText { 13 14 public String fieldName; 15 16 private String fieldText; 17 private String normalizedFieldText; 18 private String expandedFieldText; 19 private String tmplText; 20 private String xmlText; 21 22 private TKWMAttrMarkupParser parser; 23 24 private TKHashtable fieldLookup; 25 private TKHashtable formParams; 26 private TKHashtable dataLookup; 27 28 private TKVector diagnostics; 29 private TKVector dump; 30 31 public TKWMAttrText (String fieldName, String fieldText) { 32 33 this.fieldName = fieldName; 34 this.fieldText = fieldText; 35 36 this.fieldLookup = null; 37 this.formParams = null; 38 39 this.normalizedFieldText = null; 40 this.expandedFieldText = null; 41 this.tmplText = null; 42 this.xmlText = null; 43 44 this.dataLookup = new TKHashtable(); 45 this.diagnostics = new TKVector(); 46 this.dump = null; 47 48 this.parser = new TKWMAttrMarkupParser (this.diagnostics); 49 parser.parse (fieldText); 50 51 this.normalizedFieldText = null; 52 this.dump = null; 53 } 54 55 public TKWMAttrText (String fieldName, String fieldText, TKHashtable fieldLookup, TKHashtable params) { 56 57 this (fieldName,fieldText); 58 59 this.fieldLookup = fieldLookup; 60 this.formParams = params; 61 62 traverseField (fieldLookup); 63 applyData(); 64 } 65 66 public Enumeration allMarkups () { 67 68 return parser.allMarkups(); 69 } 70 71 public TKWMAttrMarkupData markupDataById (TKWMAttrMarkup markup) { 72 73 return markup == null ? null : 74 (TKWMAttrMarkupData) dataLookup.get (markup.toId().toUpperCase()); 75 } 76 77 public void registerMarkupDataById (TKWMAttrMarkupData markupData) { 78 79 if ((markupData != null) && (markupData.markupName != null)) 80 dataLookup.put (markupData.toId().toUpperCase(),markupData); 81 } 82 83 public TKVector dump () { 84 85 if (dump == null) dump = parser.dump(); 86 return dump; 87 } 88 89 public String getDigest (boolean force) { 90 91 return (diagnostics != null) && (diagnostics.size() > 0) && !force ? fieldText : 92 normalizedFieldText != null ? normalizedFieldText : 93 (normalizedFieldText = parser.normalize ()); 94 } 95 96 public String convert2Xml () { 97 98 return xmlText != null ? xmlText : 99 (xmlText = parser.convert2Xml ()); 100 } 101 102 public String getExpansion () { 103 104 return expandedFieldText != null ? expandedFieldText : 105 (expandedFieldText = parser.expand ()); 106 } 107 108 public String convert2Tmpl () { 109 110 return tmplText != null ? tmplText : 111 (tmplText = parser.convert2Tmpl ()); 112 } 113 114 public TKVector diagnostics () { 115 116 return diagnostics; 117 } 118 119 public void completeMarkups () { 120 121 Enumeration e = parser.allMarkups(); 122 while (e.hasMoreElements()) { 123 124 TKMarkup undefMarkup = (TKMarkup) e.nextElement(); 125 if ((undefMarkup == null) || !(undefMarkup instanceof TKDefinedMarkup)) continue; 126 127 TKDefinedMarkup markup = (TKDefinedMarkup) undefMarkup; 128 if (markup.definition == null) continue; 129 130 try { markup.complete(); } catch (Exception ex) { 131 132 diagnostics = TKMarkupParserException.handle (ex,diagnostics); 133 } 134 } 135 } 136 137 private void applyParams (TKWMAttrMarkup markup, TKWMAttrMarkupData markupData) throws Exception { 138 139 TKWMAttrMarkupParamData idParData = markupData.idPar(); 140 141 Enumeration e = markupData.params.elements(); 142 while ((e != null) && (e.hasMoreElements())) { 143 144 TKWMAttrMarkupParamData data = (TKWMAttrMarkupParamData) e.nextElement(); 145 if ((data == null) || (data.name == null)) continue; 146 147 if (markup.params == null) markup.params = new TKHashtable(); 148 TKMarkupParam param = (TKMarkupParam) markup.params.get(data.name); 149 150 TKMarkupParamCall paramDef = markup.definition.lookupParam (data.name); 151 if (paramDef == null) continue; 152 153 String parValue = param == null ? null : 154 paramDef.param.typeClass.checkValue (param.value()); 155 156 String dataValue = paramDef.param.typeClass.checkValue (data.newValue()); 157 158 if (param == null) { 159 160 param = new TKDefinedMarkupParam (data.name,dataValue,paramDef); 161 markup.params.put (param.name,param); 162 163 } else if ((idParData != null) && idParData.name.equals(data.name)) { 164 165 param.setValue (dataValue); 166 167 } else if ((parValue == null) && (dataValue != null)) { 168 169 param.setValue (dataValue); 170 } 171 } 172 } 173 174 private void applyMarkup (TKWMAttrMarkup markup, TKWMAttrMarkupData markupData) throws Exception { 175 176 if ((markupData.newMarkupName == null) || 177 (markupData.newMarkupName.length() == 0) || 178 markupData.newMarkupName.equalsIgnoreCase(markup.name)) return; 179 180 TKMarkupDefinition definition = 181 TKMarkupDefinition.lookup(markupData.newMarkupName); 182 183 if (definition == null) 184 throw new Exception ("Attribut-Fehler in "+ markup.toId()+":"+ 185 " Neues Markup '"+markupData.newMarkupName+ 186 "' unbekannt, pos= "+markup.pos); 187 188 if (definition.isAtom != markup.isAtom) 189 throw new Exception ("Attribut-Fehler in "+ markup.toId()+":"+ 190 " Neues Markup '"+markupData.newMarkupName+ 191 "' ist "+(definition.isAtom ? "" : "nicht")+" atomar, pos="+markup.pos); 192 193 markup.name = markupData.newMarkupName; 194 markup.info = definition.info; 195 markup.definition = definition; 196 markup.idPar = null; 197 198 TKHashtable params = markup.params; 199 markup.params = new TKHashtable(); 200 201 Enumeration e = definition.allParams(); 202 while ((e != null) && (e.hasMoreElements())) { 203 204 TKMarkupParamCall paramDef = (TKMarkupParamCall) e.nextElement(); 205 if ((paramDef == null) || (paramDef.name == null)) continue; 206 207 TKMarkupParam undefParam = (TKMarkupParam) params.get(paramDef.name); 208 209 if (undefParam == null) { 210 211 TKDefinedMarkupParam param = new TKDefinedMarkupParam (paramDef); 212 markup.params.put (param.name,param); 213 continue; 214 } 215 216 if (undefParam instanceof TKDefinedMarkupParam) { 217 218 TKDefinedMarkupParam param = (TKDefinedMarkupParam) undefParam; 219 220 param.definition = paramDef; 221 param.defaulted = false; 222 param.typeClass = TKMarkupParamDefinition.defaultTypeClass(); 223 param.optionList = null; 224 } 225 226 markup.params.put (undefParam.name,undefParam); 227 } 228 } 229 230 private void applyData () { 231 232 Enumeration e = parser.allMarkups(); 233 while (e.hasMoreElements()) { 234 235 TKMarkup undefMarkup = (TKMarkup) e.nextElement(); 236 if ((undefMarkup == null) || !(undefMarkup instanceof TKWMAttrMarkup)) continue; 237 238 TKWMAttrMarkup markup = (TKWMAttrMarkup) undefMarkup; 239 if (markup.definition == null) continue; 240 241 parser.deregister (markup); 242 243 try { 244 TKWMAttrMarkupData markupData = markupDataById(markup); 245 if (markupData != null) { 246 247 applyParams(markup,markupData); 248 applyMarkup(markup,markupData); 249 } 250 251 } catch (Exception ex) { 252 253 diagnostics = TKMarkupParserException.handle (ex,diagnostics); 254 } 255 256 try { markup.complete(); } catch (Exception ex) { 257 258 diagnostics = TKMarkupParserException.handle (ex,diagnostics); 259 } 260 261 parser.register (markup); 262 } 263 } 264 265 private void traverseField (TKHashtable fieldLookup) { 266 267 if (fieldLookup == null) return; 268 269 TKHashtable subFieldLookup = (TKHashtable) fieldLookup.get(fieldName); 270 if (subFieldLookup == null) return; 271 272 Enumeration subFields = subFieldLookup.keys(); 273 while (subFields.hasMoreElements()) { 274 275 String sub = (String ) subFields.nextElement(); 276 if (sub == null) continue; 277 278 if (sub.equalsIgnoreCase("MARKUPS")) 279 traverseMarkups(fieldLookup,(String ) subFieldLookup.get(sub)); 280 } 281 } 282 283 private void traverseMarkups (TKHashtable fieldLookup, String markupsFieldName) { 284 285 if ((markupsFieldName == null) || (fieldLookup == null)) return; 286 287 TKHashtable subFieldLookup = (TKHashtable) fieldLookup.get(markupsFieldName); 288 if (subFieldLookup == null) return; 289 290 Enumeration subFields = subFieldLookup.keys(); 291 while (subFields.hasMoreElements()) { 292 293 String sub = (String ) subFields.nextElement(); 294 if (sub == null) continue; 295 296 traverseMarkup(fieldLookup,(String ) subFieldLookup.get(sub)); 297 } 298 } 299 300 private void traverseMarkup (TKHashtable fieldLookup, String fieldName) { 301 302 if ((fieldName == null) || (fieldLookup == null)) return; 303 304 TKHashtable subFieldLookup = (TKHashtable) fieldLookup.get(fieldName); 305 if (subFieldLookup == null) return; 306 307 TKWMAttrMarkupData data = new TKWMAttrMarkupData (); 308 309 Enumeration subFields = subFieldLookup.keys(); 310 while (subFields.hasMoreElements()) { 311 312 String sub = (String ) subFields.nextElement(); 313 if (sub == null) continue; 314 315 String fullPath = (String ) subFieldLookup.get(sub); 316 if (fullPath == null) continue; 317 318 if (sub.equalsIgnoreCase("NEW_NAME")) 319 data.newMarkupName = (String ) formParams.get(fullPath); 320 else if (sub.equalsIgnoreCase("OLD_NAME")) 321 data.markupName = (String ) formParams.get(fullPath); 322 else if (sub.equalsIgnoreCase("PARAMS")) 323 traverseParams(fieldLookup,fullPath,data); 324 } 325 326 registerMarkupDataById (data); 327 } 328 329 private void traverseParams ( 330 TKHashtable fieldLookup, 331 String paramsFieldName, 332 TKWMAttrMarkupData markupData) 333 { 334 335 if ((paramsFieldName == null) || (fieldLookup == null)) return; 336 337 TKHashtable subFieldLookup = (TKHashtable) fieldLookup.get(paramsFieldName); 338 if (subFieldLookup == null) return; 339 340 Enumeration subFields = subFieldLookup.keys(); 341 while (subFields.hasMoreElements()) { 342 343 String sub = (String ) subFields.nextElement(); 344 if (sub == null) continue; 345 346 traverseParam(fieldLookup,sub,(String ) subFieldLookup.get(sub),markupData); 347 } 348 } 349 350 private void traverseParam ( 351 TKHashtable fieldLookup, 352 String paramName, 353 String paramFieldName, 354 TKWMAttrMarkupData markupData) 355 { 356 if ((paramName == null) || (paramFieldName == null) || 357 (fieldLookup == null) || (markupData == null)) return; 358 359 TKHashtable subFieldLookup = (TKHashtable) fieldLookup.get(paramFieldName); 360 if (subFieldLookup == null) return; 361 362 String fullPath = (String ) subFieldLookup.get("OLD_VALUE"); 363 String oldValue = (fullPath == null) ? null : (String ) formParams.get(fullPath); 364 365 fullPath = (String ) subFieldLookup.get("NEW_VALUE"); 366 String newValue = (fullPath == null) ? null : (String ) formParams.get(fullPath); 367 368 TKWMAttrMarkupParamData data = new TKWMAttrMarkupParamData (paramName,oldValue,newValue); 369 markupData.params.put(paramName,data); 370 } 371 } | Popular Tags |