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 2008/08/17 16:28:37 UTC

svn commit: r686614 - in /activemq/camel/trunk/components/camel-flatpack/src: main/java/org/apache/camel/component/flatpack/ test/data/headerandtrailer/ test/java/org/apache/camel/component/flatpack/ test/resources/ test/resources/org/apache/camel/comp...

Author: davsclaus
Date: Sun Aug 17 07:28:36 2008
New Revision: 686614

URL: http://svn.apache.org/viewvc?rev=686614&view=rev
Log:
CAMEL-731: Support for header and trailer rows in camel-flatpack

Added:
    activemq/camel/trunk/components/camel-flatpack/src/test/data/headerandtrailer/
    activemq/camel/trunk/components/camel-flatpack/src/test/data/headerandtrailer/PEOPLE-HeaderAndTrailer.txt   (with props)
    activemq/camel/trunk/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/HeaderAndTrailerTest.java   (contents, props changed)
      - copied, changed from r686454, activemq/camel/trunk/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/FixedLengthTest.java
    activemq/camel/trunk/components/camel-flatpack/src/test/resources/PEOPLE-HeaderAndTrailer.pzmap.xml   (contents, props changed)
      - copied, changed from r686454, activemq/camel/trunk/components/camel-flatpack/src/test/resources/INVENTORY-Delimited.pzmap.xml
    activemq/camel/trunk/components/camel-flatpack/src/test/resources/org/apache/camel/component/flatpack/HeaderAndTrailerTest-context.xml   (contents, props changed)
      - copied, changed from r686454, activemq/camel/trunk/components/camel-flatpack/src/test/resources/org/apache/camel/component/flatpack/FixedLengthTest-context.xml
Modified:
    activemq/camel/trunk/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/DataSetList.java
    activemq/camel/trunk/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/FlatpackComponent.java
    activemq/camel/trunk/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/FlatpackConverter.java
    activemq/camel/trunk/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/FlatpackDataFormat.java

Modified: activemq/camel/trunk/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/DataSetList.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/DataSetList.java?rev=686614&r1=686613&r2=686614&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/DataSetList.java (original)
+++ activemq/camel/trunk/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/DataSetList.java Sun Aug 17 07:28:36 2008
@@ -32,38 +32,26 @@
     }
 
     public Object get(int index) {
-        Iterator iter = iterator();
-        for (int i = 0; iter.hasNext(); i++) {
-            Object value = iter.next();
-            if (i == index) {
-                return value;
-            }
-        }
-        return null;
+        dataSet.absolute(index);
+        return FlatpackConverter.toMap(dataSet);
     }
 
     public int size() {
-        int answer = 0;
-        for (Iterator iter = iterator(); iter.hasNext();) {
-            iter.next();
-            answer++;
-        }
-        return answer;
+        return dataSet.getRowCount();
     }
 
     @Override
     public Iterator iterator() {
         dataSet.goTop();
         return new Iterator() {
+
             public boolean hasNext() {
                 return dataSet.next();
             }
 
             public Object next() {
-                // TODO because of a limitation in split()
-                // we need to create an object for the current position
-                // otherwise strangeness occurs when the same object is used to represent
-                // each row
+                // because of a limitation in split() we need to create an object for the current position
+                // otherwise strangeness occurs when the same object is used to represent each row
                 return FlatpackConverter.toMap(dataSet);
             }
 
@@ -71,6 +59,6 @@
                 throw new UnsupportedOperationException("remove() not supported");
             }
         };
-
     }
+    
 }

