KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > teamkonzept > webman > attr > TKWMAttrText


1 /*
2  * $Header: /cvsroot/webman-cms/source/webman/com/teamkonzept/webman/attr/TKWMAttrText.java,v 1.7 2000/11/22 13:03:01 alex Exp $
3  *
4  */

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 JavaDoc fieldName;
15
16     private String JavaDoc fieldText;
17     private String JavaDoc normalizedFieldText;
18     private String JavaDoc expandedFieldText;
19     private String JavaDoc tmplText;
20     private String JavaDoc 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 JavaDoc fieldName, String JavaDoc 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 JavaDoc fieldName, String JavaDoc 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 JavaDoc 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 JavaDoc convert2Xml () {
97     
98         return xmlText != null ? xmlText :
99             (xmlText = parser.convert2Xml ());
100     }
101     
102     public String JavaDoc getExpansion () {
103     
104         return expandedFieldText != null ? expandedFieldText :
105                 (expandedFieldText = parser.expand ());
106     }
107     
108     public String JavaDoc 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 JavaDoc ex) {
131
132                 diagnostics = TKMarkupParserException.handle (ex,diagnostics);
133             }
134         }
135     }
136         
137     private void applyParams (TKWMAttrMarkup markup, TKWMAttrMarkupData markupData) throws Exception JavaDoc {
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 JavaDoc parValue = param == null ? null :
154                 paramDef.param.typeClass.checkValue (param.value());
155
156             String JavaDoc 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 JavaDoc {
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 JavaDoc ("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 JavaDoc ("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 JavaDoc ex) {
252             
253                 diagnostics = TKMarkupParserException.handle (ex,diagnostics);
254             }
255
256             try { markup.complete(); } catch (Exception JavaDoc 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 JavaDoc sub = (String JavaDoc) subFields.nextElement();
276             if (sub == null) continue;
277             
278             if (sub.equalsIgnoreCase("MARKUPS"))
279                 traverseMarkups(fieldLookup,(String JavaDoc) subFieldLookup.get(sub));
280         }
281     }
282
283     private void traverseMarkups (TKHashtable fieldLookup, String JavaDoc 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 JavaDoc sub = (String JavaDoc) subFields.nextElement();
294             if (sub == null) continue;
295             
296             traverseMarkup(fieldLookup,(String JavaDoc) subFieldLookup.get(sub));
297         }
298     }
299
300     private void traverseMarkup (TKHashtable fieldLookup, String JavaDoc 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 JavaDoc sub = (String JavaDoc) subFields.nextElement();
313             if (sub == null) continue;
314             
315             String JavaDoc fullPath = (String JavaDoc) subFieldLookup.get(sub);
316             if (fullPath == null) continue;
317
318             if (sub.equalsIgnoreCase("NEW_NAME"))
319                 data.newMarkupName = (String JavaDoc) formParams.get(fullPath);
320             else if (sub.equalsIgnoreCase("OLD_NAME"))
321                 data.markupName = (String JavaDoc) 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 JavaDoc 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 JavaDoc sub = (String JavaDoc) subFields.nextElement();
344             if (sub == null) continue;
345             
346             traverseParam(fieldLookup,sub,(String JavaDoc) subFieldLookup.get(sub),markupData);
347         }
348     }
349
350     private void traverseParam (
351         TKHashtable fieldLookup,
352         String JavaDoc paramName,
353         String JavaDoc 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 JavaDoc fullPath = (String JavaDoc) subFieldLookup.get("OLD_VALUE");
363         String JavaDoc oldValue = (fullPath == null) ? null : (String JavaDoc) formParams.get(fullPath);
364
365         fullPath = (String JavaDoc) subFieldLookup.get("NEW_VALUE");
366         String JavaDoc newValue = (fullPath == null) ? null : (String JavaDoc) formParams.get(fullPath);
367         
368         TKWMAttrMarkupParamData data = new TKWMAttrMarkupParamData (paramName,oldValue,newValue);
369         markupData.params.put(paramName,data);
370     }
371 }
Popular Tags