<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,26 +1,30 @@
 /**
  * Copyright 2008-2009 the original author or authors.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;); 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 &quot;AS IS&quot; 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 flapjack.cobol.layout;
 
+import flapjack.layout.TextPaddingDescriptor;
+
 
 public class CobolFieldDefinitionFactory implements FieldDefinitionFactory {
+    private static final TextPaddingDescriptor ZERO_PADDER = new TextPaddingDescriptor(TextPaddingDescriptor.Padding.LEFT, '0');
+    private static final TextPaddingDescriptor SPACE_PADDER = new TextPaddingDescriptor(TextPaddingDescriptor.Padding.RIGHT, ' ');
 
     public CobolFieldDefinition build(CobolFieldInfo fieldInfo) {
         if (fieldInfo.getType() == CobolFieldType.DECIMAL)
-            return new DecimalFieldDefinition(fieldInfo.getName(), fieldInfo.getPosition(), fieldInfo.getPattern());
+            return new DecimalFieldDefinition(fieldInfo.getName(), fieldInfo.getPosition(), fieldInfo.getPattern(), ZERO_PADDER);
         else if (fieldInfo.getType() == CobolFieldType.INTEGER)
-            return new IntegerFieldDefinition(fieldInfo.getName(), fieldInfo.getPosition(), fieldInfo.getPattern());
+            return new IntegerFieldDefinition(fieldInfo.getName(), fieldInfo.getPosition(), fieldInfo.getPattern(), ZERO_PADDER);
         else
-            return new AlphaNumericFieldDefinition(fieldInfo.getName(), fieldInfo.getPosition(), fieldInfo.getPattern());
+            return new AlphaNumericFieldDefinition(fieldInfo.getName(), fieldInfo.getPosition(), fieldInfo.getPattern(), SPACE_PADDER);
     }
 }</diff>
      <filename>flapjack-cobol/src/main/java/flapjack/cobol/layout/CobolFieldDefinitionFactory.java</filename>
    </modified>
    <modified>
      <diff>@@ -39,6 +39,10 @@ public class CobolDecimalTextValueConverter extends AbstractTextValueConverter {
         return build(inFrontOfDecimal+&quot;.&quot;+text.substring(text.length() - decimalPlaceCount));
     }
 
+    protected String fromDomainToText(Object domain) {
+        return super.fromDomainToText(domain).replaceAll(&quot;\\.&quot;, &quot;&quot;);
+    }
+
     private Object build(String value) {
         if (Double.class.isAssignableFrom(domainType) || double.class.isAssignableFrom(domainType)) {
             return new Double(value);</diff>
      <filename>flapjack-cobol/src/main/java/flapjack/cobol/util/CobolDecimalTextValueConverter.java</filename>
    </modified>
    <modified>
      <diff>@@ -16,11 +16,20 @@ import flapjack.util.ConversionException;
 import junit.framework.TestCase;
 
 import java.math.BigDecimal;
+import java.util.Arrays;
 
 
 public class CobolDecimalTextValueConverterTest extends TestCase {
 
-    public void test_notEnoughData() {
+    public void test_toBytes_WithNull() {
+        assertTrue(Arrays.equals(new byte[0], converter(Double.class, &quot;9v9&quot;).toBytes(null)));
+    }
+    
+    public void test_toBytes_WithValue() {
+        assertTrue(Arrays.equals(&quot;12&quot;.getBytes(), converter(Double.class, &quot;9v9&quot;).toBytes(new Double(1.2))));
+    }
+    
+    public void test_toDomain_notEnoughData() {
         try {
             converter(Double.class, &quot;9v99&quot;).toDomain(&quot;1&quot;.getBytes());
             fail();
@@ -29,31 +38,31 @@ public class CobolDecimalTextValueConverterTest extends TestCase {
         }
     }
 
-    public void test_BigDecimal() {
+    public void test_toDomain_BigDecimal() {
         assertEquals(new BigDecimal(&quot;1.2&quot;), converter(BigDecimal.class, &quot;9v9&quot;).toDomain(&quot;12&quot;.getBytes()));
     }
 
-    public void test_float() {
+    public void test_toDomain_float() {
         assertEquals(new Float(1.2), converter(float.class, &quot;9v9&quot;).toDomain(&quot;12&quot;.getBytes()));
     }
 
-    public void test_Float() {
+    public void test_toDomain_Float() {
         assertEquals(new Float(1.2), converter(Float.class, &quot;9v9&quot;).toDomain(&quot;12&quot;.getBytes()));
     }
 
-    public void test_double() {
+    public void test_toDomain_double() {
         assertEquals(new Double(1.2), converter(double.class, &quot;9v9&quot;).toDomain(&quot;12&quot;.getBytes()));
     }
 
-    public void test_Double() {
+    public void test_toDomain_Double() {
         assertEquals(new Double(1.2), converter(Double.class, &quot;9v9&quot;).toDomain(&quot;12&quot;.getBytes()));
     }
 
-    public void test_NoBytes() {
+    public void test_toDomain_NoBytes() {
         assertNull(converter(Double.class, &quot;9v9&quot;).toDomain(new byte[0]));
     }
 
-    public void test_NullBytes() {
+    public void test_toDomain_NullBytes() {
         assertNull(converter(Double.class, &quot;9v9&quot;).toDomain(null));
     }
 </diff>
      <filename>flapjack-cobol/src/test/java/flapjack/cobol/util/CobolDecimalTextValueConverterTest.java</filename>
    </modified>
    <modified>
      <diff>@@ -15,9 +15,13 @@ package flapjack.example;
 import flapjack.annotation.Field;
 import flapjack.annotation.Record;
 import flapjack.annotation.model.AnnotatedObjectMappingStore;
+import flapjack.builder.RecordBuilder;
+import flapjack.builder.SameBuilderRecordLayoutResolver;
 import flapjack.cobol.layout.CobolRecordLayout;
 import flapjack.cobol.util.CobolTypeConverter;
 import flapjack.io.LineRecordReader;
+import flapjack.io.LineRecordWriter;
+import flapjack.io.StreamRecordWriter;
 import flapjack.layout.RecordLayout;
 import flapjack.model.RecordFactory;
 import flapjack.model.SameRecordFactoryResolver;
@@ -27,12 +31,15 @@ import flapjack.parser.SameRecordLayoutResolver;
 import junit.framework.TestCase;
 
 import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.util.Arrays;
 
 
 public class CobolTest extends TestCase {
     private AnnotatedObjectMappingStore objectMappingStore;
+    private CobolTypeConverter typeConverter;
+    private LoanRecordLayout recordLayout;
 
     public void setUp() {
         /**
@@ -41,6 +48,29 @@ public class CobolTest extends TestCase {
          */
         objectMappingStore = new AnnotatedObjectMappingStore();
         objectMappingStore.setPackages(Arrays.asList(&quot;flapjack.example&quot;));