Modified: activemq/camel/trunk/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/FlatpackComponent.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/FlatpackComponent.java?rev=686614&r1=686613&r2=686614&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/FlatpackComponent.java (original)
+++ activemq/camel/trunk/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/FlatpackComponent.java Sun Aug 17 07:28:36 2008
@@ -32,6 +32,9 @@
  */
 public class FlatpackComponent extends ResourceBasedComponent {
 
+    public static final String HEADER_ID = "header";
+    public static final String TRAILER_ID = "trailer";
+
     protected Endpoint<Exchange> createEndpoint(String uri, String remaining, Map parameters) throws Exception {
         boolean fixed = false;
         if (remaining.startsWith("fixed:")) {

Modified: activemq/camel/trunk/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/FlatpackConverter.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/FlatpackConverter.java?rev=686614&r1=686613&r2=686614&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/FlatpackConverter.java (original)
+++ activemq/camel/trunk/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/FlatpackConverter.java Sun Aug 17 07:28:36 2008
@@ -27,9 +27,11 @@
  */
 @Converter
 public final class FlatpackConverter {
+
     private FlatpackConverter() {
         // helper class
     }
+
     @Converter
     public static Map toMap(DataSet dataSet) {
         Map<String, Object> map = new HashMap<String, Object>();
@@ -39,15 +41,25 @@
 
     /**
      * Puts the values of the dataset into the map
-     * @param map
-     * @param dataSet
      */
     public static void putValues(Map<String, Object> map, DataSet dataSet) {
-        String[] columns = dataSet.getColumns();
+        boolean header = dataSet.isRecordID(FlatpackComponent.HEADER_ID);
+        boolean trailer = dataSet.isRecordID(FlatpackComponent.TRAILER_ID);
+
+        // 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);
+        } else {
+            columns = dataSet.getColumns();
+        }
+
         for (String column : columns) {
-            // TODO deal with non-string types?
             String value = dataSet.getString(column);
             map.put(column, value);
         }
     }
+
 }

Modified: activemq/camel/trunk/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/FlatpackDataFormat.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/FlatpackDataFormat.java?rev=686614&r1=686613&r2=686614&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/FlatpackDataFormat.java (original)
+++ activemq/camel/trunk/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/FlatpackDataFormat.java Sun Aug 17 07:28:36 2008
@@ -90,7 +90,6 @@
         this.textQualifier = textQualifier;
     }
 
-
     public Resource getDefinition() {
         return definition;
     }

Added: activemq/camel/trunk/components/camel-flatpack/src/test/data/headerandtrailer/PEOPLE-HeaderAndTrailer.txt
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-flatpack/src/test/data/headerandtrailer/PEOPLE-HeaderAndTrailer.txt?rev=686614&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-flatpack/src/test/data/headerandtrailer/PEOPLE-HeaderAndTrailer.txt (added)
+++ activemq/camel/trunk/components/camel-flatpack/src/test/data/headerandtrailer/PEOPLE-HeaderAndTrailer.txt Sun Aug 17 07:28:36 2008
@@ -0,0 +1,6 @@
+HBT20080817
+JOHN                               DOE                                1234 CIRCLE CT                                                                                      ELYRIA                                                                                              OH44035
+JIMMY                              SMITH                              180 SOME ST                                                                                         AVON                                                                                                OH44011
+JANE                               DOE                                111 MILKY WY                                                                                        AMHERST                                                                                             OH44001
+FRED                               FLINTSTONE                         123 ROCKY WY                                                                                        BEDROCK                                                                                             AZ12345
+FBTSUCCESS

Propchange: activemq/camel/trunk/components/camel-flatpack/src/test/data/headerandtrailer/PEOPLE-HeaderAndTrailer.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/camel/trunk/components/camel-flatpack/src/test/data/headerandtrailer/PEOPLE-HeaderAndTrailer.txt
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Copied: activemq/camel/trunk/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/HeaderAndTrailerTest.java (from r686454, activemq/camel/trunk/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/FixedLengthTest.java)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/HeaderAndTrailerTest.java?p2=activemq/camel/trunk/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/HeaderAndTrailerTest.java&p1=activemq/camel/trunk/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/FixedLengthTest.java&r1=686454&r2=686614&rev=686614&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/FixedLengthTest.java (original)
+++ activemq/camel/trunk/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/HeaderAndTrailerTest.java Sun Aug 17 07:28:36 2008
@@ -33,21 +33,28 @@
  * @version $Revision$
  */
 @ContextConfiguration
-public class FixedLengthTest extends AbstractJUnit38SpringContextTests {
-    private static final transient Log LOG = LogFactory.getLog(FixedLengthTest.class);
+public class HeaderAndTrailerTest extends AbstractJUnit38SpringContextTests {
+    private static final transient Log LOG = LogFactory.getLog(HeaderAndTrailerTest.class);
 
     @EndpointInject(uri = "mock:results")
     protected MockEndpoint results;
 
     protected String[] expectedFirstName = {"JOHN", "JIMMY", "JANE", "FRED"};
 
-    public void testCamel() throws Exception {
-        results.expectedMessageCount(4);
+    public void testHeaderAndTrailer() throws Exception {
+        results.expectedMessageCount(6);
         results.assertIsSatisfied();
 
         int counter = 0;
         List<Exchange> list = results.getReceivedExchanges();
-        for (Exchange exchange : list) {
+
+        // assert header
+        Map header = list.get(0).getIn().getBody(Map.class);
+        assertEquals("HBT", header.get("INDICATOR"));
+        assertEquals("20080817", header.get("DATE"));
+
+        // assert body
+        for (Exchange exchange : list.subList(1, 5)) {
             Message in = exchange.getIn();
             Map body = in.getBody(Map.class);
             assertNotNull("Should have found body as a Map but was: " + ObjectHelper.className(in.getBody()), body);
@@ -56,6 +63,10 @@
             counter++;
         }
 
+        // assert trailer
+        Map trailer = list.get(5).getIn().getBody(Map.class);
+        assertEquals("FBT", trailer.get("INDICATOR"));
+        assertEquals("SUCCESS", trailer.get("STATUS"));
     }
 
-}
+}
\ No newline at end of file

Propchange: activemq/camel/trunk/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/HeaderAndTrailerTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/camel/trunk/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/HeaderAndTrailerTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: activemq/camel/trunk/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/HeaderAndTrailerTest.java
------------------------------------------------------------------------------
    svn:mergeinfo = 

Copied: activemq/camel/trunk/components/camel-flatpack/src/test/resources/PEOPLE-HeaderAndTrailer.pzmap.xml (from r686454, activemq/camel/trunk/components/camel-flatpack/src/test/resources/INVENTORY-Delimited.pzmap.xml)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-flatpack/src/test/resources/PEOPLE-HeaderAndTrailer.pzmap.xml?p2=activemq/camel/trunk/components/camel-flatpack/src/test/resources/PEOPLE-HeaderAndTrailer.pzmap.xml&p1=activemq/camel/trunk/components/camel-flatpack/src/test/resources/INVENTORY-Delimited.pzmap.xml&r1=686454&r2=686614&rev=686614&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-flatpack/src/test/resources/INVENTORY-Delimited.pzmap.xml (original)
+++ activemq/camel/trunk/components/camel-flatpack/src/test/resources/PEOPLE-HeaderAndTrailer.pzmap.xml Sun Aug 17 07:28:36 2008
@@ -1,9 +1,22 @@
 <?xml version='1.0'?>
-<!DOCTYPE PZMAP SYSTEM
-	"flatpack.dtd" >
+<!DOCTYPE PZMAP SYSTEM "flatpack.dtd" >
+
 <PZMAP>
-	<COLUMN name="ITEM_DESC" />
-	<COLUMN name="IN_STOCK" />
-	<COLUMN name="PRICE" />
-	<COLUMN name="LAST_RECV_DT" />
-</PZMAP> 
+    <RECORD id="header" startPosition="1" endPosition="3" indicator="HBT">
+        <COLUMN name="INDICATOR" length="3"/>
+        <COLUMN name="DATE" length="8"/>
+    </RECORD>
+    
+    <COLUMN name="FIRSTNAME" length="35" />
+    <COLUMN name="LASTNAME" length="35" />
+    <COLUMN name="ADDRESS" length="100" />
+    <COLUMN name="CITY" length="100" />
+    <COLUMN name="STATE" length="2" />
+    <COLUMN name="ZIP" length="5" />
+
+    <RECORD id="trailer" startPosition="1" endPosition="3" indicator="FBT">
+        <COLUMN name="INDICATOR" length="3"/>
+        <COLUMN name="STATUS" length="7"/>
+    </RECORD>
+
+</PZMAP>
\ No newline at end of file

Propchange: activemq/camel/trunk/components/camel-flatpack/src/test/resources/PEOPLE-HeaderAndTrailer.pzmap.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/camel/trunk/components/camel-flatpack/src/test/resources/PEOPLE-HeaderAndTrailer.pzmap.xml
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: activemq/camel/trunk/components/camel-flatpack/src/test/resources/PEOPLE-HeaderAndTrailer.pzmap.xml
------------------------------------------------------------------------------
    svn:mergeinfo = 

Propchange: activemq/camel/trunk/components/camel-flatpack/src/test/resources/PEOPLE-HeaderAndTrailer.pzmap.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Copied: activemq/camel/trunk/components/camel-flatpack/src/test/resources/org/apache/camel/component/flatpack/HeaderAndTrailerTest-context.xml (from r686454, activemq/camel/trunk/components/camel-flatpack/src/test/resources/org/apache/camel/component/flatpack/FixedLengthTest-context.xml)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-flatpack/src/test/resources/org/apache/camel/component/flatpack/HeaderAndTrailerTest-context.xml?p2=activemq/camel/trunk/components/camel-flatpack/src/test/resources/org/apache/camel/component/flatpack/HeaderAndTrailerTest-context.xml&p1=activemq/camel/trunk/components/camel-flatpack/src/test/resources/org/apache/camel/component/flatpack/FixedLengthTest-context.xml&r1=686454&r2=686614&rev=686614&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-flatpack/src/test/resources/org/apache/camel/component/flatpack/FixedLengthTest-context.xml (original)
+++ activemq/camel/trunk/components/camel-flatpack/src/test/resources/org/apache/camel/component/flatpack/HeaderAndTrailerTest-context.xml Sun Aug 17 07:28:36 2008
@@ -25,12 +25,12 @@
   <!-- START SNIPPET: example -->
   <camelContext xmlns="http://activemq.apache.org/camel/schema/spring">
     <route>
-      <from uri="file://src/test/data/fixed?noop=true"/>
-      <to uri="flatpack:fixed:PEOPLE-FixedLength.pzmap.xml"/>
+      <from uri="file://src/test/data/headerandtrailer?noop=true"/>
+      <to uri="flatpack:fixed:PEOPLE-HeaderAndTrailer.pzmap.xml"/>
     </route>
 
     <route>
-      <from uri="flatpack:fixed:PEOPLE-FixedLength.pzmap.xml"/>
+      <from uri="flatpack:fixed:PEOPLE-HeaderAndTrailer.pzmap.xml"/>
       <convertBodyTo type="java.util.Map"/>
       <to uri="mock:results"/>
     </route>

Propchange: activemq/camel/trunk/components/camel-flatpack/src/test/resources/org/apache/camel/component/flatpack/HeaderAndTrailerTest-context.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/camel/trunk/components/camel-flatpack/src/test/resources/org/apache/camel/component/flatpack/HeaderAndTrailerTest-context.xml
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: activemq/camel/trunk/components/camel-flatpack/src/test/resources/org/apache/camel/component/flatpack/HeaderAndTrailerTest-context.xml
------------------------------------------------------------------------------
    svn:mergeinfo = 

Propchange: activemq/camel/trunk/components/camel-flatpack/src/test/resources/org/apache/camel/component/flatpack/HeaderAndTrailerTest-context.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml