|
From: <be...@us...> - 2007-09-05 19:09:26
|
Revision: 346
http://flatpack.svn.sourceforge.net/flatpack/?rev=346&view=rev
Author: benoitx
Date: 2007-09-05 12:09:25 -0700 (Wed, 05 Sep 2007)
Log Message:
-----------
The writer package will let you EXPORT a DataSet in a fixed length or Delimited (csv, etc) format. Thanks to Dirk and Holger from MuleSource.
Modified Paths:
--------------
trunk/flatpack/project.xml
trunk/flatpack/qalab.xml
trunk/flatpack/src/main/java/net/sf/flatpack/DefaultDataSet.java
trunk/flatpack/src/main/java/net/sf/flatpack/util/FPStringUtils.java
trunk/flatpack/src/test/java/net/sf/flatpack/DataSetFunctionalityTest.java
Added Paths:
-----------
trunk/flatpack/src/main/java/net/sf/flatpack/writer/
trunk/flatpack/src/main/java/net/sf/flatpack/writer/AbstractWriter.java
trunk/flatpack/src/main/java/net/sf/flatpack/writer/AbstractWriterFactory.java
trunk/flatpack/src/main/java/net/sf/flatpack/writer/DelimiterWriter.java
trunk/flatpack/src/main/java/net/sf/flatpack/writer/DelimiterWriterFactory.java
trunk/flatpack/src/main/java/net/sf/flatpack/writer/FixedLengthWriter.java
trunk/flatpack/src/main/java/net/sf/flatpack/writer/FixedWriterFactory.java
trunk/flatpack/src/main/java/net/sf/flatpack/writer/Writer.java
trunk/flatpack/src/main/java/net/sf/flatpack/writer/WriterFactory.java
trunk/flatpack/src/main/java/net/sf/flatpack/writer/package.html
trunk/flatpack/src/test/java/net/sf/flatpack/writer/
trunk/flatpack/src/test/java/net/sf/flatpack/writer/AllTests.java
trunk/flatpack/src/test/java/net/sf/flatpack/writer/DelimiterWriterTestCase.java
trunk/flatpack/src/test/java/net/sf/flatpack/writer/FixedLengthWriterTestCase.java
trunk/flatpack/src/test/java/net/sf/flatpack/writer/PZWriterTestCase.java
trunk/flatpack/src/test/java/net/sf/flatpack/writer/RoundTripTestCase.java
trunk/flatpack/src/test/resources/
trunk/flatpack/src/test/resources/BrokenMapping.pzmap.xml
trunk/flatpack/src/test/resources/DelimitedWithHeader.pzmap.xml
trunk/flatpack/src/test/resources/FixedLength.pzmap.xml
trunk/flatpack/src/test/resources/log4j.properties
Modified: trunk/flatpack/project.xml
===================================================================
--- trunk/flatpack/project.xml 2007-09-05 17:18:20 UTC (rev 345)
+++ trunk/flatpack/project.xml 2007-09-05 19:09:25 UTC (rev 346)
@@ -77,11 +77,20 @@
<unitTestSourceDirectory>src/test/java</unitTestSourceDirectory>
<unitTest>
<includes>
- <include>**/*Test.java</include>
+ <include>**/*Test?.java</include>
</includes>
<excludes>
<exclude>**/Abstract*.java</exclude>
</excludes>
+ <resources>
+ <resource>
+ <directory>src/test/resources</directory>
+ <includes>
+ <include>**/*.xml</include>
+ </includes>
+ <filtering>false</filtering>
+ </resource>
+ </resources>
</unitTest>
<resources>
<resource>
Modified: trunk/flatpack/qalab.xml
===================================================================
--- trunk/flatpack/qalab.xml 2007-09-05 17:18:20 UTC (rev 345)
+++ trunk/flatpack/qalab.xml 2007-09-05 19:09:25 UTC (rev 346)
@@ -277,6 +277,22 @@
project="default" statvalue="29" type="cobertura-line"/>
<summaryresult date="2007-08-30" filecount="37" module="default"
project="default" statvalue="32" type="cobertura-branch"/>
+ <summaryresult date="2007-09-04" filecount="53" module="default"
+ project="default" statvalue="47" type="checkstyle"/>
+ <summaryresult date="2007-09-04" filecount="6" module="default"
+ project="default" statvalue="118" type="simian"/>
+ <summaryresult date="2007-09-04" filecount="45" module="default"
+ project="default" statvalue="31" type="cobertura-line"/>
+ <summaryresult date="2007-09-04" filecount="45" module="default"
+ project="default" statvalue="23" type="cobertura-branch"/>
+ <summaryresult date="2007-09-05" filecount="53" module="default"
+ project="default" statvalue="13" type="checkstyle"/>
+ <summaryresult date="2007-09-05" filecount="6" module="default"
+ project="default" statvalue="118" type="simian"/>
+ <summaryresult date="2007-09-05" filecount="45" module="default"
+ project="default" statvalue="31" type="cobertura-line"/>
+ <summaryresult date="2007-09-05" filecount="45" module="default"
+ project="default" statvalue="23" type="cobertura-branch"/>
</summary>
<file id="default-default-com_pz_reader_ordering_package.html"
module="default" path="com/pz/reader/ordering/package.html" project="default">
@@ -611,6 +627,8 @@
<result date="2007-08-21" statvalue="100" type="cobertura-branch"/>
<result date="2007-08-30" statvalue="45" type="cobertura-line"/>
<result date="2007-08-30" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-04" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-05" statvalue="100" type="cobertura-branch"/>
</file>
<file id="default-default-net_sf_flatpack_DataSet.java"
module="default" path="net/sf/flatpack/DataSet.java" project="default">
@@ -674,6 +692,10 @@
<result date="2007-08-21" statvalue="100" type="cobertura-branch"/>
<result date="2007-08-30" statvalue="100" type="cobertura-line"/>
<result date="2007-08-30" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-04" statvalue="100" type="cobertura-line"/>
+ <result date="2007-09-04" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-05" statvalue="100" type="cobertura-line"/>
+ <result date="2007-09-05" statvalue="100" type="cobertura-branch"/>
</file>
<file id="default-default-net_sf_flatpack_LargeDataSet.java"
module="default" path="net/sf/flatpack/LargeDataSet.java" project="default">
@@ -768,6 +790,12 @@
<result date="2007-08-30" statvalue="6" type="checkstyle"/>
<result date="2007-08-30" statvalue="45" type="cobertura-line"/>
<result date="2007-08-30" statvalue="50" type="cobertura-branch"/>
+ <result date="2007-09-04" statvalue="6" type="checkstyle"/>
+ <result date="2007-09-04" statvalue="28" type="cobertura-line"/>
+ <result date="2007-09-04" statvalue="25" type="cobertura-branch"/>
+ <result date="2007-09-05" statvalue="6" type="checkstyle"/>
+ <result date="2007-09-05" statvalue="28" type="cobertura-line"/>
+ <result date="2007-09-05" statvalue="25" type="cobertura-branch"/>
</file>
<file id="default-default-net_sf_flatpack_xml_PZMapParser.java"
module="default" path="net/sf/flatpack/xml/PZMapParser.java" project="default">
@@ -802,6 +830,10 @@
<result date="2006-11-02" statvalue="2" type="findbugs"/>
<result date="2006-11-22" statvalue="2" type="findbugs"/>
<result date="2006-12-15" statvalue="2" type="findbugs"/>
+ <result date="2007-09-04" statvalue="71" type="cobertura-line"/>
+ <result date="2007-09-04" statvalue="50" type="cobertura-branch"/>
+ <result date="2007-09-05" statvalue="71" type="cobertura-line"/>
+ <result date="2007-09-05" statvalue="50" type="cobertura-branch"/>
</file>
<file id="default-default-net_sf_flatpack_structure_Row.java"
module="default" path="net/sf/flatpack/structure/Row.java" project="default">
@@ -830,6 +862,8 @@
<result date="2007-08-20" statvalue="54" type="cobertura-line"/>
<result date="2007-08-21" statvalue="54" type="cobertura-line"/>
<result date="2007-08-30" statvalue="54" type="cobertura-line"/>
+ <result date="2007-09-04" statvalue="45" type="cobertura-line"/>
+ <result date="2007-09-05" statvalue="45" type="cobertura-line"/>
</file>
<file
id="default-default-net_sf_flatpack_structure_ColumnMetaData.java"
@@ -869,6 +903,10 @@
<result date="2007-08-21" statvalue="100" type="cobertura-branch"/>
<result date="2007-08-30" statvalue="54" type="cobertura-line"/>
<result date="2007-08-30" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-04" statvalue="54" type="cobertura-line"/>
+ <result date="2007-09-04" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-05" statvalue="54" type="cobertura-line"/>
+ <result date="2007-09-05" statvalue="100" type="cobertura-branch"/>
</file>
<file id="default-default-net_sf_flatpack_Version.java"
module="default" path="net/sf/flatpack/Version.java" project="default">
@@ -889,6 +927,8 @@
<result date="2007-08-20" statvalue="100" type="cobertura-branch"/>
<result date="2007-08-21" statvalue="100" type="cobertura-branch"/>
<result date="2007-08-30" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-04" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-05" statvalue="100" type="cobertura-branch"/>
</file>
<file id="default-default-net_sf_flatpack_xml_XMLRecordElement.java"
module="default"
@@ -899,6 +939,8 @@
<result date="2007-06-30" statvalue="1" type="checkstyle"/>
<result date="2007-08-17" statvalue="1" type="checkstyle"/>
<result date="2007-08-20" statvalue="1" type="checkstyle"/>
+ <result date="2007-09-04" statvalue="54" type="cobertura-line"/>
+ <result date="2007-09-05" statvalue="54" type="cobertura-line"/>
</file>
<file id="default-default-net_sf_flatpack_util_PZConstants.java"
module="default" path="net/sf/flatpack/util/PZConstants.java" project="default">
@@ -1017,6 +1059,8 @@
<result date="2007-08-20" statvalue="2" type="checkstyle"/>
<result date="2007-08-21" statvalue="2" type="checkstyle"/>
<result date="2007-08-30" statvalue="2" type="checkstyle"/>
+ <result date="2007-09-04" statvalue="2" type="checkstyle"/>
+ <result date="2007-09-05" statvalue="2" type="checkstyle"/>
</file>
<file
id="default-default-net_sf_flatpack_util_FixedWidthParserUtils.java"
@@ -1134,6 +1178,10 @@
<result date="2007-08-21" statvalue="28" type="cobertura-branch"/>
<result date="2007-08-30" statvalue="34" type="cobertura-line"/>
<result date="2007-08-30" statvalue="28" type="cobertura-branch"/>
+ <result date="2007-09-04" statvalue="19" type="cobertura-line"/>
+ <result date="2007-09-04" statvalue="5" type="cobertura-branch"/>
+ <result date="2007-09-05" statvalue="19" type="cobertura-line"/>
+ <result date="2007-09-05" statvalue="5" type="cobertura-branch"/>
</file>
<file
id="default-default-net_sf_flatpack_DefaultPZParserFactory.java"
@@ -1211,6 +1259,10 @@
<result date="2007-08-20" statvalue="100" type="cobertura-branch"/>
<result date="2007-08-21" statvalue="100" type="cobertura-branch"/>
<result date="2007-08-30" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-04" statvalue="25" type="cobertura-line"/>
+ <result date="2007-09-04" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-05" statvalue="25" type="cobertura-line"/>
+ <result date="2007-09-05" statvalue="100" type="cobertura-branch"/>
</file>
<file id="default-default-net_sf_flatpack_converter_package.html"
module="default" path="net/sf/flatpack/converter/package.html" project="default">
@@ -1262,6 +1314,8 @@
<result date="2007-08-21" statvalue="100" type="cobertura-branch"/>
<result date="2007-08-30" statvalue="100" type="cobertura-line"/>
<result date="2007-08-30" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-04" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-05" statvalue="100" type="cobertura-branch"/>
</file>
<file
id="default-default-net_sf_flatpack_converter_PZConvertException.java"
@@ -1329,6 +1383,8 @@
<result date="2007-08-21" statvalue="100" type="cobertura-branch"/>
<result date="2007-08-30" statvalue="100" type="cobertura-line"/>
<result date="2007-08-30" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-04" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-05" statvalue="100" type="cobertura-branch"/>
</file>
<file
id="default-default-net_sf_flatpack_converter_ConvertInteger.java"
@@ -1356,6 +1412,8 @@
<result date="2007-08-21" statvalue="100" type="cobertura-branch"/>
<result date="2007-08-30" statvalue="100" type="cobertura-line"/>
<result date="2007-08-30" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-04" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-05" statvalue="100" type="cobertura-branch"/>
</file>
<file
id="default-default-net_sf_flatpack_brparse_BuffReaderPZParseFactory.java"
@@ -1417,6 +1475,12 @@
<result date="2007-08-30" statvalue="2" type="checkstyle"/>
<result date="2007-08-30" statvalue="59" type="cobertura-line"/>
<result date="2007-08-30" statvalue="46" type="cobertura-branch"/>
+ <result date="2007-09-04" statvalue="2" type="checkstyle"/>
+ <result date="2007-09-04" statvalue="55" type="cobertura-line"/>
+ <result date="2007-09-04" statvalue="40" type="cobertura-branch"/>
+ <result date="2007-09-05" statvalue="2" type="checkstyle"/>
+ <result date="2007-09-05" statvalue="55" type="cobertura-line"/>
+ <result date="2007-09-05" statvalue="40" type="cobertura-branch"/>
</file>
<file id="default-default-net_sf_flatpack_util_FPStringUtils.java"
module="default" path="net/sf/flatpack/util/FPStringUtils.java" project="default">
@@ -1435,6 +1499,8 @@
<result date="2007-08-30" statvalue="2" type="checkstyle"/>
<result date="2007-08-30" statvalue="22" type="cobertura-line"/>
<result date="2007-08-30" statvalue="20" type="cobertura-branch"/>
+ <result date="2007-09-04" statvalue="2" type="checkstyle"/>
+ <result date="2007-09-05" statvalue="1" type="checkstyle"/>
</file>
<file id="default-default-net_sf_flatpack_xml_MetaData.java"
module="default" path="net/sf/flatpack/xml/MetaData.java" project="default">
@@ -1452,6 +1518,10 @@
<result date="2007-08-21" statvalue="31" type="cobertura-branch"/>
<result date="2007-08-30" statvalue="36" type="cobertura-line"/>
<result date="2007-08-30" statvalue="31" type="cobertura-branch"/>
+ <result date="2007-09-04" statvalue="16" type="cobertura-line"/>
+ <result date="2007-09-04" statvalue="6" type="cobertura-branch"/>
+ <result date="2007-09-05" statvalue="16" type="cobertura-line"/>
+ <result date="2007-09-05" statvalue="6" type="cobertura-branch"/>
</file>
<file id="default-default-net_sf_flatpack_AbstractParser.java"
module="default" path="net/sf/flatpack/AbstractParser.java" project="default">
@@ -1465,6 +1535,10 @@
<result date="2007-08-21" statvalue="64" type="cobertura-branch"/>
<result date="2007-08-30" statvalue="76" type="cobertura-line"/>
<result date="2007-08-30" statvalue="64" type="cobertura-branch"/>
+ <result date="2007-09-04" statvalue="55" type="cobertura-line"/>
+ <result date="2007-09-04" statvalue="35" type="cobertura-branch"/>
+ <result date="2007-09-05" statvalue="55" type="cobertura-line"/>
+ <result date="2007-09-05" statvalue="35" type="cobertura-branch"/>
</file>
<file id="default-default-net_sf_flatpack_DefaultParserFactory.java"
module="default"
@@ -1479,6 +1553,10 @@
<result date="2007-08-21" statvalue="100" type="cobertura-branch"/>
<result date="2007-08-30" statvalue="29" type="cobertura-line"/>
<result date="2007-08-30" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-04" statvalue="23" type="cobertura-line"/>
+ <result date="2007-09-04" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-05" statvalue="23" type="cobertura-line"/>
+ <result date="2007-09-05" statvalue="100" type="cobertura-branch"/>
</file>
<file id="default-default-net_sf_flatpack_DelimiterParser.java"
module="default" path="net/sf/flatpack/DelimiterParser.java" project="default">
@@ -1492,6 +1570,10 @@
<result date="2007-08-21" statvalue="50" type="cobertura-branch"/>
<result date="2007-08-30" statvalue="42" type="cobertura-line"/>
<result date="2007-08-30" statvalue="50" type="cobertura-branch"/>
+ <result date="2007-09-04" statvalue="38" type="cobertura-line"/>
+ <result date="2007-09-04" statvalue="42" type="cobertura-branch"/>
+ <result date="2007-09-05" statvalue="38" type="cobertura-line"/>
+ <result date="2007-09-05" statvalue="42" type="cobertura-branch"/>
</file>
<file id="default-default-net_sf_flatpack_Parser.java"
module="default" path="net/sf/flatpack/Parser.java" project="default">
@@ -1505,6 +1587,10 @@
<result date="2007-08-21" statvalue="100" type="cobertura-branch"/>
<result date="2007-08-30" statvalue="100" type="cobertura-line"/>
<result date="2007-08-30" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-04" statvalue="100" type="cobertura-line"/>
+ <result date="2007-09-04" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-05" statvalue="100" type="cobertura-line"/>
+ <result date="2007-09-05" statvalue="100" type="cobertura-branch"/>
</file>
<file id="default-default-net_sf_flatpack_ParserFactory.java"
module="default" path="net/sf/flatpack/ParserFactory.java" project="default">
@@ -1520,6 +1606,10 @@
<result date="2007-08-21" statvalue="100" type="cobertura-branch"/>
<result date="2007-08-30" statvalue="100" type="cobertura-line"/>
<result date="2007-08-30" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-04" statvalue="100" type="cobertura-line"/>
+ <result date="2007-09-04" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-05" statvalue="100" type="cobertura-line"/>
+ <result date="2007-09-05" statvalue="100" type="cobertura-branch"/>
</file>
<file id="default-default-net_sf_flatpack_converter_Converter.java"
module="default" path="net/sf/flatpack/converter/Converter.java" project="default">
@@ -1533,6 +1623,10 @@
<result date="2007-08-21" statvalue="100" type="cobertura-branch"/>
<result date="2007-08-30" statvalue="100" type="cobertura-line"/>
<result date="2007-08-30" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-04" statvalue="100" type="cobertura-line"/>
+ <result date="2007-09-04" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-05" statvalue="100" type="cobertura-line"/>
+ <result date="2007-09-05" statvalue="100" type="cobertura-branch"/>
</file>
<file
id="default-default-net_sf_flatpack_brparse_BuffReaderParseFactory.java"
@@ -1543,6 +1637,8 @@
<result date="2007-08-20" statvalue="100" type="cobertura-branch"/>
<result date="2007-08-21" statvalue="100" type="cobertura-branch"/>
<result date="2007-08-30" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-04" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-05" statvalue="100" type="cobertura-branch"/>
</file>
<file
id="default-default-net_sf_flatpack_converter_FPConvertException.java"
@@ -1553,6 +1649,8 @@
<result date="2007-08-20" statvalue="100" type="cobertura-branch"/>
<result date="2007-08-21" statvalue="100" type="cobertura-branch"/>
<result date="2007-08-30" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-04" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-05" statvalue="100" type="cobertura-branch"/>
</file>
<file id="default-default-net_sf_flatpack_util_FPConstants.java"
module="default" path="net/sf/flatpack/util/FPConstants.java" project="default">
@@ -1561,6 +1659,8 @@
<result date="2007-08-20" statvalue="100" type="cobertura-branch"/>
<result date="2007-08-21" statvalue="100" type="cobertura-branch"/>
<result date="2007-08-30" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-04" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-05" statvalue="100" type="cobertura-branch"/>
</file>
<file
id="default-default-C:_project_flatpack_flatpack_src_test_java_net_sf_flatpack_columninfile_DelimitedColumnNamesInFileTest.java"
@@ -1574,4 +1674,93 @@
id="default-default-C:_project_flatpack_flatpack_src_test_java_net_sf_flatpack_pzparser_PZParserOptsTest.java"
module="default"
path="C:/project/flatpack/flatpack/src/test/java/net/sf/flatpack/pzparser/PZParserOptsTest.java" project="default"/>
+ <file id="default-default-net_sf_flatpack_writer_package.html"
+ module="default" path="net/sf/flatpack/writer/package.html" project="default">
+ <result date="2007-09-04" statvalue="1" type="checkstyle"/>
+ </file>
+ <file
+ id="default-default-net_sf_flatpack_writer_AbstractWriter.java"
+ module="default"
+ path="net/sf/flatpack/writer/AbstractWriter.java" project="default">
+ <result date="2007-09-04" statvalue="2" type="checkstyle"/>
+ <result date="2007-09-04" statvalue="84" type="cobertura-line"/>
+ <result date="2007-09-04" statvalue="83" type="cobertura-branch"/>
+ <result date="2007-09-05" statvalue="84" type="cobertura-line"/>
+ <result date="2007-09-05" statvalue="83" type="cobertura-branch"/>
+ </file>
+ <file
+ id="default-default-net_sf_flatpack_writer_AbstractWriterFactory.java"
+ module="default"
+ path="net/sf/flatpack/writer/AbstractWriterFactory.java" project="default">
+ <result date="2007-09-04" statvalue="2" type="checkstyle"/>
+ <result date="2007-09-04" statvalue="100" type="cobertura-line"/>
+ <result date="2007-09-04" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-05" statvalue="100" type="cobertura-line"/>
+ <result date="2007-09-05" statvalue="100" type="cobertura-branch"/>
+ </file>
+ <file
+ id="default-default-net_sf_flatpack_writer_DelimiterWriter.java"
+ module="default"
+ path="net/sf/flatpack/writer/DelimiterWriter.java" project="default">
+ <result date="2007-09-04" statvalue="5" type="checkstyle"/>
+ <result date="2007-09-04" statvalue="89" type="cobertura-line"/>
+ <result date="2007-09-04" statvalue="90" type="cobertura-branch"/>
+ <result date="2007-09-05" statvalue="89" type="cobertura-line"/>
+ <result date="2007-09-05" statvalue="90" type="cobertura-branch"/>
+ </file>
+ <file
+ id="default-default-net_sf_flatpack_writer_DelimiterWriterFactory.java"
+ module="default"
+ path="net/sf/flatpack/writer/DelimiterWriterFactory.java" project="default">
+ <result date="2007-09-04" statvalue="14" type="checkstyle"/>
+ <result date="2007-09-04" statvalue="75" type="cobertura-line"/>
+ <result date="2007-09-04" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-05" statvalue="75" type="cobertura-line"/>
+ <result date="2007-09-05" statvalue="100" type="cobertura-branch"/>
+ </file>
+ <file
+ id="default-default-net_sf_flatpack_writer_FixedLengthWriter.java"
+ module="default"
+ path="net/sf/flatpack/writer/FixedLengthWriter.java" project="default">
+ <result date="2007-09-04" statvalue="4" type="checkstyle"/>
+ <result date="2007-09-04" statvalue="93" type="cobertura-line"/>
+ <result date="2007-09-04" statvalue="94" type="cobertura-branch"/>
+ <result date="2007-09-05" statvalue="93" type="cobertura-line"/>
+ <result date="2007-09-05" statvalue="94" type="cobertura-branch"/>
+ </file>
+ <file
+ id="default-default-net_sf_flatpack_writer_FixedWriterFactory.java"
+ module="default"
+ path="net/sf/flatpack/writer/FixedWriterFactory.java" project="default">
+ <result date="2007-09-04" statvalue="4" type="checkstyle"/>
+ <result date="2007-09-04" statvalue="66" type="cobertura-line"/>
+ <result date="2007-09-04" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-05" statvalue="66" type="cobertura-line"/>
+ <result date="2007-09-05" statvalue="100" type="cobertura-branch"/>
+ </file>
+ <file id="default-default-net_sf_flatpack_writer_Writer.java"
+ module="default" path="net/sf/flatpack/writer/Writer.java" project="default">
+ <result date="2007-09-04" statvalue="2" type="checkstyle"/>
+ <result date="2007-09-04" statvalue="100" type="cobertura-line"/>
+ <result date="2007-09-04" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-05" statvalue="2" type="checkstyle"/>
+ <result date="2007-09-05" statvalue="100" type="cobertura-line"/>
+ <result date="2007-09-05" statvalue="100" type="cobertura-branch"/>
+ </file>
+ <file id="default-default-net_sf_flatpack_writer_WriterFactory.java"
+ module="default"
+ path="net/sf/flatpack/writer/WriterFactory.java" project="default">
+ <result date="2007-09-04" statvalue="1" type="checkstyle"/>
+ <result date="2007-09-04" statvalue="100" type="cobertura-line"/>
+ <result date="2007-09-04" statvalue="100" type="cobertura-branch"/>
+ <result date="2007-09-05" statvalue="100" type="cobertura-line"/>
+ <result date="2007-09-05" statvalue="100" type="cobertura-branch"/>
+ </file>
+ <file id="default-default-net_sf_flatpack_xml_MapParser.java"
+ module="default" path="net/sf/flatpack/xml/MapParser.java" project="default">
+ <result date="2007-09-04" statvalue="50" type="cobertura-line"/>
+ <result date="2007-09-04" statvalue="38" type="cobertura-branch"/>
+ <result date="2007-09-05" statvalue="50" type="cobertura-line"/>
+ <result date="2007-09-05" statvalue="38" type="cobertura-branch"/>
+ </file>
</qalab>
Modified: trunk/flatpack/src/main/java/net/sf/flatpack/DefaultDataSet.java
===================================================================
--- trunk/flatpack/src/main/java/net/sf/flatpack/DefaultDataSet.java 2007-09-05 17:18:20 UTC (rev 345)
+++ trunk/flatpack/src/main/java/net/sf/flatpack/DefaultDataSet.java 2007-09-05 19:09:25 UTC (rev 346)
@@ -478,7 +478,7 @@
return buf.toString();
}
- public boolean contains(String column) {
+ public boolean contains(final String column) {
if (pointer == -1) {
throw new IndexOutOfBoundsException("dataset on invalid row. need to call next()");
}
Modified: trunk/flatpack/src/main/java/net/sf/flatpack/util/FPStringUtils.java
===================================================================
--- trunk/flatpack/src/main/java/net/sf/flatpack/util/FPStringUtils.java 2007-09-05 17:18:20 UTC (rev 345)
+++ trunk/flatpack/src/main/java/net/sf/flatpack/util/FPStringUtils.java 2007-09-05 19:09:25 UTC (rev 346)
@@ -30,7 +30,7 @@
return true;
}
for (int i = 0; i < strLen; i++) {
- if ((Character.isWhitespace(str.charAt(i)) == false)) {
+ if (!Character.isWhitespace(str.charAt(i))) {
return false;
}
}
Added: trunk/flatpack/src/main/java/net/sf/flatpack/writer/AbstractWriter.java
===================================================================
--- trunk/flatpack/src/main/java/net/sf/flatpack/writer/AbstractWriter.java (rev 0)
+++ trunk/flatpack/src/main/java/net/sf/flatpack/writer/AbstractWriter.java 2007-09-05 19:09:25 UTC (rev 346)
@@ -0,0 +1,84 @@
+package net.sf.flatpack.writer;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * This class encapsulates the writer that's used to output the data.
+ * @author Dirk Holmes and Holger Holger Hoffstatte
+ */
+public abstract class AbstractWriter extends Object implements Writer {
+ private BufferedWriter writer;
+ private Map rowMap;
+
+ public AbstractWriter(final java.io.Writer output) {
+ super();
+ writer = new BufferedWriter(output);
+ }
+
+ public void addRecordEntry(final String columnName, final Object value) {
+ if (rowMap == null) {
+ rowMap = new HashMap();
+ }
+
+ if (!validateColumnTitle(columnName)) {
+ throw new IllegalArgumentException("unknown column: \"" + columnName + "\"");
+ }
+ rowMap.put(columnName, value);
+ }
+
+ /**
+ * Subclasses must implement this method to perform validation of
+ * <code>columnTitle</code>.
+ *
+ * @param columnTitle title of the column to be filled
+ * @return <code>true</code> if the column title is valid else return
+ * <code>false</code>.
+ */
+ protected abstract boolean validateColumnTitle(String columnTitle);
+
+ /**
+ * Writes a newline to the output and discards the <code>rowMap</code>.
+ * <p>
+ * This method must be overridden by subclasses to write out the record data
+ * stored in <code>rowMap</code>. Overriders <b>must</b> call
+ * <code>super.nextRecord()</code> as the last call in their implementation.
+ */
+ public void nextRecord() throws IOException {
+ // the row should have been written out by the subclass so it's safe to
+ // discard it here
+ rowMap = null;
+ writer.newLine();
+ }
+
+ protected void write(Object value) throws IOException {
+ if (value == null) {
+ value = "";
+ }
+ // TODO DO: converter/formatter for converting value to string?
+ writer.write(value.toString());
+ }
+
+ protected void write(final char character) throws IOException {
+ writer.write(character);
+ }
+
+ protected void write(final char[] characters) throws IOException {
+ writer.write(characters);
+ }
+
+ public void flush() throws IOException {
+ writer.flush();
+ }
+
+ public void close() throws IOException {
+ writer.flush();
+ writer.close();
+ }
+
+ protected Map getRowMap() {
+ return rowMap;
+ }
+}
Added: trunk/flatpack/src/main/java/net/sf/flatpack/writer/AbstractWriterFactory.java
===================================================================
--- trunk/flatpack/src/main/java/net/sf/flatpack/writer/AbstractWriterFactory.java (rev 0)
+++ trunk/flatpack/src/main/java/net/sf/flatpack/writer/AbstractWriterFactory.java 2007-09-05 19:09:25 UTC (rev 346)
@@ -0,0 +1,53 @@
+package net.sf.flatpack.writer;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import net.sf.flatpack.InitialisationException;
+import net.sf.flatpack.util.FPConstants;
+import net.sf.flatpack.xml.MapParser;
+
+import org.jdom.JDOMException;
+
+/**
+ *
+ * @author Dirk Holmes and Holger Holger Hoffstatte
+ */
+public abstract class AbstractWriterFactory extends Object implements WriterFactory {
+ private Map mapping;
+
+ protected AbstractWriterFactory() {
+ super();
+
+ mapping = new HashMap();
+ mapping.put(FPConstants.DETAIL_ID, new ArrayList());
+ mapping.put(FPConstants.COL_IDX, new HashMap());
+ }
+
+ protected AbstractWriterFactory(final Map mapping) {
+ super();
+ this.mapping = mapping;
+ }
+
+ protected AbstractWriterFactory(final Reader mappingSrc) throws IOException {
+ this();
+
+ try {
+ mapping = MapParser.parse(mappingSrc, null);
+ } catch (final JDOMException jde) {
+ throw new InitialisationException(jde);
+ }
+ }
+
+ protected Map getColumnMapping() {
+ // TODO DO: return deep mutable clone here or better: make the Map a first class
+ // citizen of the library
+ return Collections.unmodifiableMap(mapping);
+ }
+
+ public abstract Writer createWriter(java.io.Writer out) throws IOException;
+}
Added: trunk/flatpack/src/main/java/net/sf/flatpack/writer/DelimiterWriter.java
===================================================================
--- trunk/flatpack/src/main/java/net/sf/flatpack/writer/DelimiterWriter.java (rev 0)
+++ trunk/flatpack/src/main/java/net/sf/flatpack/writer/DelimiterWriter.java 2007-09-05 19:09:25 UTC (rev 346)
@@ -0,0 +1,118 @@
+package net.sf.flatpack.writer;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import net.sf.flatpack.structure.ColumnMetaData;
+import net.sf.flatpack.util.FPConstants;
+
+/**
+ *
+ * @author Dirk Holmes and Holger Holger Hoffstatte
+ */
+public class DelimiterWriter extends AbstractWriter {
+ private char delimiter;
+ private char qualifier;
+ private List columnTitles = null;
+ private boolean columnTitlesWritten = false;
+
+ protected DelimiterWriter(final Map columnMapping, final java.io.Writer output, final char delimiter, final char qualifier) throws IOException {
+ super(output);
+ this.delimiter = delimiter;
+ this.qualifier = qualifier;
+
+ columnTitles = new ArrayList();
+ final List columns = (List) columnMapping.get(FPConstants.DETAIL_ID);
+ final Iterator columnIter = columns.iterator();
+ while (columnIter.hasNext()) {
+ final ColumnMetaData element = (ColumnMetaData) columnIter.next();
+ columnTitles.add(element.getColName());
+ }
+ // write the column headers
+ this.nextRecord();
+ }
+
+ protected void writeWithDelimiter(final Object value) throws IOException {
+ this.write(value);
+ this.write(delimiter);
+ }
+
+ protected void write(final Object value) throws IOException {
+ String stringValue = "";
+
+ if (value != null) {
+ // TODO DO: format the value
+ stringValue = value.toString();
+ }
+
+ final boolean needsQuoting = (stringValue.indexOf(delimiter) != -1);
+
+ if (needsQuoting) {
+ super.write(qualifier);
+ }
+
+ super.write(stringValue);
+
+ if (needsQuoting) {
+ super.write(qualifier);
+ }
+ }
+
+ protected void addColumnTitle(final String string) {
+ if (string == null) {
+ throw new IllegalArgumentException("column title may not be null");
+ }
+ columnTitles.add(string);
+ }
+
+ protected void writeColumnTitles() throws IOException {
+ final Iterator titleIter = columnTitles.iterator();
+ while (titleIter.hasNext()) {
+ final String title = (String) titleIter.next();
+
+ if (titleIter.hasNext()) {
+ this.writeWithDelimiter(title);
+ } else {
+ this.write(title);
+ }
+ }
+ }
+
+ protected void writeRow() throws IOException {
+ final Iterator titlesIter = columnTitles.iterator();
+ while (titlesIter.hasNext()) {
+ final String columnTitle = (String) titlesIter.next();
+ if (titlesIter.hasNext()) {
+ this.writeWithDelimiter(this.getRowMap().get(columnTitle));
+ } else {
+ this.write(this.getRowMap().get(columnTitle));
+ }
+ }
+ }
+
+ public void nextRecord() throws IOException {
+ if (!columnTitlesWritten) {
+ this.writeColumnTitles();
+ columnTitlesWritten = true;
+ } else {
+ this.writeRow();
+ }
+
+ super.nextRecord();
+ }
+
+ public void printFooter() {
+ // TODO DO: implement footer handling
+ }
+
+ public void printHeader() {
+ // TODO DO: implement header handling
+ }
+
+ protected boolean validateColumnTitle(final String columnTitle) {
+ return columnTitles.contains(columnTitle);
+ }
+}
Added: trunk/flatpack/src/main/java/net/sf/flatpack/writer/DelimiterWriterFactory.java
===================================================================
--- trunk/flatpack/src/main/java/net/sf/flatpack/writer/DelimiterWriterFactory.java (rev 0)
+++ trunk/flatpack/src/main/java/net/sf/flatpack/writer/DelimiterWriterFactory.java 2007-09-05 19:09:25 UTC (rev 346)
@@ -0,0 +1,83 @@
+package net.sf.flatpack.writer;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.util.List;
+import java.util.Map;
+
+import net.sf.flatpack.structure.ColumnMetaData;
+import net.sf.flatpack.util.FPConstants;
+
+import org.jdom.JDOMException;
+
+/**
+ *
+ * @author Dirk Holmes and Holger Holger Hoffstatte
+ */
+public class DelimiterWriterFactory extends AbstractWriterFactory {
+ public static final char DEFAULT_DELIMITER = ';';
+ public static final char DEFAULT_QUALIFIER = '"';
+
+ private final char delimiter;
+ private final char qualifier;
+
+ public DelimiterWriterFactory(final char delimiter, final char qualifier) {
+ super();
+ this.delimiter = delimiter;
+ this.qualifier = qualifier;
+ }
+
+ public DelimiterWriterFactory(final Reader mappingSrc) throws IOException, JDOMException {
+ this(mappingSrc, DEFAULT_DELIMITER);
+ }
+
+ public DelimiterWriterFactory(final Reader mappingSrc, final char delimiter) throws IOException, JDOMException {
+ this(mappingSrc, delimiter, DEFAULT_QUALIFIER);
+ }
+
+ public DelimiterWriterFactory(final Reader mappingSrc, final char delimiter, final char qualifier) throws IOException {
+ super(mappingSrc);
+ this.delimiter = delimiter;
+ this.qualifier = qualifier;
+ }
+
+ public DelimiterWriterFactory(final Map mapping) {
+ this(mapping, DEFAULT_DELIMITER, DEFAULT_QUALIFIER);
+ }
+
+ public DelimiterWriterFactory(final Map mapping, final char delimiter) {
+ this(mapping, delimiter, DEFAULT_QUALIFIER);
+ }
+
+ public DelimiterWriterFactory(final Map mapping, final char delimiter, final char qualifier) {
+ super(mapping);
+ this.delimiter = delimiter;
+ this.qualifier = qualifier;
+ }
+
+ public char getDelimiter() {
+ return delimiter;
+ }
+
+ public char getQualifier() {
+ return qualifier;
+ }
+
+ public Writer createWriter(final java.io.Writer out) throws IOException {
+ return new DelimiterWriter(this.getColumnMapping(), out, delimiter, qualifier);
+ }
+
+ // TODO DO: check that no column titles can be added after first nextRecord
+ public void addColumnTitle(final String columnTitle) {
+ final Map columnMapping = this.getColumnMapping();
+ final List columnMetaDatas = (List) columnMapping.get(FPConstants.DETAIL_ID);
+ final Map columnIndices = (Map) columnMapping.get(FPConstants.COL_IDX);
+
+ final ColumnMetaData metaData = new ColumnMetaData();
+ metaData.setColName(columnTitle);
+ columnMetaDatas.add(metaData);
+
+ final Integer columnIndex = new Integer(columnMetaDatas.indexOf(metaData));
+ columnIndices.put(columnIndex, columnTitle);
+ }
+}
Added: trunk/flatpack/src/main/java/net/sf/flatpack/writer/FixedLengthWriter.java
===================================================================
--- trunk/flatpack/src/main/java/net/sf/flatpack/writer/FixedLengthWriter.java (rev 0)
+++ trunk/flatpack/src/main/java/net/sf/flatpack/writer/FixedLengthWriter.java 2007-09-05 19:09:25 UTC (rev 346)
@@ -0,0 +1,120 @@
+package net.sf.flatpack.writer;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import net.sf.flatpack.structure.ColumnMetaData;
+import net.sf.flatpack.util.FPConstants;
+
+/**
+ *
+ * @author Dirk Holmes and Holger Holger Hoffstatte
+ */
+public class FixedLengthWriter extends AbstractWriter {
+ private static final int MAX_CHAR_TO_USE_LOOP = 8;
+ private final Map columnMapping;
+ private final char padChar;
+
+ protected FixedLengthWriter(final Map parsedMapping, final java.io.Writer output, final char padChar) throws IOException {
+ super(output);
+ this.columnMapping = parsedMapping;
+ this.padChar = padChar;
+ }
+
+ public void addRecordEntry(final String columnName, final Object value) {
+ if (value != null) {
+ final ColumnMetaData metaData = this.getColumnMetaData(columnName);
+
+ final String valueString = value.toString();
+ if (valueString.length() > metaData.getColLength()) {
+ throw new IllegalArgumentException(valueString + " exceeds the maximum length for column " + columnName + "("
+ + metaData.getColLength() + ")");
+ }
+ }
+ super.addRecordEntry(columnName, value);
+ }
+
+ public void nextRecord() throws IOException {
+ final Iterator columnIter = this.getColumnMetaData().iterator();
+ while (columnIter.hasNext()) {
+ final ColumnMetaData element = (ColumnMetaData) columnIter.next();
+ final Object value = this.getRowMap().get(element.getColName());
+ this.write(this.formattedValue(value, element));
+ }
+
+ super.nextRecord();
+ }
+
+ protected char[] formattedValue(Object value, final ColumnMetaData element) {
+ if (value == null) {
+ // TODO DO: maybe have a way to substitute default values here?
+ value = "";
+ }
+
+ // TODO DO: add formatting of values
+ final String stringValue = value.toString();
+ final int stringLength = stringValue.length();
+
+ final int columnLength = element.getColLength();
+ final char[] formattedValue = new char[columnLength];
+
+ /*
+ * Copy the contents of the original string; for Strings up to ~8-10
+ * characters this loop is consistently faster than String.getChars(). Short
+ * Strings are usually the majority of values in fixed-width data columns.
+ */
+ final int numCharacters = Math.min(stringLength, columnLength);
+ if (numCharacters < MAX_CHAR_TO_USE_LOOP) {
+ for (int i = 0; i < numCharacters; i++) {
+ formattedValue[i] = stringValue.charAt(i);
+ }
+ } else {
+ stringValue.getChars(0, numCharacters, formattedValue, 0);
+ }
+
+ if (stringLength < columnLength) {
+ // pad if necessary
+ Arrays.fill(formattedValue, stringLength, columnLength, padChar);
+ }
+
+ return formattedValue;
+ }
+
+ protected boolean validateColumnTitle(final String columnTitle) {
+ final Map columnNameToIndex = (Map) columnMapping.get(FPConstants.COL_IDX);
+ return columnNameToIndex.keySet().contains(columnTitle);
+ }
+
+ public void printFooter() {
+ // TODO DO: implement footer handling
+
+ }
+
+ public void printHeader() {
+ // TODO DO: implement header handling
+
+ }
+
+ /**
+ * @return List of ColumnMetaData objects describing the mapping defined in the
+ * XML file.
+ */
+ private List getColumnMetaData() {
+ return (List) columnMapping.get(FPConstants.DETAIL_ID);
+ }
+
+ private ColumnMetaData getColumnMetaData(final String columnName) {
+ final Iterator metaDataIter = this.getColumnMetaData().iterator();
+ while (metaDataIter.hasNext()) {
+ final ColumnMetaData element = (ColumnMetaData) metaDataIter.next();
+ if (element.getColName().equals(columnName)) {
+ return element;
+ }
+ }
+
+ throw new IllegalArgumentException("Column \"" + columnName + "\" unknown");
+ }
+}
Added: trunk/flatpack/src/main/java/net/sf/flatpack/writer/FixedWriterFactory.java
===================================================================
--- trunk/flatpack/src/main/java/net/sf/flatpack/writer/FixedWriterFactory.java (rev 0)
+++ trunk/flatpack/src/main/java/net/sf/flatpack/writer/FixedWriterFactory.java 2007-09-05 19:09:25 UTC (rev 346)
@@ -0,0 +1,35 @@
+package net.sf.flatpack.writer;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.util.Map;
+
+import org.jdom.JDOMException;
+
+/**
+ *
+ * @author Dirk Holmes and Holger Holger Hoffstatte
+ */
+public class FixedWriterFactory extends AbstractWriterFactory {
+ public static final char DEFAULT_PADDING_CHARACTER = ' ';
+
+ private final char pad;
+
+ public FixedWriterFactory(final Map mapping) {
+ super(mapping);
+ this.pad = DEFAULT_PADDING_CHARACTER;
+ }
+
+ public FixedWriterFactory(final Reader mappingSrc) throws IOException, JDOMException {
+ this(mappingSrc, DEFAULT_PADDING_CHARACTER);
+ }
+
+ public FixedWriterFactory(final Reader mappingSrc, final char fillChar) throws IOException {
+ super(mappingSrc);
+ this.pad = fillChar;
+ }
+
+ public Writer createWriter(final java.io.Writer output) throws IOException {
+ return new FixedLengthWriter(this.getColumnMapping(), output, pad);
+ }
+}
Added: trunk/flatpack/src/main/java/net/sf/flatpack/writer/Writer.java
===================================================================
--- trunk/flatpack/src/main/java/net/sf/flatpack/writer/Writer.java (rev 0)
+++ trunk/flatpack/src/main/java/net/sf/flatpack/writer/Writer.java 2007-09-05 19:09:25 UTC (rev 346)
@@ -0,0 +1,23 @@
+package net.sf.flatpack.writer;
+
+import java.io.IOException;
+
+/**
+ *
+ * @author Dirk Holmes and Holger Holger Hoffstatte
+ */
+public interface Writer {
+ /** put writer into header mode. TODO: how to handle multiple header lines? */
+ void printHeader();
+
+ /** put writer into footer mode. TODO: how to handle multiple footer lines? */
+ void printFooter();
+
+ void addRecordEntry(String columnName, Object value);
+
+ void nextRecord() throws IOException;
+
+ void flush() throws IOException;
+
+ void close() throws IOException;
+}
Added: trunk/flatpack/src/main/java/net/sf/flatpack/writer/WriterFactory.java
===================================================================
--- trunk/flatpack/src/main/java/net/sf/flatpack/writer/WriterFactory.java (rev 0)
+++ trunk/flatpack/src/main/java/net/sf/flatpack/writer/WriterFactory.java 2007-09-05 19:09:25 UTC (rev 346)
@@ -0,0 +1,11 @@
+package net.sf.flatpack.writer;
+
+import java.io.IOException;
+
+/**
+ *
+ * @author Dirk Holmes and Holger Holger Hoffstatte
+ */
+public interface WriterFactory {
+ Writer createWriter(java.io.Writer out) throws IOException;
+}
Added: trunk/flatpack/src/main/java/net/sf/flatpack/writer/package.html
===================================================================
--- trunk/flatpack/src/main/java/net/sf/flatpack/writer/package.html (rev 0)
+++ trunk/flatpack/src/main/java/net/sf/flatpack/writer/package.html 2007-09-05 19:09:25 UTC (rev 346)
@@ -0,0 +1,25 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+ <title>net.sf.flatpack.util package</title>
+ <!--
+ Copyright 2006 Paul Zepernick and ObjectLab
+
+ 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.
+
+ -->
+ </head>
+ <body bgcolor="white">
+ Provides some Writers to export a DataSet to a fixed length or delimited format. Thanks to Dirk and Holger from MuleSource for the
+ initial contribution.
+ </body>
+</html>
\ No newline at end of file
Modified: trunk/flatpack/src/test/java/net/sf/flatpack/DataSetFunctionalityTest.java
===================================================================
--- trunk/flatpack/src/test/java/net/sf/flatpack/DataSetFunctionalityTest.java 2007-09-05 17:18:20 UTC (rev 345)
+++ trunk/flatpack/src/test/java/net/sf/flatpack/DataSetFunctionalityTest.java 2007-09-05 19:09:25 UTC (rev 346)
@@ -15,7 +15,7 @@
public void testContains() {
DataSet ds;
final String cols = "column1,column2,column3\r\n value1,value2,value3";
- Parser p = DefaultParserFactory.getInstance().newDelimitedParser(new StringReader(cols), ',', FPConstants.NO_QUALIFIER);
+ final Parser p = DefaultParserFactory.getInstance().newDelimitedParser(new StringReader(cols), ',', FPConstants.NO_QUALIFIER);
ds = p.parse();
ds.next();
assertEquals("column should NOT be found...", false, ds.contains("shouldnotcontain"));
Added: trunk/flatpack/src/test/java/net/sf/flatpack/writer/AllTests.java
===================================================================
--- trunk/flatpack/src/test/java/net/sf/flatpack/writer/AllTests.java (rev 0)
+++ trunk/flatpack/src/test/java/net/sf/flatpack/writer/AllTests.java 2007-09-05 19:09:25 UTC (rev 346)
@@ -0,0 +1,21 @@
+package net.sf.flatpack.writer;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ *
+ * @author Dirk Holmes and Holger Holger Hoffstatte
+ */
+public class AllTests {
+
+ public static Test suite() {
+ final TestSuite suite = new TestSuite("Test for net.sf.flatpack.writer");
+ //$JUnit-BEGIN$
+ suite.addTestSuite(DelimiterWriterTestCase.class);
+ suite.addTestSuite(FixedLengthWriterTestCase.class);
+ //$JUnit-END$
+ return suite;
+ }
+
+}
Added: trunk/flatpack/src/test/java/net/sf/flatpack/writer/DelimiterWriterTestCase.java
===================================================================
--- trunk/flatpack/src/test/java/net/sf/flatpack/writer/DelimiterWriterTestCase.java (rev 0)
+++ trunk/flatpack/src/test/java/net/sf/flatpack/writer/DelimiterWriterTestCase.java 2007-09-05 19:09:25 UTC (rev 346)
@@ -0,0 +1,120 @@
+package net.sf.flatpack.writer;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.StringWriter;
+import java.util.Map;
+
+import junit.framework.Assert;
+
+import net.sf.flatpack.writer.DelimiterWriterFactory;
+import net.sf.flatpack.writer.Writer;
+
+/**
+ *
+ * @author Dirk Holmes and Holger Holger Hoffstatte
+ */
+public class DelimiterWriterTestCase extends PZWriterTestCase {
+ public void testWriteCsvNoMappingFile() throws Exception {
+ final StringWriter out = new StringWriter();
+
+ final DelimiterWriterFactory factory = new DelimiterWriterFactory(';', '"');
+ factory.addColumnTitle("FIRSTNAME");
+ factory.addColumnTitle("LASTNAME");
+ factory.addColumnTitle("ADDRESS");
+ factory.addColumnTitle("CITY");
+ factory.addColumnTitle("STATE");
+ factory.addColumnTitle("ZIP");
+
+ final Writer writer = factory.createWriter(out);
+ // write one line of data ... not in the correct order of fields
+ writer.addRecordEntry("LASTNAME", "ANAME");
+ writer.addRecordEntry("FIRSTNAME", "JOHN");
+ writer.addRecordEntry("ZIP", "44035");
+ writer.addRecordEntry("CITY", "ELYRIA");
+ writer.addRecordEntry("STATE", "OH");
+ writer.addRecordEntry("ADDRESS", "1234 CIRCLE CT");
+ writer.nextRecord();
+ writer.flush();
+
+ // make sure the tests work on Windows and on Linux
+ final String expected = this.joinLines("FIRSTNAME;LASTNAME;ADDRESS;CITY;STATE;ZIP", "JOHN;ANAME;1234 CIRCLE CT;ELYRIA;OH;44035");
+
+ Assert.assertEquals(expected, out.toString());
+ }
+
+ public void testWriteCsvWithMappingFile() throws Exception {
+ final InputStream mapping = this.getClass().getClassLoader().getResourceAsStream("DelimitedWithHeader.pzmap.xml");
+ final Reader mappingReader = new InputStreamReader(mapping);
+ final StringWriter out = new StringWriter();
+
+ final Writer writer = new DelimiterWriterFactory(mappingReader, ';', '"').createWriter(out);
+ writer.addRecordEntry("LASTNAME", "ANAME");
+ writer.addRecordEntry("FIRSTNAME", "JOHN");
+ writer.addRecordEntry("ZIP", "44035");
+ writer.addRecordEntry("CITY", "ELYRIA");
+ writer.addRecordEntry("STATE", "OH");
+ writer.addRecordEntry("ADDRESS", "1234 CIRCLE CT");
+ writer.nextRecord();
+ writer.flush();
+
+ final String expected = this.joinLines("FIRSTNAME;LASTNAME;ADDRESS;CITY;STATE;ZIP", "JOHN;ANAME;1234 CIRCLE CT;ELYRIA;OH;44035");
+
+ Assert.assertEquals(expected, out.toString());
+ }
+
+ public void testWriteCsvWithMissingColumns() throws Exception {
+ final InputStream mapping = this.getClass().getClassLoader().getResourceAsStream("DelimitedWithHeader.pzmap.xml");
+ final InputStreamReader mappingReader = new InputStreamReader(mapping);
+ final StringWriter out = new StringWriter();
+
+ final Writer writer = new DelimiterWriterFactory(mappingReader, ';', '"').createWriter(out);
+ // note that we do not provide values for FIRSTNAME and ADDRESS
+ writer.addRecordEntry("LASTNAME", "ANAME");
+ writer.addRecordEntry("ZIP", "44035");
+ writer.addRecordEntry("CITY", "ELYRIA");
+ writer.addRecordEntry("STATE", "OH");
+ writer.nextRecord();
+ writer.flush();
+
+ final String expected = this.joinLines("FIRSTNAME;LASTNAME;ADDRESS;CITY;STATE;ZIP", ";ANAME;;ELYRIA;OH;44035");
+
+ Assert.assertEquals(expected, out.toString());
+ }
+
+ public void testCreateWriterWithoutColumnMapping() throws Exception {
+ try {
+ final Writer writer = new DelimiterWriterFactory(';', '"').createWriter(new StringWriter());
+ writer.addRecordEntry("ThisColumnDoesNotExist", "foo");
+ Assert.fail("Writing to a DelimiterWriter without column mapping is not supported");
+ } catch (final IllegalArgumentException iae) {
+ // exception was expected
+ }
+ }
+
+ public void testCreateWriterWithNullOutputStream() throws IOException {
+ try {
+ new DelimiterWriterFactory((Map) null).createWriter(null);
+ } catch (final NullPointerException npe) {
+ // this one was expected
+ }
+ }
+
+ public void testWriteValueWithQualifier() throws Exception {
+ final DelimiterWriterFactory factory = new DelimiterWriterFactory(';', '"');
+ factory.addColumnTitle("col1");
+ factory.addColumnTitle("col2");
+
+ final StringWriter out = new StringWriter();
+ final Writer writer = factory.createWriter(out);
+ writer.addRecordEntry("col1", "value;with;delimiter");
+ writer.addRecordEntry("col2", "normal value");
+ writer.nextRecord();
+ writer.flush();
+
+ final String expected = this.joinLines("col1;col2", "\"value;with;delimiter\";normal value");
+ Assert.assertEquals(expected, out.toString());
+ }
+}
Added: trunk/flatpack/src/test/java/net/sf/flatpack/writer/FixedLengthWriterTestCase.java
===================================================================
--- trunk/flatpack/src/test/java/net/sf/flatpack/writer/FixedLengthWriterTestCase.java (rev 0)
+++ trunk/flatpack/src/test/java/net/sf/flatpack/writer/FixedLengthWriterTestCase.java 2007-09-05 19:09:25 UTC (rev 346)
@@ -0,0 +1,103 @@
+package net.sf.flatpack.writer;
+
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.StringWriter;
+
+import junit.framework.Assert;
+
+import net.sf.flatpack.InitialisationException;
+import net.sf.flatpack.writer.FixedWriterFactory;
+import net.sf.flatpack.writer.Writer;
+
+/**
+ *
+ * @author Dirk Holmes and Holger Holger Hoffstatte
+ */
+public class FixedLengthWriterTestCase extends PZWriterTestCase {
+ public void testWriteFixedLength() throws Exception {
+ final StringWriter out = new StringWriter();
+ final Writer writer = new FixedWriterFactory(this.getMapping()).createWriter(out);
+
+ writer.addRecordEntry("LASTNAME", "DOE");
+ writer.addRecordEntry("ADDRESS", "1234 CIRCLE CT");
+ writer.addRecordEntry("STATE", "OH");
+ writer.addRecordEntry("ZIP", "44035");
+ writer.addRecordEntry("FIRSTNAME", "JOHN");
+ writer.addRecordEntry("CITY", "ELYRIA");
+ writer.nextRecord();
+ writer.flush();
+
+ final String expected =
+ this
+ .normalizeLineEnding("JOHN DOE 1234 CIRCLE CT ELYRIA OH44035");
+ Assert.assertEquals(expected, out.toString());
+ }
+
+ public void testWriterWithDifferentFillChar() throws Exception {
+ final StringWriter out = new StringWriter();
+ final Writer writer = new FixedWriterFactory(this.getMapping(), '.').createWriter(out);
+
+ writer.addRecordEntry("LASTNAME", "DOE");
+ writer.addRecordEntry("ADDRESS", "1234 CIRCLE CT");
+ writer.addRecordEntry("STATE", "OH");
+ writer.addRecordEntry("ZIP", "44035");
+ writer.addRecordEntry("FIRSTNAME", "JOHN");
+ writer.addRecordEntry("CITY", "ELYRIA");
+ writer.nextRecord();
+ writer.flush();
+
+ final String expected =
+ this
+ .normalizeLineEnding("JOHN...............................DOE................................1234 CIRCLE CT......................................................................................ELYRIA..............................................................................................OH44035");
+ Assert.assertEquals(expected, out.toString());
+ }
+
+ public void testCreateParserWithMalformedMappingFile() throws Exception {
+ try {
+ final InputStream mapping = this.getClass().getClassLoader().getResourceAsStream("BrokenMapping.pzmap.xml");
+ final InputStreamReader mappingReader = new InputStreamReader(mapping);
+ new FixedWriterFactory(mappingReader);
+ Assert.fail();
+ } catch (final InitialisationException ie) {
+ // this excecption must occur, mapping xml is invalid
+ }
+ }
+
+ public void testWriteStringWiderThanColumnDefinition() throws Exception {
+ final StringWriter out = new StringWriter();
+ final Writer writer = new FixedWriterFactory(this.getMapping()).createWriter(out);
+ try {
+ writer.addRecordEntry("STATE", "THISISTOOLONG");
+ Assert.fail("writing entries that are too long should fail");
+ } catch (final IllegalArgumentException iae) {
+ // expected exception
+ }
+ }
+
+ public void testWriteNullColumn() throws Exception {
+ final StringWriter out = new StringWriter();
+ final Writer writer = new FixedWriterFactory(this.getMapping()).createWriter(out);
+
+ writer.addRecordEntry("LASTNAME", "DOE");
+ ...
[truncated message content] |