svn commit: r2140 - in development/planet/users/niclas/iso8583: . api/src/main/net/dpml/iso8583/data channels channels/src/test elements elements/src/main/net/dpml/iso8583/data/elements elements/src/main/net/dpml/iso8583/data/representation elements/src/test elements/src/test/net elements/src/test/net/dpml elements/src/test/net/dpml/iso8583 elements/src/test/net/dpml/iso8583/test elements/src/test/net/dpml/iso8583/test/data elements/src/test/net/dpml/iso8583/test/data/elements elements/src/test/net/dpml/iso8583/test/data/manager elements/src/test/net/dpml/iso8583/test/data/representation packaging packaging/src/test

niclas at hedhman.org niclas at hedhman.org
Fri Mar 25 18:31:18 EST 2005


Author: niclas at hedhman.org
Date: Fri Mar 25 18:31:17 2005
New Revision: 2140

Added:
   development/planet/users/niclas/iso8583/api/src/main/net/dpml/iso8583/data/Representation.java   (contents, props changed)
   development/planet/users/niclas/iso8583/channels/src/test/
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/AmountCardHolderBilling.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/AmountCardholderBillingFee.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/AmountReconciliation.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/AmountTransaction.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/AmountsOriginal.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/CardSequenceNumber.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/ContinuationBit.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/ConversionRateCardholderBilling.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/ConversionRateConciliation.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/CountryCodeAcquiringInstitution.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/CountryCodePrimaryAccountNumber.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/DateAndTimeLocalTransaction.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/DateAndTimeTransmission.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/DateCapture.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/DateConversion.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/DateEffective.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/DateExpiration.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/DateReconciliation.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/DateSettlement.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/FunctionCode.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/MerchantCategoryCode.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/MessageErrorIndicator.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/MessageReasonCode.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/PosCapability.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/PosDataCode.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/ProcessingCode.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/ReconciliationIndicator.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/SystemsTraceAuditNumber.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/TransactionLifeCycleIdentificationData.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/XX.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/A.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/AN.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/ANB.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/ANP.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/ANS.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/ANSB.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/AS.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/B.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/N.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/VariableAN.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/VariableANS.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/VariableANSB.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/VariableB.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/VariableN.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/VariableZ.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/XN.java   (contents, props changed)
   development/planet/users/niclas/iso8583/elements/src/test/
   development/planet/users/niclas/iso8583/elements/src/test/net/
   development/planet/users/niclas/iso8583/elements/src/test/net/dpml/
   development/planet/users/niclas/iso8583/elements/src/test/net/dpml/iso8583/
   development/planet/users/niclas/iso8583/elements/src/test/net/dpml/iso8583/test/
   development/planet/users/niclas/iso8583/elements/src/test/net/dpml/iso8583/test/data/
   development/planet/users/niclas/iso8583/elements/src/test/net/dpml/iso8583/test/data/elements/
   development/planet/users/niclas/iso8583/elements/src/test/net/dpml/iso8583/test/data/manager/
   development/planet/users/niclas/iso8583/elements/src/test/net/dpml/iso8583/test/data/representation/
   development/planet/users/niclas/iso8583/packaging/src/test/
Removed:
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/TEMPLATE.tjava
Modified:
   development/planet/users/niclas/iso8583/channels/channels.iml
   development/planet/users/niclas/iso8583/elements/elements.iml
   development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/PrimaryAccountNumber.java
   development/planet/users/niclas/iso8583/iso8583.iws
   development/planet/users/niclas/iso8583/packaging/packaging.iml
Log:
New strategy for handling the endless number of fields and formatting in the ISO8583 specification. By separating each field type into a class, it will be possible to make more fine grain checks that the data is correct.

Added: development/planet/users/niclas/iso8583/api/src/main/net/dpml/iso8583/data/Representation.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/api/src/main/net/dpml/iso8583/data/Representation.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data;
+
+
+public interface Representation
+{
+
+    void validate( Object obj );
+
+
+    String format( Object obj );
+}

Modified: development/planet/users/niclas/iso8583/channels/channels.iml
==============================================================================
--- development/planet/users/niclas/iso8583/channels/channels.iml	(original)
+++ development/planet/users/niclas/iso8583/channels/channels.iml	Fri Mar 25 18:31:17 2005
@@ -7,6 +7,7 @@
     <exclude-exploded />
     <content url="file://$MODULE_DIR$">
       <sourceFolder url="file://$MODULE_DIR$/src/main" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test" isTestSource="true" />
     </content>
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />

Modified: development/planet/users/niclas/iso8583/elements/elements.iml
==============================================================================
--- development/planet/users/niclas/iso8583/elements/elements.iml	(original)
+++ development/planet/users/niclas/iso8583/elements/elements.iml	Fri Mar 25 18:31:17 2005
@@ -7,12 +7,14 @@
     <exclude-exploded />
     <content url="file://$MODULE_DIR$">
       <sourceFolder url="file://$MODULE_DIR$/src/main" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test" isTestSource="true" />
     </content>
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />
     <orderEntry type="module" module-name="api" />
     <orderEntry type="library" name="Metro Public" level="application" />
     <orderEntry type="library" name="JPos" level="project" />
