You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by ng...@apache.org on 2010/01/05 23:53:43 UTC
svn commit: r896258 - in /mina/sandbox/vysper/branches/nbxml-sax/src:
main/java/org/apache/vysper/xml/fragment/
test/java/org/apache/vysper/xml/fragment/
Author: ngn
Date: Tue Jan 5 22:53:32 2010
New Revision: 896258
URL: http://svn.apache.org/viewvc?rev=896258&view=rev
Log:
Separate attributes and namespace declarations
Removed:
mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/NamespaceAttribute.java
Modified:
mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/AbstractXMLElementBuilder.java
mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/FragmentFactory.java
mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/Renderer.java
mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/StackNamespaceResolver.java
mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/XMLElement.java
mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/XMLElementBuilder.java
mina/sandbox/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/fragment/RendererTestCase.java
mina/sandbox/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/fragment/StackNamespaceResolverTestCase.java
Modified: mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/AbstractXMLElementBuilder.java
URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/AbstractXMLElementBuilder.java?rev=896258&r1=896257&r2=896258&view=diff
==============================================================================
--- mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/AbstractXMLElementBuilder.java (original)
+++ mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/AbstractXMLElementBuilder.java Tue Jan 5 22:53:32 2010
@@ -21,7 +21,9 @@
package org.apache.vysper.xml.fragment;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Stack;
/**
@@ -36,6 +38,7 @@
public ElementStruct parentElement = null;
public XMLElement element = null;
public List<Attribute> attributes = null;
+ public Map<String, String> namespaces = null;
public List<XMLFragment> innerFragments = null;
}
@@ -62,16 +65,17 @@
stack.push(currentElement);
}
- public AbstractXMLElementBuilder(String elementName, String namespaceURI, String namespacePrefix, List<Attribute> attributes, List<XMLFragment> innerFragments) {
+ public AbstractXMLElementBuilder(String elementName, String namespaceURI, String namespacePrefix, List<Attribute> attributes, Map<String, String> namespaces, List<XMLFragment> innerFragments) {
startNewElement(elementName, namespaceURI, namespacePrefix);
resultingElement = currentElement.element;
if(attributes != null) currentElement.attributes.addAll(attributes);
+ if(namespaces != null) currentElement.namespaces.putAll(namespaces);
if(innerFragments != null) currentElement.innerFragments.addAll(innerFragments);
stack.push(currentElement);
}
- protected XMLElement createElement(String namespaceURI, String name, String namespacePrefix, List<Attribute> attributes, List<XMLFragment> innerFragments) {
- return new XMLElement(namespaceURI, name, namespacePrefix, attributes, innerFragments);
+ protected XMLElement createElement(String namespaceURI, String name, String namespacePrefix, List<Attribute> attributes, Map<String, String> namespaces, List<XMLFragment> innerFragments) {
+ return new XMLElement(namespaceURI, name, namespacePrefix, attributes, innerFragments, namespaces);
}
private void startNewElement(String name, String namespaceURI, String namespacePrefix) {
@@ -79,19 +83,15 @@
// TODO handle the namespace, given by URI, currently always NULL in XMLElement constructors
ElementStruct element = new ElementStruct();
element.attributes = new ArrayList<Attribute>();
+ element.namespaces = new HashMap<String, String>();
element.innerFragments = new ArrayList<XMLFragment>();
- element.element = createElement(namespaceURI, name, namespacePrefix, element.attributes, element.innerFragments);
+ element.element = createElement(namespaceURI, name, namespacePrefix, element.attributes, element.namespaces, element.innerFragments);
currentElement = element;
}
- public B addNamespaceAttribute(String value) {
- addAttribute(new NamespaceAttribute(value));
- return (B) this;
- }
-
- public B addNamespaceAttribute(String namespacePrefix, String value) {
- addAttribute(new NamespaceAttribute(namespacePrefix, value));
+ public B declareNamespace(String namespacePrefix, String value) {
+ currentElement.namespaces.put(namespacePrefix, value);
return (B) this;
}
Modified: mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/FragmentFactory.java
URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/FragmentFactory.java?rev=896258&r1=896257&r2=896258&view=diff
==============================================================================
--- mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/FragmentFactory.java (original)
+++ mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/FragmentFactory.java Tue Jan 5 22:53:32 2010
@@ -34,7 +34,7 @@
}
public static XMLElement createElementWithInnerText(String namespaceURI, String name, String text) {
- return new XMLElement(namespaceURI, name, null, null, asList(new XMLText(text)));
+ return new XMLElement(namespaceURI, name, null, null, asList(new XMLText(text)), null);
}
Modified: mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/Renderer.java
URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/Renderer.java?rev=896258&r1=896257&r2=896258&view=diff
==============================================================================
--- mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/Renderer.java (original)
+++ mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/Renderer.java Tue Jan 5 22:53:32 2010
@@ -83,10 +83,8 @@
// nor normal attributes containing namespace declarations (probably due to
// the parser not correctly creating namespace attributes for these which are then
// copied into for example error responses)
- if(!(attribute instanceof NamespaceAttribute) && !hasXmlnsReservedName(attribute)) {
- openElementBuffer.append(" ");
- renderAttribute(openElementBuffer, attribute, nsResolver);
- }
+ openElementBuffer.append(" ");
+ renderAttribute(openElementBuffer, attribute, nsResolver);
}
openElementBuffer.append(">");
Modified: mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/StackNamespaceResolver.java
URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/StackNamespaceResolver.java?rev=896258&r1=896257&r2=896258&view=diff
==============================================================================
--- mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/StackNamespaceResolver.java (original)
+++ mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/StackNamespaceResolver.java Tue Jan 5 22:53:32 2010
@@ -23,6 +23,7 @@
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Stack;
+import java.util.Map.Entry;
/**
@@ -47,21 +48,16 @@
Map<String, String> ns = new LinkedHashMap<String, String>();
if(!elements.isEmpty()) {
XMLElement topElm = elements.peek();
- for(Attribute attribute : topElm.getAttributes()) {
- if(attribute instanceof NamespaceAttribute) {
- NamespaceAttribute nsAttr = (NamespaceAttribute) attribute;
- ns.put(nsAttr.getPrefix(), nsAttr.getValue());
- }
+ for(Entry<String, String> entry : topElm.getDeclaredNamespaces().entrySet()) {
+ ns.put(entry.getKey(), entry.getValue());
}
// look for any generated prefixes for attributes
for(Attribute attribute : topElm.getAttributes()) {
- if(!(attribute instanceof NamespaceAttribute)) {
- String attrNs = attribute.getNamespaceUri();
- if(attrNs.length() > 0 && resolvePrefix(attrNs, false) == null) {
- // attribute is in a namespace, and that namespace is not declared
- ns.put(resolvePrefix(attrNs), attrNs);
- }
+ String attrNs = attribute.getNamespaceUri();
+ if(attrNs.length() > 0 && resolvePrefix(attrNs, false) == null) {
+ // attribute is in a namespace, and that namespace is not declared
+ ns.put(resolvePrefix(attrNs), attrNs);
}
}
@@ -122,16 +118,7 @@
}
private String resolveUri(XMLElement elm, String prefix) {
- for(Attribute attribute : elm.getAttributes()) {
- if(attribute instanceof NamespaceAttribute) {
- NamespaceAttribute nsAttr = (NamespaceAttribute) attribute;
- if(nsAttr.getPrefix().equals(prefix)) {
- return nsAttr.getValue();
- }
- }
- }
-
- return null;
+ return elm.getDeclaredNamespaces().get(prefix);
}
public String resolvePrefix(String uri) {
@@ -166,12 +153,9 @@
}
private String resolvePrefix(XMLElement elm, String uri) {
- for(Attribute attribute : elm.getAttributes()) {
- if(attribute instanceof NamespaceAttribute) {
- NamespaceAttribute nsAttr = (NamespaceAttribute) attribute;
- if(nsAttr.getValue().equals(uri)) {
- return nsAttr.getPrefix();
- }
+ for(Entry<String, String> entry : elm.getDeclaredNamespaces().entrySet()) {
+ if(entry.getValue().equals(uri)) {
+ return entry.getKey();
}
}
Modified: mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/XMLElement.java
URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/XMLElement.java?rev=896258&r1=896257&r2=896258&view=diff
==============================================================================
--- mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/XMLElement.java (original)
+++ mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/XMLElement.java Tue Jan 5 22:53:32 2010
@@ -46,18 +46,28 @@
private String namespacePrefix;
private List<Attribute> attributes;
+ private Map<String, String> namespaces;
private List<XMLFragment> innerFragments;
protected XMLElementVerifier xmlElementVerifier;
public XMLElement(String namespaceURI, String name, String namespacePrefix, Attribute[] attributes, XMLFragment[] innerFragments) {
- this(namespaceURI, name, namespacePrefix, FragmentFactory.asList(attributes), FragmentFactory.asList(innerFragments));
+ this(namespaceURI, name, namespacePrefix, attributes, innerFragments, null);
+ }
+
+ public XMLElement(String namespaceURI, String name, String namespacePrefix, Attribute[] attributes, XMLFragment[] innerFragments, Map<String, String> namespaces) {
+ this(namespaceURI, name, namespacePrefix, FragmentFactory.asList(attributes), FragmentFactory.asList(innerFragments), namespaces);
}
public XMLElement(String namespaceURI, String name, String namespacePrefix, List<Attribute> attributes, List<XMLFragment> innerFragments) {
+ this(namespaceURI, name, namespacePrefix, attributes, innerFragments, null);
+ }
+
+ public XMLElement(String namespaceURI, String name, String namespacePrefix, List<Attribute> attributes, List<XMLFragment> innerFragments, Map<String, String> namespaces) {
this.namespaceURI = namespaceURI == null ? Namespaces.DEFAULT_NAMESPACE_URI : namespaceURI;
this.namespacePrefix = namespacePrefix == null ? Namespaces.DEFAULT_NAMESPACE_PREFIX : namespacePrefix;
this.name = name;
this.attributes = (attributes == null) ? Collections.EMPTY_LIST : Collections.unmodifiableList(attributes);
+ this.namespaces = (namespaces == null) ? Collections.EMPTY_MAP : Collections.unmodifiableMap(namespaces);
this.innerFragments = (innerFragments == null) ? Collections.EMPTY_LIST : Collections.unmodifiableList(innerFragments);
if (name == null) throw new IllegalArgumentException("XMLElement name cannot be null");
}
@@ -111,6 +121,9 @@
else return attribute.getValue();
}
+ public Map<String, String> getDeclaredNamespaces() {
+ return namespaces;
+ }
public String getXMLLang() {
return getAttributeValue(Namespaces.XML, "lang");
Modified: mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/XMLElementBuilder.java
URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/XMLElementBuilder.java?rev=896258&r1=896257&r2=896258&view=diff
==============================================================================
--- mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/XMLElementBuilder.java (original)
+++ mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/XMLElementBuilder.java Tue Jan 5 22:53:32 2010
@@ -21,6 +21,7 @@
package org.apache.vysper.xml.fragment;
import java.util.List;
+import java.util.Map;
/**
@@ -43,8 +44,14 @@
}
public XMLElementBuilder(String elementName, String namespaceURI,
- String namespacePrefix, List<Attribute> attributes,
+ String namespacePrefix, List<Attribute> attributes,
List<XMLFragment> innerFragments) {
- super(elementName, namespaceURI, namespacePrefix, attributes, innerFragments);
+ super(elementName, namespaceURI, namespacePrefix, attributes, null, innerFragments);
+ }
+
+ public XMLElementBuilder(String elementName, String namespaceURI,
+ String namespacePrefix, List<Attribute> attributes, Map<String, String> namespaces,
+ List<XMLFragment> innerFragments) {
+ super(elementName, namespaceURI, namespacePrefix, attributes, namespaces, innerFragments);
}
}
Modified: mina/sandbox/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/fragment/RendererTestCase.java
URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/fragment/RendererTestCase.java?rev=896258&r1=896257&r2=896258&view=diff
==============================================================================
--- mina/sandbox/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/fragment/RendererTestCase.java (original)
+++ mina/sandbox/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/fragment/RendererTestCase.java Tue Jan 5 22:53:32 2010
@@ -19,14 +19,8 @@
*/
package org.apache.vysper.xml.fragment;
-import org.apache.vysper.xml.fragment.Attribute;
-import org.apache.vysper.xml.fragment.NamespaceAttribute;
-import org.apache.vysper.xml.fragment.Namespaces;
-import org.apache.vysper.xml.fragment.Renderer;
-import org.apache.vysper.xml.fragment.XMLElement;
-import org.apache.vysper.xml.fragment.XMLElementBuilder;
-import org.apache.vysper.xml.fragment.XMLFragment;
-import org.apache.vysper.xml.fragment.XMLText;
+import java.util.HashMap;
+import java.util.Map;
import junit.framework.TestCase;
@@ -68,8 +62,7 @@
public void testRenderNamespacedAttribute() {
XMLElement elm = new XMLElement(null, "foo", null, new Attribute[]{
new Attribute("http://example.com", "attr1", "value1"),
- new NamespaceAttribute("pr1", "http://example.com")
- }, null);
+ }, null, nsMap("pr1", "http://example.com"));
assertRendering("<foo xmlns:pr1=\"http://example.com\" pr1:attr1=\"value1\"></foo>", elm);
}
@@ -100,22 +93,26 @@
// assertRendering("<foo attr=\"value\" />", elm);
// }
+ private Map<String, String> nsMap(String... ns) {
+ Map<String, String> nsMap = new HashMap<String, String>();
+ for(int i = 1; i < ns.length; i += 2) {
+ nsMap.put(ns[i - 1], ns[i]);
+ }
+ return nsMap;
+ }
+
public void testRenderNonNamespaceElement() {
XMLElement elm = new XMLElement(null, "foo", null, (Attribute[])null, null);
assertRendering("<foo></foo>", elm);
}
public void testRenderDefaultNamespaceElement() {
- XMLElement elm = new XMLElement(null, "foo", null, new Attribute[]{
- new NamespaceAttribute("http://example.com")
- }, null);
+ XMLElement elm = new XMLElement(null, "foo", null, (Attribute[])null, null, nsMap("", "http://example.com"));
assertRendering("<foo xmlns=\"http://example.com\"></foo>", elm);
}
public void testRenderPrefixedNamespaceWithDeclarationElement() {
- XMLElement elm = new XMLElement("http://example.com", "foo", "pr", new Attribute[]{
- new NamespaceAttribute("pr", "http://example.com")
- }, null);
+ XMLElement elm = new XMLElement("http://example.com", "foo", "pr", (Attribute[])null, null, nsMap("pr", "http://example.com"));
assertRendering("<pr:foo xmlns:pr=\"http://example.com\"></pr:foo>", elm);
}
@@ -126,13 +123,13 @@
public void testRenderDeclaredNamespaceElement() {
XMLElementBuilder builder = new XMLElementBuilder("foo", "http://example.com");
- builder.addNamespaceAttribute("pr", "http://example.com");
+ builder.declareNamespace("pr", "http://example.com");
assertRendering("<pr:foo xmlns:pr=\"http://example.com\"></pr:foo>", builder.build());
}
public void testRenderInnerNamespacedElement() {
XMLElementBuilder builder = new XMLElementBuilder("foo", "http://example.com");
- builder.addNamespaceAttribute("pr", "http://other.com");
+ builder.declareNamespace("pr", "http://other.com");
builder.startInnerElement("bar", "http://other.com");
assertRendering("<foo xmlns:pr=\"http://other.com\" xmlns=\"http://example.com\"><pr:bar></pr:bar></foo>", builder.build());
}
Modified: mina/sandbox/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/fragment/StackNamespaceResolverTestCase.java
URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/fragment/StackNamespaceResolverTestCase.java?rev=896258&r1=896257&r2=896258&view=diff
==============================================================================
--- mina/sandbox/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/fragment/StackNamespaceResolverTestCase.java (original)
+++ mina/sandbox/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/fragment/StackNamespaceResolverTestCase.java Tue Jan 5 22:53:32 2010
@@ -35,8 +35,8 @@
public void testPushSingleElement() {
XMLElement elm = new XMLElementBuilder("foo")
- .addNamespaceAttribute("pr1", "url1")
- .addNamespaceAttribute("pr2", "url2").build();
+ .declareNamespace("pr1", "url1")
+ .declareNamespace("pr2", "url2").build();
resolver.push(elm);
@@ -70,8 +70,8 @@
public void testPushSingleNamespacedElement() {
XMLElement elm = new XMLElementBuilder("foo", "defaulturl")
- .addNamespaceAttribute("pr1", "url1")
- .addNamespaceAttribute("pr2", "url2").build();
+ .declareNamespace("pr1", "url1")
+ .declareNamespace("pr2", "url2").build();
resolver.push(elm);
@@ -103,7 +103,7 @@
public void testPrefixedInheritance() {
XMLElement elm = new XMLElementBuilder("foo", "url1")
- .addNamespaceAttribute("pr1", "url1")
+ .declareNamespace("pr1", "url1")
.build();
XMLElement innerElm = new XMLElementBuilder("inner", "url1").build();