You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2012/11/26 11:10:43 UTC

svn commit: r1413540 - in /camel/branches/camel-2.10.x: ./ components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/ components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/ components/camel-flatpack/src/test/reso...

Author: davsclaus
Date: Mon Nov 26 10:10:42 2012
New Revision: 1413540

URL: http://svn.apache.org/viewvc?rev=1413540&view=rev
Log:
CAMEL-5813 Added support to convert from a Flatpack Dataset to an XML Document with thanks to Chris

Added:
    camel/branches/camel-2.10.x/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/XMLNoSplitRowsTest.java
      - copied unchanged from r1412434, camel/trunk/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/XMLNoSplitRowsTest.java
    camel/branches/camel-2.10.x/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/XMLSplitRowsTest.java
      - copied unchanged from r1412434, camel/trunk/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/XMLSplitRowsTest.java
    camel/branches/camel-2.10.x/components/camel-flatpack/src/test/resources/org/apache/camel/component/flatpack/XMLNoSplitRowsTest-context.xml
      - copied unchanged from r1412434, camel/trunk/components/camel-flatpack/src/test/resources/org/apache/camel/component/flatpack/XMLNoSplitRowsTest-context.xml
    camel/branches/camel-2.10.x/components/camel-flatpack/src/test/resources/org/apache/camel/component/flatpack/XMLSplitRowsTest-context.xml
      - copied unchanged from r1412434, camel/trunk/components/camel-flatpack/src/test/resources/org/apache/camel/component/flatpack/XMLSplitRowsTest-context.xml
Modified:
    camel/branches/camel-2.10.x/   (props changed)
    camel/branches/camel-2.10.x/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/FlatpackConverter.java

Propchange: camel/branches/camel-2.10.x/
------------------------------------------------------------------------------
  Merged /camel/trunk:r1412434

Propchange: camel/branches/camel-2.10.x/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: camel/branches/camel-2.10.x/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/FlatpackConverter.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.10.x/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/FlatpackConverter.java?rev=1413540&r1=1413539&r2=1413540&view=diff
==============================================================================
--- camel/branches/camel-2.10.x/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/FlatpackConverter.java (original)
+++ camel/branches/camel-2.10.x/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/FlatpackConverter.java Mon Nov 26 10:10:42 2012
@@ -21,6 +21,12 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
 import net.sf.flatpack.DataSet;
 import org.apache.camel.Converter;
 
@@ -55,26 +61,71 @@ public final class FlatpackConverter {
         return answer;
     }
 
+    @Converter
+    public static Document toDocument(DataSet dataSet) throws ParserConfigurationException {
+        Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
+
+        if (dataSet.getIndex() == -1) {
+            Element list = doc.createElement("Dataset");
+
+            dataSet.goTop();
+            while (dataSet.next()) {
+                list.appendChild(createDatasetRecord(dataSet, doc));
+            }
+
+            doc.appendChild(list);
+        } else {
+            doc.appendChild(createDatasetRecord(dataSet, doc));
+        }
+
+        return doc;
+    }
+
     /**
      * Puts the values of the dataset into the map
      */
     private static void putValues(Map<String, Object> map, DataSet dataSet) {
-        boolean header = dataSet.isRecordID(FlatpackComponent.HEADER_ID);
-        boolean trailer = dataSet.isRecordID(FlatpackComponent.TRAILER_ID);
+        String[] columns = getColumns(dataSet);
 
-        // the columns can vary depending on header, body or trailer
-        String[] columns;
-        if (header) {
-            columns = dataSet.getColumns(FlatpackComponent.HEADER_ID);
-        } else if (trailer) {
-            columns = dataSet.getColumns(FlatpackComponent.TRAILER_ID);
+        for (String column : columns) {
+            String value = dataSet.getString(column);
+            map.put(column, value);
+        }
+    }
+
+    private static Element createDatasetRecord(DataSet dataSet, Document doc) {
+        Element record;
+        if (dataSet.isRecordID(FlatpackComponent.HEADER_ID)) {
+            record = doc.createElement("DatasetHeader");
+        } else if (dataSet.isRecordID(FlatpackComponent.TRAILER_ID)) {
+            record = doc.createElement("DatasetTrailer");
         } else {
-            columns = dataSet.getColumns();
+            record = doc.createElement("DatasetRecord");
         }
 
+        String[] columns = getColumns(dataSet);
+
         for (String column : columns) {
             String value = dataSet.getString(column);
-            map.put(column, value);
+
+            Element columnElement = doc.createElement("Column");
+            columnElement.setAttribute("name", column);
+            columnElement.setTextContent(value);
+
+            record.appendChild(columnElement);
+        }
+
+        return record;
+    }
+
+    private static String[] getColumns(DataSet dataSet) {
+        // the columns can vary depending on header, body or trailer
+        if (dataSet.isRecordID(FlatpackComponent.HEADER_ID)) {
+            return dataSet.getColumns(FlatpackComponent.HEADER_ID);
+        } else if (dataSet.isRecordID(FlatpackComponent.TRAILER_ID)) {
+            return dataSet.getColumns(FlatpackComponent.TRAILER_ID);
+        } else {
+            return dataSet.getColumns();
         }
     }
 }