summaryrefslogtreecommitdiffstats
path: root/libjava/classpath/gnu/xml/transform
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/classpath/gnu/xml/transform')
-rw-r--r--libjava/classpath/gnu/xml/transform/AbstractNumberNode.java12
-rw-r--r--libjava/classpath/gnu/xml/transform/ApplyTemplatesNode.java4
-rw-r--r--libjava/classpath/gnu/xml/transform/AttributeNode.java4
-rw-r--r--libjava/classpath/gnu/xml/transform/Bindings.java4
-rw-r--r--libjava/classpath/gnu/xml/transform/CallTemplateNode.java17
-rw-r--r--libjava/classpath/gnu/xml/transform/ChooseNode.java4
-rw-r--r--libjava/classpath/gnu/xml/transform/CopyNode.java4
-rw-r--r--libjava/classpath/gnu/xml/transform/CopyOfNode.java4
-rw-r--r--libjava/classpath/gnu/xml/transform/ElementNode.java4
-rw-r--r--libjava/classpath/gnu/xml/transform/ForEachNode.java58
-rw-r--r--libjava/classpath/gnu/xml/transform/IfNode.java4
-rw-r--r--libjava/classpath/gnu/xml/transform/MessageNode.java4
-rw-r--r--libjava/classpath/gnu/xml/transform/ParameterNode.java44
-rw-r--r--libjava/classpath/gnu/xml/transform/ProcessingInstructionNode.java4
-rw-r--r--libjava/classpath/gnu/xml/transform/SortKey.java62
-rw-r--r--libjava/classpath/gnu/xml/transform/StreamSerializer.java18
-rw-r--r--libjava/classpath/gnu/xml/transform/Stylesheet.java129
-rw-r--r--libjava/classpath/gnu/xml/transform/Template.java6
-rw-r--r--libjava/classpath/gnu/xml/transform/TemplateNode.java2
-rw-r--r--libjava/classpath/gnu/xml/transform/TemplatesImpl.java17
-rw-r--r--libjava/classpath/gnu/xml/transform/TextNode.java4
-rw-r--r--libjava/classpath/gnu/xml/transform/TransformerImpl.java6
-rw-r--r--libjava/classpath/gnu/xml/transform/TransformerOutputProperties.java4
-rw-r--r--libjava/classpath/gnu/xml/transform/UnparsedEntityUriFunction.java19
-rw-r--r--libjava/classpath/gnu/xml/transform/ValueOfNode.java12
-rw-r--r--libjava/classpath/gnu/xml/transform/WhenNode.java4
-rw-r--r--libjava/classpath/gnu/xml/transform/XSLComparator.java108
-rw-r--r--libjava/classpath/gnu/xml/transform/XSLURIResolver.java9
28 files changed, 339 insertions, 232 deletions
diff --git a/libjava/classpath/gnu/xml/transform/AbstractNumberNode.java b/libjava/classpath/gnu/xml/transform/AbstractNumberNode.java
index 6d1202e69b4..fb953e4f66b 100644
--- a/libjava/classpath/gnu/xml/transform/AbstractNumberNode.java
+++ b/libjava/classpath/gnu/xml/transform/AbstractNumberNode.java
@@ -37,6 +37,8 @@ exception statement from your version. */
package gnu.xml.transform;
+import gnu.java.lang.CPStringBuilder;
+
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -140,7 +142,7 @@ abstract class AbstractNumberNode
start = end;
}
// Process tokens
- StringBuffer buf = new StringBuffer();
+ CPStringBuilder buf = new CPStringBuilder();
len = tokens.size();
int pos = 0;
for (int i = 0; i < len; i++)
@@ -188,7 +190,7 @@ abstract class AbstractNumberNode
return l;
}*/
- void format(StringBuffer buf, int number, String formatToken)
+ void format(CPStringBuilder buf, int number, String formatToken)
{
int len = formatToken.length();
char c = formatToken.charAt(len - 1);
@@ -254,7 +256,7 @@ abstract class AbstractNumberNode
static final String alphabetic(char offset, int number)
{
- StringBuffer buf = new StringBuffer();
+ CPStringBuilder buf = new CPStringBuilder();
while (number > 0)
{
int r = number % 26;
@@ -269,7 +271,7 @@ abstract class AbstractNumberNode
static final String roman(boolean upper, int number)
{
- StringBuffer buf = new StringBuffer();
+ CPStringBuilder buf = new CPStringBuilder();
for (int pos = roman_numbers.length - 1; pos >= 0; pos -= 2)
{
int f = number / roman_numbers[pos];
@@ -317,7 +319,7 @@ abstract class AbstractNumberNode
public String toString()
{
- StringBuffer buf = new StringBuffer("number");
+ CPStringBuilder buf = new CPStringBuilder("number");
buf.append('[');
buf.append("format=");
buf.append(format);
diff --git a/libjava/classpath/gnu/xml/transform/ApplyTemplatesNode.java b/libjava/classpath/gnu/xml/transform/ApplyTemplatesNode.java
index 041809bdf1a..0daaa7aeccd 100644
--- a/libjava/classpath/gnu/xml/transform/ApplyTemplatesNode.java
+++ b/libjava/classpath/gnu/xml/transform/ApplyTemplatesNode.java
@@ -37,6 +37,8 @@ exception statement from your version. */
package gnu.xml.transform;
+import gnu.java.lang.CPStringBuilder;
+
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -192,7 +194,7 @@ final class ApplyTemplatesNode
public String toString()
{
- StringBuffer buf = new StringBuffer("apply-templates");
+ CPStringBuilder buf = new CPStringBuilder("apply-templates");
buf.append('[');
boolean o = false;
if (select != null)
diff --git a/libjava/classpath/gnu/xml/transform/AttributeNode.java b/libjava/classpath/gnu/xml/transform/AttributeNode.java
index 71e2ed0f7af..bbc4e08059e 100644
--- a/libjava/classpath/gnu/xml/transform/AttributeNode.java
+++ b/libjava/classpath/gnu/xml/transform/AttributeNode.java
@@ -37,6 +37,8 @@ exception statement from your version. */
package gnu.xml.transform;
+import gnu.java.lang.CPStringBuilder;
+
import javax.xml.XMLConstants;
import javax.xml.namespace.QName;
import javax.xml.transform.TransformerException;
@@ -231,7 +233,7 @@ final class AttributeNode
public String toString()
{
- StringBuffer buf = new StringBuffer("attribute");
+ CPStringBuilder buf = new CPStringBuilder("attribute");
buf.append('[');
buf.append("name=");
buf.append(name);
diff --git a/libjava/classpath/gnu/xml/transform/Bindings.java b/libjava/classpath/gnu/xml/transform/Bindings.java
index 4ee08322317..009321315bb 100644
--- a/libjava/classpath/gnu/xml/transform/Bindings.java
+++ b/libjava/classpath/gnu/xml/transform/Bindings.java
@@ -37,6 +37,8 @@ exception statement from your version. */
package gnu.xml.transform;
+import gnu.java.lang.CPStringBuilder;
+
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
@@ -259,7 +261,7 @@ public class Bindings
public String toString()
{
- StringBuffer buf = new StringBuffer();
+ CPStringBuilder buf = new CPStringBuilder();
boolean next = false;
Collection seen = new HashSet();
Map wctx = (Map) withParameters.getFirst();
diff --git a/libjava/classpath/gnu/xml/transform/CallTemplateNode.java b/libjava/classpath/gnu/xml/transform/CallTemplateNode.java
index 31b26cbcdb0..fe0eea74eff 100644
--- a/libjava/classpath/gnu/xml/transform/CallTemplateNode.java
+++ b/libjava/classpath/gnu/xml/transform/CallTemplateNode.java
@@ -37,6 +37,8 @@ exception statement from your version. */
package gnu.xml.transform;
+import gnu.java.lang.CPStringBuilder;
+
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
@@ -86,7 +88,7 @@ final class CallTemplateNode
TemplateNode t = stylesheet.getTemplate(mode, name);
if (t != null)
{
- if (withParams != null)
+ if (!withParams.isEmpty())
{
// compute the parameter values
LinkedList values = new LinkedList();
@@ -118,7 +120,7 @@ final class CallTemplateNode
}
t.apply(stylesheet, mode, context, pos, len,
parent, nextSibling);
- if (withParams != null)
+ if (!withParams.isEmpty())
{
// pop the variable context
stylesheet.bindings.pop(Bindings.WITH_PARAM);
@@ -133,20 +135,17 @@ final class CallTemplateNode
public boolean references(QName var)
{
- if (withParams != null)
+ for (Iterator i = withParams.iterator(); i.hasNext(); )
{
- for (Iterator i = withParams.iterator(); i.hasNext(); )
- {
- if (((WithParam) i.next()).references(var))
- return true;
- }
+ if (((WithParam) i.next()).references(var))
+ return true;
}
return super.references(var);
}
public String toString()
{
- StringBuffer buf = new StringBuffer("call-template");
+ CPStringBuilder buf = new CPStringBuilder("call-template");
buf.append('[');
buf.append("name=");
buf.append(name);
diff --git a/libjava/classpath/gnu/xml/transform/ChooseNode.java b/libjava/classpath/gnu/xml/transform/ChooseNode.java
index cf07fa54b07..fe2dc0c2f3a 100644
--- a/libjava/classpath/gnu/xml/transform/ChooseNode.java
+++ b/libjava/classpath/gnu/xml/transform/ChooseNode.java
@@ -37,6 +37,8 @@ exception statement from your version. */
package gnu.xml.transform;
+import gnu.java.lang.CPStringBuilder;
+
import javax.xml.namespace.QName;
import javax.xml.transform.TransformerException;
import org.w3c.dom.Node;
@@ -77,7 +79,7 @@ final class ChooseNode
public String toString()
{
- StringBuffer buf = new StringBuffer("choose");
+ CPStringBuilder buf = new CPStringBuilder("choose");
buf.append('[');
buf.append(']');
return buf.toString();
diff --git a/libjava/classpath/gnu/xml/transform/CopyNode.java b/libjava/classpath/gnu/xml/transform/CopyNode.java
index 64cfa519158..bae628d9632 100644
--- a/libjava/classpath/gnu/xml/transform/CopyNode.java
+++ b/libjava/classpath/gnu/xml/transform/CopyNode.java
@@ -37,6 +37,8 @@ exception statement from your version. */
package gnu.xml.transform;
+import gnu.java.lang.CPStringBuilder;
+
import java.util.Iterator;
import java.util.StringTokenizer;
import javax.xml.namespace.QName;
@@ -152,7 +154,7 @@ final class CopyNode
public String toString()
{
- StringBuffer buf = new StringBuffer("copy");
+ CPStringBuilder buf = new CPStringBuilder("copy");
if (uas != null)
{
buf.append('[');
diff --git a/libjava/classpath/gnu/xml/transform/CopyOfNode.java b/libjava/classpath/gnu/xml/transform/CopyOfNode.java
index ed4358c90b6..4ce84329fc0 100644
--- a/libjava/classpath/gnu/xml/transform/CopyOfNode.java
+++ b/libjava/classpath/gnu/xml/transform/CopyOfNode.java
@@ -37,6 +37,8 @@ exception statement from your version. */
package gnu.xml.transform;
+import gnu.java.lang.CPStringBuilder;
+
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -161,7 +163,7 @@ final class CopyOfNode
public String toString()
{
- StringBuffer buf = new StringBuffer("copy-of");
+ CPStringBuilder buf = new CPStringBuilder("copy-of");
buf.append('[');
buf.append("select=");
buf.append(select);
diff --git a/libjava/classpath/gnu/xml/transform/ElementNode.java b/libjava/classpath/gnu/xml/transform/ElementNode.java
index b6a5c365b12..c5a4dd20da4 100644
--- a/libjava/classpath/gnu/xml/transform/ElementNode.java
+++ b/libjava/classpath/gnu/xml/transform/ElementNode.java
@@ -37,6 +37,8 @@ exception statement from your version. */
package gnu.xml.transform;
+import gnu.java.lang.CPStringBuilder;
+
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
@@ -238,7 +240,7 @@ final class ElementNode
public String toString()
{
- StringBuffer buf = new StringBuffer("element");
+ CPStringBuilder buf = new CPStringBuilder("element");
buf.append('[');
buf.append("name=");
if (namespace != null)
diff --git a/libjava/classpath/gnu/xml/transform/ForEachNode.java b/libjava/classpath/gnu/xml/transform/ForEachNode.java
index 25b824534c9..8908114ccf4 100644
--- a/libjava/classpath/gnu/xml/transform/ForEachNode.java
+++ b/libjava/classpath/gnu/xml/transform/ForEachNode.java
@@ -37,6 +37,8 @@ exception statement from your version. */
package gnu.xml.transform;
+import gnu.java.lang.CPStringBuilder;
+
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -57,9 +59,9 @@ final class ForEachNode
{
final Expr select;
- final List sortKeys;
+ final List<SortKey> sortKeys;
- ForEachNode(Expr select, List sortKeys)
+ ForEachNode(Expr select, List<SortKey> sortKeys)
{
this.select = select;
this.sortKeys = sortKeys;
@@ -67,10 +69,10 @@ final class ForEachNode
TemplateNode clone(Stylesheet stylesheet)
{
- int len = sortKeys != null ? sortKeys.size() : 0;
- List sortKeys2 = new ArrayList(len);
+ int len = sortKeys.size();
+ List<SortKey> sortKeys2 = new ArrayList<SortKey>(len);
for (int i = 0; i < len; i++)
- sortKeys2.add(((Key) sortKeys.get(i)).clone(stylesheet));
+ sortKeys2.add(sortKeys.get(i).clone(stylesheet));
TemplateNode ret = new ForEachNode(select.clone(stylesheet),
sortKeys2);
if (children != null)
@@ -80,6 +82,7 @@ final class ForEachNode
return ret;
}
+ @Override
void doApply(Stylesheet stylesheet, QName mode,
Node context, int pos, int len,
Node parent, Node nextSibling)
@@ -94,26 +97,26 @@ final class ForEachNode
//System.err.println(toString() + ": " + context+" -> "+ret);
if (ret instanceof Collection)
{
- Collection ns = (Collection) ret;
- List list = new ArrayList(ns);
- if (sortKeys != null)
- {
- for (Iterator i = sortKeys.iterator(); i.hasNext(); )
- {
- SortKey sortKey = (SortKey) i.next();
- sortKey.init(stylesheet, mode, context, pos, len, parent,
- nextSibling);
- }
- Collections.sort(list, new XSLComparator(sortKeys));
- }
- else
+ /* Suppression is safe, as we know context produces Collection<Node> */
+ @SuppressWarnings("unchecked")
+ Collection<Node> ns = (Collection<Node>) ret;
+ List<Node> list = new ArrayList<Node>(ns);
+ if (!sortKeys.isEmpty())
+ {
+ for (SortKey sortKey : sortKeys)
+ {
+ sortKey.init(stylesheet, mode, context, pos, len, parent,
+ nextSibling);
+ }
+ Collections.sort(list, new XSLComparator(sortKeys));
+ }
+ else
Collections.sort(list, documentOrderComparator);
// Perform children for each node
int l = list.size();
int p = 1;
- for (Iterator i = list.iterator(); i.hasNext(); )
+ for (Node node : list)
{
- Node node = (Node) i.next();
stylesheet.current = node;
children.apply(stylesheet, mode,
node, p++, l,
@@ -129,24 +132,23 @@ final class ForEachNode
parent, nextSibling);
}
+ @Override
public boolean references(QName var)
{
if (select != null && select.references(var))
return true;
- if (sortKeys != null)
+ for (Iterator<SortKey> i = sortKeys.iterator(); i.hasNext(); )
{
- for (Iterator i = sortKeys.iterator(); i.hasNext(); )
- {
- if (((SortKey) i.next()).references(var))
- return true;
- }
+ if (i.next().references(var))
+ return true;
}
return super.references(var);
}
-
+
+ @Override
public String toString()
{
- StringBuffer buf = new StringBuffer("for-each");
+ CPStringBuilder buf = new CPStringBuilder("for-each");
buf.append('[');
buf.append("select=");
buf.append(select);
diff --git a/libjava/classpath/gnu/xml/transform/IfNode.java b/libjava/classpath/gnu/xml/transform/IfNode.java
index 2a00d64ca82..eeb294138ba 100644
--- a/libjava/classpath/gnu/xml/transform/IfNode.java
+++ b/libjava/classpath/gnu/xml/transform/IfNode.java
@@ -37,6 +37,8 @@ exception statement from your version. */
package gnu.xml.transform;
+import gnu.java.lang.CPStringBuilder;
+
import javax.xml.namespace.QName;
import javax.xml.transform.TransformerException;
import org.w3c.dom.Node;
@@ -99,7 +101,7 @@ final class IfNode
public String toString()
{
- StringBuffer buf = new StringBuffer("if");
+ CPStringBuilder buf = new CPStringBuilder("if");
buf.append('[');
buf.append("test=");
buf.append(test);
diff --git a/libjava/classpath/gnu/xml/transform/MessageNode.java b/libjava/classpath/gnu/xml/transform/MessageNode.java
index 890d76f6b1c..a7eeeeef6ee 100644
--- a/libjava/classpath/gnu/xml/transform/MessageNode.java
+++ b/libjava/classpath/gnu/xml/transform/MessageNode.java
@@ -37,6 +37,8 @@ exception statement from your version. */
package gnu.xml.transform;
+import gnu.java.lang.CPStringBuilder;
+
import java.util.logging.Logger;
import javax.xml.namespace.QName;
import javax.xml.transform.TransformerException;
@@ -95,7 +97,7 @@ final class MessageNode
public String toString()
{
- StringBuffer buf = new StringBuffer("message");
+ CPStringBuilder buf = new CPStringBuilder("message");
if (terminate)
{
buf.append('[');
diff --git a/libjava/classpath/gnu/xml/transform/ParameterNode.java b/libjava/classpath/gnu/xml/transform/ParameterNode.java
index 8cd2677cf08..431fbd3b1ea 100644
--- a/libjava/classpath/gnu/xml/transform/ParameterNode.java
+++ b/libjava/classpath/gnu/xml/transform/ParameterNode.java
@@ -37,6 +37,8 @@ exception statement from your version. */
package gnu.xml.transform;
+import gnu.java.lang.CPStringBuilder;
+
import java.util.Collections;
import javax.xml.namespace.QName;
import javax.xml.transform.TransformerException;
@@ -53,7 +55,7 @@ import gnu.xml.xpath.Expr;
*/
final class ParameterNode
extends TemplateNode
- implements Comparable
+ implements Comparable<ParameterNode>
{
final QName name;
@@ -67,11 +69,12 @@ final class ParameterNode
this.type = type;
}
- TemplateNode clone(Stylesheet stylesheet)
+ @Override
+ ParameterNode clone(Stylesheet stylesheet)
{
- TemplateNode ret = new ParameterNode(name,
- select.clone(stylesheet),
- type);
+ ParameterNode ret = new ParameterNode(name,
+ select == null ? null : select.clone(stylesheet),
+ type);
if (children != null)
ret.children = children.clone(stylesheet);
if (next != null)
@@ -129,26 +132,22 @@ final class ParameterNode
return super.references(var);
}
- public int compareTo(Object other)
+ public int compareTo(ParameterNode pn)
{
- if (other instanceof ParameterNode)
- {
- ParameterNode pn = (ParameterNode) other;
- boolean r1 = references(pn.name);
- boolean r2 = pn.references(name);
- if (r1 && r2)
- throw new IllegalArgumentException("circular definitions");
- if (r1)
- return 1;
- if (r2)
- return -1;
- }
+ boolean r1 = references(pn.name);
+ boolean r2 = pn.references(name);
+ if (r1 && r2)
+ throw new IllegalArgumentException("circular definitions");
+ if (r1)
+ return 1;
+ if (r2)
+ return -1;
return 0;
}
public String toString()
{
- StringBuffer buf = new StringBuffer();
+ CPStringBuilder buf = new CPStringBuilder();
switch (type)
{
case Bindings.VARIABLE:
@@ -164,11 +163,8 @@ final class ParameterNode
buf.append('[');
buf.append("name=");
buf.append(name);
- if (select != null)
- {
- buf.append(",select=");
- buf.append(select);
- }
+ buf.append(",select=");
+ buf.append(select);
buf.append(']');
return buf.toString();
}
diff --git a/libjava/classpath/gnu/xml/transform/ProcessingInstructionNode.java b/libjava/classpath/gnu/xml/transform/ProcessingInstructionNode.java
index bf61fc03880..655f51f0130 100644
--- a/libjava/classpath/gnu/xml/transform/ProcessingInstructionNode.java
+++ b/libjava/classpath/gnu/xml/transform/ProcessingInstructionNode.java
@@ -37,6 +37,8 @@ exception statement from your version. */
package gnu.xml.transform;
+import gnu.java.lang.CPStringBuilder;
+
import javax.xml.namespace.QName;
import javax.xml.transform.TransformerException;
import org.w3c.dom.Document;
@@ -105,7 +107,7 @@ final class ProcessingInstructionNode
public String toString()
{
- StringBuffer buf = new StringBuffer("processing-instruction");
+ CPStringBuilder buf = new CPStringBuilder("processing-instruction");
buf.append('[');
buf.append("name=");
buf.append(name);
diff --git a/libjava/classpath/gnu/xml/transform/SortKey.java b/libjava/classpath/gnu/xml/transform/SortKey.java
index d4ffb05e224..72934a5b750 100644
--- a/libjava/classpath/gnu/xml/transform/SortKey.java
+++ b/libjava/classpath/gnu/xml/transform/SortKey.java
@@ -45,7 +45,22 @@ import org.w3c.dom.Node;
import gnu.xml.xpath.Expr;
/**
- * An XSL sort key.
+ * <p>
+ * An XSL sort key, as specified by section 10 of the XSL
+ * Transformations specification. This takes the form:
+ * </p>
+ * <pre>
+ * &lt;xsl:sort
+ * select = string-expression
+ * lang = { nmtoken }
+ * data-type = { "text" | "number" | qname-but-not-ncname }
+ * order = { "ascending" | "descending" }
+ * case-order = { "upper-first" | "lower-first" } /&rt;
+ * </pre>
+ * <p>
+ * Note that all but the selection expression are optional,
+ * and so may be {@code null}.
+ * </p>
*
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
*/
@@ -67,6 +82,20 @@ final class SortKey
transient boolean descending;
transient int caseOrder;
+ /**
+ * Constructs a new {@link SortKey} to represent an &lt;xsl:sort&rt;
+ * tag.
+ *
+ * @param select the XPath expression which selects the nodes to be sorted.
+ * @param lang the language of the sort keys or {@code null} if unspecified.
+ * @param dataType the data type of the strings. May be "string", "number",
+ * a QName or {@code null} if unspecified.
+ * @param order the ordering of the nodes, which may be "ascending", "descending"
+ * or {@code null} if unspecified.
+ * @param caseOrder the treatment of case when the data type is a string. This
+ * may be "upper-first", "lower-first" or {@code null} if
+ * unspecified.
+ */
SortKey(Expr select, TemplateNode lang, TemplateNode dataType,
TemplateNode order, TemplateNode caseOrder)
{
@@ -176,4 +205,35 @@ final class SortKey
return false;
}
+ /**
+ * Provides a clone of this {@link SortKey}, using the given
+ * stylesheet as a context.
+ *
+ * @param stylesheet the stylesheet which provides context for the cloning.
+ * @return a clone of this instance.
+ */
+ SortKey clone(Stylesheet stylesheet)
+ {
+ return new SortKey(select.clone(stylesheet),
+ langTemplate == null ? null : cloneAttributeValueTemplate(langTemplate, stylesheet),
+ dataTypeTemplate == null ? null : cloneAttributeValueTemplate(dataTypeTemplate, stylesheet),
+ orderTemplate == null ? null : cloneAttributeValueTemplate(orderTemplate, stylesheet),
+ caseOrderTemplate == null ? null : cloneAttributeValueTemplate(caseOrderTemplate, stylesheet));
+ }
+
+ /**
+ * Clones an attribute value template as created by
+ * {@link Stylesheet#parseAttributeValueTemplate(String, Node)}.
+ * The node may either by a literal node or an xsl:value-of expression.
+ *
+ * @param node the node to clone.
+ * @param stylesheet the stylesheet which provides context for the cloning.
+ * @return the cloned node.
+ */
+ private TemplateNode cloneAttributeValueTemplate(TemplateNode node, Stylesheet stylesheet)
+ {
+ if (node instanceof ValueOfNode)
+ return ((ValueOfNode) node).clone(stylesheet);
+ return ((LiteralNode) node).clone(stylesheet);
+ }
}
diff --git a/libjava/classpath/gnu/xml/transform/StreamSerializer.java b/libjava/classpath/gnu/xml/transform/StreamSerializer.java
index 35323e7353d..28996721884 100644
--- a/libjava/classpath/gnu/xml/transform/StreamSerializer.java
+++ b/libjava/classpath/gnu/xml/transform/StreamSerializer.java
@@ -37,6 +37,8 @@ exception statement from your version. */
package gnu.xml.transform;
+import gnu.java.lang.CPStringBuilder;
+
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
@@ -595,7 +597,7 @@ public class StreamSerializer
if (!encoder.canEncode(text) || htmlNeedingEncoding)
{
// Check each character
- StringBuffer buf = new StringBuffer();
+ CPStringBuilder buf = new CPStringBuilder();
int len = text.length();
for (int i = 0; i < len; i++)
{
@@ -648,20 +650,20 @@ public class StreamSerializer
String encode(String text, boolean encodeCtl, boolean inAttr)
{
int len = text.length();
- StringBuffer buf = null;
+ CPStringBuilder buf = null;
for (int i = 0; i < len; i++)
{
char c = text.charAt(i);
if (c == '<')
{
if (buf == null)
- buf = new StringBuffer(text.substring(0, i));
+ buf = new CPStringBuilder(text.substring(0, i));
buf.append("&lt;");
}
else if (c == '>')
{
if (buf == null)
- buf = new StringBuffer(text.substring(0, i));
+ buf = new CPStringBuilder(text.substring(0, i));
buf.append("&gt;");
}
else if (c == '&')
@@ -675,14 +677,14 @@ public class StreamSerializer
else
{
if (buf == null)
- buf = new StringBuffer(text.substring(0, i));
+ buf = new CPStringBuilder(text.substring(0, i));
buf.append("&amp;");
}
}
else if (c == '\'' && inAttr)
{
if (buf == null)
- buf = new StringBuffer(text.substring(0, i));
+ buf = new CPStringBuilder(text.substring(0, i));
if (mode == Stylesheet.OUTPUT_HTML)
// HTML does not define &apos;, use character entity ref
buf.append("&#x27;");
@@ -692,7 +694,7 @@ public class StreamSerializer
else if (c == '"' && inAttr)
{
if (buf == null)
- buf = new StringBuffer(text.substring(0, i));
+ buf = new CPStringBuilder(text.substring(0, i));
buf.append("&quot;");
}
else if (encodeCtl)
@@ -700,7 +702,7 @@ public class StreamSerializer
if (c < 0x20)
{
if (buf == null)
- buf = new StringBuffer(text.substring(0, i));
+ buf = new CPStringBuilder(text.substring(0, i));
buf.append('&');
buf.append('#');
buf.append((int) c);
diff --git a/libjava/classpath/gnu/xml/transform/Stylesheet.java b/libjava/classpath/gnu/xml/transform/Stylesheet.java
index 41562c3c60a..30bd953495b 100644
--- a/libjava/classpath/gnu/xml/transform/Stylesheet.java
+++ b/libjava/classpath/gnu/xml/transform/Stylesheet.java
@@ -37,6 +37,8 @@ exception statement from your version. */
package gnu.xml.transform;
+import gnu.java.lang.CPStringBuilder;
+
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.ArrayList;
@@ -108,18 +110,18 @@ class Stylesheet
*/
String version;
- Collection extensionElementPrefixes;
- Collection excludeResultPrefixes;
+ Collection<String> extensionElementPrefixes;
+ Collection<String> excludeResultPrefixes;
/**
* Set of element names for which we should strip whitespace.
*/
- Set stripSpace;
+ Set<StrippingInstruction> stripSpace;
/**
* Set of element names for which we should preserve whitespace.
*/
- Set preserveSpace;
+ Set<StrippingInstruction> preserveSpace;
/**
* Output options.
@@ -132,34 +134,34 @@ class Stylesheet
boolean outputStandalone;
String outputPublicId;
String outputSystemId;
- Collection outputCdataSectionElements;
+ Collection<String> outputCdataSectionElements;
boolean outputIndent;
String outputMediaType;
/**
* Keys.
*/
- Collection keys;
+ Collection<Key> keys;
/**
* Decimal formats.
*/
- Map decimalFormats;
+ Map<String,DecimalFormat> decimalFormats;
/**
* Namespace aliases.
*/
- Map namespaceAliases;
+ Map<String,String> namespaceAliases;
/**
* Attribute-sets.
*/
- List attributeSets;
+ List<AttributeSet> attributeSets;
/**
* Variables.
*/
- List variables;
+ List<ParameterNode> variables;
/**
* Variable and parameter bindings.
@@ -169,7 +171,7 @@ class Stylesheet
/**
* Templates.
*/
- LinkedList templates;
+ LinkedList<Template> templates;
TemplateNode builtInNodeTemplate;
TemplateNode builtInTextTemplate;
@@ -203,22 +205,22 @@ class Stylesheet
this.systemId = systemId;
this.precedence = precedence;
this.parent = parent;
- extensionElementPrefixes = new HashSet();
- excludeResultPrefixes = new HashSet();
- stripSpace = new LinkedHashSet();
- preserveSpace = new LinkedHashSet();
- outputCdataSectionElements = new LinkedHashSet();
+ extensionElementPrefixes = new HashSet<String>();
+ excludeResultPrefixes = new HashSet<String>();
+ stripSpace = new LinkedHashSet<StrippingInstruction>();
+ preserveSpace = new LinkedHashSet<StrippingInstruction>();
+ outputCdataSectionElements = new LinkedHashSet<String>();
xpath = (XPathImpl) factory.xpathFactory.newXPath();
xpath.setNamespaceContext(this);
if (parent == null)
{
bindings = new Bindings(this);
- attributeSets = new LinkedList();
- variables = new LinkedList();
- namespaceAliases = new LinkedHashMap();
- templates = new LinkedList();
- keys = new LinkedList();
- decimalFormats = new LinkedHashMap();
+ attributeSets = new LinkedList<AttributeSet>();
+ variables = new LinkedList<ParameterNode>();
+ namespaceAliases = new LinkedHashMap<String,String>();
+ templates = new LinkedList<Template>();
+ keys = new LinkedList<Key>();
+ decimalFormats = new LinkedHashMap<String,DecimalFormat>();
initDefaultDecimalFormat();
xpath.setXPathFunctionResolver(this);
}
@@ -247,7 +249,7 @@ class Stylesheet
xpath.setXPathVariableResolver(bindings);
Test anyNode = new NodeTypeTest((short) 0);
- List tests = Collections.singletonList(anyNode);
+ List<Test> tests = Collections.singletonList(anyNode);
builtInNodeTemplate =
new ApplyTemplatesNode(new Selector(Selector.CHILD, tests),
null, null, null, true);
@@ -263,9 +265,8 @@ class Stylesheet
if (debug)
{
System.err.println("Stylesheet: " + doc.getDocumentURI());
- for (Iterator i = templates.iterator(); i.hasNext(); )
+ for (Template t : templates)
{
- Template t = (Template) i.next();
t.list(System.err);
System.err.println("--------------------");
}
@@ -307,34 +308,30 @@ class Stylesheet
Stylesheet clone = (Stylesheet) super.clone();
clone.bindings = (Bindings) bindings.clone();
- LinkedList templates2 = new LinkedList();
- for (Iterator i = templates.iterator(); i.hasNext(); )
+ LinkedList<Template> templates2 = new LinkedList<Template>();
+ for (Template t : templates)
{
- Template t = (Template) i.next();
templates2.add(t.clone(clone));
}
clone.templates = templates2;
- LinkedList attributeSets2 = new LinkedList();
- for (Iterator i = attributeSets.iterator(); i.hasNext(); )
+ LinkedList<AttributeSet> attributeSets2 = new LinkedList<AttributeSet>();
+ for (AttributeSet as : attributeSets)
{
- AttributeSet as = (AttributeSet) i.next();
attributeSets2.add(as.clone(clone));
}
clone.attributeSets = attributeSets2;
- LinkedList variables2 = new LinkedList();
- for (Iterator i = variables.iterator(); i.hasNext(); )
+ LinkedList<ParameterNode> variables2 = new LinkedList<ParameterNode>();
+ for (ParameterNode var : variables)
{
- ParameterNode var = (ParameterNode) i.next();
variables2.add(var.clone(clone));
}
clone.variables = variables2;
- LinkedList keys2 = new LinkedList();
- for (Iterator i = keys.iterator(); i.hasNext(); )
+ LinkedList<Key> keys2 = new LinkedList<Key>();
+ for (Key k : keys)
{
- Key k = (Key) i.next();
keys2.add(k.clone(clone));
}
clone.keys = keys2;
@@ -357,11 +354,10 @@ class Stylesheet
// See XSLT 11.4: "If the template or expression specifying the value of
// a global variable x references a global variable y, then the value
// for y must be computed before the value of x."
- List topLevel = new ArrayList(variables);
+ List<ParameterNode> topLevel = new ArrayList<ParameterNode>(variables);
Collections.sort(topLevel);
- for (Iterator i = topLevel.iterator(); i.hasNext(); )
+ for (ParameterNode var : topLevel)
{
- ParameterNode var = (ParameterNode) i.next();
bindings.set(var.name,
var.getValue(this, null, context, 1, 1),
var.type);
@@ -381,7 +377,7 @@ class Stylesheet
return (current == null) ? null : current.lookupPrefix(namespaceURI);
}
- public Iterator getPrefixes(String namespaceURI)
+ public Iterator<String> getPrefixes(String namespaceURI)
{
// TODO
return Collections.singleton(getPrefix(namespaceURI)).iterator();
@@ -408,9 +404,8 @@ class Stylesheet
if (debug)
System.err.println("getTemplate: mode="+mode+" context="+context);
Template selected = null;
- for (Iterator j = templates.iterator(); j.hasNext(); )
+ for (Template t : templates)
{
- Template t = (Template) j.next();
boolean isMatch = t.matches(mode, context);
if (applyImports)
{
@@ -472,9 +467,8 @@ class Stylesheet
throws TransformerException
{
Template selected = null;
- for (Iterator j = templates.iterator(); j.hasNext(); )
+ for (Template t : templates)
{
- Template t = (Template) j.next();
boolean isMatch = t.matches(name);
if (isMatch)
{
@@ -862,8 +856,8 @@ class Stylesheet
// Tokenize
int len = value.length();
int off = 0;
- List tokens = new ArrayList(); // text tokens
- List types = new ArrayList(); // literal or expression
+ List<String> tokens = new ArrayList<String>(); // text tokens
+ List<Boolean> types = new ArrayList<Boolean>(); // literal or expression
int depth = 0;
for (int i = 0; i < len; i++)
{
@@ -936,8 +930,8 @@ class Stylesheet
len = tokens.size();
for (int i = len - 1; i >= 0; i--)
{
- String token = (String) tokens.get(i);
- Boolean type = (Boolean) types.get(i);
+ String token = tokens.get(i);
+ Boolean type = types.get(i);
if (type == Boolean.TRUE)
{
// Expression text
@@ -989,9 +983,8 @@ class Stylesheet
{
// Conflict resolution
StrippingInstruction ssi = null, psi = null;
- for (Iterator i = stripSpace.iterator(); i.hasNext(); )
+ for (StrippingInstruction si : stripSpace)
{
- StrippingInstruction si = (StrippingInstruction) i.next();
if (si.element.matches(ctx, 1, 1))
{
if (ssi != null)
@@ -1005,9 +998,8 @@ class Stylesheet
ssi = si;
}
}
- for (Iterator i = preserveSpace.iterator(); i.hasNext(); )
+ for (StrippingInstruction si : preserveSpace)
{
- StrippingInstruction si = (StrippingInstruction) i.next();
if (si.element.matches(ctx, 1, 1))
{
if (psi != null)
@@ -1114,8 +1106,8 @@ class Stylesheet
if (s == null)
s = "child::node()";
Node children = node.getFirstChild();
- List sortKeys = parseSortKeys(children);
- List withParams = parseWithParams(children);
+ List<SortKey> sortKeys = parseSortKeys(children);
+ List<WithParam> withParams = parseWithParams(children);
Expr select = (Expr) xpath.compile(s);
return new ApplyTemplatesNode(select, mode,
sortKeys, withParams, false);
@@ -1131,7 +1123,7 @@ class Stylesheet
String n = getRequiredAttribute(attrs, "name", node);
QName name = getQName(n);
Node children = node.getFirstChild();
- List withParams = parseWithParams(children);
+ List<WithParam> withParams = parseWithParams(children);
return new CallTemplateNode(name, withParams);
}
@@ -1158,7 +1150,7 @@ class Stylesheet
NamedNodeMap attrs = node.getAttributes();
String s = getRequiredAttribute(attrs, "select", node);
Node children = node.getFirstChild();
- List sortKeys = parseSortKeys(children);
+ List<SortKey> sortKeys = parseSortKeys(children);
Expr select = (Expr) xpath.compile(s);
ForEachNode ret = new ForEachNode(select, sortKeys);
ret.children = parse(children);
@@ -1620,10 +1612,10 @@ class Stylesheet
return ret;
}
- final List parseSortKeys(Node node)
+ final List<SortKey> parseSortKeys(Node node)
throws TransformerConfigurationException, XPathExpressionException
{
- List ret = new LinkedList();
+ List<SortKey> ret = new LinkedList<SortKey>();
while (node != null)
{
String namespaceUri = node.getNamespaceURI();
@@ -1652,13 +1644,13 @@ class Stylesheet
}
node = node.getNextSibling();
}
- return ret.isEmpty() ? null : ret;
+ return ret;
}
- final List parseWithParams(Node node)
+ final List<WithParam> parseWithParams(Node node)
throws TransformerConfigurationException, XPathExpressionException
{
- List ret = new LinkedList();
+ List<WithParam> ret = new LinkedList<WithParam>();
while (node != null)
{
String namespaceUri = node.getNamespaceURI();
@@ -1688,7 +1680,7 @@ class Stylesheet
}
node = node.getNextSibling();
}
- return ret.isEmpty() ? null : ret;
+ return ret;
}
/**
@@ -1697,7 +1689,7 @@ class Stylesheet
* exclude-result-prefixes.
*/
final void addNamespaceNodes(Node source, Node target, Document doc,
- Collection elementExcludeResultPrefixes)
+ Collection<String> elementExcludeResultPrefixes)
{
NamedNodeMap attrs = source.getAttributes();
if (attrs != null)
@@ -1768,5 +1760,14 @@ class Stylesheet
dst.setUserData(key, data, this);
}
+ public String toString()
+ {
+ CPStringBuilder b = new CPStringBuilder(getClass().getName());
+ b.append("[templates=");
+ b.append(templates);
+ b.append("]");
+ return b.toString();
+ }
+
}
diff --git a/libjava/classpath/gnu/xml/transform/Template.java b/libjava/classpath/gnu/xml/transform/Template.java
index 1414dac9eb3..7ddef0ae50e 100644
--- a/libjava/classpath/gnu/xml/transform/Template.java
+++ b/libjava/classpath/gnu/xml/transform/Template.java
@@ -37,6 +37,8 @@ exception statement from your version. */
package gnu.xml.transform;
+import gnu.java.lang.CPStringBuilder;
+
import java.io.PrintStream;
import javax.xml.namespace.QName;
import javax.xml.transform.TransformerException;
@@ -226,7 +228,7 @@ class Template
public String toString()
{
- StringBuffer buf = new StringBuffer(getClass().getName());
+ CPStringBuilder buf = new CPStringBuilder(getClass().getName());
buf.append('[');
if (name != null)
{
@@ -243,6 +245,8 @@ class Template
buf.append(",mode=");
buf.append(mode);
}
+ buf.append(",node=");
+ buf.append(node);
buf.append(']');
return buf.toString();
diff --git a/libjava/classpath/gnu/xml/transform/TemplateNode.java b/libjava/classpath/gnu/xml/transform/TemplateNode.java
index 6ff727c073c..ad80c59f922 100644
--- a/libjava/classpath/gnu/xml/transform/TemplateNode.java
+++ b/libjava/classpath/gnu/xml/transform/TemplateNode.java
@@ -52,7 +52,7 @@ import gnu.xml.xpath.DocumentOrderComparator;
abstract class TemplateNode
{
- static final Comparator documentOrderComparator =
+ static final Comparator<Node> documentOrderComparator =
new DocumentOrderComparator();
TemplateNode children;
diff --git a/libjava/classpath/gnu/xml/transform/TemplatesImpl.java b/libjava/classpath/gnu/xml/transform/TemplatesImpl.java
index 527bd979db0..e5395f6fb22 100644
--- a/libjava/classpath/gnu/xml/transform/TemplatesImpl.java
+++ b/libjava/classpath/gnu/xml/transform/TemplatesImpl.java
@@ -37,6 +37,8 @@ exception statement from your version. */
package gnu.xml.transform;
+import gnu.java.lang.CPStringBuilder;
+
import java.util.Properties;
import javax.xml.transform.Templates;
import javax.xml.transform.Transformer;
@@ -76,5 +78,18 @@ class TemplatesImpl
{
return (Properties) outputProperties.clone();
}
-
+
+ public String toString()
+ {
+ CPStringBuilder b = new CPStringBuilder(getClass().getName());
+ b.append("[factory=");
+ b.append(factory);
+ b.append(",stylesheet=");
+ b.append(stylesheet);
+ b.append(",outputProperties=");
+ b.append(outputProperties);
+ b.append("]");
+ return b.toString();
+ }
+
}
diff --git a/libjava/classpath/gnu/xml/transform/TextNode.java b/libjava/classpath/gnu/xml/transform/TextNode.java
index 39423b270eb..93d1d541775 100644
--- a/libjava/classpath/gnu/xml/transform/TextNode.java
+++ b/libjava/classpath/gnu/xml/transform/TextNode.java
@@ -37,6 +37,8 @@ exception statement from your version. */
package gnu.xml.transform;
+import gnu.java.lang.CPStringBuilder;
+
import javax.xml.namespace.QName;
import javax.xml.transform.TransformerException;
import org.w3c.dom.Document;
@@ -106,7 +108,7 @@ final class TextNode
public String toString()
{
- StringBuffer buf = new StringBuffer("text");
+ CPStringBuilder buf = new CPStringBuilder("text");
if (disableOutputEscaping)
{
buf.append('[');
diff --git a/libjava/classpath/gnu/xml/transform/TransformerImpl.java b/libjava/classpath/gnu/xml/transform/TransformerImpl.java
index f43b6602f23..a975c691f29 100644
--- a/libjava/classpath/gnu/xml/transform/TransformerImpl.java
+++ b/libjava/classpath/gnu/xml/transform/TransformerImpl.java
@@ -37,6 +37,8 @@ exception statement from your version. */
package gnu.xml.transform;
+import gnu.java.lang.CPStringBuilder;
+
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -722,7 +724,7 @@ class TransformerImpl
}
else
{
- StringBuffer buf = new StringBuffer();
+ CPStringBuilder buf = new CPStringBuilder();
buf.append('\n');
for (int i = 0; i < offset + 1; i++)
buf.append(INDENT_WHITESPACE);
@@ -733,7 +735,7 @@ class TransformerImpl
node.insertBefore(doc.createTextNode(ws), ctx);
reindent(doc, ctx, offset + 1);
}
- buf = new StringBuffer();
+ buf = new CPStringBuilder();
buf.append('\n');
for (int i = 0; i < offset; i++)
buf.append(INDENT_WHITESPACE);
diff --git a/libjava/classpath/gnu/xml/transform/TransformerOutputProperties.java b/libjava/classpath/gnu/xml/transform/TransformerOutputProperties.java
index cc8593c4601..9ac5cdc0413 100644
--- a/libjava/classpath/gnu/xml/transform/TransformerOutputProperties.java
+++ b/libjava/classpath/gnu/xml/transform/TransformerOutputProperties.java
@@ -37,6 +37,8 @@ exception statement from your version. */
package gnu.xml.transform;
+import gnu.java.lang.CPStringBuilder;
+
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedHashSet;
@@ -95,7 +97,7 @@ class TransformerOutputProperties
defaultProperties.put(OutputKeys.DOCTYPE_SYSTEM,
stylesheet.outputSystemId);
}
- StringBuffer buf = new StringBuffer();
+ CPStringBuilder buf = new CPStringBuilder();
for (Iterator i = stylesheet.outputCdataSectionElements.iterator();
i.hasNext(); )
{
diff --git a/libjava/classpath/gnu/xml/transform/UnparsedEntityUriFunction.java b/libjava/classpath/gnu/xml/transform/UnparsedEntityUriFunction.java
index 92002f1f5b6..7ba0eae21a4 100644
--- a/libjava/classpath/gnu/xml/transform/UnparsedEntityUriFunction.java
+++ b/libjava/classpath/gnu/xml/transform/UnparsedEntityUriFunction.java
@@ -61,27 +61,28 @@ final class UnparsedEntityUriFunction
implements XPathFunction, Function
{
- List args;
+ List<Expr> args;
public Object evaluate(List args)
throws XPathFunctionException
{
// Useless...
- return Collections.EMPTY_SET;
+ return Collections.emptySet();
}
- public void setArguments(List args)
+ public void setArguments(List<Expr> args)
{
this.args = args;
}
+ @Override
public Object evaluate(Node context, int pos, int len)
{
int arity = args.size();
- List values = new ArrayList(arity);
+ List<Object> values = new ArrayList<Object>(arity);
for (int i = 0; i < arity; i++)
{
- Expr arg = (Expr) args.get(i);
+ Expr arg = args.get(i);
values.add(arg.evaluate(context, pos, len));
}
String name = _string(context, values.get(0));
@@ -107,10 +108,10 @@ final class UnparsedEntityUriFunction
{
UnparsedEntityUriFunction f = new UnparsedEntityUriFunction();
int len = args.size();
- List args2 = new ArrayList(len);
+ List<Expr> args2 = new ArrayList<Expr>(len);
for (int i = 0; i < len; i++)
{
- args2.add(((Expr) args.get(i)).clone(context));
+ args2.add(args.get(i).clone(context));
}
f.setArguments(args2);
return f;
@@ -118,9 +119,9 @@ final class UnparsedEntityUriFunction
public boolean references(QName var)
{
- for (Iterator i = args.iterator(); i.hasNext(); )
+ for (Iterator<Expr> i = args.iterator(); i.hasNext(); )
{
- if (((Expr) i.next()).references(var))
+ if (i.next().references(var))
{
return true;
}
diff --git a/libjava/classpath/gnu/xml/transform/ValueOfNode.java b/libjava/classpath/gnu/xml/transform/ValueOfNode.java
index 68f31e05ae3..156affa77be 100644
--- a/libjava/classpath/gnu/xml/transform/ValueOfNode.java
+++ b/libjava/classpath/gnu/xml/transform/ValueOfNode.java
@@ -37,6 +37,8 @@ exception statement from your version. */
package gnu.xml.transform;
+import gnu.java.lang.CPStringBuilder;
+
import java.util.Collection;
import java.util.Iterator;
import javax.xml.namespace.QName;
@@ -74,7 +76,8 @@ final class ValueOfNode
ret.next = next.clone(stylesheet);
return ret;
}
-
+
+ @Override
void doApply(Stylesheet stylesheet, QName mode,
Node context, int pos, int len,
Node parent, Node nextSibling)
@@ -84,10 +87,9 @@ final class ValueOfNode
String value;
if (ret instanceof Collection)
{
- StringBuffer buf = new StringBuffer();
- for (Iterator i = ((Collection) ret).iterator(); i.hasNext(); )
+ CPStringBuilder buf = new CPStringBuilder();
+ for (Node node : ((Collection<Node>) ret))
{
- Node node = (Node) i.next();
buf.append(Expr.stringValue(node));
}
value = buf.toString();
@@ -126,7 +128,7 @@ final class ValueOfNode
public String toString()
{
- StringBuffer buf = new StringBuffer("value-of");
+ CPStringBuilder buf = new CPStringBuilder("value-of");
buf.append('[');
buf.append("select=");
buf.append(select);
diff --git a/libjava/classpath/gnu/xml/transform/WhenNode.java b/libjava/classpath/gnu/xml/transform/WhenNode.java
index fe3f403ab0c..fc9d5b187ef 100644
--- a/libjava/classpath/gnu/xml/transform/WhenNode.java
+++ b/libjava/classpath/gnu/xml/transform/WhenNode.java
@@ -37,6 +37,8 @@ exception statement from your version. */
package gnu.xml.transform;
+import gnu.java.lang.CPStringBuilder;
+
import javax.xml.namespace.QName;
import javax.xml.transform.TransformerException;
import org.w3c.dom.Node;
@@ -102,7 +104,7 @@ final class WhenNode
public String toString()
{
- StringBuffer buf = new StringBuffer("when");
+ CPStringBuilder buf = new CPStringBuilder("when");
buf.append('[');
buf.append("test=");
buf.append(test);
diff --git a/libjava/classpath/gnu/xml/transform/XSLComparator.java b/libjava/classpath/gnu/xml/transform/XSLComparator.java
index 222f370c8b9..88243693d7f 100644
--- a/libjava/classpath/gnu/xml/transform/XSLComparator.java
+++ b/libjava/classpath/gnu/xml/transform/XSLComparator.java
@@ -51,72 +51,66 @@ import gnu.xml.xpath.Expr;
* @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
*/
class XSLComparator
- implements Comparator
+ implements Comparator<Node>
{
- final List sortKeys;
+ final List<SortKey> sortKeys;
- XSLComparator(List sortKeys)
+ XSLComparator(List<SortKey> sortKeys)
{
this.sortKeys = sortKeys;
}
- public int compare(Object o1, Object o2)
+ public int compare(Node n1, Node n2)
{
- if (o1 instanceof Node && o2 instanceof Node)
+ for (SortKey sortKey : sortKeys)
{
- Node n1 = (Node) o1;
- Node n2 = (Node) o2;
- for (Iterator i = sortKeys.iterator(); i.hasNext(); )
- {
- SortKey sortKey = (SortKey) i.next();
- String k1 = sortKey.key(n1);
- String k2 = sortKey.key(n2);
- if ("text".equals(sortKey.dataType))
- {
- Locale locale = (sortKey.lang == null) ? Locale.getDefault() :
- new Locale(sortKey.lang);
- Collator collator = Collator.getInstance(locale);
- int d = collator.compare(k1, k2);
- if (d != 0)
- {
- switch (sortKey.caseOrder)
- {
- case SortKey.UPPER_FIRST:
- // TODO
- break;
- case SortKey.LOWER_FIRST:
- // TODO
- break;
- }
- if (sortKey.descending)
- {
- d = -d;
- }
- return d;
- }
- }
- else if ("number".equals(sortKey.dataType))
- {
- double kn1 = Expr._number(n1, k1);
- double kn2 = Expr._number(n2, k2);
- int d;
- if (Double.isNaN(kn1) || Double.isInfinite(kn2))
- {
- d = -1;
- }
- else if (Double.isNaN(kn2) || Double.isInfinite(kn1))
- {
- d = 1;
- }
- else
- {
- // conversion to int may give 0 for small numbers
- d = (kn1 > kn2) ? 1 : (kn1 < kn2) ? -1 : 0;
- }
- return (sortKey.descending) ? -d : d;
- }
- }
+ String k1 = sortKey.key(n1);
+ String k2 = sortKey.key(n2);
+ if ("text".equals(sortKey.dataType))
+ {
+ Locale locale = (sortKey.lang == null) ? Locale.getDefault() :
+ new Locale(sortKey.lang);
+ Collator collator = Collator.getInstance(locale);
+ int d = collator.compare(k1, k2);
+ if (d != 0)
+ {
+ switch (sortKey.caseOrder)
+ {
+ case SortKey.UPPER_FIRST:
+ // TODO
+ break;
+ case SortKey.LOWER_FIRST:
+ // TODO
+ break;
+ }
+ if (sortKey.descending)
+ {
+ d = -d;
+ }
+ return d;
+ }
+ }
+ else if ("number".equals(sortKey.dataType))
+ {
+ double kn1 = Expr._number(n1, k1);
+ double kn2 = Expr._number(n2, k2);
+ int d;
+ if (Double.isNaN(kn1) || Double.isInfinite(kn2))
+ {
+ d = -1;
+ }
+ else if (Double.isNaN(kn2) || Double.isInfinite(kn1))
+ {
+ d = 1;
+ }
+ else
+ {
+ // conversion to int may give 0 for small numbers
+ d = (kn1 > kn2) ? 1 : (kn1 < kn2) ? -1 : 0;
+ }
+ return (sortKey.descending) ? -d : d;
+ }
}
return 0;
}
diff --git a/libjava/classpath/gnu/xml/transform/XSLURIResolver.java b/libjava/classpath/gnu/xml/transform/XSLURIResolver.java
index 8bb8977315e..c1379211ae5 100644
--- a/libjava/classpath/gnu/xml/transform/XSLURIResolver.java
+++ b/libjava/classpath/gnu/xml/transform/XSLURIResolver.java
@@ -75,8 +75,8 @@ class XSLURIResolver
implements URIResolver
{
- Map lastModifiedCache = new HashMap();
- Map nodeCache = new HashMap();
+ final Map<String,Long> lastModifiedCache = new HashMap<String,Long>();
+ final Map<String,Node> nodeCache = new HashMap<String,Node>();
DocumentBuilder builder;
URIResolver userResolver;
ErrorListener userListener;
@@ -157,10 +157,10 @@ class XSLURIResolver
if (url != null)
{
systemId = url.toString();
- node = (Node) nodeCache.get(systemId);
+ node = nodeCache.get(systemId);
// Is the resource up to date?
URLConnection conn = url.openConnection();
- Long llm = (Long) lastModifiedCache.get(systemId);
+ Long llm = lastModifiedCache.get(systemId);
if (llm != null)
{
lastLastModified = llm.longValue();
@@ -301,6 +301,7 @@ class XSLURIResolver
{
SAXEventSink eventSink = new SAXEventSink();
eventSink.setReader(reader);
+ eventSink.setNamespaceAware(true);
reader.setContentHandler(eventSink);
reader.setDTDHandler(eventSink);
reader.setProperty("http://xml.org/sax/properties/lexical-handler",
OpenPOWER on IntegriCloud