KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > teamkonzept > lib > templates > TKSwitchTag


1 package com.teamkonzept.lib.templates;
2
3 import java.io.*;
4 import java.util.*;
5
6 import com.teamkonzept.lib.*;
7
8 /**
9  * SwitchTag:
10  * <TK_SWITCH:name:[alt=]tmpl;...>
11  * @author $Author: alex $
12  * @version $Revision: 1.12 $
13  */

14 public class TKSwitchTag extends TKTag {
15     public static final int TAG_TYPE = TKNotTag.TAG_TYPE+1; ;
16     public static final String JavaDoc ATTR_LABEL = "label";
17     public static final String JavaDoc ATTR_SIZE = "size";
18     public static final String JavaDoc ATTR_NAME = "attrName";
19     public static final String JavaDoc ATTR_LOCATION= "attrLocation";
20     
21     public static final String JavaDoc SYNTAX_ALTERNATIVES = "alternatives";
22     
23     public String JavaDoc label = null;
24     public TKHashtable alternatives = null;
25     public TKTemplateSyntax alternativesSyntax = null;
26
27     /**
28      * Konstruktor 1
29      * Ein Syntaxbaum fuer ein Template wird erzeugt.
30      *
31      * @param String def, Name des Tags
32      * @param boolean hasSubTags
33      */

34     public TKSwitchTag( TKTemplateSyntax parent, String JavaDoc def, boolean hasSubTags ) throws TKTemplateSyntaxException
35     {
36         super( parent );
37         if( hasSubTags ) {
38             alternativesSyntax = parent.newChild( def, parent.getSource(), hasSubTags );
39         }
40         else {
41             alternatives = new TKHashtable();
42             label = getAlternatives( def, alternatives );
43         }
44     }
45
46     /**
47         holt sich die CASE Bloecke
48     */

49     protected static String JavaDoc getAlternatives( String JavaDoc def, TKHashtable alternatives )
50     {
51         int pos = def.indexOf(':');
52         String JavaDoc label = def.substring( 0, pos );
53         Enumeration alts = new StringTokenizer( def.substring( pos+1 ), ";" );
54         while( alts.hasMoreElements() ) {
55             String JavaDoc currAlt = ((String JavaDoc) alts.nextElement()).trim();
56             if( currAlt.length() > 0 ) {
57                 pos = currAlt.indexOf('=');
58                 if( pos < 0 ) {
59                     alternatives.put( currAlt, currAlt );
60                 }
61                 else {
62                     alternatives.put(
63                         currAlt.substring( 0, pos ).trim(),
64                         currAlt.substring( pos+1 ).trim()
65                     );
66                 }
67             }
68         }
69         return label;
70     }
71     
72     /**
73      * Die apply-Methode von TKSyntax wird aufgerufen und das entsprechende
74      * Template wird included.
75      *
76      * @param TKTemplateData td
77      */

78     public String JavaDoc apply( TKTemplateData td ) throws TKTemplateSyntaxException
79     {
80         String JavaDoc tmpLabel = label;
81         TKHashtable tmpAlternatives = alternatives;
82         
83         if( tmpLabel == null ) {
84             tmpAlternatives = new TKHashtable();
85             tmpLabel = getAlternatives( alternativesSyntax.apply( td ), tmpAlternatives );
86         }
87         
88         Object JavaDoc selection = td.getVariable(tmpLabel);
89         if( selection == null ) return null;
90         
91         String JavaDoc theFile = (String JavaDoc) tmpAlternatives.get( selection );
92         if( theFile == null ) return null;
93         
94         // TKLog.println ("TKSwitchTag.apply, fn="+theFile);
95

96         TKTemplateSyntax syntax = TKTemplateCache.getSyntax( theFile, parent );
97         return syntax.apply( td );
98     }
99
100     
101     /**
102      * Die apply-Methode von TKSyntax wird aufgerufen und das entsprechende
103      * Template wird included.
104      *
105      * @param td TKTemplateData
106      * @param writer the Writer to which the result is written
107      */

108     public void apply(TKTemplateData td, Writer writer)
109         throws TKTemplateSyntaxException, IOException
110     {
111         String JavaDoc tmpLabel = label;
112         TKHashtable tmpAlternatives = alternatives;
113         
114         if( tmpLabel == null ) {
115             tmpAlternatives = new TKHashtable();
116             tmpLabel = getAlternatives( alternativesSyntax.apply( td ), tmpAlternatives );
117         }
118         
119         Object JavaDoc selection = td.getVariable(tmpLabel);
120         if( selection == null )
121             return;
122         
123         String JavaDoc theFile = (String JavaDoc) tmpAlternatives.get( selection );
124         if( theFile == null )
125             return;
126         
127         // TKLog.println ("TKSwitchTag.apply, fn="+theFile);
128

129         TKTemplateSyntax syntax = TKTemplateCache.getSyntax( theFile, parent );
130         syntax.apply( td, writer );
131     }
132 }
133
134
Popular Tags