summaryrefslogtreecommitdiffstats
path: root/sandbox/jboynes/sdoproxy/src/main/java/org/apache/tuscany/sdo/helper/DOMHelperImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'sandbox/jboynes/sdoproxy/src/main/java/org/apache/tuscany/sdo/helper/DOMHelperImpl.java')
-rw-r--r--sandbox/jboynes/sdoproxy/src/main/java/org/apache/tuscany/sdo/helper/DOMHelperImpl.java105
1 files changed, 105 insertions, 0 deletions
diff --git a/sandbox/jboynes/sdoproxy/src/main/java/org/apache/tuscany/sdo/helper/DOMHelperImpl.java b/sandbox/jboynes/sdoproxy/src/main/java/org/apache/tuscany/sdo/helper/DOMHelperImpl.java
new file mode 100644
index 0000000000..7480151202
--- /dev/null
+++ b/sandbox/jboynes/sdoproxy/src/main/java/org/apache/tuscany/sdo/helper/DOMHelperImpl.java
@@ -0,0 +1,105 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tuscany.sdo.helper;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+
+import javax.xml.namespace.QName;
+
+import org.osoa.sdo.DataObject;
+import org.osoa.sdo.Property;
+import org.osoa.sdo.Type;
+import org.osoa.sdo.helper.DataFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class DOMHelperImpl {
+ private final DataFactory dataFactory;
+
+ public DOMHelperImpl(DataFactory dataFactory) {
+ this.dataFactory = dataFactory;
+ }
+
+ public DataObject<?> load(Document doc) {
+ Element rootElement = doc.getDocumentElement();
+ QName name = new QName(rootElement.getNamespaceURI(), rootElement.getLocalName());
+ DataObject<?> rootObject = dataFactory.create(name);
+ for (Node node = rootElement.getFirstChild() ; node != null; node = node.getNextSibling()) {
+ if (node.getNodeType() != Node.ELEMENT_NODE) {
+ continue;
+ }
+ String propName = node.getLocalName();
+ String value = node.getTextContent();
+ Property<?> prop = rootObject.getType().getProperty(propName);
+ rootObject.setString(prop.getIndex(), value);
+ }
+ return rootObject;
+ }
+
+ public void save(DataObject<?> dataObject, Document doc) {
+ Type<?> t = dataObject.getType();
+ Element element = doc.createElementNS(t.getName().getNamespaceURI(), t.getName().getLocalPart());
+ int i = 0;
+ for (Property<?> property : dataObject.getType().getProperties()) {
+ String value = dataObject.getString(i++);
+ if (value != null) {
+ Element propElement = doc.createElementNS(null, property.getName());
+ if (property.getType().isDataType()) {
+ propElement.appendChild(doc.createTextNode(value));
+ }
+ element.appendChild(propElement);
+ }
+ }
+ doc.appendChild(element);
+ }
+
+ public void writeTo(OutputStream os, Document doc) throws IOException {
+ PrintWriter writer = new PrintWriter(os);
+ writeTo(writer, doc.getDocumentElement());
+ writer.flush();
+ }
+
+ private static void writeTo(PrintWriter writer, Element e) throws IOException {
+ writer.append('<');
+ writer.append(e.getLocalName());
+ if (e.hasChildNodes()) {
+ writer.append('>');
+ for (Node node = e.getFirstChild(); node != null; node = node.getNextSibling()) {
+ switch (node.getNodeType()) {
+ case Node.TEXT_NODE:
+ writer.append(node.getTextContent());
+ break;
+ case Node.ELEMENT_NODE:
+ writeTo(writer, (Element) node);
+ break;
+ }
+ }
+ writer.append('<');
+ writer.append('/');
+ writer.append(e.getLocalName());
+ writer.append('>');
+ } else {
+ writer.append("/>");
+ }
+ }
+}