diff options
author | Andrew John Hughes <gnu_andrew@member.fsf.org> | 2008-06-22 23:57:15 +0000 |
---|---|---|
committer | Andrew John Hughes <gnu_andrew@member.fsf.org> | 2008-06-22 23:57:15 +0000 |
commit | d1986c641765cf3c780b32be9b4b0023e77e8449 (patch) | |
tree | e1340d64ffcf3d03f09efe9048c41f866bd47513 /gnu | |
parent | 6e42b91908c1d8dc42dc0207368ecdf4a3a20999 (diff) | |
download | classpath-d1986c641765cf3c780b32be9b4b0023e77e8449.tar.gz |
Generification of gnu.xml.transform.*.
2008-06-23 Andrew John Hughes <gnu_andrew@member.fsf.org>
* gnu/xml/transform/ParameterNode.java,
* gnu/xml/transform/Stylesheet.java,
* gnu/xml/transform/UnparsedEntityUriFunction.java,
* gnu/xml/transform/ValueOfNode.java,
* gnu/xml/transform/XSLComparator.java,
* gnu/xml/transform/XSLURIResolver.java:
Genericised.
Diffstat (limited to 'gnu')
-rw-r--r-- | gnu/xml/transform/ParameterNode.java | 33 | ||||
-rw-r--r-- | gnu/xml/transform/Stylesheet.java | 114 | ||||
-rw-r--r-- | gnu/xml/transform/UnparsedEntityUriFunction.java | 19 | ||||
-rw-r--r-- | gnu/xml/transform/ValueOfNode.java | 6 | ||||
-rw-r--r-- | gnu/xml/transform/XSLComparator.java | 108 | ||||
-rw-r--r-- | gnu/xml/transform/XSLURIResolver.java | 8 |
6 files changed, 135 insertions, 153 deletions
diff --git a/gnu/xml/transform/ParameterNode.java b/gnu/xml/transform/ParameterNode.java index dd03fa4cd..431fbd3b1 100644 --- a/gnu/xml/transform/ParameterNode.java +++ b/gnu/xml/transform/ParameterNode.java @@ -55,7 +55,7 @@ import gnu.xml.xpath.Expr; */ final class ParameterNode extends TemplateNode - implements Comparable + implements Comparable<ParameterNode> { final QName name; @@ -69,11 +69,12 @@ final class ParameterNode this.type = type; } - TemplateNode clone(Stylesheet stylesheet) + @Override + ParameterNode clone(Stylesheet stylesheet) { - TemplateNode ret = new ParameterNode(name, - select == null ? null : 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) @@ -131,20 +132,16 @@ 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; } diff --git a/gnu/xml/transform/Stylesheet.java b/gnu/xml/transform/Stylesheet.java index f75956269..070d85cd2 100644 --- a/gnu/xml/transform/Stylesheet.java +++ b/gnu/xml/transform/Stylesheet.java @@ -110,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. @@ -134,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. @@ -171,7 +171,7 @@ class Stylesheet /** * Templates. */ - LinkedList templates; + LinkedList<Template> templates; TemplateNode builtInNodeTemplate; TemplateNode builtInTextTemplate; @@ -205,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); } @@ -249,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); @@ -265,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("--------------------"); } @@ -309,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; @@ -359,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); @@ -383,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(); @@ -410,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) { @@ -474,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) { @@ -864,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++) { @@ -938,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 @@ -991,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) @@ -1007,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) @@ -1116,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); @@ -1133,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); } @@ -1160,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); @@ -1622,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(); @@ -1657,10 +1647,10 @@ class Stylesheet return ret.isEmpty() ? null : 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(); @@ -1699,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) diff --git a/gnu/xml/transform/UnparsedEntityUriFunction.java b/gnu/xml/transform/UnparsedEntityUriFunction.java index 92002f1f5..7ba0eae21 100644 --- a/gnu/xml/transform/UnparsedEntityUriFunction.java +++ b/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/gnu/xml/transform/ValueOfNode.java b/gnu/xml/transform/ValueOfNode.java index ca9383684..156affa77 100644 --- a/gnu/xml/transform/ValueOfNode.java +++ b/gnu/xml/transform/ValueOfNode.java @@ -76,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) @@ -87,9 +88,8 @@ final class ValueOfNode if (ret instanceof Collection) { CPStringBuilder buf = new CPStringBuilder(); - for (Iterator i = ((Collection) ret).iterator(); i.hasNext(); ) + for (Node node : ((Collection<Node>) ret)) { - Node node = (Node) i.next(); buf.append(Expr.stringValue(node)); } value = buf.toString(); diff --git a/gnu/xml/transform/XSLComparator.java b/gnu/xml/transform/XSLComparator.java index 222f370c8..88243693d 100644 --- a/gnu/xml/transform/XSLComparator.java +++ b/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/gnu/xml/transform/XSLURIResolver.java b/gnu/xml/transform/XSLURIResolver.java index 8bb897731..fdff28d68 100644 --- a/gnu/xml/transform/XSLURIResolver.java +++ b/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(); |