001: /*
002: * $Header: /cvsroot/webman-cms/source/webman/com/teamkonzept/webman/attr/TKWMAttrMarkupParser.java,v 1.8 2002/01/18 14:42:30 mischa Exp $
003: *
004: */
005: package com.teamkonzept.webman.attr;
006:
007: import java.util.*;
008:
009: import com.teamkonzept.lib.*;
010: import com.teamkonzept.publishing.markups.*;
011:
012: public class TKWMAttrMarkupParser extends TKDefinedMarkupParser {
013:
014: // Bitte nicht ˆffentlich machen !
015: private TKHashtable ids;
016:
017: public TKWMAttrMarkupParser(TKVector diagnostics) {
018:
019: super (diagnostics);
020:
021: this .ids = new TKHashtable();
022: }
023:
024: public TKWMAttrMarkup markupById(String id) {
025:
026: return id == null ? null : (TKWMAttrMarkup) ids.get(id
027: .toUpperCase());
028: }
029:
030: public void registerMarkupById(TKWMAttrMarkup markup) {
031:
032: if (markup != null)
033: ids.put(markup.toId().toUpperCase(), markup);
034: }
035:
036: public void deregisterMarkupById(String id) {
037:
038: if (id != null)
039: ids.remove(id.toUpperCase());
040: }
041:
042: public void deregisterMarkupById(TKWMAttrMarkup markup) {
043:
044: if (markup != null)
045: deregisterMarkupById(markup.toId().toUpperCase());
046: }
047:
048: public Enumeration registeredMarkupsById() {
049:
050: return ids.elements();
051: }
052:
053: public TKMarkup createMarkup(String name, TKHashtable params,
054: int pos) {
055:
056: if (TKMarkupDefinition.lookup(name) == null)
057:
058: return super .createMarkup(name, params, pos);
059:
060: try {
061: TKWMAttrMarkup markup = null;
062:
063: String id = TKWMAttrMarkup.toId(name, currentDefinition,
064: params);
065:
066: //TKWMAttrMarkup anotherMarkup = markupById (id);
067:
068: /* Eigentlich m¸šte man hier einen aufwendigen Vergleich anstellen,
069: ob die beiden Stellen irgendwie compatibel sind. Auf jeden Fall
070: geht folgendes nicht, da beim Einlesen aus der Datenbank evtl. eine
071: mehrfach im Content steht ...
072:
073: if ((anotherMarkup != null) && (params.size() > 1)) {
074:
075: throw new Exception ("Attribut-Fehler in "+ name+" ("+id+"):"+
076: " Id schon vergeben, siehe Position "+anotherMarkup.pos);
077:
078: } else markup = anotherMarkup;
079:
080: */
081:
082: markup = markupById(id);
083: ;
084: if (markup == null)
085: markup = new TKWMAttrMarkup(name, params, pos);
086:
087: return markup;
088:
089: } catch (Exception ex) {
090:
091: addDiagnostic(TKMarkupParserException.demandMsg(ex));
092: return super .createMarkup(name, params, pos);
093: }
094: }
095:
096: public void deregister(TKMarkup markup) {
097:
098: super .deregister(markup);
099:
100: if (markup instanceof TKWMAttrMarkup)
101: deregisterMarkupById((TKWMAttrMarkup) markup);
102: }
103:
104: public void register(TKMarkup markup) {
105:
106: super .register(markup);
107:
108: if (markup instanceof TKWMAttrMarkup)
109: registerMarkupById((TKWMAttrMarkup) markup);
110: }
111: }
|