You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by gb...@apache.org on 2009/11/12 21:26:26 UTC
svn commit: r835530 - in /incubator/pivot/trunk:
core/src/org/apache/pivot/xml/ tools/src/org/apache/pivot/tools/xml/
wtk/src/org/apache/pivot/wtk/content/
wtk/src/org/apache/pivot/wtk/skin/terra/ wtk/src/org/apache/pivot/wtkx/
Author: gbrown
Date: Thu Nov 12 20:26:26 2009
New Revision: 835530
URL: http://svn.apache.org/viewvc?rev=835530&view=rev
Log:
Add output support to XMLSerializer.
Modified:
incubator/pivot/trunk/core/src/org/apache/pivot/xml/XMLSerializer.java
incubator/pivot/trunk/tools/src/org/apache/pivot/tools/xml/XMLViewer.java
incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TreeBranch.java
incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraListViewSkin.java
incubator/pivot/trunk/wtk/src/org/apache/pivot/wtkx/WTKXSerializer.java
Modified: incubator/pivot/trunk/core/src/org/apache/pivot/xml/XMLSerializer.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/core/src/org/apache/pivot/xml/XMLSerializer.java?rev=835530&r1=835529&r2=835530&view=diff
==============================================================================
--- incubator/pivot/trunk/core/src/org/apache/pivot/xml/XMLSerializer.java (original)
+++ incubator/pivot/trunk/core/src/org/apache/pivot/xml/XMLSerializer.java Thu Nov 12 20:26:26 2009
@@ -28,9 +28,11 @@
import java.nio.charset.Charset;
import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamWriter;
import org.apache.pivot.serialization.SerializationException;
import org.apache.pivot.serialization.Serializer;
@@ -40,9 +42,6 @@
*/
public class XMLSerializer implements Serializer<Element> {
private Charset charset = null;
- private XMLInputFactory xmlInputFactory;
-
- private Element element = null;
public static final String XMLNS_ATTRIBUTE_PREFIX = "xmlns";
@@ -64,9 +63,6 @@
}
this.charset = charset;
-
- xmlInputFactory = XMLInputFactory.newInstance();
- xmlInputFactory.setProperty("javax.xml.stream.isCoalescing", false);
}
public Charset getCharset() {
@@ -74,7 +70,8 @@
}
@Override
- public Element readObject(InputStream inputStream) throws IOException, SerializationException {
+ public Element readObject(InputStream inputStream)
+ throws IOException, SerializationException {
if (inputStream == null) {
throw new IllegalArgumentException("inputStream is null.");
}
@@ -91,90 +88,99 @@
}
// Parse the XML stream
- element = null;
+ XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
+
+ Element document = null;
try {
- XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(reader);
+ XMLStreamReader xmlStreamReader = null;
- while (xmlStreamReader.hasNext()) {
- int event = xmlStreamReader.next();
+ try {
+ xmlStreamReader = xmlInputFactory.createXMLStreamReader(reader);
- switch (event) {
- case XMLStreamConstants.CHARACTERS: {
- if (!xmlStreamReader.isWhiteSpace()) {
- String text = xmlStreamReader.getText();
- element.add(new TextNode(text));
- }
+ Element current = null;
- break;
- }
+ while (xmlStreamReader.hasNext()) {
+ int event = xmlStreamReader.next();
- case XMLStreamConstants.START_ELEMENT: {
- // Create the element
- String prefix = xmlStreamReader.getPrefix();
- if (prefix != null
- && prefix.length() == 0) {
- prefix = null;
+ switch (event) {
+ case XMLStreamConstants.CHARACTERS: {
+ if (!xmlStreamReader.isWhiteSpace()) {
+ String text = xmlStreamReader.getText();
+ current.add(new TextNode(text));
+ }
+
+ break;
}
- String localName = xmlStreamReader.getLocalName();
+ case XMLStreamConstants.START_ELEMENT: {
+ // Create the element
+ String prefix = xmlStreamReader.getPrefix();
+ if (prefix != null
+ && prefix.length() == 0) {
+ prefix = null;
+ }
- Element element = new Element(prefix, localName);
+ String localName = xmlStreamReader.getLocalName();
- // Get the element's namespaces
- for (int i = 0, n = xmlStreamReader.getNamespaceCount(); i < n; i++) {
- String namespacePrefix = xmlStreamReader.getNamespacePrefix(i);
- String namespaceURI = xmlStreamReader.getNamespaceURI(i);
+ Element element = new Element(prefix, localName);
- if (namespacePrefix == null) {
- element.setDefaultNamespaceURI(namespaceURI);
- } else {
- element.getNamespaces().put(namespacePrefix, namespaceURI);
+ // Get the element's namespaces
+ for (int i = 0, n = xmlStreamReader.getNamespaceCount(); i < n; i++) {
+ String namespacePrefix = xmlStreamReader.getNamespacePrefix(i);
+ String namespaceURI = xmlStreamReader.getNamespaceURI(i);
+
+ if (namespacePrefix == null) {
+ element.setDefaultNamespaceURI(namespaceURI);
+ } else {
+ element.getNamespaces().put(namespacePrefix, namespaceURI);
+ }
}
- }
- // Get the element's attributes
- for (int i = 0, n = xmlStreamReader.getAttributeCount(); i < n; i++) {
- String attributePrefix = xmlStreamReader.getAttributePrefix(i);
- if (attributePrefix != null
- && attributePrefix.length() == 0) {
- attributePrefix = null;
+ // Get the element's attributes
+ for (int i = 0, n = xmlStreamReader.getAttributeCount(); i < n; i++) {
+ String attributePrefix = xmlStreamReader.getAttributePrefix(i);
+ if (attributePrefix != null
+ && attributePrefix.length() == 0) {
+ attributePrefix = null;
+ }
+
+ String attributeLocalName = xmlStreamReader.getAttributeLocalName(i);
+ String attributeValue = xmlStreamReader.getAttributeValue(i);
+
+ element.getAttributes().add(new Element.Attribute(attributePrefix,
+ attributeLocalName, attributeValue));
}
- String attributeLocalName = xmlStreamReader.getAttributeLocalName(i);
- String attributeValue = xmlStreamReader.getAttributeValue(i);
+ if (current == null) {
+ document = element;
+ } else {
+ current.add(element);
+ }
- element.getAttributes().add(new Element.Attribute(attributePrefix,
- attributeLocalName, attributeValue));
- }
+ current = element;
- if (this.element != null) {
- this.element.add(element);
+ break;
}
- this.element = element;
+ case XMLStreamConstants.END_ELEMENT: {
+ // Move up the stack
+ current = current.getParent();
- break;
- }
-
- case XMLStreamConstants.END_ELEMENT: {
- // Move up the stack
- Element parent = element.getParent();
- if (parent != null) {
- element = parent;
+ break;
}
-
- break;
}
}
+ } finally {
+ if (xmlStreamReader != null) {
+ xmlStreamReader.close();
+ }
}
-
- xmlStreamReader.close();
} catch (XMLStreamException exception) {
throw new SerializationException(exception);
}
- return element;
+ return document;
}
@Override
@@ -189,7 +195,7 @@
writeObject(element, writer);
}
- public void writeObject(Element element, Writer writer) {
+ public void writeObject(Element element, Writer writer) throws SerializationException {
if (writer == null) {
throw new IllegalArgumentException("writer is null.");
}
@@ -198,10 +204,96 @@
throw new IllegalArgumentException("element is null.");
}
- // TODO (note that we'll need to check for valid namespace prefixes here,
- // since we don't do it in Element)
+ XMLOutputFactory output = XMLOutputFactory.newInstance();
+
+ try {
+ XMLStreamWriter xmlStreamWriter = null;
+
+ try {
+ xmlStreamWriter = output.createXMLStreamWriter(writer);
+
+ xmlStreamWriter.writeStartDocument();
+ writeElement(element, xmlStreamWriter);
+ xmlStreamWriter.writeEndDocument();
+ } finally {
+ if (xmlStreamWriter != null) {
+ xmlStreamWriter.close();
+ }
+ }
+ } catch (XMLStreamException exception) {
+ throw new SerializationException(exception);
+ }
+ }
+
+ private void writeElement(Element element, XMLStreamWriter xmlStreamWriter)
+ throws XMLStreamException, SerializationException {
+ String namespacePrefix = element.getNamespacePrefix();
+ String localName = element.getLocalName();
+
+ if (namespacePrefix == null) {
+ if (element.getLength() == 0) {
+ xmlStreamWriter.writeEmptyElement(localName);
+ } else {
+ xmlStreamWriter.writeStartElement(localName);
+ }
+ } else {
+ String namespaceURI = element.getNamespaceURI(namespacePrefix);
+
+ if (element.getLength() == 0) {
+ xmlStreamWriter.writeEmptyElement(namespacePrefix, localName, namespaceURI);
+ } else {
+ xmlStreamWriter.writeStartElement(namespacePrefix, localName, namespaceURI);
+ }
+ }
+
+ // Write out the declared namespaces
+ String defaultNamespaceURI = element.getDefaultNamespaceURI();
+ if (defaultNamespaceURI != null) {
+ xmlStreamWriter.writeDefaultNamespace(defaultNamespaceURI);
+ }
+
+ Element.NamespaceDictionary namespaces = element.getNamespaces();
+ for (String declaredNamespacePrefix : namespaces) {
+ String declaredNamespaceURI = namespaces.get(declaredNamespacePrefix);
+ xmlStreamWriter.writeNamespace(declaredNamespacePrefix, declaredNamespaceURI);
+ }
+
+ // Write out the attributes
+ for (Element.Attribute attribute : element.getAttributes()) {
+ String attributeNamespacePrefix = attribute.getNamespacePrefix();
+ String attributeLocalName = attribute.getLocalName();
+ String attributeValue = attribute.getValue();
+
+ if (attributeNamespacePrefix == null) {
+ xmlStreamWriter.writeAttribute(attributeLocalName, attributeValue);
+ } else {
+ String attributeNamespaceURI = element.getNamespaceURI(attributeNamespacePrefix);
+
+ xmlStreamWriter.writeAttribute(attributeNamespacePrefix, attributeNamespaceURI,
+ attributeLocalName, attributeValue);
+ }
+ }
+
+ // Write out the child nodes
+ for (Node node : element) {
+ if (node instanceof Element) {
+ writeElement((Element)node, xmlStreamWriter);
+ } else if (node instanceof TextNode) {
+ writeTextNode((TextNode)node, xmlStreamWriter);
+ } else {
+ throw new SerializationException("Unsupported node type: "
+ + node.getClass().getName());
+ }
+ }
+
+ if (element.getLength() > 0) {
+ xmlStreamWriter.writeEndElement();
+ }
+ }
- throw new UnsupportedOperationException();
+ private void writeTextNode(TextNode textNode, XMLStreamWriter xmlStreamWriter)
+ throws XMLStreamException {
+ xmlStreamWriter.writeCharacters(textNode.getText());
}
@Override
Modified: incubator/pivot/trunk/tools/src/org/apache/pivot/tools/xml/XMLViewer.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/tools/src/org/apache/pivot/tools/xml/XMLViewer.java?rev=835530&r1=835529&r2=835530&view=diff
==============================================================================
--- incubator/pivot/trunk/tools/src/org/apache/pivot/tools/xml/XMLViewer.java (original)
+++ incubator/pivot/trunk/tools/src/org/apache/pivot/tools/xml/XMLViewer.java Thu Nov 12 20:26:26 2009
@@ -213,6 +213,14 @@
Sequence.Tree.Path path = new Sequence.Tree.Path(0);
treeView.expandBranch(path);
treeView.setSelectedPath(path);
+
+ XMLSerializer xmlSerializer = new XMLSerializer();
+
+ try {
+ xmlSerializer.writeObject(document, System.out);
+ } catch (Exception exception) {
+ System.err.println("\n" + exception);
+ }
}
public static void main(String[] args) {
Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TreeBranch.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TreeBranch.java?rev=835530&r1=835529&r2=835530&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TreeBranch.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/content/TreeBranch.java Thu Nov 12 20:26:26 2009
@@ -69,9 +69,8 @@
@Override
public int add(TreeNode treeNode) {
- int index = getLength();
- insert(treeNode, index);
-
+ int index = treeNodes.add(treeNode);
+ listListeners.itemInserted(this, index);
return index;
}
Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraListViewSkin.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraListViewSkin.java?rev=835530&r1=835529&r2=835530&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraListViewSkin.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraListViewSkin.java Thu Nov 12 20:26:26 2009
@@ -136,14 +136,14 @@
ListView listView = (ListView)getComponent();
List<Object> listData = (List<Object>)listView.getListData();
ListView.ItemRenderer itemRenderer = listView.getItemRenderer();
-
+
if (variableItemHeight) {
int clientWidth = width;
if (listView.getCheckmarksEnabled()) {
clientWidth = Math.max(clientWidth - (CHECKBOX.getWidth() + (checkboxPadding.left
+ checkboxPadding.right)), 0);
}
-
+
int index = 0;
for (Object item : listData) {
itemRenderer.render(item, index++, listView, false, false, false, false);
@@ -208,7 +208,7 @@
graphics.setPaint(backgroundColor);
graphics.fillRect(0, 0, width, height);
}
-
+
if (variableItemHeight) {
paintVariableItemHeight(graphics);
return;
@@ -298,7 +298,7 @@
// Ensure that we only paint items that are visible
Rectangle clipBounds = graphics.getClipBounds();
-
+
int checkboxHeight = 0;
if (listView.getCheckmarksEnabled()) {
checkboxHeight = CHECKBOX.getHeight() + (checkboxPadding.top
@@ -321,7 +321,7 @@
int itemWidth = width;
int itemX = 0;
-
+
boolean checked = false;
if (listView.getCheckmarksEnabled()) {
checked = listView.isItemChecked(itemIndex);
@@ -329,13 +329,13 @@
+ checkboxPadding.right);
itemWidth -= itemX;
}
-
+
itemRenderer.render(item, itemIndex, listView, selected, checked, highlighted, disabled);
int itemHeight = itemRenderer.getPreferredHeight(itemWidth);
if (listView.getCheckmarksEnabled()) {
itemHeight = Math.max(itemHeight, checkboxHeight);
}
-
+
boolean paintItem = true;
if (clipBounds != null) {
paintItem = (itemY + itemHeight) >= clipBounds.y && itemY < (clipBounds.y + clipBounds.height);
@@ -376,7 +376,7 @@
itemRenderer.paint(rendererGraphics);
rendererGraphics.dispose();
}
-
+
if (computeCache) {
variableItemHeightYCache.add(itemY);
variableItemLastHeight = itemHeight;
@@ -384,8 +384,8 @@
itemY += itemHeight;
}
}
-
-
+
+
// List view skin methods
@Override
@SuppressWarnings("unchecked")
@@ -401,7 +401,7 @@
index = ArrayList.binarySearch(variableItemHeightYCache, y);
if (index<0) {
index = -index-2;
-
+
}
} else {
index = (y / getFixedItemHeight());
@@ -425,7 +425,6 @@
} else {
itemHeight = variableItemLastHeight;
}
- return new Bounds(0, itemY, getWidth(), itemHeight);
} else {
itemHeight = getFixedItemHeight();
itemY = index * itemHeight;
@@ -737,7 +736,7 @@
repaintComponent();
}
-
+
@Override
public boolean mouseMove(Component component, int x, int y) {
boolean consumed = super.mouseMove(component, x, y);
@@ -789,7 +788,7 @@
int itemIndex = getItemAt(y);
- if (itemIndex != -1
+ if (itemIndex != -1
&& itemIndex < listData.getLength()
&& !listView.isItemDisabled(itemIndex)) {
int itemY = getItemBounds(itemIndex).y;
Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtkx/WTKXSerializer.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtkx/WTKXSerializer.java?rev=835530&r1=835529&r2=835530&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtkx/WTKXSerializer.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtkx/WTKXSerializer.java Thu Nov 12 20:26:26 2009
@@ -322,7 +322,6 @@
this.namedSerializers = namedSerializers;
xmlInputFactory = XMLInputFactory.newInstance();
- xmlInputFactory.setProperty("javax.xml.stream.isCoalescing", false);
scriptEngineManager = new javax.script.ScriptEngineManager();
scriptEngineManager.setBindings(new NamedObjectBindings());
@@ -407,35 +406,41 @@
try {
try {
- XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(inputStream);
+ XMLStreamReader xmlStreamReader = null;
- while (xmlStreamReader.hasNext()) {
- int event = xmlStreamReader.next();
+ try {
+ xmlStreamReader = xmlInputFactory.createXMLStreamReader(inputStream);
- switch (event) {
- case XMLStreamConstants.PROCESSING_INSTRUCTION: {
- processProcessingInstruction(xmlStreamReader);
- break;
- }
+ while (xmlStreamReader.hasNext()) {
+ int event = xmlStreamReader.next();
- case XMLStreamConstants.CHARACTERS: {
- processCharacters(xmlStreamReader);
- break;
- }
+ switch (event) {
+ case XMLStreamConstants.PROCESSING_INSTRUCTION: {
+ processProcessingInstruction(xmlStreamReader);
+ break;
+ }
- case XMLStreamConstants.START_ELEMENT: {
- processStartElement(xmlStreamReader);
- break;
- }
+ case XMLStreamConstants.CHARACTERS: {
+ processCharacters(xmlStreamReader);
+ break;
+ }
- case XMLStreamConstants.END_ELEMENT: {
- processEndElement(xmlStreamReader);
- break;
+ case XMLStreamConstants.START_ELEMENT: {
+ processStartElement(xmlStreamReader);
+ break;
+ }
+
+ case XMLStreamConstants.END_ELEMENT: {
+ processEndElement(xmlStreamReader);
+ break;
+ }
}
}
+ } finally {
+ if (xmlStreamReader != null) {
+ xmlStreamReader.close();
+ }
}
-
- xmlStreamReader.close();
} catch (XMLStreamException exception) {
throw new SerializationException(exception);
}