EMMA Coverage Report (generated Tue May 18 22:13:27 CDT 2004)
[all classes][org.apache.velocity.anakia]

COVERAGE SUMMARY FOR SOURCE FILE [AnakiaElement.java]

nameclass, %method, %block, %line, %
AnakiaElement.java100% (1/1)50%  (6/12)51%  (37/73)44%  (7/16)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class AnakiaElement100% (1/1)50%  (6/12)51%  (37/73)44%  (7/16)
AnakiaElement (String, Namespace): void 0%   (0/1)0%   (0/5)0%   (0/2)
AnakiaElement (String, String): void 0%   (0/1)0%   (0/5)0%   (0/2)
AnakiaElement (String, String, String): void 0%   (0/1)0%   (0/6)0%   (0/2)
getChildren (String): List 0%   (0/1)0%   (0/7)0%   (0/1)
selectNodes (String): NodeList 0%   (0/1)0%   (0/9)0%   (0/1)
toString (): String 0%   (0/1)0%   (0/4)0%   (0/1)
<static initializer> 100% (1/1)100% (5/5)100% (1/1)
AnakiaElement (String): void 100% (1/1)100% (4/4)100% (2/2)
getAttributes (): List 100% (1/1)100% (6/6)100% (1/1)
getChildren (): List 100% (1/1)100% (7/7)100% (1/1)
getChildren (String, Namespace): List 100% (1/1)100% (8/8)100% (1/1)
getContent (): List 100% (1/1)100% (7/7)100% (1/1)

