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(); } } }