KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > de > webman > template > jsp > WSP


1 package de.webman.template.jsp;
2 import org.w3c.dom.*;
3 import org.w3c.dom.traversal.*;
4
5
6 /**
7  * Diese Klasse stellt Methoden zum Umgang mit Java Server Pages
8  * in Webman bereit.
9  * Ein Objekt WSP representiert einen dom.w3c.node
10  * @author $Author: alex $
11  * @version $Revision: 1.3 $
12  */

13 public class WSP {
14
15     
16     protected Node root;
17     
18     /** Erstellt ein WSP-Objekt aus einem gegebenen NODE */
19     public WSP(Node root)
20     {
21         this.root = root;
22     }
23     
24     /** Erstellt ein WSP-Objekt aus obj */
25     public WSP(WSP obj)
26     {
27         this.root = obj.root;
28     }
29     
30     /** gibt den representierten Node zurück
31         */

32     public Node getNode()
33     {
34         return(root);
35     }
36     
37     /** erwartet Attributnamen und gibt dessen Value oder null zurück
38     
39      * Attribute sind zum Bsp. NAME, REF (bei einer Webman-REF) oder
40      * die bekannten Content-Attribute
41      @param Name des Attributes
42      @return Wert des Attributes
43     */

44     public String JavaDoc getAttribute(String JavaDoc attrname)
45     {
46         try
47         {
48             return(root.getAttributes().getNamedItem(attrname).getNodeValue());
49         }
50         catch(NullPointerException JavaDoc e)
51         {
52             return(null);
53         }
54     }
55
56     /** erwartet Attributnamen und gibt dessen Value oder value zurück
57     
58      * Attribute sind zum Bsp. NAME, REF (bei einer Webman-REF) oder
59      * die bekannten Content-Attribute
60      @param Name des Attributes
61      @param value was er zurueckgeben soll, wenn es das Attribut nicht gibt
62      @return Wert des Attributes
63     */

64     public String JavaDoc getAttribute(String JavaDoc attrname, String JavaDoc value)
65     {
66         try
67         {
68             String JavaDoc v = root.getAttributes().getNamedItem(attrname).getNodeValue();
69             if (v == null)
70                 return value;
71             return v;
72         }
73         catch(NullPointerException JavaDoc e)
74         {
75             return(value);
76         }
77     }
78
79     /** gibt den Pfad zum Upload aus
80     
81      * (das aktuelle WSP-Objekt muss somit ein Webman-Upload sein)
82      @return Pfad zum Upload
83     */

84     public String JavaDoc getUploadPath()
85     {
86         if (root.hasChildNodes())
87             return(root.getChildNodes().item(0).getNodeValue());
88         return(null);
89     }
90
91     /** gibt den Namen des Unterknotens Item oder null aus
92     
93         sinnvoll für die meisten Formularelemente
94         der Wert eines Webman-textfeldes liegt z.b. im Unterknoten ITEM
95         
96         @return Wert von ITEM
97     */

98     public String JavaDoc getItem()
99     {
100         if (root.hasChildNodes())
101         {
102             if (root.getChildNodes().item(0).hasChildNodes())
103                 return(root.getChildNodes().item(0).getChildNodes().item(0).getNodeValue());
104         }
105         return(null);
106     }
107     
108     /** gibt false def. den Wert des x-ten Unterknotens Item aus (x = number) sonst null
109     
110       * sinnvoll für einfache Listen z.b. Auswahlliste
111       @param Position von ITEM
112       @return Wert von ITEM
113     */

114     public String JavaDoc getItem(int number)
115     {
116         if (root.hasChildNodes())
117         {
118             if (root.getChildNodes().getLength() > number)
119             {
120                 if (root.getChildNodes().item(number).hasChildNodes())
121                     return(root.getChildNodes().item(number).getChildNodes().item(0).getNodeValue());
122             }
123         }
124         return(null);
125     }
126
127     /** gibt den Kinderknoten number oder null zurück
128       @param Position des Kindes
129       @return das Kind
130     */

131     public WSP getChild(int number)
132     {
133         if (root.getChildNodes().getLength() > number)
134         {
135             WSP help = new WSP(root.getChildNodes().item(number));
136             return(help);
137         }
138         return(null);
139         
140     }
141
142     /** gibt den ersten Knoten des aktuellen Objektes zurück dessen
143       * Attribut 'attrname' den Wert 'attrvalue' hat oder null zurück
144       @param Attributname und Value
145       @return der erste Knoten mit Attributname=Attributvalue
146     */

147     public WSP getNodeByAttr(String JavaDoc attrname,String JavaDoc attrvalue) {
148   
149         // aktueller Knoten ,
150
if (this == null) return(this);
151   
152         if (this.getAttribute(attrname) != null)
153         {
154             if (this.getAttribute(attrname).equals(attrvalue))
155                 return(this);
156         }
157         
158         // oder seine Kinder ?
159
for (int i = 0;this.getChild(i) != null;i++)
160         {
161             WSP help = this.getChild(i).getNodeByAttr(attrname,attrvalue);
162             if (help != null)
163                 return(help);
164         }
165     
166         return(null);
167     }
168
169     /** gibt den ersten Knoten mit dem Namen name oder null zurück
170      @param Name des Knotens
171      @return den ersten Knoten mit Name=name
172     */

173     public WSP getNodeByName(String JavaDoc name)
174     {
175         return(this.getNodeByAttr("NAME",name));
176     }
177     
178     // zum auslesen eines Pfades
179
private static String JavaDoc getNextNode(String JavaDoc path)
180     {
181         if (path == null)
182             return(null);
183         
184         int index = path.indexOf('.');
185
186         if (index == -1)
187             return(path);
188         return(path.substring(0,index));
189     }
190     
191     // zur Bestimmung des verbleibenden Pfades
192
private static String JavaDoc getNextPath(String JavaDoc path)
193     {
194         String JavaDoc Node = getNextNode(path);
195         
196         if (Node == null) return (null);
197         
198         if (Node.length()+1 <= path.length())
199             return(path.substring(Node.length()+1,path.length()));
200             
201         return(null);
202     }
203
204     /** gibt den Knoten zurück der im Pfad path liegt
205         der Pfad besteht aus den werten der Name-Attribute getrennt durch einen Punkt
206         z.b. : NAME1.NAME2
207         @param genauer Pfad der Name-Attribute
208         @return den Knoten
209     */

210     public WSP getNodeByPath(String JavaDoc path)
211     {
212         String JavaDoc node = null;
213         WSP back = new WSP(this);
214         int i;
215         
216         while ((back != null) && (path != null))
217         {
218             node = getNextNode(path);
219             path = getNextPath(path);
220             
221             if (node == null) break;
222             
223             for (i = 0;(back.getChild(i) != null);i++)
224             {
225                 if (back.getChild(i).getAttribute("NAME") != null)
226                 {
227                     if (back.getChild(i).getAttribute("NAME").equals(node))
228                         break;
229                 }
230             }
231             back = back.getChild(i);
232         }
233         return(back);
234     }
235     
236     /** wie getNodeByPath, nur das hier nach den Namen der representierten
237         Nodes durchgegangen wird
238         
239         @param genauer Pfad der Nodenamen
240         @return erster Knoten mit diesem Pfad
241     */

242     public WSP getNodeByNodePath(String JavaDoc path)
243     {
244         return(getNodeByNodePath(path,0));
245     }
246     
247     /** wie getNodeByNodePath,gibt allerdings x-ten Knoten mit diesem Pfad aus
248     
249       @param genauer Pfad des Nodenamen und die Position
250       @return den x-ten Knoten des Pfades
251     */

252     public WSP getNodeByNodePath(String JavaDoc path,int index)
253     {
254         String JavaDoc node = null;
255         WSP back = new WSP(this);
256         int i,treffer;
257         treffer = 0;
258         while ((back != null) && (path != null))
259         {
260             node = getNextNode(path);
261             path = getNextPath(path);
262             
263             if (node == null) break;
264             
265             for (i = 0;(back.getChild(i) != null);i++)
266             {
267                 
268                 if (back.getChild(i).getNode().getNodeName() != null)
269                 {
270                     if (back.getChild(i).getNode().getNodeName().equals(node))
271                     {
272                         
273                         if (path == null)
274                         {
275                             if (treffer == index)
276                                 break;
277                             treffer++;
278                         }
279                         else
280                             break;
281                     }
282                 }
283             }
284             back = back.getChild(i);
285         }
286         return(back);
287     }
288
289     /** gibt das x-te Element einer FEW bel. Elemente in folge mit dem
290       * Namen name aus
291       @param Name der FEW und die Stelle an der sie zu finden ist
292       @return die x-te FEW mit Namen Name (x=Element) */

293     public WSP getElement_FEW_BEL_EL_IN_F(String JavaDoc name,int Element)
294     {
295         
296         if (root != null)
297         {
298             int z = 0;
299         
300             for (int i=0;this.getNodeByNodePath("FEW-BEL_ELE_IN_F",i) != null;i++)
301             {
302                 
303                 WSP help = this.getNodeByNodePath("FEW-BEL_ELE_IN_F",i);
304                 
305                 if (help.getAttribute("NAME") != null)
306                 {
307                     if (help.getAttribute("NAME").equals(name))
308                     {
309                         if (z == Element)
310                             return(help);
311                         z++;
312                     }
313                 }
314             }
315         }
316                 
317         return(null);
318     }
319     
320     /** gibt die Länge des FEW bel. Elemente in Folge mit dem namen name aus
321        @param Name der FEW
322        @return Länge der FEW
323     */

324     public String JavaDoc getLength_FEW_BEL_EL_IN_F(String JavaDoc name)
325     {
326         
327         WSP help = this.getElement_FEW_BEL_EL_IN_F(name,0);
328         
329         if ( help != null)
330             return(help.getAttribute("LENGTH"));
331                 
332         return(null);
333     }
334
335     /** gibt die Zelle (row,col) der Tabelle des pfades zurück
336       @param Pfad der Tabelle; Zeile,Spalte der Zelle
337       @return Zelle
338     */

339     public WSP getTableCell(String JavaDoc pfad,int row,int col)
340     {
341         WSP table = this.getNodeByPath(pfad);
342         if (table == null)
343             return(null);
344         WSP row1 = table.getChild(row);
345         if (row1 == null)
346             return(null);
347         return(row1.getChild(col));
348     }
349
350 }
351
Popular Tags