1package org.apache.velocity.anakia;
2 
3/*
4 * Copyright 2001,2004 The Apache Software Foundation.
5 * 
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 * 
10 *      http://www.apache.org/licenses/LICENSE-2.0
11 * 
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18 
19import org.jdom.Element;
20import org.jdom.Namespace;
21import org.jdom.output.XMLOutputter;
22import java.util.List;
23 
24/**
25 * A JDOM {@link Element} that is tailored for Anakia needs. It has
26 * {@link #selectNodes(String)} method as well as a {@link #toString()} that
27 * outputs the XML serialized form of the element. This way it acts in much the
28 * same way as a single-element {@link NodeList} would.
29 *
30 * @author <a href="mailto:szegedia@freemail.hu">Attila Szegedi</a>
31 * @version $Id: AnakiaElement.java,v 1.3.4.1 2004/03/03 23:22:03 geirm Exp $
32 */
33public class AnakiaElement extends Element
34{
35    private static final XMLOutputter DEFAULT_OUTPUTTER = new XMLOutputter();
36 
37    /**
38     * <p>
39     * This will create a new <code>AnakiaElement</code>
40     *   with the supplied (local) name, and define
41     *   the <code>{@link Namespace}</code> to be used.
42     * If the provided namespace is null, the element will have 
43     * no namespace.
44     * </p>
45     *
46     * @param name <code>String</code> name of element.
47     * @namespace <code>Namespace</code> to put element in.
48     */
49    public AnakiaElement(String name, Namespace namespace)
50    {
51        super(name, namespace);
52    }
53 
54    /**
55     * <p>
56     *  This will create an <code>AnakiaElement</code> in no
57     *    <code>{@link Namespace}</code>.
58     * </p>
59     *
60     * @param name <code>String</code> name of element.
61     */
62    public AnakiaElement(String name)
63    {
64        super(name);
65    }
66 
67    /**
68     * <p>
69     *  This will create a new <code>AnakiaElement</code> with
70     *    the supplied (local) name, and specifies the URI
71     *    of the <code>{@link Namespace}</code> the <code>Element</code>
72     *    should be in, resulting it being unprefixed (in the default
73     *    namespace).
74     * </p>
75     *
76     * @param name <code>String</code> name of element.
77     * @param uri <code>String</code> URI for <code>Namespace</code> element
78     *        should be in.
79     */
80    public AnakiaElement(String name, String uri)
81    {
82        super(name, uri);
83    }
84 
85    /**
86     * <p>
87     *  This will create a new <code>AnakiaElement</code> with
88     *    the supplied (local) name, and specifies the prefix and URI
89     *    of the <code>{@link Namespace}</code> the <code>Element</code>
90     *    should be in.
91     * </p>
92     *
93     * @param name <code>String</code> name of element.
94     * @param uri <code>String</code> URI for <code>Namespace</code> element
95     *        should be in.
96     */
97    public AnakiaElement(String name, String prefix, String uri)
98    {
99        super(name, prefix, uri);
100    }
101    
102    /**
103     * Applies an XPath expression to this element and returns the resulting
104     * node list. In order for this method to work, your application must have
105     * access to <a href="http://code.werken.com">werken.xpath</a> library
106     * classes. The implementation does cache the parsed format of XPath
107     * expressions in a weak hash map, keyed by the string representation of
108     * the XPath expression. As the string object passed as the argument is
109     * usually kept in the parsed template, this ensures that each XPath
110     * expression is parsed only once during the lifetime of the template that
111     * first invoked it.
112     * @param xpathExpression the XPath expression you wish to apply
113     * @return a NodeList representing the nodes that are the result of
114     * application of the XPath to the current element. It can be empty.
115     */
116    public NodeList selectNodes(String xpathExpression)
117    {
118        return new NodeList(XPathCache.getXPath(xpathExpression).applyTo(this), false);
119    }
120 
121    /**
122     * Returns the XML serialized form of this element, as produced by the default
123     * {@link XMLOutputter}.
124     */
125    public String toString()
126    {
127        return DEFAULT_OUTPUTTER.outputString(this);
128    }
129    
130    /**
131     * <p>
132     * This returns the full content of the element as a NodeList which
133     * may contain objects of type <code>String</code>, <code>Element</code>,
134     * <code>Comment</code>, <code>ProcessingInstruction</code>,
135     * <code>CDATA</code>, and <code>EntityRef</code>.  
136     * The List returned is "live" in document order and modifications 
137     * to it affect the element's actual contents.  Whitespace content is 
138     * returned in its entirety.
139     * </p>
140     *
141     * @return a <code>List</code> containing the mixed content of the
142     *         element: may contain <code>String</code>,
143     *         <code>{@link Element}</code>, <code>{@link Comment}</code>,
144     *         <code>{@link ProcessingInstruction}</code>,
145     *         <code>{@link CDATA}</code>, and
146     *         <code>{@link EntityRef}</code> objects.
147     */
148    public List getContent()
149    {
150        return new NodeList(super.getContent(), false);
151    }
152    
153    /**
154     * <p>
155     * This returns a <code>NodeList</code> of all the child elements
156     * nested directly (one level deep) within this element, as 
157     * <code>Element</code> objects.  If this target element has no nested 
158     * elements, an empty List is returned.  The returned list is "live"
159     * in document order and changes to it affect the element's actual 
160     * contents.
161     * </p>
162     * <p>
163     * This performs no recursion, so elements nested two levels
164     *   deep would have to be obtained with:
165     * <pre>
166     * <code>
167     *   Iterator itr = currentElement.getChildren().iterator();
168     *   while (itr.hasNext()) {
169     *     Element oneLevelDeep = (Element)nestedElements.next();
170     *     List twoLevelsDeep = oneLevelDeep.getChildren();
171     *     // Do something with these children
172     *   }
173     * </code>
174     * </pre>
175     * </p>
176     *
177     * @return list of child <code>Element</code> objects for this element
178     */
179    public List getChildren()
180    {
181        return new NodeList(super.getChildren(), false);
182    }
183 
184    /**
185     * <p>
186     * This returns a <code>NodeList</code> of all the child elements
187     * nested directly (one level deep) within this element with the given
188     * local name and belonging to no namespace, returned as 
189     * <code>Element</code> objects.  If this target element has no nested 
190     * elements with the given name outside a namespace, an empty List 
191     * is returned.  The returned list is "live" in document order
192     * and changes to it affect the element's actual contents.
193     * </p>
194     * <p>
195     * Please see the notes for <code>{@link #getChildren}</code>
196     * for a code example.
197     * </p>
198     *
199     * @param name local name for the children to match
200     * @return all matching child elements
201     */
202    public List getChildren(String name)
203    {
204        return new NodeList(super.getChildren(name));
205    }
206 
207    /**
208     * <p>
209     * This returns a <code>NodeList</code> of all the child elements
210     * nested directly (one level deep) within this element with the given
211     * local name and belonging to the given Namespace, returned as 
212     * <code>Element</code> objects.  If this target element has no nested 
213     * elements with the given name in the given Namespace, an empty List 
214     * is returned.  The returned list is "live" in document order
215     * and changes to it affect the element's actual contents.
216     * </p>
217     * <p>
218     * Please see the notes for <code>{@link #getChildren}</code>
219     * for a code example.
220     * </p>
221     *
222     * @param name local name for the children to match
223     * @param ns <code>Namespace</code> to search within
224     * @return all matching child elements
225     */
226    public List getChildren(String name, Namespace ns)
227    {
228        return new NodeList(super.getChildren(name, ns));
229    }
230 
231    /**
232     * <p>
233     * This returns the complete set of attributes for this element, as a 
234     * <code>NodeList</code> of <code>Attribute</code> objects in no particular 
235     * order, or an empty list if there are none.  
236     * The returned list is "live" and changes to it affect the 
237     * element's actual attributes.
238     * </p>
239     *
240     * @return attributes for the element
241     */
242    public List getAttributes()
243    {
244        return new NodeList(super.getAttributes());
245    }
246}

[all classes][org.apache.velocity.anakia]
EMMA 2.0.4015 (stable) (C) Vladimir Roubtsov