+        typeConverter = new CobolTypeConverter();
+        recordLayout = new LoanRecordLayout();
+    }
+
+    public void test_build() throws Exception {
+        /**
+         * Initialize the RecordBuilder
+         */
+        RecordBuilder builder = new RecordBuilder();
+        builder.setObjectMappingStore(objectMappingStore);
+        builder.setTypeConverter(typeConverter);
+        builder.setBuilderRecordLayoutResolver(new SameBuilderRecordLayoutResolver(recordLayout));
+
+        Loan loan = new Loan();
+        loan.ssn = &quot;123456789&quot;;
+        loan.name = &quot;JOE A SCHMOE&quot;;
+        loan.amount = 1500;
+        loan.rate = 0.12d;
+
+        ByteArrayOutputStream output = new ByteArrayOutputStream();
+        builder.build(loan, new LineRecordWriter(new StreamRecordWriter(output), &quot;\n&quot;));
+
+        assertEquals(&quot;123456789JOE A SCHMOE                  01500012\n&quot;, new String(output.toByteArray()));
     }
 
     public void test_parser() throws IOException {
@@ -50,10 +80,10 @@ public class CobolTest extends TestCase {
          * Initialize the RecordParser with our RecordLayoutResolver and RecordFactoryResolver
          */
         RecordParserImpl recordParser = new RecordParserImpl();
-        recordParser.setRecordLayoutResolver(new SameRecordLayoutResolver(new LoanRecordLayout()));
+        recordParser.setRecordLayoutResolver(new SameRecordLayoutResolver(recordLayout));
         recordParser.setRecordFactoryResolver(new SameRecordFactoryResolver(LoanRecordFactory.class));
         recordParser.setObjectMappingStore(objectMappingStore);
-        recordParser.setTypeConverter(new CobolTypeConverter());
+        recordParser.setTypeConverter(typeConverter);
 
         /**
          * Actually call the parser with our RecordReader</diff>
      <filename>flapjack-example/src/test/java/flapjack/example/CobolTest.java</filename>
    </modified>
    <modified>
      <diff>@@ -55,11 +55,12 @@ public class SingleFieldMapping extends AbstractFieldMapping {
             binaryFieldFactory = new BinaryFieldFactory() {
                 public FieldByteMap build(Object domain, TypeConverter typeConverter, List fieldDefinitions) {
                     FieldByteMap byteMap = new FieldByteMap();
+                    FieldDefinition fieldDefinition = (FieldDefinition) fieldDefinitions.get(0);
                     byte[] bytes = new byte[0];
                     if (domain != null) {
-                        bytes = findValueConverter(domain.getClass(), typeConverter, null).toBytes(domain);
+                        bytes = findValueConverter(domain.getClass(), typeConverter, fieldDefinition).toBytes(domain);
                     }
-                    byteMap.put((FieldDefinition) fieldDefinitions.get(0), bytes);
+                    byteMap.put(fieldDefinition, bytes);
                     return byteMap;
                 }
             };</diff>
      <filename>flapjack/src/main/java/flapjack/model/SingleFieldMapping.java</filename>
    </modified>
    <modified>
      <diff>@@ -76,7 +76,7 @@ public class SingleFieldMappingTest extends MockObjectTestCase {
     public void test_binaryFieldFactory() {
         SimpleFieldDefinition fieldDefinition = new SimpleFieldDefinition(&quot;id&quot;, 0, 0);
 
-        mockTypeConverter.expects(once()).method(&quot;type&quot;).with(eq(String.class), eq(null)).will(returnValue(valueConverter.proxy()));
+        mockTypeConverter.expects(once()).method(&quot;type&quot;).with(eq(String.class), eq(fieldDefinition)).will(returnValue(valueConverter.proxy()));
         valueConverter.expects(once()).method(&quot;toBytes&quot;).with(eq(&quot;value&quot;)).will(returnValue(&quot;binary&quot;.getBytes()));
 
         FieldByteMap byteMap = binaryFactory.build(&quot;value&quot;, (TypeConverter) mockTypeConverter.proxy(), Arrays.asList(new Object[]{fieldDefinition}));</diff>
      <filename>flapjack/src/test/java/flapjack/model/SingleFieldMappingTest.java</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>81ac4a13a4133a1bed8c6f787c8d7b6ca92beb9b</id>
    </parent>
  </parents>
  <author>
    <name>Dan Dudley</name>
    <email>born2snipe@gmail.com</email>
  </author>
  <url>http://github.com/born2snipe/flapjack/commit/d78b36b967b14204f723a33fa3b4472a8468a27c</url>
  <id>d78b36b967b14204f723a33fa3b4472a8468a27c</id>
  <committed-date>2009-10-25T09:20:48-07:00</committed-date>
  <authored-date>2009-10-25T09:20:48-07:00</authored-date>
  <message>updated cobol example to build the record using the auto-conversion</message>
  <tree>e4ebed9b153484042178c5234b87a2d89e146fcb</tree>
  <committer>
    <name>Dan Dudley</name>
    <email>born2snipe@gmail.com</email>
  </committer>
</commit>