+    <orderEntry type="library" name="Transit" level="application" />
     <orderEntryProperties />
   </component>
 </module>

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/AmountCardHolderBilling.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/AmountCardHolderBilling.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.elements;
+
+
+import net.dpml.iso8583.data.DataElement;
+import net.dpml.iso8583.data.Representation;
+import net.dpml.iso8583.data.representation.N;
+import net.dpml.logging.Logger;
+import net.dpml.parameters.Parameters;
+import org.jpos.iso.ISOException;
+import org.jpos.iso.ISOMsg;
+
+
+/** <code>DataElement</code> implementation of AmountCardHolderBilling.
+ *
+ * @author <a href="mailto:niclas at hedhman.org">Niclas Hedhman</a>
+ *
+ * @see net.dpml.iso8583.data.DataElement
+ * @see net.dpml.iso8583.data.DataElementManager
+ *
+ * @metro.component lifestyle="transient" name="AmountCardHolderBilling"
+ * @metro.service type="net.dpml.iso8583.data.DataElement"
+ */
+public class AmountCardHolderBilling
+    implements DataElement
+{
+    /** The ISO8583 bit number */
+    static private int ISO8583_BIT_NUMBER = 6;
+
+    /** ISO8583 Representation formatter and validator. */
+    static private Representation m_Representation;
+
+    private String m_value;
+    private Logger m_logger;
+
+    /** Sets up the element type in a generic fashion. */
+    static
+    {
+        m_Representation = new N( 16 );
+    }
+
+    /** Constructor of AmountCardHolderBilling.
+     *
+     * @param logger supplied <code>Logger</code> instance.
+     * @param params supplied configuration <code>Parameters</code>
+     */
+    public AmountCardHolderBilling( Logger logger, Parameters params )
+    {
+        m_logger = logger;
+        m_value = params.getParameter( "value", "" );
+    }
+
+    /** Instructs the DataElement to populate the ISOMsg object.
+     * <p>
+     *  <code>DataElement</code> implementations are responsible to know
+     *  which field (a.k.a. bit) that it should populate in the
+     *  <code>ISOMsg</code> structure. The caller must know whether the
+     *  field is required or not, and if the <code>DataElement</code> has
+     *  not been properly set, either in the course of the session or as
+     *  part of its initialization, it should throw an ISOException.
+     * </p>
+     * <p>
+     *  If the <code>DataElement</code> is nested, it is responsible for
+     *  calling the <code>populate</code> method for each of the composite
+     *  <code>DataElements</code>.
+     * </p>
+     * @param message the <code>ISOMsg</code> instance to populate with the
+     *        value of the <code>DataElement</code>.
+     * @param required if true, the <code>DataElement</code> must make sure
+     *        that its value object has been set during the session.
+     *
+     * @exception org.jpos.iso.ISOException if the ISOMsg can not be populated.
+     */
+    public void populate( ISOMsg message, boolean required )
+        throws ISOException
+    {
+        if( m_logger.isDebugEnabled() )
+        {
+            m_logger.debug( "populate: " + message );
+        }
+
+        if( required && m_value == null )
+        {
+            throw new ISOException( "Required data element has not been set: PrimaryAccountNumber" );
+        }
+        message.set( ISO8583_BIT_NUMBER, m_value );
+    }
+
+    /** Sets the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     * <p>
+     * The provided argument must be of the correct type, and be within
+     * its specification defined bounds, or an <code>IllegalArgumentException
+     * </code> will be thrown.
+     * </p>
+     * @exception IllegalArgumentException if the provided <code>value</code>
+     *            argument is of the wrong class, contains illegal values,
+     *            or is null.
+     */
+    public void set( Object value )
+        throws IllegalArgumentException
+    {
+        m_Representation.validate( value );
+        m_value = m_Representation.format( value );
+    }
+
+    /** Returns the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     *
+     * @return the value object of the DataElement, which is the same object
+     *         that has previously been set with the <code>set()</code>
+     *         method.
+     */
+    public Object get()
+    {
+        return m_value;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/AmountCardholderBillingFee.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/AmountCardholderBillingFee.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.elements;
+
+
+import net.dpml.iso8583.data.DataElement;
+import net.dpml.iso8583.data.Representation;
+import net.dpml.iso8583.data.representation.N;
+import net.dpml.logging.Logger;
+import net.dpml.parameters.Parameters;
+import org.jpos.iso.ISOException;
+import org.jpos.iso.ISOMsg;
+
+
+/** <code>DataElement</code> implementation of AmountCardholderBillingFee.
+ *
+ * @author <a href="mailto:niclas at hedhman.org">Niclas Hedhman</a>
+ *
+ * @see net.dpml.iso8583.data.DataElement
+ * @see net.dpml.iso8583.data.DataElementManager
+ *
+ * @metro.component lifestyle="transient" name="AmountCardholderBillingFee"
+ * @metro.service type="net.dpml.iso8583.data.DataElement"
+ */
+public class AmountCardholderBillingFee
+    implements DataElement
+{
+    /** The ISO8583 bit number */
+    static private int ISO8583_BIT_NUMBER = 8;
+
+    /** ISO8583 Representation formatter and validator. */
+    static private Representation m_Representation;
+
+    private String m_value;
+    private Logger m_logger;
+
+    /** Sets up the element type in a generic fashion. */
+    static
+    {
+        m_Representation = new N( 12 );
+    }
+
+    /** Constructor of AmountCardholderBillingFee.
+     *
+     * @param logger supplied <code>Logger</code> instance.
+     * @param params supplied configuration <code>Parameters</code>
+     */
+    public AmountCardholderBillingFee( Logger logger, Parameters params )
+    {
+        m_logger = logger;
+        m_value = params.getParameter( "value", "" );
+    }
+
+    /** Instructs the DataElement to populate the ISOMsg object.
+     * <p>
+     *  <code>DataElement</code> implementations are responsible to know
+     *  which field (a.k.a. bit) that it should populate in the
+     *  <code>ISOMsg</code> structure. The caller must know whether the
+     *  field is required or not, and if the <code>DataElement</code> has
+     *  not been properly set, either in the course of the session or as
+     *  part of its initialization, it should throw an ISOException.
+     * </p>
+     * <p>
+     *  If the <code>DataElement</code> is nested, it is responsible for
+     *  calling the <code>populate</code> method for each of the composite
+     *  <code>DataElements</code>.
+     * </p>
+     * @param message the <code>ISOMsg</code> instance to populate with the
+     *        value of the <code>DataElement</code>.
+     * @param required if true, the <code>DataElement</code> must make sure
+     *        that its value object has been set during the session.
+     *
+     * @exception org.jpos.iso.ISOException if the ISOMsg can not be populated.
+     */
+    public void populate( ISOMsg message, boolean required )
+        throws ISOException
+    {
+        if( m_logger.isDebugEnabled() )
+        {
+            m_logger.debug( "populate: " + message );
+        }
+
+        if( required && m_value == null )
+        {
+            throw new ISOException( "Required data element has not been set: PrimaryAccountNumber" );
+        }
+        message.set( ISO8583_BIT_NUMBER, m_value );
+    }
+
+    /** Sets the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     * <p>
+     * The provided argument must be of the correct type, and be within
+     * its specification defined bounds, or an <code>IllegalArgumentException
+     * </code> will be thrown.
+     * </p>
+     * @exception IllegalArgumentException if the provided <code>value</code>
+     *            argument is of the wrong class, contains illegal values,
+     *            or is null.
+     */
+    public void set( Object value )
+        throws IllegalArgumentException
+    {
+        m_Representation.validate( value );
+        m_value = m_Representation.format( value );
+    }
+
+    /** Returns the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     *
+     * @return the value object of the DataElement, which is the same object
+     *         that has previously been set with the <code>set()</code>
+     *         method.
+     */
+    public Object get()
+    {
+        return m_value;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/AmountReconciliation.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/AmountReconciliation.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.elements;
+
+
+import net.dpml.iso8583.data.DataElement;
+import net.dpml.iso8583.data.Representation;
+import net.dpml.iso8583.data.representation.N;
+import net.dpml.logging.Logger;
+import net.dpml.parameters.Parameters;
+import org.jpos.iso.ISOException;
+import org.jpos.iso.ISOMsg;
+
+
+/** <code>DataElement</code> implementation of AmountReconciliation.
+ *
+ * @author <a href="mailto:niclas at hedhman.org">Niclas Hedhman</a>
+ *
+ * @see net.dpml.iso8583.data.DataElement
+ * @see net.dpml.iso8583.data.DataElementManager
+ *
+ * @metro.component lifestyle="transient" name="AmountReconciliation"
+ * @metro.service type="net.dpml.iso8583.data.DataElement"
+ */
+public class AmountReconciliation
+    implements DataElement
+{
+    /** The ISO8583 bit number */
+    static private int ISO8583_BIT_NUMBER = 5;
+
+    /** ISO8583 Representation formatter and validator. */
+    static private Representation m_Representation;
+
+    private String m_value;
+    private Logger m_logger;
+
+    /** Sets up the element type in a generic fashion. */
+    static
+    {
+        m_Representation = new N( 16 );
+    }
+
+    /** Constructor of AmountReconciliation.
+     *
+     * @param logger supplied <code>Logger</code> instance.
+     * @param params supplied configuration <code>Parameters</code>
+     */
+    public AmountReconciliation( Logger logger, Parameters params )
+    {
+        m_logger = logger;
+        m_value = params.getParameter( "value", "" );
+    }
+
+    /** Instructs the DataElement to populate the ISOMsg object.
+     * <p>
+     *  <code>DataElement</code> implementations are responsible to know
+     *  which field (a.k.a. bit) that it should populate in the
+     *  <code>ISOMsg</code> structure. The caller must know whether the
+     *  field is required or not, and if the <code>DataElement</code> has
+     *  not been properly set, either in the course of the session or as
+     *  part of its initialization, it should throw an ISOException.
+     * </p>
+     * <p>
+     *  If the <code>DataElement</code> is nested, it is responsible for
+     *  calling the <code>populate</code> method for each of the composite
+     *  <code>DataElements</code>.
+     * </p>
+     * @param message the <code>ISOMsg</code> instance to populate with the
+     *        value of the <code>DataElement</code>.
+     * @param required if true, the <code>DataElement</code> must make sure
+     *        that its value object has been set during the session.
+     *
+     * @exception org.jpos.iso.ISOException if the ISOMsg can not be populated.
+     */
+    public void populate( ISOMsg message, boolean required )
+        throws ISOException
+    {
+        if( m_logger.isDebugEnabled() )
+        {
+            m_logger.debug( "populate: " + message );
+        }
+
+        if( required && m_value == null )
+        {
+            throw new ISOException( "Required data element has not been set: PrimaryAccountNumber" );
+        }
+        message.set( ISO8583_BIT_NUMBER, m_value );
+    }
+
+    /** Sets the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     * <p>
+     * The provided argument must be of the correct type, and be within
+     * its specification defined bounds, or an <code>IllegalArgumentException
+     * </code> will be thrown.
+     * </p>
+     * @exception IllegalArgumentException if the provided <code>value</code>
+     *            argument is of the wrong class, contains illegal values,
+     *            or is null.
+     */
+    public void set( Object value )
+        throws IllegalArgumentException
+    {
+        m_Representation.validate( value );
+        m_value = m_Representation.format( value );
+    }
+
+    /** Returns the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     *
+     * @return the value object of the DataElement, which is the same object
+     *         that has previously been set with the <code>set()</code>
+     *         method.
+     */
+    public Object get()
+    {
+        return m_value;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/AmountTransaction.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/AmountTransaction.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.elements;
+
+
+import net.dpml.iso8583.data.DataElement;
+import net.dpml.iso8583.data.Representation;
+import net.dpml.iso8583.data.representation.N;
+import net.dpml.logging.Logger;
+import net.dpml.parameters.Parameters;
+import org.jpos.iso.ISOException;
+import org.jpos.iso.ISOMsg;
+
+
+/** <code>DataElement</code> implementation of AmountTransaction.
+ *
+ * @author <a href="mailto:niclas at hedhman.org">Niclas Hedhman</a>
+ *
+ * @see net.dpml.iso8583.data.DataElement
+ * @see net.dpml.iso8583.data.DataElementManager
+ *
+ * @metro.component lifestyle="transient" name="AmountTransaction"
+ * @metro.service type="net.dpml.iso8583.data.DataElement"
+ */
+public class AmountTransaction
+    implements DataElement
+{
+    /** The ISO8583 bit number */
+    static private int ISO8583_BIT_NUMBER = 4;
+
+    /** ISO8583 Representation formatter and validator. */
+    static private Representation m_Representation;
+
+    private String m_value;
+    private Logger m_logger;
+
+    /** Sets up the element type in a generic fashion. */
+    static
+    {
+        m_Representation = new N( 16 );
+    }
+
+    /** Constructor of AmountTransaction.
+     *
+     * @param logger supplied <code>Logger</code> instance.
+     * @param params supplied configuration <code>Parameters</code>
+     */
+    public AmountTransaction( Logger logger, Parameters params )
+    {
+        m_logger = logger;
+        m_value = params.getParameter( "value", "" );
+    }
+
+    /** Instructs the DataElement to populate the ISOMsg object.
+     * <p>
+     *  <code>DataElement</code> implementations are responsible to know
+     *  which field (a.k.a. bit) that it should populate in the
+     *  <code>ISOMsg</code> structure. The caller must know whether the
+     *  field is required or not, and if the <code>DataElement</code> has
+     *  not been properly set, either in the course of the session or as
+     *  part of its initialization, it should throw an ISOException.
+     * </p>
+     * <p>
+     *  If the <code>DataElement</code> is nested, it is responsible for
+     *  calling the <code>populate</code> method for each of the composite
+     *  <code>DataElements</code>.
+     * </p>
+     * @param message the <code>ISOMsg</code> instance to populate with the
+     *        value of the <code>DataElement</code>.
+     * @param required if true, the <code>DataElement</code> must make sure
+     *        that its value object has been set during the session.
+     *
+     * @exception org.jpos.iso.ISOException if the ISOMsg can not be populated.
+     */
+    public void populate( ISOMsg message, boolean required )
+        throws ISOException
+    {
+        if( m_logger.isDebugEnabled() )
+        {
+            m_logger.debug( "populate: " + message );
+        }
+
+        if( required && m_value == null )
+        {
+            throw new ISOException( "Required data element has not been set: PrimaryAccountNumber" );
+        }
+        message.set( ISO8583_BIT_NUMBER, m_value );
+    }
+
+    /** Sets the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     * <p>
+     * The provided argument must be of the correct type, and be within
+     * its specification defined bounds, or an <code>IllegalArgumentException
+     * </code> will be thrown.
+     * </p>
+     * @exception IllegalArgumentException if the provided <code>value</code>
+     *            argument is of the wrong class, contains illegal values,
+     *            or is null.
+     */
+    public void set( Object value )
+        throws IllegalArgumentException
+    {
+        m_Representation.validate( value );
+        m_value = m_Representation.format( value );
+    }
+
+    /** Returns the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     *
+     * @return the value object of the DataElement, which is the same object
+     *         that has previously been set with the <code>set()</code>
+     *         method.
+     */
+    public Object get()
+    {
+        return m_value;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/AmountsOriginal.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/AmountsOriginal.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.elements;
+
+
+import net.dpml.iso8583.data.DataElement;
+import net.dpml.iso8583.data.Representation;
+import net.dpml.iso8583.data.representation.N;
+import net.dpml.logging.Logger;
+import net.dpml.parameters.Parameters;
+import org.jpos.iso.ISOException;
+import org.jpos.iso.ISOMsg;
+
+
+/** <code>DataElement</code> implementation of AmountsOriginal.
+ *
+ * @author <a href="mailto:niclas at hedhman.org">Niclas Hedhman</a>
+ *
+ * @see net.dpml.iso8583.data.DataElement
+ * @see net.dpml.iso8583.data.DataElementManager
+ *
+ * @metro.component lifestyle="transient" name="AmountsOriginal"
+ * @metro.service type="net.dpml.iso8583.data.DataElement"
+ */
+public class AmountsOriginal
+    implements DataElement
+{
+    /** The ISO8583 bit number */
+    static private int ISO8583_BIT_NUMBER = 30;
+
+    /** ISO8583 Representation formatter and validator. */
+    static private Representation m_Representation;
+
+    private String m_value;
+    private Logger m_logger;
+
+    /** Sets up the element type in a generic fashion. */
+    static
+    {
+        m_Representation = new N( 32 );
+    }
+
+    /** Constructor of AmountsOriginal.
+     *
+     * @param logger supplied <code>Logger</code> instance.
+     * @param params supplied configuration <code>Parameters</code>
+     */
+    public AmountsOriginal( Logger logger, Parameters params )
+    {
+        m_logger = logger;
+        m_value = params.getParameter( "value", "" );
+    }
+
+    /** Instructs the DataElement to populate the ISOMsg object.
+     * <p>
+     *  <code>DataElement</code> implementations are responsible to know
+     *  which field (a.k.a. bit) that it should populate in the
+     *  <code>ISOMsg</code> structure. The caller must know whether the
+     *  field is required or not, and if the <code>DataElement</code> has
+     *  not been properly set, either in the course of the session or as
+     *  part of its initialization, it should throw an ISOException.
+     * </p>
+     * <p>
+     *  If the <code>DataElement</code> is nested, it is responsible for
+     *  calling the <code>populate</code> method for each of the composite
+     *  <code>DataElements</code>.
+     * </p>
+     * @param message the <code>ISOMsg</code> instance to populate with the
+     *        value of the <code>DataElement</code>.
+     * @param required if true, the <code>DataElement</code> must make sure
+     *        that its value object has been set during the session.
+     *
+     * @exception org.jpos.iso.ISOException if the ISOMsg can not be populated.
+     */
+    public void populate( ISOMsg message, boolean required )
+        throws ISOException
+    {
+        if( m_logger.isDebugEnabled() )
+        {
+            m_logger.debug( "populate: " + message );
+        }
+
+        if( required && m_value == null )
+        {
+            throw new ISOException( "Required data element has not been set: PrimaryAccountNumber" );
+        }
+        message.set( ISO8583_BIT_NUMBER, m_value );
+    }
+
+    /** Sets the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     * <p>
+     * The provided argument must be of the correct type, and be within
+     * its specification defined bounds, or an <code>IllegalArgumentException
+     * </code> will be thrown.
+     * </p>
+     * @exception IllegalArgumentException if the provided <code>value</code>
+     *            argument is of the wrong class, contains illegal values,
+     *            or is null.
+     */
+    public void set( Object value )
+        throws IllegalArgumentException
+    {
+        m_Representation.validate( value );
+        m_value = m_Representation.format( value );
+    }
+
+    /** Returns the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     *
+     * @return the value object of the DataElement, which is the same object
+     *         that has previously been set with the <code>set()</code>
+     *         method.
+     */
+    public Object get()
+    {
+        return m_value;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/CardSequenceNumber.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/CardSequenceNumber.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.elements;
+
+
+import net.dpml.iso8583.data.DataElement;
+import net.dpml.iso8583.data.Representation;
+import net.dpml.iso8583.data.representation.N;
+import net.dpml.logging.Logger;
+import net.dpml.parameters.Parameters;
+import org.jpos.iso.ISOException;
+import org.jpos.iso.ISOMsg;
+
+
+/** <code>DataElement</code> implementation of CardSequenceNumber.
+ *
+ * @author <a href="mailto:niclas at hedhman.org">Niclas Hedhman</a>
+ *
+ * @see net.dpml.iso8583.data.DataElement
+ * @see net.dpml.iso8583.data.DataElementManager
+ *
+ * @metro.component lifestyle="transient" name="CardSequenceNumber"
+ * @metro.service type="net.dpml.iso8583.data.DataElement"
+ */
+public class CardSequenceNumber
+    implements DataElement
+{
+    /** The ISO8583 bit number */
+    static private int ISO8583_BIT_NUMBER = 23;
+
+    /** ISO8583 Representation formatter and validator. */
+    static private Representation m_Representation;
+
+    private String m_value;
+    private Logger m_logger;
+
+    /** Sets up the element type in a generic fashion. */
+    static
+    {
+        m_Representation = new N( 3 );
+    }
+
+    /** Constructor of CardSequenceNumber.
+     *
+     * @param logger supplied <code>Logger</code> instance.
+     * @param params supplied configuration <code>Parameters</code>
+     */
+    public CardSequenceNumber( Logger logger, Parameters params )
+    {
+        m_logger = logger;
+        m_value = params.getParameter( "value", "" );
+    }
+
+    /** Instructs the DataElement to populate the ISOMsg object.
+     * <p>
+     *  <code>DataElement</code> implementations are responsible to know
+     *  which field (a.k.a. bit) that it should populate in the
+     *  <code>ISOMsg</code> structure. The caller must know whether the
+     *  field is required or not, and if the <code>DataElement</code> has
+     *  not been properly set, either in the course of the session or as
+     *  part of its initialization, it should throw an ISOException.
+     * </p>
+     * <p>
+     *  If the <code>DataElement</code> is nested, it is responsible for
+     *  calling the <code>populate</code> method for each of the composite
+     *  <code>DataElements</code>.
+     * </p>
+     * @param message the <code>ISOMsg</code> instance to populate with the
+     *        value of the <code>DataElement</code>.
+     * @param required if true, the <code>DataElement</code> must make sure
+     *        that its value object has been set during the session.
+     *
+     * @exception org.jpos.iso.ISOException if the ISOMsg can not be populated.
+     */
+    public void populate( ISOMsg message, boolean required )
+        throws ISOException
+    {
+        if( m_logger.isDebugEnabled() )
+        {
+            m_logger.debug( "populate: " + message );
+        }
+
+        if( required && m_value == null )
+        {
+            throw new ISOException( "Required data element has not been set: PrimaryAccountNumber" );
+        }
+        message.set( ISO8583_BIT_NUMBER, m_value );
+    }
+
+    /** Sets the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     * <p>
+     * The provided argument must be of the correct type, and be within
+     * its specification defined bounds, or an <code>IllegalArgumentException
+     * </code> will be thrown.
+     * </p>
+     * @exception IllegalArgumentException if the provided <code>value</code>
+     *            argument is of the wrong class, contains illegal values,
+     *            or is null.
+     */
+    public void set( Object value )
+        throws IllegalArgumentException
+    {
+        m_Representation.validate( value );
+        m_value = m_Representation.format( value );
+    }
+
+    /** Returns the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     *
+     * @return the value object of the DataElement, which is the same object
+     *         that has previously been set with the <code>set()</code>
+     *         method.
+     */
+    public Object get()
+    {
+        return m_value;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/ContinuationBit.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/ContinuationBit.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.elements;
+
+
+import net.dpml.iso8583.data.DataElement;
+import net.dpml.iso8583.data.Representation;
+import net.dpml.iso8583.data.representation.B;
+import net.dpml.logging.Logger;
+import net.dpml.parameters.Parameters;
+import org.jpos.iso.ISOException;
+import org.jpos.iso.ISOMsg;
+
+
+/** <code>DataElement</code> implementation of ContinuationBit.
+ *
+ * @author <a href="mailto:niclas at hedhman.org">Niclas Hedhman</a>
+ *
+ * @see net.dpml.iso8583.data.DataElement
+ * @see net.dpml.iso8583.data.DataElementManager
+ *
+ * @metro.component lifestyle="transient" name="ContinuationBit"
+ * @metro.service type="net.dpml.iso8583.data.DataElement"
+ */
+public class ContinuationBit
+    implements DataElement
+{
+    /** The ISO8583 bit number */
+    static private int ISO8583_BIT_NUMBER = 1;
+
+    /** ISO8583 Representation formatter and validator. */
+    static private Representation m_Representation;
+
+    private String m_value;
+    private Logger m_logger;
+
+    /** Sets up the element type in a generic fashion. */
+    static
+    {
+        m_Representation = new B( 8 );
+    }
+
+    /** Constructor of ContinuationBit.
+     *
+     * @param logger supplied <code>Logger</code> instance.
+     * @param params supplied configuration <code>Parameters</code>
+     */
+    public ContinuationBit( Logger logger, Parameters params )
+    {
+        m_logger = logger;
+        m_value = params.getParameter( "value", "" );
+    }
+
+    /** Instructs the DataElement to populate the ISOMsg object.
+     * <p>
+     *  <code>DataElement</code> implementations are responsible to know
+     *  which field (a.k.a. bit) that it should populate in the
+     *  <code>ISOMsg</code> structure. The caller must know whether the
+     *  field is required or not, and if the <code>DataElement</code> has
+     *  not been properly set, either in the course of the session or as
+     *  part of its initialization, it should throw an ISOException.
+     * </p>
+     * <p>
+     *  If the <code>DataElement</code> is nested, it is responsible for
+     *  calling the <code>populate</code> method for each of the composite
+     *  <code>DataElements</code>.
+     * </p>
+     * @param message the <code>ISOMsg</code> instance to populate with the
+     *        value of the <code>DataElement</code>.
+     * @param required if true, the <code>DataElement</code> must make sure
+     *        that its value object has been set during the session.
+     *
+     * @exception org.jpos.iso.ISOException if the ISOMsg can not be populated.
+     */
+    public void populate( ISOMsg message, boolean required )
+        throws ISOException
+    {
+        if( m_logger.isDebugEnabled() )
+        {
+            m_logger.debug( "populate: " + message );
+        }
+
+        if( required && m_value == null )
+        {
+            throw new ISOException( "Required data element has not been set: PrimaryAccountNumber" );
+        }
+        message.set( ISO8583_BIT_NUMBER, m_value );
+    }
+
+    /** Sets the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     * <p>
+     * The provided argument must be of the correct type, and be within
+     * its specification defined bounds, or an <code>IllegalArgumentException
+     * </code> will be thrown.
+     * </p>
+     * @exception IllegalArgumentException if the provided <code>value</code>
+     *            argument is of the wrong class, contains illegal values,
+     *            or is null.
+     */
+    public void set( Object value )
+        throws IllegalArgumentException
+    {
+        m_Representation.validate( value );
+        m_value = m_Representation.format( value );
+    }
+
+    /** Returns the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     *
+     * @return the value object of the DataElement, which is the same object
+     *         that has previously been set with the <code>set()</code>
+     *         method.
+     */
+    public Object get()
+    {
+        return m_value;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/ConversionRateCardholderBilling.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/ConversionRateCardholderBilling.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.elements;
+
+
+import net.dpml.iso8583.data.DataElement;
+import net.dpml.iso8583.data.Representation;
+import net.dpml.iso8583.data.representation.N;
+import net.dpml.logging.Logger;
+import net.dpml.parameters.Parameters;
+import org.jpos.iso.ISOException;
+import org.jpos.iso.ISOMsg;
+
+
+/** <code>DataElement</code> implementation of ConversionRateCardholderBilling.
+ *
+ * @author <a href="mailto:niclas at hedhman.org">Niclas Hedhman</a>
+ *
+ * @see net.dpml.iso8583.data.DataElement
+ * @see net.dpml.iso8583.data.DataElementManager
+ *
+ * @metro.component lifestyle="transient" name="ConversionRateCardholderBilling"
+ * @metro.service type="net.dpml.iso8583.data.DataElement"
+ */
+public class ConversionRateCardholderBilling
+    implements DataElement
+{
+    /** The ISO8583 bit number */
+    static private int ISO8583_BIT_NUMBER = 10;
+
+    /** ISO8583 Representation formatter and validator. */
+    static private Representation m_Representation;
+
+    private String m_value;
+    private Logger m_logger;
+
+    /** Sets up the element type in a generic fashion. */
+    static
+    {
+        m_Representation = new N( 8 );
+    }
+
+    /** Constructor of ConversionRateCardholderBilling.
+     *
+     * @param logger supplied <code>Logger</code> instance.
+     * @param params supplied configuration <code>Parameters</code>
+     */
+    public ConversionRateCardholderBilling( Logger logger, Parameters params )
+    {
+        m_logger = logger;
+        m_value = params.getParameter( "value", "" );
+    }
+
+    /** Instructs the DataElement to populate the ISOMsg object.
+     * <p>
+     *  <code>DataElement</code> implementations are responsible to know
+     *  which field (a.k.a. bit) that it should populate in the
+     *  <code>ISOMsg</code> structure. The caller must know whether the
+     *  field is required or not, and if the <code>DataElement</code> has
+     *  not been properly set, either in the course of the session or as
+     *  part of its initialization, it should throw an ISOException.
+     * </p>
+     * <p>
+     *  If the <code>DataElement</code> is nested, it is responsible for
+     *  calling the <code>populate</code> method for each of the composite
+     *  <code>DataElements</code>.
+     * </p>
+     * @param message the <code>ISOMsg</code> instance to populate with the
+     *        value of the <code>DataElement</code>.
+     * @param required if true, the <code>DataElement</code> must make sure
+     *        that its value object has been set during the session.
+     *
+     * @exception org.jpos.iso.ISOException if the ISOMsg can not be populated.
+     */
+    public void populate( ISOMsg message, boolean required )
+        throws ISOException
+    {
+        if( m_logger.isDebugEnabled() )
+        {
+            m_logger.debug( "populate: " + message );
+        }
+
+        if( required && m_value == null )
+        {
+            throw new ISOException( "Required data element has not been set: PrimaryAccountNumber" );
+        }
+        message.set( ISO8583_BIT_NUMBER, m_value );
+    }
+
+    /** Sets the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     * <p>
+     * The provided argument must be of the correct type, and be within
+     * its specification defined bounds, or an <code>IllegalArgumentException
+     * </code> will be thrown.
+     * </p>
+     * @exception IllegalArgumentException if the provided <code>value</code>
+     *            argument is of the wrong class, contains illegal values,
+     *            or is null.
+     */
+    public void set( Object value )
+        throws IllegalArgumentException
+    {
+        m_Representation.validate( value );
+        m_value = m_Representation.format( value );
+    }
+
+    /** Returns the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     *
+     * @return the value object of the DataElement, which is the same object
+     *         that has previously been set with the <code>set()</code>
+     *         method.
+     */
+    public Object get()
+    {
+        return m_value;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/ConversionRateConciliation.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/ConversionRateConciliation.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.elements;
+
+
+import net.dpml.iso8583.data.DataElement;
+import net.dpml.iso8583.data.Representation;
+import net.dpml.iso8583.data.representation.N;
+import net.dpml.logging.Logger;
+import net.dpml.parameters.Parameters;
+import org.jpos.iso.ISOException;
+import org.jpos.iso.ISOMsg;
+
+
+/** <code>DataElement</code> implementation of ConversionRateConciliation.
+ *
+ * @author <a href="mailto:niclas at hedhman.org">Niclas Hedhman</a>
+ *
+ * @see net.dpml.iso8583.data.DataElement
+ * @see net.dpml.iso8583.data.DataElementManager
+ *
+ * @metro.component lifestyle="transient" name="ConversionRateConciliation"
+ * @metro.service type="net.dpml.iso8583.data.DataElement"
+ */
+public class ConversionRateConciliation
+    implements DataElement
+{
+    /** The ISO8583 bit number */
+    static private int ISO8583_BIT_NUMBER = 9;
+
+    /** ISO8583 Representation formatter and validator. */
+    static private Representation m_Representation;
+
+    private String m_value;
+    private Logger m_logger;
+
+    /** Sets up the element type in a generic fashion. */
+    static
+    {
+        m_Representation = new N( 8 );
+    }
+
+    /** Constructor of ConversionRateConciliation.
+     *
+     * @param logger supplied <code>Logger</code> instance.
+     * @param params supplied configuration <code>Parameters</code>
+     */
+    public ConversionRateConciliation( Logger logger, Parameters params )
+    {
+        m_logger = logger;
+        m_value = params.getParameter( "value", "" );
+    }
+
+    /** Instructs the DataElement to populate the ISOMsg object.
+     * <p>
+     *  <code>DataElement</code> implementations are responsible to know
+     *  which field (a.k.a. bit) that it should populate in the
+     *  <code>ISOMsg</code> structure. The caller must know whether the
+     *  field is required or not, and if the <code>DataElement</code> has
+     *  not been properly set, either in the course of the session or as
+     *  part of its initialization, it should throw an ISOException.
+     * </p>
+     * <p>
+     *  If the <code>DataElement</code> is nested, it is responsible for
+     *  calling the <code>populate</code> method for each of the composite
+     *  <code>DataElements</code>.
+     * </p>
+     * @param message the <code>ISOMsg</code> instance to populate with the
+     *        value of the <code>DataElement</code>.
+     * @param required if true, the <code>DataElement</code> must make sure
+     *        that its value object has been set during the session.
+     *
+     * @exception org.jpos.iso.ISOException if the ISOMsg can not be populated.
+     */
+    public void populate( ISOMsg message, boolean required )
+        throws ISOException
+    {
+        if( m_logger.isDebugEnabled() )
+        {
+            m_logger.debug( "populate: " + message );
+        }
+
+        if( required && m_value == null )
+        {
+            throw new ISOException( "Required data element has not been set: PrimaryAccountNumber" );
+        }
+        message.set( ISO8583_BIT_NUMBER, m_value );
+    }
+
+    /** Sets the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     * <p>
+     * The provided argument must be of the correct type, and be within
+     * its specification defined bounds, or an <code>IllegalArgumentException
+     * </code> will be thrown.
+     * </p>
+     * @exception IllegalArgumentException if the provided <code>value</code>
+     *            argument is of the wrong class, contains illegal values,
+     *            or is null.
+     */
+    public void set( Object value )
+        throws IllegalArgumentException
+    {
+        m_Representation.validate( value );
+        m_value = m_Representation.format( value );
+    }
+
+    /** Returns the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     *
+     * @return the value object of the DataElement, which is the same object
+     *         that has previously been set with the <code>set()</code>
+     *         method.
+     */
+    public Object get()
+    {
+        return m_value;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/CountryCodeAcquiringInstitution.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/CountryCodeAcquiringInstitution.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.elements;
+
+
+import net.dpml.iso8583.data.DataElement;
+import net.dpml.iso8583.data.Representation;
+import net.dpml.iso8583.data.representation.N;
+import net.dpml.logging.Logger;
+import net.dpml.parameters.Parameters;
+import org.jpos.iso.ISOException;
+import org.jpos.iso.ISOMsg;
+
+
+/** <code>DataElement</code> implementation of CountryCodeAcquiringInstitution.
+ *
+ * @author <a href="mailto:niclas at hedhman.org">Niclas Hedhman</a>
+ *
+ * @see net.dpml.iso8583.data.DataElement
+ * @see net.dpml.iso8583.data.DataElementManager
+ *
+ * @metro.component lifestyle="transient" name="CountryCodeAcquiringInstitution"
+ * @metro.service type="net.dpml.iso8583.data.DataElement"
+ */
+public class CountryCodeAcquiringInstitution
+    implements DataElement
+{
+    /** The ISO8583 bit number */
+    static private int ISO8583_BIT_NUMBER = 19;
+
+    /** ISO8583 Representation formatter and validator. */
+    static private Representation m_Representation;
+
+    private String m_value;
+    private Logger m_logger;
+
+    /** Sets up the element type in a generic fashion. */
+    static
+    {
+        m_Representation = new N( 3 );
+    }
+
+    /** Constructor of CountryCodeAcquiringInstitution.
+     *
+     * @param logger supplied <code>Logger</code> instance.
+     * @param params supplied configuration <code>Parameters</code>
+     */
+    public CountryCodeAcquiringInstitution( Logger logger, Parameters params )
+    {
+        m_logger = logger;
+        m_value = params.getParameter( "value", "" );
+    }
+
+    /** Instructs the DataElement to populate the ISOMsg object.
+     * <p>
+     *  <code>DataElement</code> implementations are responsible to know
+     *  which field (a.k.a. bit) that it should populate in the
+     *  <code>ISOMsg</code> structure. The caller must know whether the
+     *  field is required or not, and if the <code>DataElement</code> has
+     *  not been properly set, either in the course of the session or as
+     *  part of its initialization, it should throw an ISOException.
+     * </p>
+     * <p>
+     *  If the <code>DataElement</code> is nested, it is responsible for
+     *  calling the <code>populate</code> method for each of the composite
+     *  <code>DataElements</code>.
+     * </p>
+     * @param message the <code>ISOMsg</code> instance to populate with the
+     *        value of the <code>DataElement</code>.
+     * @param required if true, the <code>DataElement</code> must make sure
+     *        that its value object has been set during the session.
+     *
+     * @exception org.jpos.iso.ISOException if the ISOMsg can not be populated.
+     */
+    public void populate( ISOMsg message, boolean required )
+        throws ISOException
+    {
+        if( m_logger.isDebugEnabled() )
+        {
+            m_logger.debug( "populate: " + message );
+        }
+
+        if( required && m_value == null )
+        {
+            throw new ISOException( "Required data element has not been set: PrimaryAccountNumber" );
+        }
+        message.set( ISO8583_BIT_NUMBER, m_value );
+    }
+
+    /** Sets the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     * <p>
+     * The provided argument must be of the correct type, and be within
+     * its specification defined bounds, or an <code>IllegalArgumentException
+     * </code> will be thrown.
+     * </p>
+     * @exception IllegalArgumentException if the provided <code>value</code>
+     *            argument is of the wrong class, contains illegal values,
+     *            or is null.
+     */
+    public void set( Object value )
+        throws IllegalArgumentException
+    {
+        m_Representation.validate( value );
+        m_value = m_Representation.format( value );
+    }
+
+    /** Returns the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     *
+     * @return the value object of the DataElement, which is the same object
+     *         that has previously been set with the <code>set()</code>
+     *         method.
+     */
+    public Object get()
+    {
+        return m_value;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/CountryCodePrimaryAccountNumber.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/CountryCodePrimaryAccountNumber.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.elements;
+
+
+import net.dpml.iso8583.data.DataElement;
+import net.dpml.iso8583.data.Representation;
+import net.dpml.iso8583.data.representation.N;
+import net.dpml.logging.Logger;
+import net.dpml.parameters.Parameters;
+import org.jpos.iso.ISOException;
+import org.jpos.iso.ISOMsg;
+
+
+/** <code>DataElement</code> implementation of CountryCodePrimaryAccountNumber.
+ *
+ * @author <a href="mailto:niclas at hedhman.org">Niclas Hedhman</a>
+ *
+ * @see net.dpml.iso8583.data.DataElement
+ * @see net.dpml.iso8583.data.DataElementManager
+ *
+ * @metro.component lifestyle="transient" name="CountryCodePrimaryAccountNumber"
+ * @metro.service type="net.dpml.iso8583.data.DataElement"
+ */
+public class CountryCodePrimaryAccountNumber
+    implements DataElement
+{
+    /** The ISO8583 bit number */
+    static private int ISO8583_BIT_NUMBER = 20;
+
+    /** ISO8583 Representation formatter and validator. */
+    static private Representation m_Representation;
+
+    private String m_value;
+    private Logger m_logger;
+
+    /** Sets up the element type in a generic fashion. */
+    static
+    {
+        m_Representation = new N( 3 );
+    }
+
+    /** Constructor of CountryCodePrimaryAccountNumber.
+     *
+     * @param logger supplied <code>Logger</code> instance.
+     * @param params supplied configuration <code>Parameters</code>
+     */
+    public CountryCodePrimaryAccountNumber( Logger logger, Parameters params )
+    {
+        m_logger = logger;
+        m_value = params.getParameter( "value", "" );
+    }
+
+    /** Instructs the DataElement to populate the ISOMsg object.
+     * <p>
+     *  <code>DataElement</code> implementations are responsible to know
+     *  which field (a.k.a. bit) that it should populate in the
+     *  <code>ISOMsg</code> structure. The caller must know whether the
+     *  field is required or not, and if the <code>DataElement</code> has
+     *  not been properly set, either in the course of the session or as
+     *  part of its initialization, it should throw an ISOException.
+     * </p>
+     * <p>
+     *  If the <code>DataElement</code> is nested, it is responsible for
+     *  calling the <code>populate</code> method for each of the composite
+     *  <code>DataElements</code>.
+     * </p>
+     * @param message the <code>ISOMsg</code> instance to populate with the
+     *        value of the <code>DataElement</code>.
+     * @param required if true, the <code>DataElement</code> must make sure
+     *        that its value object has been set during the session.
+     *
+     * @exception org.jpos.iso.ISOException if the ISOMsg can not be populated.
+     */
+    public void populate( ISOMsg message, boolean required )
+        throws ISOException
+    {
+        if( m_logger.isDebugEnabled() )
+        {
+            m_logger.debug( "populate: " + message );
+        }
+
+        if( required && m_value == null )
+        {
+            throw new ISOException( "Required data element has not been set: PrimaryAccountNumber" );
+        }
+        message.set( ISO8583_BIT_NUMBER, m_value );
+    }
+
+    /** Sets the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     * <p>
+     * The provided argument must be of the correct type, and be within
+     * its specification defined bounds, or an <code>IllegalArgumentException
+     * </code> will be thrown.
+     * </p>
+     * @exception IllegalArgumentException if the provided <code>value</code>
+     *            argument is of the wrong class, contains illegal values,
+     *            or is null.
+     */
+    public void set( Object value )
+        throws IllegalArgumentException
+    {
+        m_Representation.validate( value );
+        m_value = m_Representation.format( value );
+    }
+
+    /** Returns the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     *
+     * @return the value object of the DataElement, which is the same object
+     *         that has previously been set with the <code>set()</code>
+     *         method.
+     */
+    public Object get()
+    {
+        return m_value;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/DateAndTimeLocalTransaction.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/DateAndTimeLocalTransaction.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.elements;
+
+
+import net.dpml.iso8583.data.DataElement;
+import net.dpml.iso8583.data.Representation;
+import net.dpml.iso8583.data.representation.N;
+import net.dpml.logging.Logger;
+import net.dpml.parameters.Parameters;
+import org.jpos.iso.ISOException;
+import org.jpos.iso.ISOMsg;
+
+
+/** <code>DataElement</code> implementation of DateAndTimeLocalTransaction.
+ *
+ * @author <a href="mailto:niclas at hedhman.org">Niclas Hedhman</a>
+ *
+ * @see net.dpml.iso8583.data.DataElement
+ * @see net.dpml.iso8583.data.DataElementManager
+ *
+ * @metro.component lifestyle="transient" name="DateAndTimeLocalTransaction"
+ * @metro.service type="net.dpml.iso8583.data.DataElement"
+ */
+public class DateAndTimeLocalTransaction
+    implements DataElement
+{
+    /** The ISO8583 bit number */
+    static private int ISO8583_BIT_NUMBER = 12;
+
+    /** ISO8583 Representation formatter and validator. */
+    static private Representation m_Representation;
+
+    private String m_value;
+    private Logger m_logger;
+
+    /** Sets up the element type in a generic fashion. */
+    static
+    {
+        m_Representation = new N( 14 );
+    }
+
+    /** Constructor of DateAndTimeLocalTransaction.
+     *
+     * @param logger supplied <code>Logger</code> instance.
+     * @param params supplied configuration <code>Parameters</code>
+     */
+    public DateAndTimeLocalTransaction( Logger logger, Parameters params )
+    {
+        m_logger = logger;
+        m_value = params.getParameter( "value", "" );
+    }
+
+    /** Instructs the DataElement to populate the ISOMsg object.
+     * <p>
+     *  <code>DataElement</code> implementations are responsible to know
+     *  which field (a.k.a. bit) that it should populate in the
+     *  <code>ISOMsg</code> structure. The caller must know whether the
+     *  field is required or not, and if the <code>DataElement</code> has
+     *  not been properly set, either in the course of the session or as
+     *  part of its initialization, it should throw an ISOException.
+     * </p>
+     * <p>
+     *  If the <code>DataElement</code> is nested, it is responsible for
+     *  calling the <code>populate</code> method for each of the composite
+     *  <code>DataElements</code>.
+     * </p>
+     * @param message the <code>ISOMsg</code> instance to populate with the
+     *        value of the <code>DataElement</code>.
+     * @param required if true, the <code>DataElement</code> must make sure
+     *        that its value object has been set during the session.
+     *
+     * @exception org.jpos.iso.ISOException if the ISOMsg can not be populated.
+     */
+    public void populate( ISOMsg message, boolean required )
+        throws ISOException
+    {
+        if( m_logger.isDebugEnabled() )
+        {
+            m_logger.debug( "populate: " + message );
+        }
+
+        if( required && m_value == null )
+        {
+            throw new ISOException( "Required data element has not been set: PrimaryAccountNumber" );
+        }
+        message.set( ISO8583_BIT_NUMBER, m_value );
+    }
+
+    /** Sets the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     * <p>
+     * The provided argument must be of the correct type, and be within
+     * its specification defined bounds, or an <code>IllegalArgumentException
+     * </code> will be thrown.
+     * </p>
+     * @exception IllegalArgumentException if the provided <code>value</code>
+     *            argument is of the wrong class, contains illegal values,
+     *            or is null.
+     */
+    public void set( Object value )
+        throws IllegalArgumentException
+    {
+        m_Representation.validate( value );
+        m_value = m_Representation.format( value );
+    }
+
+    /** Returns the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     *
+     * @return the value object of the DataElement, which is the same object
+     *         that has previously been set with the <code>set()</code>
+     *         method.
+     */
+    public Object get()
+    {
+        return m_value;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/DateAndTimeTransmission.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/DateAndTimeTransmission.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.elements;
+
+
+import net.dpml.iso8583.data.DataElement;
+import net.dpml.iso8583.data.Representation;
+import net.dpml.iso8583.data.representation.N;
+import net.dpml.logging.Logger;
+import net.dpml.parameters.Parameters;
+import org.jpos.iso.ISOException;
+import org.jpos.iso.ISOMsg;
+
+
+/** <code>DataElement</code> implementation of DateAndTimeTransmission.
+ *
+ * @author <a href="mailto:niclas at hedhman.org">Niclas Hedhman</a>
+ *
+ * @see net.dpml.iso8583.data.DataElement
+ * @see net.dpml.iso8583.data.DataElementManager
+ *
+ * @metro.component lifestyle="transient" name="DateAndTimeTransmission"
+ * @metro.service type="net.dpml.iso8583.data.DataElement"
+ */
+public class DateAndTimeTransmission
+    implements DataElement
+{
+    /** The ISO8583 bit number */
+    static private int ISO8583_BIT_NUMBER = 7;
+
+    /** ISO8583 Representation formatter and validator. */
+    static private Representation m_Representation;
+
+    private String m_value;
+    private Logger m_logger;
+
+    /** Sets up the element type in a generic fashion. */
+    static
+    {
+        m_Representation = new N( 10 );
+    }
+
+    /** Constructor of DateAndTimeTransmission.
+     *
+     * @param logger supplied <code>Logger</code> instance.
+     * @param params supplied configuration <code>Parameters</code>
+     */
+    public DateAndTimeTransmission( Logger logger, Parameters params )
+    {
+        m_logger = logger;
+        m_value = params.getParameter( "value", "" );
+    }
+
+    /** Instructs the DataElement to populate the ISOMsg object.
+     * <p>
+     *  <code>DataElement</code> implementations are responsible to know
+     *  which field (a.k.a. bit) that it should populate in the
+     *  <code>ISOMsg</code> structure. The caller must know whether the
+     *  field is required or not, and if the <code>DataElement</code> has
+     *  not been properly set, either in the course of the session or as
+     *  part of its initialization, it should throw an ISOException.
+     * </p>
+     * <p>
+     *  If the <code>DataElement</code> is nested, it is responsible for
+     *  calling the <code>populate</code> method for each of the composite
+     *  <code>DataElements</code>.
+     * </p>
+     * @param message the <code>ISOMsg</code> instance to populate with the
+     *        value of the <code>DataElement</code>.
+     * @param required if true, the <code>DataElement</code> must make sure
+     *        that its value object has been set during the session.
+     *
+     * @exception org.jpos.iso.ISOException if the ISOMsg can not be populated.
+     */
+    public void populate( ISOMsg message, boolean required )
+        throws ISOException
+    {
+        if( m_logger.isDebugEnabled() )
+        {
+            m_logger.debug( "populate: " + message );
+        }
+
+        if( required && m_value == null )
+        {
+            throw new ISOException( "Required data element has not been set: PrimaryAccountNumber" );
+        }
+        message.set( ISO8583_BIT_NUMBER, m_value );
+    }
+
+    /** Sets the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     * <p>
+     * The provided argument must be of the correct type, and be within
+     * its specification defined bounds, or an <code>IllegalArgumentException
+     * </code> will be thrown.
+     * </p>
+     * @exception IllegalArgumentException if the provided <code>value</code>
+     *            argument is of the wrong class, contains illegal values,
+     *            or is null.
+     */
+    public void set( Object value )
+        throws IllegalArgumentException
+    {
+        m_Representation.validate( value );
+        m_value = m_Representation.format( value );
+    }
+
+    /** Returns the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     *
+     * @return the value object of the DataElement, which is the same object
+     *         that has previously been set with the <code>set()</code>
+     *         method.
+     */
+    public Object get()
+    {
+        return m_value;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/DateCapture.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/DateCapture.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.elements;
+
+
+import net.dpml.iso8583.data.DataElement;
+import net.dpml.iso8583.data.Representation;
+import net.dpml.iso8583.data.representation.N;
+import net.dpml.logging.Logger;
+import net.dpml.parameters.Parameters;
+import org.jpos.iso.ISOException;
+import org.jpos.iso.ISOMsg;
+
+
+/** <code>DataElement</code> implementation of DateCapture.
+ *
+ * @author <a href="mailto:niclas at hedhman.org">Niclas Hedhman</a>
+ *
+ * @see net.dpml.iso8583.data.DataElement
+ * @see net.dpml.iso8583.data.DataElementManager
+ *
+ * @metro.component lifestyle="transient" name="DateCapture"
+ * @metro.service type="net.dpml.iso8583.data.DataElement"
+ */
+public class DateCapture
+    implements DataElement
+{
+    /** The ISO8583 bit number */
+    static private int ISO8583_BIT_NUMBER = 17;
+
+    /** ISO8583 Representation formatter and validator. */
+    static private Representation m_Representation;
+
+    private String m_value;
+    private Logger m_logger;
+
+    /** Sets up the element type in a generic fashion. */
+    static
+    {
+        m_Representation = new N( 4 );
+    }
+
+    /** Constructor of DateCapture.
+     *
+     * @param logger supplied <code>Logger</code> instance.
+     * @param params supplied configuration <code>Parameters</code>
+     */
+    public DateCapture( Logger logger, Parameters params )
+    {
+        m_logger = logger;
+        m_value = params.getParameter( "value", "" );
+    }
+
+    /** Instructs the DataElement to populate the ISOMsg object.
+     * <p>
+     *  <code>DataElement</code> implementations are responsible to know
+     *  which field (a.k.a. bit) that it should populate in the
+     *  <code>ISOMsg</code> structure. The caller must know whether the
+     *  field is required or not, and if the <code>DataElement</code> has
+     *  not been properly set, either in the course of the session or as
+     *  part of its initialization, it should throw an ISOException.
+     * </p>
+     * <p>
+     *  If the <code>DataElement</code> is nested, it is responsible for
+     *  calling the <code>populate</code> method for each of the composite
+     *  <code>DataElements</code>.
+     * </p>
+     * @param message the <code>ISOMsg</code> instance to populate with the
+     *        value of the <code>DataElement</code>.
+     * @param required if true, the <code>DataElement</code> must make sure
+     *        that its value object has been set during the session.
+     *
+     * @exception org.jpos.iso.ISOException if the ISOMsg can not be populated.
+     */
+    public void populate( ISOMsg message, boolean required )
+        throws ISOException
+    {
+        if( m_logger.isDebugEnabled() )
+        {
+            m_logger.debug( "populate: " + message );
+        }
+
+        if( required && m_value == null )
+        {
+            throw new ISOException( "Required data element has not been set: PrimaryAccountNumber" );
+        }
+        message.set( ISO8583_BIT_NUMBER, m_value );
+    }
+
+    /** Sets the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     * <p>
+     * The provided argument must be of the correct type, and be within
+     * its specification defined bounds, or an <code>IllegalArgumentException
+     * </code> will be thrown.
+     * </p>
+     * @exception IllegalArgumentException if the provided <code>value</code>
+     *            argument is of the wrong class, contains illegal values,
+     *            or is null.
+     */
+    public void set( Object value )
+        throws IllegalArgumentException
+    {
+        m_Representation.validate( value );
+        m_value = m_Representation.format( value );
+    }
+
+    /** Returns the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     *
+     * @return the value object of the DataElement, which is the same object
+     *         that has previously been set with the <code>set()</code>
+     *         method.
+     */
+    public Object get()
+    {
+        return m_value;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/DateConversion.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/DateConversion.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.elements;
+
+
+import net.dpml.iso8583.data.DataElement;
+import net.dpml.iso8583.data.Representation;
+import net.dpml.iso8583.data.representation.N;
+import net.dpml.logging.Logger;
+import net.dpml.parameters.Parameters;
+import org.jpos.iso.ISOException;
+import org.jpos.iso.ISOMsg;
+
+
+/** <code>DataElement</code> implementation of XX.
+ *
+ * @author <a href="mailto:niclas at hedhman.org">Niclas Hedhman</a>
+ *
+ * @see net.dpml.iso8583.data.DataElement
+ * @see net.dpml.iso8583.data.DataElementManager
+ *
+ * @metro.component lifestyle="transient" name="DateConversion"
+ * @metro.service type="net.dpml.iso8583.data.DataElement"
+ */
+public class DateConversion
+    implements DataElement
+{
+    /** The ISO8583 bit number */
+    static private int ISO8583_BIT_NUMBER = 16;
+
+    /** ISO8583 Representation formatter and validator. */
+    static private Representation m_Representation;
+
+    private String m_value;
+    private Logger m_logger;
+
+    /** Sets up the element type in a generic fashion. */
+    static
+    {
+        m_Representation = new N( 4 );
+    }
+
+    /** Constructor of XX.
+     *
+     * @param logger supplied <code>Logger</code> instance.
+     * @param params supplied configuration <code>Parameters</code>
+     */
+    public DateConversion( Logger logger, Parameters params )
+    {
+        m_logger = logger;
+        m_value = params.getParameter( "value", "" );
+    }
+
+    /** Instructs the DataElement to populate the ISOMsg object.
+     * <p>
+     *  <code>DataElement</code> implementations are responsible to know
+     *  which field (a.k.a. bit) that it should populate in the
+     *  <code>ISOMsg</code> structure. The caller must know whether the
+     *  field is required or not, and if the <code>DataElement</code> has
+     *  not been properly set, either in the course of the session or as
+     *  part of its initialization, it should throw an ISOException.
+     * </p>
+     * <p>
+     *  If the <code>DataElement</code> is nested, it is responsible for
+     *  calling the <code>populate</code> method for each of the composite
+     *  <code>DataElements</code>.
+     * </p>
+     * @param message the <code>ISOMsg</code> instance to populate with the
+     *        value of the <code>DataElement</code>.
+     * @param required if true, the <code>DataElement</code> must make sure
+     *        that its value object has been set during the session.
+     *
+     * @exception org.jpos.iso.ISOException if the ISOMsg can not be populated.
+     */
+    public void populate( ISOMsg message, boolean required )
+        throws ISOException
+    {
+        if( m_logger.isDebugEnabled() )
+        {
+            m_logger.debug( "populate: " + message );
+        }
+
+        if( required && m_value == null )
+        {
+            throw new ISOException( "Required data element has not been set: PrimaryAccountNumber" );
+        }
+        message.set( ISO8583_BIT_NUMBER, m_value );
+    }
+
+    /** Sets the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     * <p>
+     * The provided argument must be of the correct type, and be within
+     * its specification defined bounds, or an <code>IllegalArgumentException
+     * </code> will be thrown.
+     * </p>
+     * @exception IllegalArgumentException if the provided <code>value</code>
+     *            argument is of the wrong class, contains illegal values,
+     *            or is null.
+     */
+    public void set( Object value )
+        throws IllegalArgumentException
+    {
+        m_Representation.validate( value );
+        m_value = m_Representation.format( value );
+    }
+
+    /** Returns the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     *
+     * @return the value object of the DataElement, which is the same object
+     *         that has previously been set with the <code>set()</code>
+     *         method.
+     */
+    public Object get()
+    {
+        return m_value;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/DateEffective.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/DateEffective.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.elements;
+
+
+import net.dpml.iso8583.data.DataElement;
+import net.dpml.iso8583.data.Representation;
+import net.dpml.iso8583.data.representation.N;
+import net.dpml.logging.Logger;
+import net.dpml.parameters.Parameters;
+import org.jpos.iso.ISOException;
+import org.jpos.iso.ISOMsg;
+
+
+/** <code>DataElement</code> implementation of DateEffective.
+ *
+ * @author <a href="mailto:niclas at hedhman.org">Niclas Hedhman</a>
+ *
+ * @see net.dpml.iso8583.data.DataElement
+ * @see net.dpml.iso8583.data.DataElementManager
+ *
+ * @metro.component lifestyle="transient" name="DateEffective"
+ * @metro.service type="net.dpml.iso8583.data.DataElement"
+ */
+public class DateEffective
+    implements DataElement
+{
+    /** The ISO8583 bit number */
+    static private int ISO8583_BIT_NUMBER = 13;
+
+    /** ISO8583 Representation formatter and validator. */
+    static private Representation m_Representation;
+
+    private String m_value;
+    private Logger m_logger;
+
+    /** Sets up the element type in a generic fashion. */
+    static
+    {
+        m_Representation = new N( 6 );
+    }
+
+    /** Constructor of DateEffective.
+     *
+     * @param logger supplied <code>Logger</code> instance.
+     * @param params supplied configuration <code>Parameters</code>
+     */
+    public DateEffective( Logger logger, Parameters params )
+    {
+        m_logger = logger;
+        m_value = params.getParameter( "value", "" );
+    }
+
+    /** Instructs the DataElement to populate the ISOMsg object.
+     * <p>
+     *  <code>DataElement</code> implementations are responsible to know
+     *  which field (a.k.a. bit) that it should populate in the
+     *  <code>ISOMsg</code> structure. The caller must know whether the
+     *  field is required or not, and if the <code>DataElement</code> has
+     *  not been properly set, either in the course of the session or as
+     *  part of its initialization, it should throw an ISOException.
+     * </p>
+     * <p>
+     *  If the <code>DataElement</code> is nested, it is responsible for
+     *  calling the <code>populate</code> method for each of the composite
+     *  <code>DataElements</code>.
+     * </p>
+     * @param message the <code>ISOMsg</code> instance to populate with the
+     *        value of the <code>DataElement</code>.
+     * @param required if true, the <code>DataElement</code> must make sure
+     *        that its value object has been set during the session.
+     *
+     * @exception org.jpos.iso.ISOException if the ISOMsg can not be populated.
+     */
+    public void populate( ISOMsg message, boolean required )
+        throws ISOException
+    {
+        if( m_logger.isDebugEnabled() )
+        {
+            m_logger.debug( "populate: " + message );
+        }
+
+        if( required && m_value == null )
+        {
+            throw new ISOException( "Required data element has not been set: PrimaryAccountNumber" );
+        }
+        message.set( ISO8583_BIT_NUMBER, m_value );
+    }
+
+    /** Sets the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     * <p>
+     * The provided argument must be of the correct type, and be within
+     * its specification defined bounds, or an <code>IllegalArgumentException
+     * </code> will be thrown.
+     * </p>
+     * @exception IllegalArgumentException if the provided <code>value</code>
+     *            argument is of the wrong class, contains illegal values,
+     *            or is null.
+     */
+    public void set( Object value )
+        throws IllegalArgumentException
+    {
+        m_Representation.validate( value );
+        m_value = m_Representation.format( value );
+    }
+
+    /** Returns the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     *
+     * @return the value object of the DataElement, which is the same object
+     *         that has previously been set with the <code>set()</code>
+     *         method.
+     */
+    public Object get()
+    {
+        return m_value;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/DateExpiration.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/DateExpiration.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.elements;
+
+
+import net.dpml.iso8583.data.DataElement;
+import net.dpml.iso8583.data.Representation;
+import net.dpml.iso8583.data.representation.N;
+import net.dpml.logging.Logger;
+import net.dpml.parameters.Parameters;
+import org.jpos.iso.ISOException;
+import org.jpos.iso.ISOMsg;
+
+
+/** <code>DataElement</code> implementation of DateExpiration.
+ *
+ * @author <a href="mailto:niclas at hedhman.org">Niclas Hedhman</a>
+ *
+ * @see net.dpml.iso8583.data.DataElement
+ * @see net.dpml.iso8583.data.DataElementManager
+ *
+ * @metro.component lifestyle="transient" name="DateExpiration"
+ * @metro.service type="net.dpml.iso8583.data.DataElement"
+ */
+public class DateExpiration
+    implements DataElement
+{
+    /** The ISO8583 bit number */
+    static private int ISO8583_BIT_NUMBER = 14;
+
+    /** ISO8583 Representation formatter and validator. */
+    static private Representation m_Representation;
+
+    private String m_value;
+    private Logger m_logger;
+
+    /** Sets up the element type in a generic fashion. */
+    static
+    {
+        m_Representation = new N( 4 );
+    }
+
+    /** Constructor of DateExpiration.
+     *
+     * @param logger supplied <code>Logger</code> instance.
+     * @param params supplied configuration <code>Parameters</code>
+     */
+    public DateExpiration( Logger logger, Parameters params )
+    {
+        m_logger = logger;
+        m_value = params.getParameter( "value", "" );
+    }
+
+    /** Instructs the DataElement to populate the ISOMsg object.
+     * <p>
+     *  <code>DataElement</code> implementations are responsible to know
+     *  which field (a.k.a. bit) that it should populate in the
+     *  <code>ISOMsg</code> structure. The caller must know whether the
+     *  field is required or not, and if the <code>DataElement</code> has
+     *  not been properly set, either in the course of the session or as
+     *  part of its initialization, it should throw an ISOException.
+     * </p>
+     * <p>
+     *  If the <code>DataElement</code> is nested, it is responsible for
+     *  calling the <code>populate</code> method for each of the composite
+     *  <code>DataElements</code>.
+     * </p>
+     * @param message the <code>ISOMsg</code> instance to populate with the
+     *        value of the <code>DataElement</code>.
+     * @param required if true, the <code>DataElement</code> must make sure
+     *        that its value object has been set during the session.
+     *
+     * @exception org.jpos.iso.ISOException if the ISOMsg can not be populated.
+     */
+    public void populate( ISOMsg message, boolean required )
+        throws ISOException
+    {
+        if( m_logger.isDebugEnabled() )
+        {
+            m_logger.debug( "populate: " + message );
+        }
+
+        if( required && m_value == null )
+        {
+            throw new ISOException( "Required data element has not been set: PrimaryAccountNumber" );
+        }
+        message.set( ISO8583_BIT_NUMBER, m_value );
+    }
+
+    /** Sets the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     * <p>
+     * The provided argument must be of the correct type, and be within
+     * its specification defined bounds, or an <code>IllegalArgumentException
+     * </code> will be thrown.
+     * </p>
+     * @exception IllegalArgumentException if the provided <code>value</code>
+     *            argument is of the wrong class, contains illegal values,
+     *            or is null.
+     */
+    public void set( Object value )
+        throws IllegalArgumentException
+    {
+        m_Representation.validate( value );
+        m_value = m_Representation.format( value );
+    }
+
+    /** Returns the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     *
+     * @return the value object of the DataElement, which is the same object
+     *         that has previously been set with the <code>set()</code>
+     *         method.
+     */
+    public Object get()
+    {
+        return m_value;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/DateReconciliation.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/DateReconciliation.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.elements;
+
+
+import net.dpml.iso8583.data.DataElement;
+import net.dpml.iso8583.data.Representation;
+import net.dpml.iso8583.data.representation.N;
+import net.dpml.logging.Logger;
+import net.dpml.parameters.Parameters;
+import org.jpos.iso.ISOException;
+import org.jpos.iso.ISOMsg;
+
+
+/** <code>DataElement</code> implementation of DateReconciliation.
+ *
+ * @author <a href="mailto:niclas at hedhman.org">Niclas Hedhman</a>
+ *
+ * @see net.dpml.iso8583.data.DataElement
+ * @see net.dpml.iso8583.data.DataElementManager
+ *
+ * @metro.component lifestyle="transient" name="DateReconciliation"
+ * @metro.service type="net.dpml.iso8583.data.DataElement"
+ */
+public class DateReconciliation
+    implements DataElement
+{
+    /** The ISO8583 bit number */
+    static private int ISO8583_BIT_NUMBER = 28;
+
+    /** ISO8583 Representation formatter and validator. */
+    static private Representation m_Representation;
+
+    private String m_value;
+    private Logger m_logger;
+
+    /** Sets up the element type in a generic fashion. */
+    static
+    {
+       m_Representation = new N( 8 );
+    }
+
+    /** Constructor of DateReconciliation.
+     *
+     * @param logger supplied <code>Logger</code> instance.
+     * @param params supplied configuration <code>Parameters</code>
+     */
+    public DateReconciliation( Logger logger, Parameters params )
+    {
+        m_logger = logger;
+        m_value = params.getParameter( "value", "" );
+    }
+
+    /** Instructs the DataElement to populate the ISOMsg object.
+     * <p>
+     *  <code>DataElement</code> implementations are responsible to know
+     *  which field (a.k.a. bit) that it should populate in the
+     *  <code>ISOMsg</code> structure. The caller must know whether the
+     *  field is required or not, and if the <code>DataElement</code> has
+     *  not been properly set, either in the course of the session or as
+     *  part of its initialization, it should throw an ISOException.
+     * </p>
+     * <p>
+     *  If the <code>DataElement</code> is nested, it is responsible for
+     *  calling the <code>populate</code> method for each of the composite
+     *  <code>DataElements</code>.
+     * </p>
+     * @param message the <code>ISOMsg</code> instance to populate with the
+     *        value of the <code>DataElement</code>.
+     * @param required if true, the <code>DataElement</code> must make sure
+     *        that its value object has been set during the session.
+     *
+     * @exception org.jpos.iso.ISOException if the ISOMsg can not be populated.
+     */
+    public void populate( ISOMsg message, boolean required )
+        throws ISOException
+    {
+        if( m_logger.isDebugEnabled() )
+        {
+            m_logger.debug( "populate: " + message );
+        }
+
+        if( required && m_value == null )
+        {
+            throw new ISOException( "Required data element has not been set: PrimaryAccountNumber" );
+        }
+        message.set( ISO8583_BIT_NUMBER, m_value );
+    }
+
+    /** Sets the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     * <p>
+     * The provided argument must be of the correct type, and be within
+     * its specification defined bounds, or an <code>IllegalArgumentException
+     * </code> will be thrown.
+     * </p>
+     * @exception IllegalArgumentException if the provided <code>value</code>
+     *            argument is of the wrong class, contains illegal values,
+     *            or is null.
+     */
+    public void set( Object value )
+        throws IllegalArgumentException
+    {
+        m_Representation.validate( value );
+        m_value = m_Representation.format( value );
+    }
+
+    /** Returns the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     *
+     * @return the value object of the DataElement, which is the same object
+     *         that has previously been set with the <code>set()</code>
+     *         method.
+     */
+    public Object get()
+    {
+        return m_value;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/DateSettlement.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/DateSettlement.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.elements;
+
+
+import net.dpml.iso8583.data.DataElement;
+import net.dpml.iso8583.data.Representation;
+import net.dpml.iso8583.data.representation.N;
+import net.dpml.logging.Logger;
+import net.dpml.parameters.Parameters;
+import org.jpos.iso.ISOException;
+import org.jpos.iso.ISOMsg;
+
+
+/** <code>DataElement</code> implementation of DateSettlement.
+ *
+ * @author <a href="mailto:niclas at hedhman.org">Niclas Hedhman</a>
+ *
+ * @see net.dpml.iso8583.data.DataElement
+ * @see net.dpml.iso8583.data.DataElementManager
+ *
+ * @metro.component lifestyle="transient" name="DateSettlement"
+ * @metro.service type="net.dpml.iso8583.data.DataElement"
+ */
+public class DateSettlement
+    implements DataElement
+{
+    /** The ISO8583 bit number */
+    static private int ISO8583_BIT_NUMBER = 15;
+
+    /** ISO8583 Representation formatter and validator. */
+    static private Representation m_Representation;
+
+    private String m_value;
+    private Logger m_logger;
+
+    /** Sets up the element type in a generic fashion. */
+    static
+    {
+        m_Representation = new N( 8 );
+    }
+
+    /** Constructor of DateSettlement.
+     *
+     * @param logger supplied <code>Logger</code> instance.
+     * @param params supplied configuration <code>Parameters</code>
+     */
+    public DateSettlement( Logger logger, Parameters params )
+    {
+        m_logger = logger;
+        m_value = params.getParameter( "value", "" );
+    }
+
+    /** Instructs the DataElement to populate the ISOMsg object.
+     * <p>
+     *  <code>DataElement</code> implementations are responsible to know
+     *  which field (a.k.a. bit) that it should populate in the
+     *  <code>ISOMsg</code> structure. The caller must know whether the
+     *  field is required or not, and if the <code>DataElement</code> has
+     *  not been properly set, either in the course of the session or as
+     *  part of its initialization, it should throw an ISOException.
+     * </p>
+     * <p>
+     *  If the <code>DataElement</code> is nested, it is responsible for
+     *  calling the <code>populate</code> method for each of the composite
+     *  <code>DataElements</code>.
+     * </p>
+     * @param message the <code>ISOMsg</code> instance to populate with the
+     *        value of the <code>DataElement</code>.
+     * @param required if true, the <code>DataElement</code> must make sure
+     *        that its value object has been set during the session.
+     *
+     * @exception org.jpos.iso.ISOException if the ISOMsg can not be populated.
+     */
+    public void populate( ISOMsg message, boolean required )
+        throws ISOException
+    {
+        if( m_logger.isDebugEnabled() )
+        {
+            m_logger.debug( "populate: " + message );
+        }
+
+        if( required && m_value == null )
+        {
+            throw new ISOException( "Required data element has not been set: PrimaryAccountNumber" );
+        }
+        message.set( ISO8583_BIT_NUMBER, m_value );
+    }
+
+    /** Sets the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     * <p>
+     * The provided argument must be of the correct type, and be within
+     * its specification defined bounds, or an <code>IllegalArgumentException
+     * </code> will be thrown.
+     * </p>
+     * @exception IllegalArgumentException if the provided <code>value</code>
+     *            argument is of the wrong class, contains illegal values,
+     *            or is null.
+     */
+    public void set( Object value )
+        throws IllegalArgumentException
+    {
+        m_Representation.validate( value );
+        m_value = m_Representation.format( value );
+    }
+
+    /** Returns the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     *
+     * @return the value object of the DataElement, which is the same object
+     *         that has previously been set with the <code>set()</code>
+     *         method.
+     */
+    public Object get()
+    {
+        return m_value;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/FunctionCode.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/FunctionCode.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.elements;
+
+
+import net.dpml.iso8583.data.DataElement;
+import net.dpml.iso8583.data.Representation;
+import net.dpml.iso8583.data.representation.N;
+import net.dpml.logging.Logger;
+import net.dpml.parameters.Parameters;
+import org.jpos.iso.ISOException;
+import org.jpos.iso.ISOMsg;
+
+
+/** <code>DataElement</code> implementation of FunctionCode.
+ *
+ * @author <a href="mailto:niclas at hedhman.org">Niclas Hedhman</a>
+ *
+ * @see net.dpml.iso8583.data.DataElement
+ * @see net.dpml.iso8583.data.DataElementManager
+ *
+ * @metro.component lifestyle="transient" name="FunctionCode"
+ * @metro.service type="net.dpml.iso8583.data.DataElement"
+ */
+public class FunctionCode
+    implements DataElement
+{
+    /** The ISO8583 bit number */
+    static private int ISO8583_BIT_NUMBER = 24;
+
+    /** ISO8583 Representation formatter and validator. */
+    static private Representation m_Representation;
+
+    private String m_value;
+    private Logger m_logger;
+
+    /** Sets up the element type in a generic fashion. */
+    static
+    {
+        m_Representation = new N( 3 );
+    }
+
+    /** Constructor of FunctionCode.
+     *
+     * @param logger supplied <code>Logger</code> instance.
+     * @param params supplied configuration <code>Parameters</code>
+     */
+    public FunctionCode( Logger logger, Parameters params )
+    {
+        m_logger = logger;
+        m_value = params.getParameter( "value", "" );
+    }
+
+    /** Instructs the DataElement to populate the ISOMsg object.
+     * <p>
+     *  <code>DataElement</code> implementations are responsible to know
+     *  which field (a.k.a. bit) that it should populate in the
+     *  <code>ISOMsg</code> structure. The caller must know whether the
+     *  field is required or not, and if the <code>DataElement</code> has
+     *  not been properly set, either in the course of the session or as
+     *  part of its initialization, it should throw an ISOException.
+     * </p>
+     * <p>
+     *  If the <code>DataElement</code> is nested, it is responsible for
+     *  calling the <code>populate</code> method for each of the composite
+     *  <code>DataElements</code>.
+     * </p>
+     * @param message the <code>ISOMsg</code> instance to populate with the
+     *        value of the <code>DataElement</code>.
+     * @param required if true, the <code>DataElement</code> must make sure
+     *        that its value object has been set during the session.
+     *
+     * @exception org.jpos.iso.ISOException if the ISOMsg can not be populated.
+     */
+    public void populate( ISOMsg message, boolean required )
+        throws ISOException
+    {
+        if( m_logger.isDebugEnabled() )
+        {
+            m_logger.debug( "populate: " + message );
+        }
+
+        if( required && m_value == null )
+        {
+            throw new ISOException( "Required data element has not been set: PrimaryAccountNumber" );
+        }
+        message.set( ISO8583_BIT_NUMBER, m_value );
+    }
+
+    /** Sets the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     * <p>
+     * The provided argument must be of the correct type, and be within
+     * its specification defined bounds, or an <code>IllegalArgumentException
+     * </code> will be thrown.
+     * </p>
+     * @exception IllegalArgumentException if the provided <code>value</code>
+     *            argument is of the wrong class, contains illegal values,
+     *            or is null.
+     */
+    public void set( Object value )
+        throws IllegalArgumentException
+    {
+        m_Representation.validate( value );
+        m_value = m_Representation.format( value );
+    }
+
+    /** Returns the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     *
+     * @return the value object of the DataElement, which is the same object
+     *         that has previously been set with the <code>set()</code>
+     *         method.
+     */
+    public Object get()
+    {
+        return m_value;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/MerchantCategoryCode.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/MerchantCategoryCode.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.elements;
+
+
+import net.dpml.iso8583.data.DataElement;
+import net.dpml.iso8583.data.Representation;
+import net.dpml.iso8583.data.representation.N;
+import net.dpml.logging.Logger;
+import net.dpml.parameters.Parameters;
+import org.jpos.iso.ISOException;
+import org.jpos.iso.ISOMsg;
+
+
+/** <code>DataElement</code> implementation of MerchantCategoryCode.
+ *
+ * @author <a href="mailto:niclas at hedhman.org">Niclas Hedhman</a>
+ *
+ * @see net.dpml.iso8583.data.DataElement
+ * @see net.dpml.iso8583.data.DataElementManager
+ *
+ * @metro.component lifestyle="transient" name="MerchantCategoryCode"
+ * @metro.service type="net.dpml.iso8583.data.DataElement"
+ */
+public class MerchantCategoryCode
+    implements DataElement
+{
+    /** The ISO8583 bit number */
+    static private int ISO8583_BIT_NUMBER = 26;
+
+    /** ISO8583 Representation formatter and validator. */
+    static private Representation m_Representation;
+
+    private String m_value;
+    private Logger m_logger;
+
+    /** Sets up the element type in a generic fashion. */
+    static
+    {
+        m_Representation = new N( 4 );
+    }
+
+    /** Constructor of MerchantCategoryCode.
+     *
+     * @param logger supplied <code>Logger</code> instance.
+     * @param params supplied configuration <code>Parameters</code>
+     */
+    public MerchantCategoryCode( Logger logger, Parameters params )
+    {
+        m_logger = logger;
+        m_value = params.getParameter( "value", "" );
+    }
+
+    /** Instructs the DataElement to populate the ISOMsg object.
+     * <p>
+     *  <code>DataElement</code> implementations are responsible to know
+     *  which field (a.k.a. bit) that it should populate in the
+     *  <code>ISOMsg</code> structure. The caller must know whether the
+     *  field is required or not, and if the <code>DataElement</code> has
+     *  not been properly set, either in the course of the session or as
+     *  part of its initialization, it should throw an ISOException.
+     * </p>
+     * <p>
+     *  If the <code>DataElement</code> is nested, it is responsible for
+     *  calling the <code>populate</code> method for each of the composite
+     *  <code>DataElements</code>.
+     * </p>
+     * @param message the <code>ISOMsg</code> instance to populate with the
+     *        value of the <code>DataElement</code>.
+     * @param required if true, the <code>DataElement</code> must make sure
+     *        that its value object has been set during the session.
+     *
+     * @exception org.jpos.iso.ISOException if the ISOMsg can not be populated.
+     */
+    public void populate( ISOMsg message, boolean required )
+        throws ISOException
+    {
+        if( m_logger.isDebugEnabled() )
+        {
+            m_logger.debug( "populate: " + message );
+        }
+
+        if( required && m_value == null )
+        {
+            throw new ISOException( "Required data element has not been set: PrimaryAccountNumber" );
+        }
+        message.set( ISO8583_BIT_NUMBER, m_value );
+    }
+
+    /** Sets the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     * <p>
+     * The provided argument must be of the correct type, and be within
+     * its specification defined bounds, or an <code>IllegalArgumentException
+     * </code> will be thrown.
+     * </p>
+     * @exception IllegalArgumentException if the provided <code>value</code>
+     *            argument is of the wrong class, contains illegal values,
+     *            or is null.
+     */
+    public void set( Object value )
+        throws IllegalArgumentException
+    {
+        m_Representation.validate( value );
+        m_value = m_Representation.format( value );
+    }
+
+    /** Returns the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     *
+     * @return the value object of the DataElement, which is the same object
+     *         that has previously been set with the <code>set()</code>
+     *         method.
+     */
+    public Object get()
+    {
+        return m_value;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/MessageErrorIndicator.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/MessageErrorIndicator.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.elements;
+
+
+import net.dpml.iso8583.data.DataElement;
+import net.dpml.iso8583.data.Representation;
+import net.dpml.iso8583.data.representation.VariableANSB;
+import net.dpml.logging.Logger;
+import net.dpml.parameters.Parameters;
+import org.jpos.iso.ISOException;
+import org.jpos.iso.ISOMsg;
+
+
+/** <code>DataElement</code> implementation of MessageErrorIndicator.
+ *
+ * @author <a href="mailto:niclas at hedhman.org">Niclas Hedhman</a>
+ *
+ * @see net.dpml.iso8583.data.DataElement
+ * @see net.dpml.iso8583.data.DataElementManager
+ *
+ * @metro.component lifestyle="transient" name="MessageErrorIndicator"
+ * @metro.service type="net.dpml.iso8583.data.DataElement"
+ */
+public class MessageErrorIndicator
+    implements DataElement
+{
+    /** The ISO8583 bit number */
+    static private int ISO8583_BIT_NUMBER = 18;
+
+    /** ISO8583 Representation formatter and validator. */
+    static private Representation m_Representation;
+
+    private String m_value;
+    private Logger m_logger;
+
+    /** Sets up the element type in a generic fashion. */
+    static
+    {
+        m_Representation = new VariableANSB( 140 );
+    }
+
+    /** Constructor of MessageErrorIndicator.
+     *
+     * @param logger supplied <code>Logger</code> instance.
+     * @param params supplied configuration <code>Parameters</code>
+     */
+    public MessageErrorIndicator( Logger logger, Parameters params )
+    {
+        m_logger = logger;
+        m_value = params.getParameter( "value", "" );
+    }
+
+    /** Instructs the DataElement to populate the ISOMsg object.
+     * <p>
+     *  <code>DataElement</code> implementations are responsible to know
+     *  which field (a.k.a. bit) that it should populate in the
+     *  <code>ISOMsg</code> structure. The caller must know whether the
+     *  field is required or not, and if the <code>DataElement</code> has
+     *  not been properly set, either in the course of the session or as
+     *  part of its initialization, it should throw an ISOException.
+     * </p>
+     * <p>
+     *  If the <code>DataElement</code> is nested, it is responsible for
+     *  calling the <code>populate</code> method for each of the composite
+     *  <code>DataElements</code>.
+     * </p>
+     * @param message the <code>ISOMsg</code> instance to populate with the
+     *        value of the <code>DataElement</code>.
+     * @param required if true, the <code>DataElement</code> must make sure
+     *        that its value object has been set during the session.
+     *
+     * @exception org.jpos.iso.ISOException if the ISOMsg can not be populated.
+     */
+    public void populate( ISOMsg message, boolean required )
+        throws ISOException
+    {
+        if( m_logger.isDebugEnabled() )
+        {
+            m_logger.debug( "populate: " + message );
+        }
+
+        if( required && m_value == null )
+        {
+            throw new ISOException( "Required data element has not been set: PrimaryAccountNumber" );
+        }
+        message.set( ISO8583_BIT_NUMBER, m_value );
+    }
+
+    /** Sets the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     * <p>
+     * The provided argument must be of the correct type, and be within
+     * its specification defined bounds, or an <code>IllegalArgumentException
+     * </code> will be thrown.
+     * </p>
+     * @exception IllegalArgumentException if the provided <code>value</code>
+     *            argument is of the wrong class, contains illegal values,
+     *            or is null.
+     */
+    public void set( Object value )
+        throws IllegalArgumentException
+    {
+        m_Representation.validate( value );
+        m_value = m_Representation.format( value );
+    }
+
+    /** Returns the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     *
+     * @return the value object of the DataElement, which is the same object
+     *         that has previously been set with the <code>set()</code>
+     *         method.
+     */
+    public Object get()
+    {
+        return m_value;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/MessageReasonCode.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/MessageReasonCode.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.elements;
+
+
+import net.dpml.iso8583.data.DataElement;
+import net.dpml.iso8583.data.Representation;
+import net.dpml.iso8583.data.representation.N;
+import net.dpml.logging.Logger;
+import net.dpml.parameters.Parameters;
+import org.jpos.iso.ISOException;
+import org.jpos.iso.ISOMsg;
+
+
+/** <code>DataElement</code> implementation of MessageReasonCode.
+ *
+ * @author <a href="mailto:niclas at hedhman.org">Niclas Hedhman</a>
+ *
+ * @see net.dpml.iso8583.data.DataElement
+ * @see net.dpml.iso8583.data.DataElementManager
+ *
+ * @metro.component lifestyle="transient" name="MessageReasonCode"
+ * @metro.service type="net.dpml.iso8583.data.DataElement"
+ */
+public class MessageReasonCode
+    implements DataElement
+{
+    /** The ISO8583 bit number */
+    static private int ISO8583_BIT_NUMBER = 25;
+
+    /** ISO8583 Representation formatter and validator. */
+    static private Representation m_Representation;
+
+    private String m_value;
+    private Logger m_logger;
+
+    /** Sets up the element type in a generic fashion. */
+    static
+    {
+        m_Representation = new N( 4 );
+    }
+
+    /** Constructor of MessageReasonCode.
+     *
+     * @param logger supplied <code>Logger</code> instance.
+     * @param params supplied configuration <code>Parameters</code>
+     */
+    public MessageReasonCode( Logger logger, Parameters params )
+    {
+        m_logger = logger;
+        m_value = params.getParameter( "value", "" );
+    }
+
+    /** Instructs the DataElement to populate the ISOMsg object.
+     * <p>
+     *  <code>DataElement</code> implementations are responsible to know
+     *  which field (a.k.a. bit) that it should populate in the
+     *  <code>ISOMsg</code> structure. The caller must know whether the
+     *  field is required or not, and if the <code>DataElement</code> has
+     *  not been properly set, either in the course of the session or as
+     *  part of its initialization, it should throw an ISOException.
+     * </p>
+     * <p>
+     *  If the <code>DataElement</code> is nested, it is responsible for
+     *  calling the <code>populate</code> method for each of the composite
+     *  <code>DataElements</code>.
+     * </p>
+     * @param message the <code>ISOMsg</code> instance to populate with the
+     *        value of the <code>DataElement</code>.
+     * @param required if true, the <code>DataElement</code> must make sure
+     *        that its value object has been set during the session.
+     *
+     * @exception org.jpos.iso.ISOException if the ISOMsg can not be populated.
+     */
+    public void populate( ISOMsg message, boolean required )
+        throws ISOException
+    {
+        if( m_logger.isDebugEnabled() )
+        {
+            m_logger.debug( "populate: " + message );
+        }
+
+        if( required && m_value == null )
+        {
+            throw new ISOException( "Required data element has not been set: PrimaryAccountNumber" );
+        }
+        message.set( ISO8583_BIT_NUMBER, m_value );
+    }
+
+    /** Sets the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     * <p>
+     * The provided argument must be of the correct type, and be within
+     * its specification defined bounds, or an <code>IllegalArgumentException
+     * </code> will be thrown.
+     * </p>
+     * @exception IllegalArgumentException if the provided <code>value</code>
+     *            argument is of the wrong class, contains illegal values,
+     *            or is null.
+     */
+    public void set( Object value )
+        throws IllegalArgumentException
+    {
+        m_Representation.validate( value );
+        m_value = m_Representation.format( value );
+    }
+
+    /** Returns the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     *
+     * @return the value object of the DataElement, which is the same object
+     *         that has previously been set with the <code>set()</code>
+     *         method.
+     */
+    public Object get()
+    {
+        return m_value;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/PosCapability.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/PosCapability.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.elements;
+
+
+import net.dpml.iso8583.data.DataElement;
+import net.dpml.iso8583.data.Representation;
+import net.dpml.iso8583.data.representation.ANB;
+import net.dpml.logging.Logger;
+import net.dpml.parameters.Parameters;
+import org.jpos.iso.ISOException;
+import org.jpos.iso.ISOMsg;
+
+
+/** <code>DataElement</code> implementation of PosCapability.
+ *
+ * @author <a href="mailto:niclas at hedhman.org">Niclas Hedhman</a>
+ *
+ * @see net.dpml.iso8583.data.DataElement
+ * @see net.dpml.iso8583.data.DataElementManager
+ *
+ * @metro.component lifestyle="transient" name="PosCapability"
+ * @metro.service type="net.dpml.iso8583.data.DataElement"
+ */
+public class PosCapability
+    implements DataElement
+{
+    /** The ISO8583 bit number */
+    static private int ISO8583_BIT_NUMBER = 27;
+
+    /** ISO8583 Representation formatter and validator. */
+    static private Representation m_Representation;
+
+    private String m_value;
+    private Logger m_logger;
+
+    /** Sets up the element type in a generic fashion. */
+    static
+    {
+        m_Representation = new ANB( 27 );
+    }
+
+    /** Constructor of PosCapability.
+     *
+     * @param logger supplied <code>Logger</code> instance.
+     * @param params supplied configuration <code>Parameters</code>
+     */
+    public PosCapability( Logger logger, Parameters params )
+    {
+        m_logger = logger;
+        m_value = params.getParameter( "value", "" );
+    }
+
+    /** Instructs the DataElement to populate the ISOMsg object.
+     * <p>
+     *  <code>DataElement</code> implementations are responsible to know
+     *  which field (a.k.a. bit) that it should populate in the
+     *  <code>ISOMsg</code> structure. The caller must know whether the
+     *  field is required or not, and if the <code>DataElement</code> has
+     *  not been properly set, either in the course of the session or as
+     *  part of its initialization, it should throw an ISOException.
+     * </p>
+     * <p>
+     *  If the <code>DataElement</code> is nested, it is responsible for
+     *  calling the <code>populate</code> method for each of the composite
+     *  <code>DataElements</code>.
+     * </p>
+     * @param message the <code>ISOMsg</code> instance to populate with the
+     *        value of the <code>DataElement</code>.
+     * @param required if true, the <code>DataElement</code> must make sure
+     *        that its value object has been set during the session.
+     *
+     * @exception org.jpos.iso.ISOException if the ISOMsg can not be populated.
+     */
+    public void populate( ISOMsg message, boolean required )
+        throws ISOException
+    {
+        if( m_logger.isDebugEnabled() )
+        {
+            m_logger.debug( "populate: " + message );
+        }
+
+        if( required && m_value == null )
+        {
+            throw new ISOException( "Required data element has not been set: PrimaryAccountNumber" );
+        }
+        message.set( ISO8583_BIT_NUMBER, m_value );
+    }
+
+    /** Sets the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     * <p>
+     * The provided argument must be of the correct type, and be within
+     * its specification defined bounds, or an <code>IllegalArgumentException
+     * </code> will be thrown.
+     * </p>
+     * @exception IllegalArgumentException if the provided <code>value</code>
+     *            argument is of the wrong class, contains illegal values,
+     *            or is null.
+     */
+    public void set( Object value )
+        throws IllegalArgumentException
+    {
+        m_Representation.validate( value );
+        m_value = m_Representation.format( value );
+    }
+
+    /** Returns the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     *
+     * @return the value object of the DataElement, which is the same object
+     *         that has previously been set with the <code>set()</code>
+     *         method.
+     */
+    public Object get()
+    {
+        return m_value;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/PosDataCode.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/PosDataCode.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.elements;
+
+
+import net.dpml.iso8583.data.DataElement;
+import net.dpml.iso8583.data.Representation;
+import net.dpml.iso8583.data.representation.B;
+import net.dpml.logging.Logger;
+import net.dpml.parameters.Parameters;
+import org.jpos.iso.ISOException;
+import org.jpos.iso.ISOMsg;
+
+
+/** <code>DataElement</code> implementation of PosDataCode.
+ *
+ * @author <a href="mailto:niclas at hedhman.org">Niclas Hedhman</a>
+ *
+ * @see net.dpml.iso8583.data.DataElement
+ * @see net.dpml.iso8583.data.DataElementManager
+ *
+ * @metro.component lifestyle="transient" name="PosDataCode"
+ * @metro.service type="net.dpml.iso8583.data.DataElement"
+ */
+public class PosDataCode
+    implements DataElement
+{
+    /** The ISO8583 bit number */
+    static private int ISO8583_BIT_NUMBER = 22;
+
+    /** ISO8583 Representation formatter and validator. */
+    static private Representation m_Representation;
+
+    private String m_value;
+    private Logger m_logger;
+
+    /** Sets up the element type in a generic fashion. */
+    static
+    {
+        m_Representation = new B( 16 );
+    }
+
+    /** Constructor of PosDataCode.
+     *
+     * @param logger supplied <code>Logger</code> instance.
+     * @param params supplied configuration <code>Parameters</code>
+     */
+    public PosDataCode( Logger logger, Parameters params )
+    {
+        m_logger = logger;
+        m_value = params.getParameter( "value", "" );
+    }
+
+    /** Instructs the DataElement to populate the ISOMsg object.
+     * <p>
+     *  <code>DataElement</code> implementations are responsible to know
+     *  which field (a.k.a. bit) that it should populate in the
+     *  <code>ISOMsg</code> structure. The caller must know whether the
+     *  field is required or not, and if the <code>DataElement</code> has
+     *  not been properly set, either in the course of the session or as
+     *  part of its initialization, it should throw an ISOException.
+     * </p>
+     * <p>
+     *  If the <code>DataElement</code> is nested, it is responsible for
+     *  calling the <code>populate</code> method for each of the composite
+     *  <code>DataElements</code>.
+     * </p>
+     * @param message the <code>ISOMsg</code> instance to populate with the
+     *        value of the <code>DataElement</code>.
+     * @param required if true, the <code>DataElement</code> must make sure
+     *        that its value object has been set during the session.
+     *
+     * @exception org.jpos.iso.ISOException if the ISOMsg can not be populated.
+     */
+    public void populate( ISOMsg message, boolean required )
+        throws ISOException
+    {
+        if( m_logger.isDebugEnabled() )
+        {
+            m_logger.debug( "populate: " + message );
+        }
+
+        if( required && m_value == null )
+        {
+            throw new ISOException( "Required data element has not been set: PrimaryAccountNumber" );
+        }
+        message.set( ISO8583_BIT_NUMBER, m_value );
+    }
+
+    /** Sets the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     * <p>
+     * The provided argument must be of the correct type, and be within
+     * its specification defined bounds, or an <code>IllegalArgumentException
+     * </code> will be thrown.
+     * </p>
+     * @exception IllegalArgumentException if the provided <code>value</code>
+     *            argument is of the wrong class, contains illegal values,
+     *            or is null.
+     */
+    public void set( Object value )
+        throws IllegalArgumentException
+    {
+        m_Representation.validate( value );
+        m_value = m_Representation.format( value );
+    }
+
+    /** Returns the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     *
+     * @return the value object of the DataElement, which is the same object
+     *         that has previously been set with the <code>set()</code>
+     *         method.
+     */
+    public Object get()
+    {
+        return m_value;
+    }
+}

Modified: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/PrimaryAccountNumber.java
==============================================================================
--- development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/PrimaryAccountNumber.java	(original)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/PrimaryAccountNumber.java	Fri Mar 25 18:31:17 2005
@@ -19,28 +19,74 @@
 
 
 import net.dpml.iso8583.data.DataElement;
-
+import net.dpml.iso8583.data.Representation;
+import net.dpml.iso8583.data.representation.VariableN;
 import net.dpml.logging.Logger;
-
+import net.dpml.parameters.Parameters;
 import org.jpos.iso.ISOException;
 import org.jpos.iso.ISOMsg;
 
-/** Interface for a data element in ISO-8583 messages.
+
+/** <code>DataElement</code> implementation of PrimaryAccountNumber.
+ *
+ * @author <a href="mailto:niclas at hedhman.org">Niclas Hedhman</a>
+ *
+ * @see net.dpml.iso8583.data.DataElement
+ * @see net.dpml.iso8583.data.DataElementManager
  *
- * @metro.component name="primary-account-number" lifestyle="transient"
+ * @metro.component lifestyle="transient" name="PrimaryAccountNumber"
  * @metro.service type="net.dpml.iso8583.data.DataElement"
  */
 public class PrimaryAccountNumber
     implements DataElement
 {
-    private String m_account;
+    /** The ISO8583 bit number */
+    static private int ISO8583_BIT_NUMBER = 2;
+
+    /** ISO8583 Representation formatter and validator. */
+    static private Representation m_Representation;
+
+    private String m_value;
     private Logger m_logger;
 
-    public PrimaryAccountNumber( Logger logger )
+    /** Sets up the element type in a generic fashion. */
+    static
+    {
+        m_Representation = new VariableN( 19 );
+    }
+
+    /** Constructor of PrimaryAccountNumber.
+     *
+     * @param logger supplied <code>Logger</code> instance.
+     * @param params supplied configuration <code>Parameters</code>
+     */
+    public PrimaryAccountNumber( Logger logger, Parameters params )
     {
         m_logger = logger;
+        m_value = params.getParameter( "value", "" );
     }
 
+    /** Instructs the DataElement to populate the ISOMsg object.
+     * <p>
+     *  <code>DataElement</code> implementations are responsible to know
+     *  which field (a.k.a. bit) that it should populate in the
+     *  <code>ISOMsg</code> structure. The caller must know whether the
+     *  field is required or not, and if the <code>DataElement</code> has
+     *  not been properly set, either in the course of the session or as
+     *  part of its initialization, it should throw an ISOException.
+     * </p>
+     * <p>
+     *  If the <code>DataElement</code> is nested, it is responsible for
+     *  calling the <code>populate</code> method for each of the composite
+     *  <code>DataElements</code>.
+     * </p>
+     * @param message the <code>ISOMsg</code> instance to populate with the
+     *        value of the <code>DataElement</code>.
+     * @param required if true, the <code>DataElement</code> must make sure
+     *        that its value object has been set during the session.
+     *
+     * @exception org.jpos.iso.ISOException if the ISOMsg can not be populated.
+     */
     public void populate( ISOMsg message, boolean required )
         throws ISOException
     {
@@ -49,40 +95,49 @@
             m_logger.debug( "populate: " + message );
         }
 
-        if( required && m_account == null )
+        if( required && m_value == null )
         {
             throw new ISOException( "Required data element has not been set: PrimaryAccountNumber" );
         }
-        message.set( 2, m_account );
+        message.set( ISO8583_BIT_NUMBER, m_value );
     }
 
+    /** Sets the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     * <p>
+     * The provided argument must be of the correct type, and be within
+     * its specification defined bounds, or an <code>IllegalArgumentException
+     * </code> will be thrown.
+     * </p>
+     * @exception IllegalArgumentException if the provided <code>value</code>
+     *            argument is of the wrong class, contains illegal values,
+     *            or is null.
+     */
     public void set( Object value )
         throws IllegalArgumentException
     {
-        if( value instanceof String == false )
-        {
-            throw new IllegalArgumentException( "Value must be a java.lang.String: " + value );
-        }
-
-        if( value == null )
-        {
-            throw new IllegalArgumentException( "Null argument not allowed." );
-        }
-        String number = (String) value;
-        if( number.length() > 19 )
-        {
-            throw new IllegalArgumentException( "Account numbers can not be longer than 19 characters: " + number );
-        }
-        m_account = number;
+        m_Representation.validate( value );
+        m_value = m_Representation.format( value );
     }
 
+    /** Returns the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     *
+     * @return the value object of the DataElement, which is the same object
+     *         that has previously been set with the <code>set()</code>
+     *         method.
+     */
     public Object get()
     {
-        return m_account;
+        return m_value;
     }
 
-    public void reset()
-    {
-        m_account = null;
-    }
 }

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/ProcessingCode.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/ProcessingCode.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.elements;
+
+
+import net.dpml.iso8583.data.DataElement;
+import net.dpml.iso8583.data.Representation;
+import net.dpml.iso8583.data.representation.AN;
+import net.dpml.logging.Logger;
+import net.dpml.parameters.Parameters;
+import org.jpos.iso.ISOException;
+import org.jpos.iso.ISOMsg;
+
+
+/** <code>DataElement</code> implementation of ProcessingCode.
+ *
+ * @author <a href="mailto:niclas at hedhman.org">Niclas Hedhman</a>
+ *
+ * @see net.dpml.iso8583.data.DataElement
+ * @see net.dpml.iso8583.data.DataElementManager
+ *
+ * @metro.component lifestyle="transient" name="ProcessingCode"
+ * @metro.service type="net.dpml.iso8583.data.DataElement"
+ */
+public class ProcessingCode
+    implements DataElement
+{
+    /** The ISO8583 bit number */
+    static private int ISO8583_BIT_NUMBER = 3;
+
+    /** ISO8583 Representation formatter and validator. */
+    static private Representation m_Representation;
+
+    private String m_value;
+    private Logger m_logger;
+
+    /** Sets up the element type in a generic fashion. */
+    static
+    {
+        m_Representation = new AN( 6 );
+    }
+
+    /** Constructor of ProcessingCode.
+     *
+     * @param logger supplied <code>Logger</code> instance.
+     * @param params supplied configuration <code>Parameters</code>
+     */
+    public ProcessingCode( Logger logger, Parameters params )
+    {
+        m_logger = logger;
+        m_value = params.getParameter( "value", "" );
+    }
+
+    /** Instructs the DataElement to populate the ISOMsg object.
+     * <p>
+     *  <code>DataElement</code> implementations are responsible to know
+     *  which field (a.k.a. bit) that it should populate in the
+     *  <code>ISOMsg</code> structure. The caller must know whether the
+     *  field is required or not, and if the <code>DataElement</code> has
+     *  not been properly set, either in the course of the session or as
+     *  part of its initialization, it should throw an ISOException.
+     * </p>
+     * <p>
+     *  If the <code>DataElement</code> is nested, it is responsible for
+     *  calling the <code>populate</code> method for each of the composite
+     *  <code>DataElements</code>.
+     * </p>
+     * @param message the <code>ISOMsg</code> instance to populate with the
+     *        value of the <code>DataElement</code>.
+     * @param required if true, the <code>DataElement</code> must make sure
+     *        that its value object has been set during the session.
+     *
+     * @exception org.jpos.iso.ISOException if the ISOMsg can not be populated.
+     */
+    public void populate( ISOMsg message, boolean required )
+        throws ISOException
+    {
+        if( m_logger.isDebugEnabled() )
+        {
+            m_logger.debug( "populate: " + message );
+        }
+
+        if( required && m_value == null )
+        {
+            throw new ISOException( "Required data element has not been set: PrimaryAccountNumber" );
+        }
+        message.set( ISO8583_BIT_NUMBER, m_value );
+    }
+
+    /** Sets the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     * <p>
+     * The provided argument must be of the correct type, and be within
+     * its specification defined bounds, or an <code>IllegalArgumentException
+     * </code> will be thrown.
+     * </p>
+     * @exception IllegalArgumentException if the provided <code>value</code>
+     *            argument is of the wrong class, contains illegal values,
+     *            or is null.
+     */
+    public void set( Object value )
+        throws IllegalArgumentException
+    {
+        m_Representation.validate( value );
+        m_value = m_Representation.format( value );
+    }
+
+    /** Returns the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     *
+     * @return the value object of the DataElement, which is the same object
+     *         that has previously been set with the <code>set()</code>
+     *         method.
+     */
+    public Object get()
+    {
+        return m_value;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/ReconciliationIndicator.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/ReconciliationIndicator.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,143 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.elements;
+
+
+import net.dpml.iso8583.data.DataElement;
+import net.dpml.iso8583.data.Representation;
+import net.dpml.iso8583.data.representation.N;
+import net.dpml.logging.Logger;
+import net.dpml.parameters.Parameters;
+import org.jpos.iso.ISOException;
+import org.jpos.iso.ISOMsg;
+
+
+/** <code>DataElement</code> implementation of ReconciliationIndicator.
+ *
+ * @author <a href="mailto:niclas at hedhman.org">Niclas Hedhman</a>
+ *
+ * @see net.dpml.iso8583.data.DataElement
+ * @see net.dpml.iso8583.data.DataElementManager
+ *
+ * @metro.component lifestyle="transient" name="ReconciliationIndicator"
+ * @metro.service type="net.dpml.iso8583.data.DataElement"
+ */
+public class ReconciliationIndicator
+    implements DataElement
+{
+    /** The ISO8583 bit number */
+    static private int ISO8583_BIT_NUMBER = 29;
+
+    /** ISO8583 Representation formatter and validator. */
+    static private Representation m_Representation;
+
+    private String m_value;
+    private Logger m_logger;
+
+    /** Sets up the element type in a generic fashion. */
+    static
+    {
+        m_Representation = new N( 3 );
+    }
+
+    /** Constructor of ReconciliationIndicator.
+     *
+     * @param logger supplied <code>Logger</code> instance.
+     * @param params supplied configuration <code>Parameters</code>
+     */
+    public ReconciliationIndicator( Logger logger, Parameters params )
+    {
+        m_logger = logger;
+        m_value = params.getParameter( "value", "" );
+    }
+
+    /** Instructs the DataElement to populate the ISOMsg object.
+     * <p>
+     *  <code>DataElement</code> implementations are responsible to know
+     *  which field (a.k.a. bit) that it should populate in the
+     *  <code>ISOMsg</code> structure. The caller must know whether the
+     *  field is required or not, and if the <code>DataElement</code> has
+     *  not been properly set, either in the course of the session or as
+     *  part of its initialization, it should throw an ISOException.
+     * </p>
+     * <p>
+     *  If the <code>DataElement</code> is nested, it is responsible for
+     *  calling the <code>populate</code> method for each of the composite
+     *  <code>DataElements</code>.
+     * </p>
+     * @param message the <code>ISOMsg</code> instance to populate with the
+     *        value of the <code>DataElement</code>.
+     * @param required if true, the <code>DataElement</code> must make sure
+     *        that its value object has been set during the session.
+     *
+     * @exception org.jpos.iso.ISOException if the ISOMsg can not be populated.
+     */
+    public void populate( ISOMsg message, boolean required )
+        throws ISOException
+    {
+        if( m_logger.isDebugEnabled() )
+        {
+            m_logger.debug( "populate: " + message );
+        }
+
+        if( required && m_value == null )
+        {
+            throw new ISOException( "Required data element has not been set: PrimaryAccountNumber" );
+        }
+        message.set( ISO8583_BIT_NUMBER, m_value );
+    }
+
+    /** Sets the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     * <p>
+     * The provided argument must be of the correct type, and be within
+     * its specification defined bounds, or an <code>IllegalArgumentException
+     * </code> will be thrown.
+     * </p>
+     * @exception IllegalArgumentException if the provided <code>value</code>
+     *            argument is of the wrong class, contains illegal values,
+     *            or is null.
+     */
+    public void set( Object value )
+        throws IllegalArgumentException
+    {
+        m_Representation.validate( value );
+        m_value = m_Representation.format( value );
+    }
+
+    /** Returns the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     *
+     * @return the value object of the DataElement, which is the same object
+     *         that has previously been set with the <code>set()</code>
+     *         method.
+     */
+    public Object get()
+    {
+        return m_value;
+    }
+
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/SystemsTraceAuditNumber.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/SystemsTraceAuditNumber.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,144 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.elements;
+
+
+import net.dpml.iso8583.data.DataElement;
+import net.dpml.iso8583.data.Representation;
+import net.dpml.iso8583.data.representation.N;
+import net.dpml.logging.Logger;
+import net.dpml.parameters.Parameters;
+import org.jpos.iso.ISOException;
+import org.jpos.iso.ISOMsg;
+
+
+/** <code>DataElement</code> implementation of SystemsTraceAuditNumber.
+ *
+ * @author <a href="mailto:niclas at hedhman.org">Niclas Hedhman</a>
+ *
+ * @see net.dpml.iso8583.data.DataElement
+ * @see net.dpml.iso8583.data.DataElementManager
+ *
+ * @metro.component lifestyle="transient" name="SystemsTraceAuditNumber"
+ * @metro.service type="net.dpml.iso8583.data.DataElement"
+ */
+public class SystemsTraceAuditNumber
+    implements DataElement
+{
+    /** The ISO8583 bit number */
+    static private int ISO8583_BIT_NUMBER = 11;
+
+    /** ISO8583 Representation formatter and validator. */
+    static private Representation m_Representation;
+
+    private String m_value;
+    private Logger m_logger;
+
+    /** Sets up the element type in a generic fashion. */
+    static
+    {
+        m_Representation = new N( 12 );
+    }
+
+    /** Constructor of SystemsTraceAuditNumber.
+     *
+     * @param logger supplied <code>Logger</code> instance.
+     * @param params supplied configuration <code>Parameters</code>
+     */
+    public SystemsTraceAuditNumber( Logger logger, Parameters params )
+    {
+        m_logger = logger;
+        m_value = params.getParameter( "value", "" );
+    }
+
+    /** Instructs the DataElement to populate the ISOMsg object.
+     * <p>
+     *  <code>DataElement</code> implementations are responsible to know
+     *  which field (a.k.a. bit) that it should populate in the
+     *  <code>ISOMsg</code> structure. The caller must know whether the
+     *  field is required or not, and if the <code>DataElement</code> has
+     *  not been properly set, either in the course of the session or as
+     *  part of its initialization, it should throw an ISOException.
+     * </p>
+     * <p>
+     *  If the <code>DataElement</code> is nested, it is responsible for
+     *  calling the <code>populate</code> method for each of the composite
+     *  <code>DataElements</code>.
+     * </p>
+     * @param message the <code>ISOMsg</code> instance to populate with the
+     *        value of the <code>DataElement</code>.
+     * @param required if true, the <code>DataElement</code> must make sure
+     *        that its value object has been set during the session.
+     *
+     * @exception org.jpos.iso.ISOException if the ISOMsg can not be populated.
+     */
+    public void populate( ISOMsg message, boolean required )
+        throws ISOException
+    {
+        if( m_logger.isDebugEnabled() )
+        {
+            m_logger.debug( "populate: " + message );
+        }
+
+        if( required && m_value == null )
+        {
+            throw new ISOException( "Required data element has not been set: PrimaryAccountNumber" );
+        }
+        message.set( ISO8583_BIT_NUMBER, m_value );
+    }
+
+    /** Sets the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     * <p>
+     * The provided argument must be of the correct type, and be within
+     * its specification defined bounds, or an <code>IllegalArgumentException
+     * </code> will be thrown.
+     * </p>
+     * @exception IllegalArgumentException if the provided <code>value</code>
+     *            argument is of the wrong class, contains illegal values,
+     *            or is null.
+     */
+    public void set( Object value )
+        throws IllegalArgumentException
+    {
+        m_Representation.validate( value );
+        m_value = m_Representation.format( value );
+    }
+
+    /** Returns the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     *
+     * @return the value object of the DataElement, which is the same object
+     *         that has previously been set with the <code>set()</code>
+     *         method.
+     */
+    public Object get()
+    {
+        return m_value;
+    }
+
+
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/TransactionLifeCycleIdentificationData.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/TransactionLifeCycleIdentificationData.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,143 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.elements;
+
+
+import net.dpml.iso8583.data.DataElement;
+import net.dpml.iso8583.data.Representation;
+import net.dpml.iso8583.data.representation.ANS;
+import net.dpml.logging.Logger;
+import net.dpml.parameters.Parameters;
+import org.jpos.iso.ISOException;
+import org.jpos.iso.ISOMsg;
+
+
+/** <code>DataElement</code> implementation of TransactionLifeCycleIdentificationData.
+ *
+ * @author <a href="mailto:niclas at hedhman.org">Niclas Hedhman</a>
+ *
+ * @see net.dpml.iso8583.data.DataElement
+ * @see net.dpml.iso8583.data.DataElementManager
+ *
+ * @metro.component lifestyle="transient" name="TransactionLifeCycleIdentificationData"
+ * @metro.service type="net.dpml.iso8583.data.DataElement"
+ */
+public class TransactionLifeCycleIdentificationData
+    implements DataElement
+{
+    /** The ISO8583 bit number */
+    static private int ISO8583_BIT_NUMBER = 21;
+
+    /** ISO8583 Representation formatter and validator. */
+    static private Representation m_Representation;
+
+    private String m_value;
+    private Logger m_logger;
+
+    /** Sets up the element type in a generic fashion. */
+    static
+    {
+        m_Representation = new ANS( 22 );
+    }
+
+    /** Constructor of TransactionLifeCycleIdentificationData.
+     *
+     * @param logger supplied <code>Logger</code> instance.
+     * @param params supplied configuration <code>Parameters</code>
+     */
+    public TransactionLifeCycleIdentificationData( Logger logger, Parameters params )
+    {
+        m_logger = logger;
+        m_value = params.getParameter( "value", "" );
+    }
+
+    /** Instructs the DataElement to populate the ISOMsg object.
+     * <p>
+     *  <code>DataElement</code> implementations are responsible to know
+     *  which field (a.k.a. bit) that it should populate in the
+     *  <code>ISOMsg</code> structure. The caller must know whether the
+     *  field is required or not, and if the <code>DataElement</code> has
+     *  not been properly set, either in the course of the session or as
+     *  part of its initialization, it should throw an ISOException.
+     * </p>
+     * <p>
+     *  If the <code>DataElement</code> is nested, it is responsible for
+     *  calling the <code>populate</code> method for each of the composite
+     *  <code>DataElements</code>.
+     * </p>
+     * @param message the <code>ISOMsg</code> instance to populate with the
+     *        value of the <code>DataElement</code>.
+     * @param required if true, the <code>DataElement</code> must make sure
+     *        that its value object has been set during the session.
+     *
+     * @exception org.jpos.iso.ISOException if the ISOMsg can not be populated.
+     */
+    public void populate( ISOMsg message, boolean required )
+        throws ISOException
+    {
+        if( m_logger.isDebugEnabled() )
+        {
+            m_logger.debug( "populate: " + message );
+        }
+
+        if( required && m_value == null )
+        {
+            throw new ISOException( "Required data element has not been set: PrimaryAccountNumber" );
+        }
+        message.set( ISO8583_BIT_NUMBER, m_value );
+    }
+
+    /** Sets the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     * <p>
+     * The provided argument must be of the correct type, and be within
+     * its specification defined bounds, or an <code>IllegalArgumentException
+     * </code> will be thrown.
+     * </p>
+     * @exception IllegalArgumentException if the provided <code>value</code>
+     *            argument is of the wrong class, contains illegal values,
+     *            or is null.
+     */
+    public void set( Object value )
+        throws IllegalArgumentException
+    {
+        m_Representation.validate( value );
+        m_value = m_Representation.format( value );
+    }
+
+    /** Returns the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     *
+     * @return the value object of the DataElement, which is the same object
+     *         that has previously been set with the <code>set()</code>
+     *         method.
+     */
+    public Object get()
+    {
+        return m_value;
+    }
+
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/XX.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/elements/XX.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.elements;
+
+
+import net.dpml.iso8583.data.DataElement;
+import net.dpml.iso8583.data.Representation;
+import net.dpml.iso8583.data.representation.B;
+import net.dpml.logging.Logger;
+import net.dpml.parameters.Parameters;
+import org.jpos.iso.ISOException;
+import org.jpos.iso.ISOMsg;
+
+
+/** <code>DataElement</code> implementation of XX.
+ *
+ * @author <a href="mailto:niclas at hedhman.org">Niclas Hedhman</a>
+ *
+ * @see net.dpml.iso8583.data.DataElement
+ * @see net.dpml.iso8583.data.DataElementManager
+ *
+ * @metro.component lifestyle="transient" name="XX" // TODO ENTER CORRECT NAME
+ * @metro.service type="net.dpml.iso8583.data.DataElement"
+ */
+public class XX
+    implements DataElement
+{
+    /** The ISO8583 bit number */
+    static private int ISO8583_BIT_NUMBER = 0; //TODO Enter correct one
+
+    /** ISO8583 Representation formatter and validator. */
+    static private Representation m_Representation;
+
+    private String m_value;
+    private Logger m_logger;
+
+    /** Sets up the element type in a generic fashion. */
+    static
+    {
+        m_Representation = new B( 0 );  // TODO; Enter correct
+    }
+
+    /** Constructor of XX.
+     *
+     * @param logger supplied <code>Logger</code> instance.
+     * @param params supplied configuration <code>Parameters</code>
+     */
+    public XX( Logger logger, Parameters params )
+    {
+        m_logger = logger;
+        m_value = params.getParameter( "value", "" );
+    }
+
+    /** Instructs the DataElement to populate the ISOMsg object.
+     * <p>
+     *  <code>DataElement</code> implementations are responsible to know
+     *  which field (a.k.a. bit) that it should populate in the
+     *  <code>ISOMsg</code> structure. The caller must know whether the
+     *  field is required or not, and if the <code>DataElement</code> has
+     *  not been properly set, either in the course of the session or as
+     *  part of its initialization, it should throw an ISOException.
+     * </p>
+     * <p>
+     *  If the <code>DataElement</code> is nested, it is responsible for
+     *  calling the <code>populate</code> method for each of the composite
+     *  <code>DataElements</code>.
+     * </p>
+     * @param message the <code>ISOMsg</code> instance to populate with the
+     *        value of the <code>DataElement</code>.
+     * @param required if true, the <code>DataElement</code> must make sure
+     *        that its value object has been set during the session.
+     *
+     * @exception ISOException if the ISOMsg can not be populated.
+     */
+    public void populate( ISOMsg message, boolean required )
+        throws ISOException
+    {
+        if( m_logger.isDebugEnabled() )
+        {
+            m_logger.debug( "populate: " + message );
+        }
+
+        if( required && m_value == null )
+        {
+            throw new ISOException( "Required data element has not been set: PrimaryAccountNumber" );
+        }
+        message.set( ISO8583_BIT_NUMBER, m_value );
+    }
+
+    /** Sets the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     * <p>
+     * The provided argument must be of the correct type, and be within
+     * its specification defined bounds, or an <code>IllegalArgumentException
+     * </code> will be thrown.
+     * </p>
+     * @exception IllegalArgumentException if the provided <code>value</code>
+     *            argument is of the wrong class, contains illegal values,
+     *            or is null.
+     */
+    public void set( Object value )
+        throws IllegalArgumentException
+    {
+        m_Representation.validate( value );
+        m_value = m_Representation.format( value );
+    }
+
+    /** Returns the value object of the DataElement.
+     * <p>
+     *  Each <code>DataElement</code> implementation defines what the value
+     *  object is, and whether a default value can be configured/parameterized
+     *  or must be set during the session.
+     * </p>
+     *
+     * @return the value object of the DataElement, which is the same object
+     *         that has previously been set with the <code>set()</code>
+     *         method.
+     */
+    public Object get()
+    {
+        return m_value;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/A.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/A.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.representation;
+
+import net.dpml.iso8583.data.Representation;
+import net.dpml.lang.NullArgumentException;
+
+public class A
+    implements Representation
+{
+
+    private int m_length;
+
+    public A( int length )
+    {
+        m_length = length;
+    }
+
+    public void validate( Object value )
+        throws IllegalArgumentException
+    {
+        if( value == null )
+            throw new NullArgumentException( "value" );
+        // TODO; check type
+        // TODO; check length
+    }
+
+    public String format( Object obj )
+    {
+        // TODO; generate string
+        return null;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/AN.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/AN.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.representation;
+
+import net.dpml.iso8583.data.Representation;
+import net.dpml.lang.NullArgumentException;
+
+public class AN
+    implements Representation
+{
+    private int m_length;
+
+    public AN( int length )
+    {
+        m_length = length;
+    }
+
+    public void validate( Object value )
+        throws IllegalArgumentException
+    {
+        if( value == null )
+            throw new NullArgumentException( "value" );
+        // TODO; check type
+        // TODO; check length
+    }
+
+    public String format( Object obj )
+    {
+        // TODO; generate string
+        return null;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/ANB.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/ANB.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.representation;
+
+import net.dpml.iso8583.data.Representation;
+import net.dpml.lang.NullArgumentException;
+
+public class ANB
+    implements Representation
+{
+
+    private int m_length;
+
+    public ANB( int length )
+    {
+        m_length = length;
+    }
+
+    public void validate( Object value )
+        throws IllegalArgumentException
+    {
+        if( value == null )
+            throw new NullArgumentException( "value" );
+        // TODO; check type
+        // TODO; check length
+    }
+
+    public String format( Object obj )
+    {
+        // TODO; generate string
+        return null;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/ANP.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/ANP.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.representation;
+
+import net.dpml.iso8583.data.Representation;
+import net.dpml.lang.NullArgumentException;
+
+public class ANP
+    implements Representation
+{
+
+    private int m_length;
+
+    public ANP( int length )
+    {
+        m_length = length;
+    }
+
+    public void validate( Object value )
+        throws IllegalArgumentException
+    {
+        if( value == null )
+            throw new NullArgumentException( "value" );
+        // TODO; check type
+        // TODO; check length
+    }
+
+    public String format( Object obj )
+    {
+        // TODO; generate string
+        return null;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/ANS.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/ANS.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.representation;
+
+import net.dpml.iso8583.data.Representation;
+import net.dpml.lang.NullArgumentException;
+
+public class ANS
+    implements Representation
+{
+
+    private int m_length;
+
+    public ANS( int length )
+    {
+        m_length = length;
+    }
+
+    public void validate( Object value )
+        throws IllegalArgumentException
+    {
+        if( value == null )
+            throw new NullArgumentException( "value" );
+        // TODO; check type
+        // TODO; check length
+    }
+
+    public String format( Object obj )
+    {
+        // TODO; generate string
+        return null;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/ANSB.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/ANSB.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.representation;
+
+import net.dpml.iso8583.data.Representation;
+import net.dpml.lang.NullArgumentException;
+
+public class ANSB
+    implements Representation
+{
+
+    private int m_length;
+
+    public ANSB( int length )
+    {
+        m_length = length;
+    }
+
+    public void validate( Object value )
+        throws IllegalArgumentException
+    {
+        if( value == null )
+            throw new NullArgumentException( "value" );
+        // TODO; check type
+        // TODO; check length
+    }
+
+    public String format( Object obj )
+    {
+        // TODO; generate string
+        return null;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/AS.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/AS.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.representation;
+
+import net.dpml.iso8583.data.Representation;
+import net.dpml.lang.NullArgumentException;
+
+public class AS
+    implements Representation
+{
+
+    private int m_length;
+
+    public AS( int length )
+    {
+        m_length = length;
+    }
+
+    public void validate( Object value )
+        throws IllegalArgumentException
+    {
+        if( value == null )
+            throw new NullArgumentException( "value" );
+        // TODO; check type
+        // TODO; check length
+    }
+
+    public String format( Object obj )
+    {
+        // TODO; generate string
+        return null;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/B.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/B.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.representation;
+
+import net.dpml.iso8583.data.Representation;
+import net.dpml.lang.NullArgumentException;
+
+public class B
+    implements Representation
+{
+
+    private int m_length;
+
+    public B( int length )
+    {
+        m_length = length;
+    }
+
+    public void validate( Object value )
+        throws IllegalArgumentException
+    {
+        if( value == null )
+            throw new NullArgumentException( "value" );
+        // TODO; check type
+        // TODO; check length
+     }
+
+    public String format( Object obj )
+    {
+        // TODO; generate string
+        return null;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/N.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/N.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.representation;
+
+import net.dpml.iso8583.data.Representation;
+import net.dpml.lang.NullArgumentException;
+
+public class N
+    implements Representation
+{
+
+    private int m_length;
+
+    public N( int length )
+    {
+        m_length = length;
+    }
+
+    public void validate( Object value )
+        throws IllegalArgumentException
+    {
+        if( value == null )
+            throw new NullArgumentException( "value" );
+        // TODO; check type
+        // TODO; check length
+    }
+
+    public String format( Object obj )
+    {
+        return null;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/VariableAN.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/VariableAN.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.representation;
+
+import net.dpml.iso8583.data.Representation;
+import net.dpml.lang.NullArgumentException;
+
+public class VariableAN
+    implements Representation
+{
+
+    private int m_length;
+
+    public VariableAN( int length )
+    {
+        m_length = length;
+    }
+
+    public void validate( Object value )
+        throws IllegalArgumentException
+    {
+        if( value == null )
+            throw new NullArgumentException( "value" );
+        // TODO; check type
+        // TODO; check length
+    }
+
+    public String format( Object obj )
+    {
+        // TODO; generate string
+        return null;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/VariableANS.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/VariableANS.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.representation;
+
+import net.dpml.iso8583.data.Representation;
+import net.dpml.lang.NullArgumentException;
+
+public class VariableANS
+    implements Representation
+{
+
+    private int m_length;
+
+    public VariableANS( int length )
+    {
+        m_length = length;
+    }
+
+    public void validate( Object value )
+        throws IllegalArgumentException
+    {
+        if( value == null )
+            throw new NullArgumentException( "value" );
+        // TODO; check type
+        // TODO; check length
+    }
+
+    public String format( Object obj )
+    {
+        // TODO; generate string
+        return null;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/VariableANSB.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/VariableANSB.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.representation;
+
+import net.dpml.iso8583.data.Representation;
+import net.dpml.lang.NullArgumentException;
+
+public class VariableANSB
+    implements Representation
+{
+
+    private int m_length;
+
+    public VariableANSB( int length )
+    {
+        m_length = length;
+    }
+
+    public void validate( Object value )
+        throws IllegalArgumentException
+    {
+        if( value == null )
+            throw new NullArgumentException( "value" );
+        // TODO; check type
+        // TODO; check length
+    }
+
+    public String format( Object obj )
+    {
+        // TODO; generate string
+        return null;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/VariableB.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/VariableB.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.representation;
+
+import net.dpml.iso8583.data.Representation;
+import net.dpml.lang.NullArgumentException;
+
+public class VariableB
+    implements Representation
+{
+
+    private int m_length;
+
+    public VariableB( int length )
+    {
+        m_length = length;
+    }
+
+    public void validate( Object value )
+        throws IllegalArgumentException
+    {
+        if( value == null )
+            throw new NullArgumentException( "value" );
+        // TODO; check type
+        // TODO; check length
+    }
+
+    public String format(Object obj)
+    {
+        // TODO; generate string
+        return null;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/VariableN.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/VariableN.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.representation;
+
+import net.dpml.iso8583.data.Representation;
+import net.dpml.lang.NullArgumentException;
+
+public class VariableN
+    implements Representation
+{
+
+    private int m_length;
+
+    public VariableN( int length )
+    {
+        m_length = length;
+    }
+
+    public void validate( Object value )
+        throws IllegalArgumentException
+    {
+        if( value == null )
+            throw new NullArgumentException( "value" );
+        // TODO; check type
+        // TODO; check length
+    }
+
+    public String format( Object obj )
+    {
+        // TODO; generate string
+        return null;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/VariableZ.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/VariableZ.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.representation;
+
+import net.dpml.iso8583.data.Representation;
+import net.dpml.lang.NullArgumentException;
+
+public class VariableZ
+    implements Representation
+{
+
+    private int m_length;
+
+    public VariableZ( int length )
+    {
+        m_length = length;
+    }
+
+    public void validate( Object value )
+        throws IllegalArgumentException
+    {
+        if( value == null )
+            throw new NullArgumentException( "value" );
+        // TODO; check type
+        // TODO; check length
+    }
+
+    public String format( Object obj )
+    {
+        // TODO; generate string
+        return null;
+    }
+}

Added: development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/XN.java
==============================================================================
--- (empty file)
+++ development/planet/users/niclas/iso8583/elements/src/main/net/dpml/iso8583/data/representation/XN.java	Fri Mar 25 18:31:17 2005
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2004-2005 Niclas Hedhman.
+ *
+ * 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.
+ */
+package net.dpml.iso8583.data.representation;
+
+import net.dpml.iso8583.data.Representation;
+import net.dpml.lang.NullArgumentException;
+
+public class XN
+    implements Representation
+{
+
+    private int m_length;
+
+    public XN( int length )
+    {
+        m_length = length;
+    }
+
+    public void validate( Object value )
+        throws IllegalArgumentException
+    {
+        if( value == null )
+            throw new NullArgumentException( "value" );
+        // TODO; check type
+        // TODO; check length
+    }
+
+    public String format( Object obj )
+    {
+        // TODO; generate string
+        return null;
+    }
+}

Modified: development/planet/users/niclas/iso8583/iso8583.iws
==============================================================================
--- development/planet/users/niclas/iso8583/iso8583.iws	(original)
+++ development/planet/users/niclas/iso8583/iso8583.iws	Fri Mar 25 18:31:17 2005
@@ -38,8 +38,8 @@
     <autoRefresh>false</autoRefresh>
   </component>
   <component name="Commander">
-    <leftPanel />
-    <rightPanel />
+    <leftPanel url="file://$PROJECT_DIR$/channels" />
+    <rightPanel url="file://$PROJECT_DIR$/channels" />
     <splitter proportion="0.5" />
   </component>
   <component name="CompilerWorkspaceConfiguration">
@@ -146,26 +146,75 @@
     <option name="HIDE_WARNINGS" value="false" />
   </component>
   <component name="FileEditorManager" split-orientation="vertical" split-proportion="0.5">
-    <first-group selected-file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/elements/TEMPLATE.tjava">
-      <entry file="file://$PROJECT_DIR$/packaging/src/main/net/dpml/iso8583/packaging/Base1Packager.java" pinned="false">
+    <first-group selected-file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/elements/ContinuationBit.java">
+      <entry file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/elements/SystemsTraceAuditNumber.java" pinned="false">
         <provider selected="true" editor-type-id="text-editor">
-          <state line="35" column="9" selection-start="1065" selection-end="1065" vertical-scroll-proportion="0.35315984">
+          <state line="39" column="13" selection-start="1319" selection-end="1319" vertical-scroll-proportion="0.3324573">
+            <folding />
+          </state>
+        </provider>
+      </entry>
+      <entry file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/elements/TransactionLifeCycleIdentificationData.java" pinned="false">
+        <provider selected="true" editor-type-id="text-editor">
+          <state line="39" column="13" selection-start="1351" selection-end="1351" vertical-scroll-proportion="0.3324573">
+            <folding />
+          </state>
+        </provider>
+      </entry>
+      <entry file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/elements/XX.java" pinned="false">
+        <provider selected="true" editor-type-id="text-editor">
+          <state line="39" column="13" selection-start="1304" selection-end="1304" vertical-scroll-proportion="0.45335084">
             <folding>
               <element signature="imports" expanded="true" />
             </folding>
           </state>
         </provider>
       </entry>
-      <entry file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/manager/DefaultManager.java" pinned="false">
+      <entry file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/elements/AmountCardHolderBilling.java" pinned="false">
         <provider selected="true" editor-type-id="text-editor">
-          <state line="87" column="55" selection-start="2864" selection-end="2864" vertical-scroll-proportion="0.6282528">
+          <state line="39" column="13" selection-start="1319" selection-end="1319" vertical-scroll-proportion="0.3324573">
             <folding />
           </state>
         </provider>
       </entry>
-      <entry file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/elements/TEMPLATE.tjava" pinned="false">
+      <entry file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/elements/AmountCardholderBillingFee.java" pinned="false">
         <provider selected="true" editor-type-id="text-editor">
-          <state line="29" column="30" selection-start="856" selection-end="856" vertical-scroll-proportion="0.16666667">
+          <state line="39" column="13" selection-start="1325" selection-end="1325" vertical-scroll-proportion="0.32325888">
+            <folding />
+          </state>
+        </provider>
+      </entry>
+      <entry file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/elements/AmountReconciliation.java" pinned="false">
+        <provider selected="true" editor-type-id="text-editor">
+          <state line="39" column="13" selection-start="1313" selection-end="1313" vertical-scroll-proportion="0.3324573">
+            <folding />
+          </state>
+        </provider>
+      </entry>
+      <entry file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/elements/AmountsOriginal.java" pinned="false">
+        <provider selected="true" editor-type-id="text-editor">
+          <state line="39" column="13" selection-start="1303" selection-end="1303" vertical-scroll-proportion="0.32325888">
+            <folding />
+          </state>
+        </provider>
+      </entry>
+      <entry file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/elements/AmountTransaction.java" pinned="false">
+        <provider selected="true" editor-type-id="text-editor">
+          <state line="39" column="13" selection-start="1307" selection-end="1307" vertical-scroll-proportion="0.3324573">
+            <folding />
+          </state>
+        </provider>
+      </entry>
+      <entry file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/elements/CardSequenceNumber.java" pinned="false">
+        <provider selected="true" editor-type-id="text-editor">
+          <state line="39" column="13" selection-start="1309" selection-end="1309" vertical-scroll-proportion="0.32325888">
+            <folding />
+          </state>
+        </provider>
+      </entry>
+      <entry file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/elements/ContinuationBit.java" pinned="false">
+        <provider selected="true" editor-type-id="text-editor">
+          <state line="39" column="13" selection-start="1303" selection-end="1303" vertical-scroll-proportion="0.3324573">
             <folding />
           </state>
         </provider>
@@ -186,25 +235,32 @@
   <component name="J2EEProjectPane" />
   <component name="NamedScopeManager" />
   <component name="PackagesPane">
-    <expanded_node url="net.dpml" module="elements" type="package" />
-    <expanded_node url="net.dpml.iso8583.data.manager" module="elements" type="package" />
-    <expanded_node url="net.dpml.iso8583" module="elements" type="package" />
-    <expanded_node url="" module="api" type="module" />
-    <expanded_node url="net" module="elements" type="package" />
-    <expanded_node url="net.dpml.iso8583.data" module="elements" type="package" />
+    <expanded_node url="net.dpml.iso8583.data.representation" module="elements" type="package" />
     <expanded_node url="" module="elements" type="module" />
     <expanded_node url="net.dpml.iso8583.data.elements" module="elements" type="package" />
-    <expanded_node url="net" module="api" type="package" />
-    <expanded_node url="net.dpml" module="api" type="package" />
-    <expanded_node url="net.dpml.iso8583" module="api" type="package" />
   </component>
-  <component name="ProjectPane" />
+  <component name="ProjectPane">
+    <expanded_node url="file://$PROJECT_DIR$/elements/src/main/net/dpml" module="elements" type="directory" />
+    <expanded_node url="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583" module="elements" type="directory" />
+    <expanded_node url="file://$PROJECT_DIR$/elements/src/test/net/dpml/iso8583/test/data" module="elements" type="directory" />
+    <expanded_node url="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data" module="elements" type="directory" />
+    <expanded_node url="file://$PROJECT_DIR$/elements/src" module="elements" type="directory" />
+    <expanded_node url="file://$PROJECT_DIR$/elements/src/test/net/dpml" module="elements" type="directory" />
+    <expanded_node url="file://$PROJECT_DIR$/elements/src/main/net" module="elements" type="directory" />
+    <expanded_node url="" module="elements" type="module" />
+    <expanded_node url="file://$PROJECT_DIR$/elements/src/test" module="elements" type="directory" />
+    <expanded_node url="file://$PROJECT_DIR$/elements" module="elements" type="directory" />
+    <expanded_node url="file://$PROJECT_DIR$/elements/src/test/net" module="elements" type="directory" />
+    <expanded_node url="file://$PROJECT_DIR$/elements/src/test/net/dpml/iso8583" module="elements" type="directory" />
+    <expanded_node url="file://$PROJECT_DIR$/elements/src/main" module="elements" type="directory" />
+    <expanded_node url="file://$PROJECT_DIR$/elements/src/test/net/dpml/iso8583/test" module="elements" type="directory" />
+  </component>
   <component name="ProjectView">
     <navigator currentView="PackagesPane" splitterProportion="0.5">
-      <flattenPackages />
+      <flattenPackages PackagesPane="true" />
       <showMembers />
       <showModules PackagesPane="true" />
-      <showLibraryContents />
+      <showLibraryContents PackagesPane="false" />
       <hideEmptyPackages />
       <showStructure PackagesPane="false" ProjectPane="false" />
       <autoscrollToSource />
@@ -217,6 +273,7 @@
     <property name="MemberChooser.showClasses" value="true" />
     <property name="MemberChooser.sorted" value="false" />
     <property name="GoToFile.includeJavaFiles" value="false" />
+    <property name="last_opened_file_path" value="/home/niclas" />
     <property name="GoToClass.toSaveIncludeLibraries" value="false" />
   </component>
   <component name="RunManager">
@@ -306,24 +363,24 @@
     </todo-panel>
   </component>
   <component name="ToolWindowManager">
-    <frame x="10" y="0" width="1260" height="977" extended-state="0" />
-    <editor active="false" />
+    <frame x="10" y="0" width="1260" height="977" extended-state="1" />
+    <editor active="true" />
     <layout>
       <window_info id="CVS" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="8" />
-      <window_info id="SvgViewer" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="3" />
+      <window_info id="SvgViewer" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33028287" order="3" />
       <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="7" />
-      <window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="true" weight="0.20216306" order="0" />
-      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="1" />
-      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="1" />
+      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="true" weight="0.19301164" order="0" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.32979977" order="1" />
+      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.24958402" order="1" />
       <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.32979977" order="8" />
       <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.4" order="6" />
       <window_info id="Dependency Viewer" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="8" />
       <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="1" />
       <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="2" />
       <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="2" />
-      <window_info id="Clover" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="-1" />
+      <window_info id="Clover" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.3294509" order="3" />
       <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.4" order="4" />
-      <window_info id="simpleUML" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="3" />
+      <window_info id="simpleUML" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.3294509" order="3" />
       <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="sliding" type="sliding" visible="false" weight="0.4" order="0" />
       <window_info id="Web" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="2" />
       <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="0" />
@@ -399,71 +456,113 @@
     <option name="FILTER_TARGETS" value="false" />
   </component>
   <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/api/src/main/net/dpml/iso8583/authorization/AuthorizationResponse.java">
+    <entry file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/elements/PosCapability.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="48" column="38" selection-start="1294" selection-end="1294" vertical-scroll-proportion="0.59311223">
+        <state line="66" column="0" selection-start="2050" selection-end="2050" vertical-scroll-proportion="0.8646518">
+          <folding>
+            <element signature="imports" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/elements/PosDataCode.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="68" column="0" selection-start="2038" selection-end="2038" vertical-scroll-proportion="0.8646518">
+          <folding>
+            <element signature="imports" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/elements/PrimaryAccountNumber.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="66" column="0" selection-start="2096" selection-end="2096" vertical-scroll-proportion="0.8672799">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/api/src/main/net/dpml/iso8583/authorization/AuthorizationRequest.java">
+    <entry file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/elements/ProcessingCode.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="24" column="17" selection-start="748" selection-end="748" vertical-scroll-proportion="0.13011153">
+        <state line="66" column="0" selection-start="2051" selection-end="2051" vertical-scroll-proportion="0.8646518">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/elements/PrimaryAccountNumber.java">
+    <entry file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/elements/ReconciliationIndicator.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="43" column="29" selection-start="1236" selection-end="1236" vertical-scroll-proportion="0.5018587">
-          <folding>
-            <element signature="imports" expanded="true" />
-          </folding>
+        <state line="66" column="0" selection-start="2095" selection-end="2095" vertical-scroll-proportion="0.8646518">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/elements/SystemsTraceAuditNumber.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="39" column="13" selection-start="1319" selection-end="1319" vertical-scroll-proportion="0.3324573">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/elements/TransactionLifeCycleIdentificationData.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="39" column="13" selection-start="1351" selection-end="1351" vertical-scroll-proportion="0.3324573">
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/api/src/main/net/dpml/iso8583/authorization/AuthorizationAdvice.java">
+    <entry file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/elements/XX.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="30" column="15" selection-start="941" selection-end="941" vertical-scroll-proportion="0.41584158">
+        <state line="39" column="13" selection-start="1304" selection-end="1304" vertical-scroll-proportion="0.45335084">
           <folding>
             <element signature="imports" expanded="true" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/api/src/main/net/dpml/iso8583/authorization/AuthorizationService.java">
+    <entry file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/elements/AmountCardHolderBilling.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="20" column="12" selection-start="675" selection-end="675" vertical-scroll-proportion="0.115384616">
+        <state line="39" column="13" selection-start="1319" selection-end="1319" vertical-scroll-proportion="0.3324573">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/api/src/main/net/dpml/iso8583/TimeDate.java">
+    <entry file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/elements/AmountCardholderBillingFee.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="26" column="18" selection-start="744" selection-end="744" vertical-scroll-proportion="0.28846154">
+        <state line="39" column="13" selection-start="1325" selection-end="1325" vertical-scroll-proportion="0.32325888">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/packaging/src/main/net/dpml/iso8583/packaging/Base1Packager.java">
+    <entry file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/elements/AmountReconciliation.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="35" column="9" selection-start="1065" selection-end="1065" vertical-scroll-proportion="0.35315984">
-          <folding>
-            <element signature="imports" expanded="true" />
-          </folding>
+        <state line="39" column="13" selection-start="1313" selection-end="1313" vertical-scroll-proportion="0.3324573">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/elements/AmountsOriginal.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="39" column="13" selection-start="1303" selection-end="1303" vertical-scroll-proportion="0.32325888">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/elements/AmountTransaction.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="39" column="13" selection-start="1307" selection-end="1307" vertical-scroll-proportion="0.3324573">
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/elements/TEMPLATE.tjava">
+    <entry file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/elements/ContinuationBit.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="29" column="30" selection-start="856" selection-end="856" vertical-scroll-proportion="0.16666667">
+        <state line="39" column="13" selection-start="1303" selection-end="1303" vertical-scroll-proportion="0.3324573">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/manager/DefaultManager.java">
+    <entry file="file://$PROJECT_DIR$/elements/src/main/net/dpml/iso8583/data/elements/CardSequenceNumber.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="87" column="55" selection-start="2864" selection-end="2864" vertical-scroll-proportion="0.6282528">
+        <state line="39" column="13" selection-start="1309" selection-end="1309" vertical-scroll-proportion="0.32325888">
           <folding />
         </state>
       </provider>

Modified: development/planet/users/niclas/iso8583/packaging/packaging.iml
==============================================================================
--- development/planet/users/niclas/iso8583/packaging/packaging.iml	(original)
+++ development/planet/users/niclas/iso8583/packaging/packaging.iml	Fri Mar 25 18:31:17 2005
@@ -7,6 +7,7 @@
     <exclude-exploded />
     <content url="file://$MODULE_DIR$">
       <sourceFolder url="file://$MODULE_DIR$/src/main" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test" isTestSource="true" />
     </content>
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />



More information about the notify-dpml mailing list