text:
package org.fusesource.camel.component.sap;

import java.util.Calendar;
import java.util.NoSuchElementException;

import org.fusesource.camel.component.sap.model.idoc.Document;
import org.fusesource.camel.component.sap.model.idoc.DocumentList;
import org.fusesource.camel.component.sap.model.idoc.IdocPackage;
import org.fusesource.camel.component.sap.model.idoc.Segment;
import org.fusesource.camel.component.sap.util.IDocUtil;
import org.junit.BeforeClass;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.StaticApplicationContext;

import com.sap.conn.idoc.IDocDatatype;
import com.sap.conn.idoc.IDocDocument;
import com.sap.conn.idoc.IDocDocumentIterator;
import com.sap.conn.idoc.IDocDocumentList;
import com.sap.conn.idoc.IDocFactory;
import com.sap.conn.idoc.IDocRecordMetaData;
import com.sap.conn.idoc.IDocRepository;
import com.sap.conn.idoc.IDocSegment;
import com.sap.conn.idoc.IDocSegmentMetaData;
import com.sap.conn.idoc.jco.JCoIDocServer;
import com.sap.conn.jco.JCoDestination;
import com.sap.conn.jco.server.JCoServerContext;
import com.sap.conn.jco.server.JCoServerState;

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

public abstract class SapIDocTestSupport extends JCoTestSupport {

	public static final String TEST_PROGRAM_ID = "TEST_PROGRAM_ID";
	public static final String TEST_DEST = "TEST_DEST";
	public static final String TEST_SERVER = "TEST_SERVER";
	public static final String TEST_QUEUE = "TEST_QUEUE";

	public static final String FIELD0 = "FIELD0";
	public static final String FIELD1 = "FIELD1";
	public static final String FIELD2 = "FIELD2";
	public static final String FIELD3 = "FIELD3";
	public static final String FIELD4 = "FIELD4";
	public static final String FIELD5 = "FIELD5";
	public static final String FIELD6 = "FIELD6";
	public static final String FIELD7 = "FIELD7";
	public static final String FIELD8 = "FIELD8";
	public static final String FIELD9 = "FIELD9";
	public static final String FIELD10 = "FIELD10";
	public static final String FIELD11 = "FIELD11";
	public static final String FIELD12 = "FIELD12";
	public static final String FIELD13 = "FIELD13";
	public static final String FIELD14 = "FIELD14";
	public static final String FIELD15 = "FIELD15";
	public static final String FIELD16 = "FIELD16";
	public static final String FIELD17 = "FIELD17";
	public static final String FIELD18 = "FIELD18";
	public static final String FIELD19 = "FIELD19";
	public static final String FIELD20 = "FIELD20";

	public static final String FIELD0_VALUE = "FIELD0_VALUE";
	public static final String FIELD1_VALUE = "FIELD1_VALUE";
	public static final String FIELD2_VALUE = "FIELD2_VALUE";
	public static final String FIELD3_VALUE = "FIELD3_VALUE";
	public static final String FIELD4_VALUE = "FIELD4_VALUE";
	public static final String FIELD5_VALUE = "FIELD5_VALUE";
	public static final String FIELD6_VALUE = "FIELD6_VALUE";
	public static final String FIELD7_VALUE = "FIELD7_VALUE";
	public static final String FIELD8_VALUE = "FIELD8_VALUE";
	public static final String FIELD9_VALUE = "FIELD9_VALUE";
	public static final String FIELD10_VALUE = "FIELD10_VALUE";
	public static final String FIELD11_VALUE = "FIELD11_VALUE";
	public static final String FIELD12_VALUE = "FIELD12_VALUE";
	public static final String FIELD13_VALUE = "FIELD13_VALUE";
	public static final String FIELD14_VALUE = "FIELD14_VALUE";
	public static final String FIELD15_VALUE = "FIELD15_VALUE";
	public static final String FIELD16_VALUE = "FIELD16_VALUE";
	public static final String FIELD17_VALUE = "FIELD17_VALUE";
	public static final String FIELD18_VALUE = "FIELD18_VALUE";
	public static final String FIELD19_VALUE = "FIELD19_VALUE";
	public static final String FIELD20_VALUE = "FIELD20_VALUE";

	public static final String[] RECORD_FIELD_VALUES = new String[] { "A", "B", "C" };
	public static final String[] RECORD_FIELD_VALUE_DESCRIPTIONS = new String[] { "A Description", "B Description", "C Description" };
	public static final String[][] RECORD_FIELD_VALUE_RANGES = new String[][] { { "A", null }, { "B", null }, { "C", null } };

	public static final String TEST_TID = "TEST_TID";
	public static final String TEST_REPOSITORY = "TEST_REPOSITORY";
	public static final String ROOT_DESCRIPTION = "ROOT_DESCRIPTION";
	public static final String LEVEL1_DESCRIPTION = "LEVEL1_DESCRIPTION";
	public static final String LEVEL2_DESCRIPTION = "LEVEL2_DESCRIPTION";
	public static final String LEVEL3_DESCRIPTION = "LEVEL3_DESCRIPTION";
	public static final String LEVEL1 = "LEVEL1";
	public static final String LEVEL2 = "LEVEL2";
	public static final String LEVEL3 = "LEVEL3";
	public static final String ROOT = "ROOT";
	public static final String BAR = "|";
	public static final String TEST_APPLICATION_RELEASE = "TEST_APPLICATION_VERSION";
	public static final String TEST_SYSTEM_RELEASE = "TEST_SYSTEM_VERSION";
	public static final String TEST_IDOC_TYPE_EXTENSION = "TEST_IDOC_TYPE_EXTENSION";
	public static final String TEST_IDOC_TYPE = "TEST_IDOC_TYPE";
	public static final String TEST_URL = IdocPackage.eNS_URI + "/" + TEST_REPOSITORY + "/" + TEST_IDOC_TYPE + "/" + TEST_IDOC_TYPE_EXTENSION + "/" + TEST_SYSTEM_RELEASE + "/" + TEST_APPLICATION_RELEASE;

	public static final String ROOT_SEGMENT_KEY = TEST_IDOC_TYPE + BAR + TEST_IDOC_TYPE_EXTENSION  + BAR + TEST_SYSTEM_RELEASE + BAR + TEST_APPLICATION_RELEASE + BAR + ROOT;
	public static final String LEVEL1_SEGMENT_KEY = TEST_IDOC_TYPE + BAR + TEST_IDOC_TYPE_EXTENSION  + BAR + TEST_SYSTEM_RELEASE + BAR + TEST_APPLICATION_RELEASE + BAR + LEVEL1;
	public static final String LEVEL2_SEGMENT_KEY = TEST_IDOC_TYPE + BAR + TEST_IDOC_TYPE_EXTENSION  + BAR + TEST_SYSTEM_RELEASE + BAR + TEST_APPLICATION_RELEASE + BAR + LEVEL2;
	public static final String LEVEL3_SEGMENT_KEY = TEST_IDOC_TYPE + BAR + TEST_IDOC_TYPE_EXTENSION  + BAR + TEST_SYSTEM_RELEASE + BAR + TEST_APPLICATION_RELEASE + BAR + LEVEL3;

	public static final String TEST_FLAG_VALUE = "testFlagValue";
	public static final String STATUS_VALUE = "statusValue";
	public static final String SERIALIZATION_VALUE = "serializationValue";
	public static final String SENDER_PORT_VALUE = "senderPortValue";
	public static final String SENDER_PARTNER_TYPE_VALUE = "senderPartnerTypeValue";
	public static final String SENDER_PARTNER_NUMBER_VALUE = "senderPartnerNumberValue";
	public static final String SENDER_PARTNER_FUNCTION_VALUE = "senderPartnerFunctionValue";
	public static final String SENDER_LOGICAL_ADDRESS_VALUE = "senderLogicalAddressValue";
	public static final String SENDER_ADDRESS_VALUE = "senderAddressValue";
	public static final String RECIPIENT_PORT_VALUE = "recipientPortValue";
	public static final String RECIPIENT_PARTNER_NUMBER_VALUE = "recipientPartnerNumberValue";
	public static final String RECIPIENT_PARTNER_TYPE_VALUE = "recipientPartnerTypeValue";
	public static final String RECIPIENT_PARTNER_FUNCTION_VALUE = "recipientPartnerFunctionValue";
	public static final String RECIPIENT_LOGICAL_ADDRESS_VALUE = "recipientLogicalAddressValue";
	public static final String RECIPIENT_ADDRESS_VALUE = "recipientAddressValue";
	public static final String OUTPUT_MODE_VALUE = "outputModeValue";
	public static final String MESSAGE_TYPE_VALUE = "messageTypeValue";
	public static final String MESSAGE_FUNCTION_VALUE = "messageFunctionValue";
	public static final String MESSAGE_CODE_VALUE = "messageCodeValue";
	public static final String IDOC_TYPE_EXTENSION_VALUE = "idocTypeExtensionValue";
	public static final String IDOC_TYPE_VALUE = "idocTypeValue";
	public static final String IDOC_SAP_RELEASE_VALUE = "idocSAPReleaseValue";
	public static final String IDOC_NUMBER_VALUE = "idocNumberValue";
	public static final String IDOC_COMPOUND_TYPE_VALUE = "idocCompoundTypeValue";
	public static final String EDI_TRANSMISSION_FILE_VALUE = "ediTransmissionFileValue";
	public static final String EDI_STANDARD_VERSION_VALUE = "ediStandardVersionValue";
	public static final String EDI_STANDARD_FLAG_VALUE = "ediStandardFlagValue";
	public static final String EDI_MESSAGE_TYPE_VALUE = "editMessageTypeValue";
	public static final String EDI_MESSAGE_GROUP_VALUE = "editMessageGroupValue";
	public static final String EDI_MESSAGE_VALUE = "ediMessageValue";
	public static final String DIRECTION_VALUE = "directionValue";
	public static final String CLIENT_VALUE = "clientValue";
	public static final String ARCHIVE_KEY_VALUE = "archiveKeyValue";

	protected static Calendar DATE_VALUE;
	protected static Calendar TIME_VALUE;

	protected JCoDestination mockDestination;
	protected JCoIDocServer mockIDocServer;
	protected JCoServerContext mockServerContext;
	protected IDocRepository mockIDocRepository;
	protected IDocFactory mockIDocFactory;
	protected IDocHandlerFactory mockIDocHandlerFactory;
	protected IDocDocumentList mockIDocDocumentList;
	protected IDocDocumentIterator mockIDocDocumentListIterator;
	protected IDocDocument mockIDocDocument;
	protected IDocSegment mockRootSegment;
	protected IDocSegment mockLevel1Segment;
	protected IDocSegment mockLevel2Segment;
	protected IDocSegment mockLevel3Segment;

	protected IDocSegmentMetaData mockRootSegmentMetaData;
	protected IDocSegmentMetaData mockLevel1SegmentMetaData;
	protected IDocSegmentMetaData mockLevel2SegmentMetaData;
	protected IDocSegmentMetaData mockLevel3SegmentMetaData;

	protected IDocRecordMetaData mockRootRecordMetaData;
	protected IDocRecordMetaData mockLevel1RecordMetaData;
	protected IDocRecordMetaData mockLevel2RecordMetaData;
	protected IDocRecordMetaData mockLevel3RecordMetaData;

	@BeforeClass
	public static void setupIDocTestSupportClass() {
		DATE_VALUE = Calendar.getInstance();
		DATE_VALUE.set(1861, Calendar.APRIL, 12);
		TIME_VALUE = Calendar.getInstance();
		TIME_VALUE.set(Calendar.HOUR, 4);
		TIME_VALUE.set(Calendar.MINUTE, 30);
		TIME_VALUE.set(Calendar.SECOND, 15);
	}

	public void createMocks() throws Exception {

		/* Create mocks for destination, IDoc Respository, IDoc Factory and IDoc Document  */
		mockDestination = mock(JCoDestination.class, "TestDestination");
		mockIDocServer = mock(JCoIDocServer.class);
		mockServerContext = mock(JCoServerContext.class);
		mockIDocRepository = mock(IDocRepository.class, "IDocRepository");
		mockIDocFactory = mock(IDocFactory.class, "IDocFactory");
		mockIDocDocumentList = mock(IDocDocumentList.class);
		mockIDocDocumentListIterator = mock(IDocDocumentIterator.class);
		mockIDocHandlerFactory = mock(IDocHandlerFactory.class);
		mockIDocDocument = mock(IDocDocument.class, "IDocDocument");

		/* Create mocks for segments */
		mockRootSegment = mock(IDocSegment.class, "RootSegment");
		mockLevel1Segment = mock(IDocSegment.class, "Level1Segment");
		mockLevel2Segment = mock(IDocSegment.class, "Level2Segment");
		mockLevel3Segment = mock(IDocSegment.class, "Level3Segment");

		/* Create mocks for segment meta data */
		mockRootSegmentMetaData = mock(IDocSegmentMetaData.class);
		mockLevel1SegmentMetaData = mock(IDocSegmentMetaData.class);
		mockLevel2SegmentMetaData = mock(IDocSegmentMetaData.class);
		mockLevel3SegmentMetaData = mock(IDocSegmentMetaData.class);

		/* Create mocks for record meta data */
		mockRootRecordMetaData = mock(IDocRecordMetaData.class);
		mockLevel1RecordMetaData = mock(IDocRecordMetaData.class);
		mockLevel2RecordMetaData = mock(IDocRecordMetaData.class);
		mockLevel3RecordMetaData = mock(IDocRecordMetaData.class);

	}

	public void enhanceRootSegment() throws Exception {

		/* Enhance Root Segment meta data mock */
		when(mockRootSegmentMetaData.getRecordMetaData()).thenReturn(mockRootRecordMetaData);
		when(mockRootSegmentMetaData.getType()).thenReturn(ROOT);
		when(mockRootSegmentMetaData.getKey()).thenReturn(ROOT_SEGMENT_KEY);
		when(mockRootSegmentMetaData.getDefinition()).thenReturn(ROOT);
		when(mockRootSegmentMetaData.getDescription()).thenReturn(ROOT_DESCRIPTION);
		when(mockRootSegmentMetaData.getHierarchyLevel()).thenReturn(0);
		when(mockRootSegmentMetaData.getIDocType()).thenReturn(TEST_IDOC_TYPE);
		when(mockRootSegmentMetaData.getIDocTypeExtension()).thenReturn(TEST_IDOC_TYPE_EXTENSION);
		when(mockRootSegmentMetaData.getSystemRelease()).thenReturn(TEST_SYSTEM_RELEASE);
		when(mockRootSegmentMetaData.getApplicationRelease()).thenReturn(TEST_APPLICATION_RELEASE);
		when(mockRootSegmentMetaData.getMaxOccurrence()).thenReturn(1L);
		when(mockRootSegmentMetaData.getMinOccurrence()).thenReturn(1L);
		when(mockRootSegmentMetaData.isLocked()).thenReturn(true);
		when(mockRootSegmentMetaData.isMandatory()).thenReturn(true);
		when(mockRootSegmentMetaData.isQualified()).thenReturn(false);
		when(mockRootSegmentMetaData.getChildren()).thenReturn(new IDocSegmentMetaData[] { mockLevel1SegmentMetaData });

		/* Enhance Root Segment record meta data mock */
		when(mockRootRecordMetaData.getName()).thenReturn(ROOT);
		when(mockRootRecordMetaData.getNumFields()).thenReturn(0);
		when(mockRootRecordMetaData.getRecordLength()).thenReturn(0);

		/* Enhance Root Segment mock */
		when(mockRootSegment.getSegmentMetaData()).thenReturn(mockRootSegmentMetaData);
		when(mockRootSegment.addChild(LEVEL1)).thenReturn(mockLevel1Segment);
		when(mockRootSegment.getChildren(LEVEL1)).thenReturn( new IDocSegment[] { mockLevel1Segment });

	}

	public void enhanceLevel1Segment() throws Exception {

		/* Enhance Level 1 Segment meta data mock */
		when(mockLevel1SegmentMetaData.getRecordMetaData()).thenReturn(mockLevel1RecordMetaData);
		when(mockLevel1SegmentMetaData.getType()).thenReturn(LEVEL1);
		when(mockLevel1SegmentMetaData.getKey()).thenReturn(LEVEL1_SEGMENT_KEY);
		when(mockLevel1SegmentMetaData.getDefinition()).thenReturn(LEVEL1);
		when(mockLevel1SegmentMetaData.getDescription()).thenReturn(LEVEL1_DESCRIPTION);
		when(mockLevel1SegmentMetaData.getHierarchyLevel()).thenReturn(1);
		when(mockLevel1SegmentMetaData.getIDocType()).thenReturn(TEST_IDOC_TYPE);
		when(mockLevel1SegmentMetaData.getIDocTypeExtension()).thenReturn(TEST_IDOC_TYPE_EXTENSION);
		when(mockLevel1SegmentMetaData.getSystemRelease()).thenReturn(TEST_SYSTEM_RELEASE);
		when(mockLevel1SegmentMetaData.getApplicationRelease()).thenReturn(TEST_APPLICATION_RELEASE);
		when(mockLevel1SegmentMetaData.getMaxOccurrence()).thenReturn(9999999999L);
		when(mockLevel1SegmentMetaData.getMinOccurrence()).thenReturn(1L);
		when(mockLevel1SegmentMetaData.isLocked()).thenReturn(true);
		when(mockLevel1SegmentMetaData.isMandatory()).thenReturn(true);
		when(mockLevel1SegmentMetaData.isQualified()).thenReturn(false);
		when(mockLevel1SegmentMetaData.getChildren()).thenReturn(new IDocSegmentMetaData[] { mockLevel2SegmentMetaData });

		/* Enhance Level  Segment record meta data mock */
		when(mockLevel1RecordMetaData.getName()).thenReturn(LEVEL1);
		when(mockLevel1RecordMetaData.getNumFields()).thenReturn(21);
		when(mockLevel1RecordMetaData.getRecordLength()).thenReturn(210);

		when(mockLevel1RecordMetaData.getName(0)).thenReturn(FIELD0);
		when(mockLevel1RecordMetaData.getDataTypeName(0)).thenReturn("CHAR");
		when(mockLevel1RecordMetaData.getDatatype(0)).thenReturn(IDocDatatype.STRING);
		when(mockLevel1RecordMetaData.getType(0)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel1RecordMetaData.getTypeAsString(0)).thenReturn("CHAR");
		when(mockLevel1RecordMetaData.getDataElementName(0)).thenReturn("FIELD0_DATA_ELEMENT");
		when(mockLevel1RecordMetaData.getDomainName(0)).thenReturn("FIELD0_DOMAIN_NAME");
		when(mockLevel1RecordMetaData.getDescription(0)).thenReturn("FIELD0_DATA_ELEMENT Description");
		when(mockLevel1RecordMetaData.getCheckTableName(0)).thenReturn("FIELD0_CHECK_TABLE_NAME");
		when(mockLevel1RecordMetaData.getInternalLength(0)).thenReturn(10);
		when(mockLevel1RecordMetaData.getLength(0)).thenReturn(10);
		when(mockLevel1RecordMetaData.getOffset(0)).thenReturn(0);
		when(mockLevel1RecordMetaData.getOutputLength(0)).thenReturn(10);
		when(mockLevel1RecordMetaData.getValues(0)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel1RecordMetaData.getValueDescriptions(0)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel1RecordMetaData.getValueRanges(0)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel1RecordMetaData.isISOCode(0)).thenReturn(false);

		when(mockLevel1RecordMetaData.getName(1)).thenReturn(FIELD1);
		when(mockLevel1RecordMetaData.getDataTypeName(1)).thenReturn("QUAN");
		when(mockLevel1RecordMetaData.getDatatype(1)).thenReturn(IDocDatatype.DECIMAL);
		when(mockLevel1RecordMetaData.getType(1)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel1RecordMetaData.getTypeAsString(1)).thenReturn("CHAR");
		when(mockLevel1RecordMetaData.getDataElementName(1)).thenReturn("FIELD1_DATA_ELEMENT");
		when(mockLevel1RecordMetaData.getDomainName(1)).thenReturn("FIELD1_DOMAIN_NAME");
		when(mockLevel1RecordMetaData.getDescription(1)).thenReturn("FIELD1_DATA_ELEMENT Description");
		when(mockLevel1RecordMetaData.getCheckTableName(1)).thenReturn("FIELD1_CHECK_TABLE_NAME");
		when(mockLevel1RecordMetaData.getInternalLength(1)).thenReturn(10);
		when(mockLevel1RecordMetaData.getLength(1)).thenReturn(10);
		when(mockLevel1RecordMetaData.getOffset(1)).thenReturn(10);
		when(mockLevel1RecordMetaData.getOutputLength(1)).thenReturn(10);
		when(mockLevel1RecordMetaData.getValues(1)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel1RecordMetaData.getValueDescriptions(1)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel1RecordMetaData.getValueRanges(1)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel1RecordMetaData.isISOCode(1)).thenReturn(false);

		when(mockLevel1RecordMetaData.getName(2)).thenReturn(FIELD2);
		when(mockLevel1RecordMetaData.getDataTypeName(2)).thenReturn("UNIT");
		when(mockLevel1RecordMetaData.getDatatype(2)).thenReturn(IDocDatatype.STRING);
		when(mockLevel1RecordMetaData.getType(2)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel1RecordMetaData.getTypeAsString(2)).thenReturn("CHAR");
		when(mockLevel1RecordMetaData.getDataElementName(2)).thenReturn("FIELD2_DATA_ELEMENT");
		when(mockLevel1RecordMetaData.getDomainName(2)).thenReturn("FIELD2_DOMAIN_NAME");
		when(mockLevel1RecordMetaData.getDescription(2)).thenReturn("FIELD2_DATA_ELEMENT Description");
		when(mockLevel1RecordMetaData.getCheckTableName(2)).thenReturn("FIELD2_CHECK_TABLE_NAME");
		when(mockLevel1RecordMetaData.getInternalLength(2)).thenReturn(10);
		when(mockLevel1RecordMetaData.getLength(2)).thenReturn(10);
		when(mockLevel1RecordMetaData.getOffset(2)).thenReturn(20);
		when(mockLevel1RecordMetaData.getOutputLength(2)).thenReturn(10);
		when(mockLevel1RecordMetaData.getValues(2)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel1RecordMetaData.getValueDescriptions(2)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel1RecordMetaData.getValueRanges(2)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel1RecordMetaData.isISOCode(2)).thenReturn(false);

		when(mockLevel1RecordMetaData.getName(3)).thenReturn(FIELD3);
		when(mockLevel1RecordMetaData.getDataTypeName(3)).thenReturn("NUMC");
		when(mockLevel1RecordMetaData.getDatatype(3)).thenReturn(IDocDatatype.NUMERIC);
		when(mockLevel1RecordMetaData.getType(3)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel1RecordMetaData.getTypeAsString(3)).thenReturn("CHAR");
		when(mockLevel1RecordMetaData.getDataElementName(3)).thenReturn("FIELD3_DATA_ELEMENT");
		when(mockLevel1RecordMetaData.getDomainName(3)).thenReturn("FIELD3_DOMAIN_NAME");
		when(mockLevel1RecordMetaData.getDescription(3)).thenReturn("FIELD3_DATA_ELEMENT Description");
		when(mockLevel1RecordMetaData.getCheckTableName(3)).thenReturn("FIELD3_CHECK_TABLE_NAME");
		when(mockLevel1RecordMetaData.getInternalLength(3)).thenReturn(10);
		when(mockLevel1RecordMetaData.getLength(3)).thenReturn(10);
		when(mockLevel1RecordMetaData.getOffset(3)).thenReturn(30);
		when(mockLevel1RecordMetaData.getOutputLength(3)).thenReturn(10);
		when(mockLevel1RecordMetaData.getValues(3)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel1RecordMetaData.getValueDescriptions(3)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel1RecordMetaData.getValueRanges(3)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel1RecordMetaData.isISOCode(3)).thenReturn(false);

		when(mockLevel1RecordMetaData.getName(4)).thenReturn(FIELD4);
		when(mockLevel1RecordMetaData.getDataTypeName(4)).thenReturn("DATS");
		when(mockLevel1RecordMetaData.getDatatype(4)).thenReturn(IDocDatatype.DATE);
		when(mockLevel1RecordMetaData.getType(4)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel1RecordMetaData.getTypeAsString(4)).thenReturn("CHAR");
		when(mockLevel1RecordMetaData.getDataElementName(4)).thenReturn("FIELD4_DATA_ELEMENT");
		when(mockLevel1RecordMetaData.getDomainName(4)).thenReturn("FIELD4_DOMAIN_NAME");
		when(mockLevel1RecordMetaData.getDescription(4)).thenReturn("FIELD4_DATA_ELEMENT Description");
		when(mockLevel1RecordMetaData.getCheckTableName(4)).thenReturn("FIELD4_CHECK_TABLE_NAME");
		when(mockLevel1RecordMetaData.getInternalLength(4)).thenReturn(10);
		when(mockLevel1RecordMetaData.getLength(4)).thenReturn(10);
		when(mockLevel1RecordMetaData.getOffset(4)).thenReturn(40);
		when(mockLevel1RecordMetaData.getOutputLength(4)).thenReturn(10);
		when(mockLevel1RecordMetaData.getValues(4)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel1RecordMetaData.getValueDescriptions(4)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel1RecordMetaData.getValueRanges(4)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel1RecordMetaData.isISOCode(4)).thenReturn(false);

		when(mockLevel1RecordMetaData.getName(5)).thenReturn(FIELD5);
		when(mockLevel1RecordMetaData.getDataTypeName(5)).thenReturn("TIMS");
		when(mockLevel1RecordMetaData.getDatatype(5)).thenReturn(IDocDatatype.TIME);
		when(mockLevel1RecordMetaData.getType(5)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel1RecordMetaData.getTypeAsString(5)).thenReturn("CHAR");
		when(mockLevel1RecordMetaData.getDataElementName(5)).thenReturn("FIELD5_DATA_ELEMENT");
		when(mockLevel1RecordMetaData.getDomainName(5)).thenReturn("FIELD5_DOMAIN_NAME");
		when(mockLevel1RecordMetaData.getDescription(5)).thenReturn("FIELD5_DATA_ELEMENT Description");
		when(mockLevel1RecordMetaData.getCheckTableName(5)).thenReturn("FIELD5_CHECK_TABLE_NAME");
		when(mockLevel1RecordMetaData.getInternalLength(5)).thenReturn(10);
		when(mockLevel1RecordMetaData.getLength(5)).thenReturn(10);
		when(mockLevel1RecordMetaData.getOffset(5)).thenReturn(50);
		when(mockLevel1RecordMetaData.getOutputLength(5)).thenReturn(10);
		when(mockLevel1RecordMetaData.getValues(5)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel1RecordMetaData.getValueDescriptions(5)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel1RecordMetaData.getValueRanges(5)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel1RecordMetaData.isISOCode(5)).thenReturn(false);

		when(mockLevel1RecordMetaData.getName(6)).thenReturn(FIELD6);
		when(mockLevel1RecordMetaData.getDataTypeName(6)).thenReturn("CURR");
		when(mockLevel1RecordMetaData.getDatatype(6)).thenReturn(IDocDatatype.DECIMAL);
		when(mockLevel1RecordMetaData.getType(6)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel1RecordMetaData.getTypeAsString(6)).thenReturn("CHAR");
		when(mockLevel1RecordMetaData.getDataElementName(6)).thenReturn("FIELD6_DATA_ELEMENT");
		when(mockLevel1RecordMetaData.getDomainName(6)).thenReturn("FIELD6_DOMAIN_NAME");
		when(mockLevel1RecordMetaData.getDescription(6)).thenReturn("FIELD6_DATA_ELEMENT Description");
		when(mockLevel1RecordMetaData.getCheckTableName(6)).thenReturn("FIELD6_CHECK_TABLE_NAME");
		when(mockLevel1RecordMetaData.getInternalLength(6)).thenReturn(10);
		when(mockLevel1RecordMetaData.getLength(6)).thenReturn(10);
		when(mockLevel1RecordMetaData.getOffset(6)).thenReturn(60);
		when(mockLevel1RecordMetaData.getOutputLength(6)).thenReturn(10);
		when(mockLevel1RecordMetaData.getValues(6)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel1RecordMetaData.getValueDescriptions(6)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel1RecordMetaData.getValueRanges(6)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel1RecordMetaData.isISOCode(6)).thenReturn(false);

		when(mockLevel1RecordMetaData.getName(7)).thenReturn(FIELD7);
		when(mockLevel1RecordMetaData.getDataTypeName(7)).thenReturn("CUKY");
		when(mockLevel1RecordMetaData.getDatatype(7)).thenReturn(IDocDatatype.STRING);
		when(mockLevel1RecordMetaData.getType(7)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel1RecordMetaData.getTypeAsString(7)).thenReturn("CHAR");
		when(mockLevel1RecordMetaData.getDataElementName(7)).thenReturn("FIELD7_DATA_ELEMENT");
		when(mockLevel1RecordMetaData.getDomainName(7)).thenReturn("FIELD7_DOMAIN_NAME");
		when(mockLevel1RecordMetaData.getDescription(7)).thenReturn("FIELD7_DATA_ELEMENT Description");
		when(mockLevel1RecordMetaData.getCheckTableName(7)).thenReturn("FIELD7_CHECK_TABLE_NAME");
		when(mockLevel1RecordMetaData.getInternalLength(7)).thenReturn(10);
		when(mockLevel1RecordMetaData.getLength(7)).thenReturn(10);
		when(mockLevel1RecordMetaData.getOffset(7)).thenReturn(70);
		when(mockLevel1RecordMetaData.getOutputLength(7)).thenReturn(10);
		when(mockLevel1RecordMetaData.getValues(7)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel1RecordMetaData.getValueDescriptions(7)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel1RecordMetaData.getValueRanges(7)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel1RecordMetaData.isISOCode(7)).thenReturn(false);

		when(mockLevel1RecordMetaData.getName(8)).thenReturn(FIELD8);
		when(mockLevel1RecordMetaData.getDataTypeName(8)).thenReturn("LANG");
		when(mockLevel1RecordMetaData.getDatatype(8)).thenReturn(IDocDatatype.STRING);
		when(mockLevel1RecordMetaData.getType(8)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel1RecordMetaData.getTypeAsString(8)).thenReturn("CHAR");
		when(mockLevel1RecordMetaData.getDataElementName(8)).thenReturn("FIELD8_DATA_ELEMENT");
		when(mockLevel1RecordMetaData.getDomainName(8)).thenReturn("FIELD8_DOMAIN_NAME");
		when(mockLevel1RecordMetaData.getDescription(8)).thenReturn("FIELD8_DATA_ELEMENT Description");
		when(mockLevel1RecordMetaData.getCheckTableName(8)).thenReturn("FIELD8_CHECK_TABLE_NAME");
		when(mockLevel1RecordMetaData.getInternalLength(8)).thenReturn(10);
		when(mockLevel1RecordMetaData.getLength(8)).thenReturn(10);
		when(mockLevel1RecordMetaData.getOffset(8)).thenReturn(80);
		when(mockLevel1RecordMetaData.getOutputLength(8)).thenReturn(10);
		when(mockLevel1RecordMetaData.getValues(8)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel1RecordMetaData.getValueDescriptions(8)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel1RecordMetaData.getValueRanges(8)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel1RecordMetaData.isISOCode(8)).thenReturn(false);

		when(mockLevel1RecordMetaData.getName(9)).thenReturn(FIELD9);
		when(mockLevel1RecordMetaData.getDataTypeName(9)).thenReturn("CLNT");
		when(mockLevel1RecordMetaData.getDatatype(9)).thenReturn(IDocDatatype.STRING);
		when(mockLevel1RecordMetaData.getType(9)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel1RecordMetaData.getTypeAsString(9)).thenReturn("CHAR");
		when(mockLevel1RecordMetaData.getDataElementName(9)).thenReturn("FIELD9_DATA_ELEMENT");
		when(mockLevel1RecordMetaData.getDomainName(9)).thenReturn("FIELD9_DOMAIN_NAME");
		when(mockLevel1RecordMetaData.getDescription(9)).thenReturn("FIELD9_DATA_ELEMENT Description");
		when(mockLevel1RecordMetaData.getCheckTableName(9)).thenReturn("FIELD9_CHECK_TABLE_NAME");
		when(mockLevel1RecordMetaData.getInternalLength(9)).thenReturn(10);
		when(mockLevel1RecordMetaData.getLength(9)).thenReturn(10);
		when(mockLevel1RecordMetaData.getOffset(9)).thenReturn(90);
		when(mockLevel1RecordMetaData.getOutputLength(9)).thenReturn(10);
		when(mockLevel1RecordMetaData.getValues(9)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel1RecordMetaData.getValueDescriptions(9)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel1RecordMetaData.getValueRanges(9)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel1RecordMetaData.isISOCode(9)).thenReturn(false);

		when(mockLevel1RecordMetaData.getName(10)).thenReturn(FIELD10);
		when(mockLevel1RecordMetaData.getDataTypeName(10)).thenReturn("INT1");
		when(mockLevel1RecordMetaData.getDatatype(10)).thenReturn(IDocDatatype.INTEGER);
		when(mockLevel1RecordMetaData.getType(10)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel1RecordMetaData.getTypeAsString(10)).thenReturn("CHAR");
		when(mockLevel1RecordMetaData.getDataElementName(10)).thenReturn("FIELD10_DATA_ELEMENT");
		when(mockLevel1RecordMetaData.getDomainName(10)).thenReturn("FIELD10_DOMAIN_NAME");
		when(mockLevel1RecordMetaData.getDescription(10)).thenReturn("FIELD10_DATA_ELEMENT Description");
		when(mockLevel1RecordMetaData.getCheckTableName(10)).thenReturn("FIELD10_CHECK_TABLE_NAME");
		when(mockLevel1RecordMetaData.getInternalLength(10)).thenReturn(10);
		when(mockLevel1RecordMetaData.getLength(10)).thenReturn(10);
		when(mockLevel1RecordMetaData.getOffset(10)).thenReturn(100);
		when(mockLevel1RecordMetaData.getOutputLength(10)).thenReturn(10);
		when(mockLevel1RecordMetaData.getValues(10)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel1RecordMetaData.getValueDescriptions(10)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel1RecordMetaData.getValueRanges(10)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel1RecordMetaData.isISOCode(10)).thenReturn(false);

		when(mockLevel1RecordMetaData.getName(11)).thenReturn(FIELD11);
		when(mockLevel1RecordMetaData.getDataTypeName(11)).thenReturn("INT2");
		when(mockLevel1RecordMetaData.getDatatype(11)).thenReturn(IDocDatatype.INTEGER);
		when(mockLevel1RecordMetaData.getType(11)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel1RecordMetaData.getTypeAsString(11)).thenReturn("CHAR");
		when(mockLevel1RecordMetaData.getDataElementName(11)).thenReturn("FIELD11_DATA_ELEMENT");
		when(mockLevel1RecordMetaData.getDomainName(11)).thenReturn("FIELD11_DOMAIN_NAME");
		when(mockLevel1RecordMetaData.getDescription(11)).thenReturn("FIELD11_DATA_ELEMENT Description");
		when(mockLevel1RecordMetaData.getCheckTableName(11)).thenReturn("FIELD11_CHECK_TABLE_NAME");
		when(mockLevel1RecordMetaData.getInternalLength(11)).thenReturn(10);
		when(mockLevel1RecordMetaData.getLength(11)).thenReturn(10);
		when(mockLevel1RecordMetaData.getOffset(11)).thenReturn(110);
		when(mockLevel1RecordMetaData.getOutputLength(11)).thenReturn(10);
		when(mockLevel1RecordMetaData.getValues(11)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel1RecordMetaData.getValueDescriptions(11)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel1RecordMetaData.getValueRanges(11)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel1RecordMetaData.isISOCode(11)).thenReturn(false);

		when(mockLevel1RecordMetaData.getName(12)).thenReturn(FIELD12);
		when(mockLevel1RecordMetaData.getDataTypeName(12)).thenReturn("INT4");
		when(mockLevel1RecordMetaData.getDatatype(12)).thenReturn(IDocDatatype.INTEGER);
		when(mockLevel1RecordMetaData.getType(12)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel1RecordMetaData.getTypeAsString(12)).thenReturn("CHAR");
		when(mockLevel1RecordMetaData.getDataElementName(12)).thenReturn("FIELD12_DATA_ELEMENT");
		when(mockLevel1RecordMetaData.getDomainName(12)).thenReturn("FIELD12_DOMAIN_NAME");
		when(mockLevel1RecordMetaData.getDescription(12)).thenReturn("FIELD12_DATA_ELEMENT Description");
		when(mockLevel1RecordMetaData.getCheckTableName(12)).thenReturn("FIELD12_CHECK_TABLE_NAME");
		when(mockLevel1RecordMetaData.getInternalLength(12)).thenReturn(10);
		when(mockLevel1RecordMetaData.getLength(12)).thenReturn(10);
		when(mockLevel1RecordMetaData.getOffset(12)).thenReturn(120);
		when(mockLevel1RecordMetaData.getOutputLength(12)).thenReturn(10);
		when(mockLevel1RecordMetaData.getValues(12)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel1RecordMetaData.getValueDescriptions(12)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel1RecordMetaData.getValueRanges(12)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel1RecordMetaData.isISOCode(12)).thenReturn(false);

		when(mockLevel1RecordMetaData.getName(13)).thenReturn(FIELD13);
		when(mockLevel1RecordMetaData.getDataTypeName(13)).thenReturn("FLTP");
		when(mockLevel1RecordMetaData.getDatatype(13)).thenReturn(IDocDatatype.DECIMAL);
		when(mockLevel1RecordMetaData.getType(13)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel1RecordMetaData.getTypeAsString(13)).thenReturn("CHAR");
		when(mockLevel1RecordMetaData.getDataElementName(13)).thenReturn("FIELD13_DATA_ELEMENT");
		when(mockLevel1RecordMetaData.getDomainName(13)).thenReturn("FIELD13_DOMAIN_NAME");
		when(mockLevel1RecordMetaData.getDescription(13)).thenReturn("FIELD13_DATA_ELEMENT Description");
		when(mockLevel1RecordMetaData.getCheckTableName(13)).thenReturn("FIELD13_CHECK_TABLE_NAME");
		when(mockLevel1RecordMetaData.getInternalLength(13)).thenReturn(10);
		when(mockLevel1RecordMetaData.getLength(13)).thenReturn(10);
		when(mockLevel1RecordMetaData.getOffset(13)).thenReturn(130);
		when(mockLevel1RecordMetaData.getOutputLength(13)).thenReturn(10);
		when(mockLevel1RecordMetaData.getValues(13)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel1RecordMetaData.getValueDescriptions(13)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel1RecordMetaData.getValueRanges(13)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel1RecordMetaData.isISOCode(13)).thenReturn(false);

		when(mockLevel1RecordMetaData.getName(14)).thenReturn(FIELD14);
		when(mockLevel1RecordMetaData.getDataTypeName(14)).thenReturn("ACCP");
		when(mockLevel1RecordMetaData.getDatatype(14)).thenReturn(IDocDatatype.NUMERIC);
		when(mockLevel1RecordMetaData.getType(14)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel1RecordMetaData.getTypeAsString(14)).thenReturn("CHAR");
		when(mockLevel1RecordMetaData.getDataElementName(14)).thenReturn("FIELD14_DATA_ELEMENT");
		when(mockLevel1RecordMetaData.getDomainName(14)).thenReturn("FIELD14_DOMAIN_NAME");
		when(mockLevel1RecordMetaData.getDescription(14)).thenReturn("FIELD14_DATA_ELEMENT Description");
		when(mockLevel1RecordMetaData.getCheckTableName(14)).thenReturn("FIELD14_CHECK_TABLE_NAME");
		when(mockLevel1RecordMetaData.getInternalLength(14)).thenReturn(10);
		when(mockLevel1RecordMetaData.getLength(14)).thenReturn(10);
		when(mockLevel1RecordMetaData.getOffset(14)).thenReturn(140);
		when(mockLevel1RecordMetaData.getOutputLength(14)).thenReturn(10);
		when(mockLevel1RecordMetaData.getValues(14)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel1RecordMetaData.getValueDescriptions(14)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel1RecordMetaData.getValueRanges(14)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel1RecordMetaData.isISOCode(14)).thenReturn(false);

		when(mockLevel1RecordMetaData.getName(15)).thenReturn(FIELD15);
		when(mockLevel1RecordMetaData.getDataTypeName(15)).thenReturn("PREC");
		when(mockLevel1RecordMetaData.getDatatype(15)).thenReturn(IDocDatatype.NUMERIC);
		when(mockLevel1RecordMetaData.getType(15)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel1RecordMetaData.getTypeAsString(15)).thenReturn("CHAR");
		when(mockLevel1RecordMetaData.getDataElementName(15)).thenReturn("FIELD15_DATA_ELEMENT");
		when(mockLevel1RecordMetaData.getDomainName(15)).thenReturn("FIELD15_DOMAIN_NAME");
		when(mockLevel1RecordMetaData.getDescription(15)).thenReturn("FIELD15_DATA_ELEMENT Description");
		when(mockLevel1RecordMetaData.getCheckTableName(15)).thenReturn("FIELD15_CHECK_TABLE_NAME");
		when(mockLevel1RecordMetaData.getInternalLength(15)).thenReturn(10);
		when(mockLevel1RecordMetaData.getLength(15)).thenReturn(10);
		when(mockLevel1RecordMetaData.getOffset(15)).thenReturn(150);
		when(mockLevel1RecordMetaData.getOutputLength(15)).thenReturn(10);
		when(mockLevel1RecordMetaData.getValues(15)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel1RecordMetaData.getValueDescriptions(15)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel1RecordMetaData.getValueRanges(15)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel1RecordMetaData.isISOCode(15)).thenReturn(false);

		when(mockLevel1RecordMetaData.getName(16)).thenReturn(FIELD16);
		when(mockLevel1RecordMetaData.getDataTypeName(16)).thenReturn("LRAW");
		when(mockLevel1RecordMetaData.getDatatype(16)).thenReturn(IDocDatatype.BINARY);
		when(mockLevel1RecordMetaData.getType(16)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel1RecordMetaData.getTypeAsString(16)).thenReturn("CHAR");
		when(mockLevel1RecordMetaData.getDataElementName(16)).thenReturn("FIELD16_DATA_ELEMENT");
		when(mockLevel1RecordMetaData.getDomainName(16)).thenReturn("FIELD16_DOMAIN_NAME");
		when(mockLevel1RecordMetaData.getDescription(16)).thenReturn("FIELD16_DATA_ELEMENT Description");
		when(mockLevel1RecordMetaData.getCheckTableName(16)).thenReturn("FIELD16_CHECK_TABLE_NAME");
		when(mockLevel1RecordMetaData.getInternalLength(16)).thenReturn(10);
		when(mockLevel1RecordMetaData.getLength(16)).thenReturn(10);
		when(mockLevel1RecordMetaData.getOffset(16)).thenReturn(160);
		when(mockLevel1RecordMetaData.getOutputLength(16)).thenReturn(10);
		when(mockLevel1RecordMetaData.getValues(16)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel1RecordMetaData.getValueDescriptions(16)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel1RecordMetaData.getValueRanges(16)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel1RecordMetaData.isISOCode(16)).thenReturn(false);

		when(mockLevel1RecordMetaData.getName(17)).thenReturn(FIELD17);
		when(mockLevel1RecordMetaData.getDataTypeName(17)).thenReturn("DEC");
		when(mockLevel1RecordMetaData.getDatatype(17)).thenReturn(IDocDatatype.DECIMAL);
		when(mockLevel1RecordMetaData.getType(17)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel1RecordMetaData.getTypeAsString(17)).thenReturn("CHAR");
		when(mockLevel1RecordMetaData.getDataElementName(17)).thenReturn("FIELD17_DATA_ELEMENT");
		when(mockLevel1RecordMetaData.getDomainName(17)).thenReturn("FIELD17_DOMAIN_NAME");
		when(mockLevel1RecordMetaData.getDescription(17)).thenReturn("FIELD17_DATA_ELEMENT Description");
		when(mockLevel1RecordMetaData.getCheckTableName(17)).thenReturn("FIELD17_CHECK_TABLE_NAME");
		when(mockLevel1RecordMetaData.getInternalLength(17)).thenReturn(10);
		when(mockLevel1RecordMetaData.getLength(17)).thenReturn(10);
		when(mockLevel1RecordMetaData.getOffset(17)).thenReturn(170);
		when(mockLevel1RecordMetaData.getOutputLength(17)).thenReturn(10);
		when(mockLevel1RecordMetaData.getValues(17)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel1RecordMetaData.getValueDescriptions(17)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel1RecordMetaData.getValueRanges(17)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel1RecordMetaData.isISOCode(17)).thenReturn(false);

		when(mockLevel1RecordMetaData.getName(18)).thenReturn(FIELD18);
		when(mockLevel1RecordMetaData.getDataTypeName(18)).thenReturn("RAW");
		when(mockLevel1RecordMetaData.getDatatype(18)).thenReturn(IDocDatatype.BINARY);
		when(mockLevel1RecordMetaData.getType(18)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel1RecordMetaData.getTypeAsString(18)).thenReturn("CHAR");
		when(mockLevel1RecordMetaData.getDataElementName(18)).thenReturn("FIELD18_DATA_ELEMENT");
		when(mockLevel1RecordMetaData.getDomainName(18)).thenReturn("FIELD18_DOMAIN_NAME");
		when(mockLevel1RecordMetaData.getDescription(18)).thenReturn("FIELD18_DATA_ELEMENT Description");
		when(mockLevel1RecordMetaData.getCheckTableName(18)).thenReturn("FIELD18_CHECK_TABLE_NAME");
		when(mockLevel1RecordMetaData.getInternalLength(18)).thenReturn(10);
		when(mockLevel1RecordMetaData.getLength(18)).thenReturn(10);
		when(mockLevel1RecordMetaData.getOffset(18)).thenReturn(180);
		when(mockLevel1RecordMetaData.getOutputLength(18)).thenReturn(10);
		when(mockLevel1RecordMetaData.getValues(18)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel1RecordMetaData.getValueDescriptions(18)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel1RecordMetaData.getValueRanges(18)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel1RecordMetaData.isISOCode(18)).thenReturn(false);

		when(mockLevel1RecordMetaData.getName(19)).thenReturn(FIELD19);
		when(mockLevel1RecordMetaData.getDataTypeName(19)).thenReturn("STRING");
		when(mockLevel1RecordMetaData.getDatatype(19)).thenReturn(IDocDatatype.STRING);
		when(mockLevel1RecordMetaData.getType(19)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel1RecordMetaData.getTypeAsString(19)).thenReturn("CHAR");
		when(mockLevel1RecordMetaData.getDataElementName(19)).thenReturn("FIELD19_DATA_ELEMENT");
		when(mockLevel1RecordMetaData.getDomainName(19)).thenReturn("FIELD19_DOMAIN_NAME");
		when(mockLevel1RecordMetaData.getDescription(19)).thenReturn("FIELD19_DATA_ELEMENT Description");
		when(mockLevel1RecordMetaData.getCheckTableName(19)).thenReturn("FIELD19_CHECK_TABLE_NAME");
		when(mockLevel1RecordMetaData.getInternalLength(19)).thenReturn(10);
		when(mockLevel1RecordMetaData.getLength(19)).thenReturn(10);
		when(mockLevel1RecordMetaData.getOffset(19)).thenReturn(190);
		when(mockLevel1RecordMetaData.getOutputLength(19)).thenReturn(10);
		when(mockLevel1RecordMetaData.getValues(19)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel1RecordMetaData.getValueDescriptions(19)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel1RecordMetaData.getValueRanges(19)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel1RecordMetaData.isISOCode(19)).thenReturn(false);

		when(mockLevel1RecordMetaData.getName(20)).thenReturn(FIELD20);
		when(mockLevel1RecordMetaData.getDataTypeName(20)).thenReturn("RAWSTRING");
		when(mockLevel1RecordMetaData.getDatatype(20)).thenReturn(IDocDatatype.BINARY);
		when(mockLevel1RecordMetaData.getType(20)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel1RecordMetaData.getTypeAsString(20)).thenReturn("CHAR");
		when(mockLevel1RecordMetaData.getDataElementName(20)).thenReturn("FIELD20_DATA_ELEMENT");
		when(mockLevel1RecordMetaData.getDomainName(20)).thenReturn("FIELD20_DOMAIN_NAME");
		when(mockLevel1RecordMetaData.getDescription(20)).thenReturn("FIELD20_DATA_ELEMENT Description");
		when(mockLevel1RecordMetaData.getCheckTableName(20)).thenReturn("FIELD20_CHECK_TABLE_NAME");
		when(mockLevel1RecordMetaData.getInternalLength(20)).thenReturn(10);
		when(mockLevel1RecordMetaData.getLength(20)).thenReturn(10);
		when(mockLevel1RecordMetaData.getOffset(20)).thenReturn(200);
		when(mockLevel1RecordMetaData.getOutputLength(20)).thenReturn(10);
		when(mockLevel1RecordMetaData.getValues(20)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel1RecordMetaData.getValueDescriptions(20)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel1RecordMetaData.getValueRanges(20)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel1RecordMetaData.isISOCode(20)).thenReturn(false);

		when(mockLevel1Segment.addChild(LEVEL2)).thenReturn(mockLevel2Segment);
		when(mockLevel1Segment.getChildren(LEVEL2)).thenReturn(new IDocSegment[] { mockLevel2Segment });
		when(mockLevel1Segment.getValue(FIELD0)).thenReturn(FIELD0_VALUE);
		when(mockLevel1Segment.getValue(FIELD1)).thenReturn(FIELD1_VALUE);
		when(mockLevel1Segment.getValue(FIELD2)).thenReturn(FIELD2_VALUE);
		when(mockLevel1Segment.getValue(FIELD3)).thenReturn(FIELD3_VALUE);
		when(mockLevel1Segment.getValue(FIELD4)).thenReturn(FIELD4_VALUE);
		when(mockLevel1Segment.getValue(FIELD5)).thenReturn(FIELD5_VALUE);
		when(mockLevel1Segment.getValue(FIELD6)).thenReturn(FIELD6_VALUE);
		when(mockLevel1Segment.getValue(FIELD7)).thenReturn(FIELD7_VALUE);
		when(mockLevel1Segment.getValue(FIELD8)).thenReturn(FIELD8_VALUE);
		when(mockLevel1Segment.getValue(FIELD9)).thenReturn(FIELD9_VALUE);
		when(mockLevel1Segment.getValue(FIELD10)).thenReturn(FIELD10_VALUE);
		when(mockLevel1Segment.getValue(FIELD11)).thenReturn(FIELD11_VALUE);
		when(mockLevel1Segment.getValue(FIELD12)).thenReturn(FIELD12_VALUE);
		when(mockLevel1Segment.getValue(FIELD13)).thenReturn(FIELD13_VALUE);
		when(mockLevel1Segment.getValue(FIELD14)).thenReturn(FIELD14_VALUE);
		when(mockLevel1Segment.getValue(FIELD15)).thenReturn(FIELD15_VALUE);
		when(mockLevel1Segment.getValue(FIELD16)).thenReturn(FIELD16_VALUE);
		when(mockLevel1Segment.getValue(FIELD17)).thenReturn(FIELD17_VALUE);
		when(mockLevel1Segment.getValue(FIELD18)).thenReturn(FIELD18_VALUE);
		when(mockLevel1Segment.getValue(FIELD19)).thenReturn(FIELD19_VALUE);
		when(mockLevel1Segment.getValue(FIELD20)).thenReturn(FIELD20_VALUE);

	}

	public void enhanceLevel2Segment() throws Exception {

		/* Enhance Level 2 Segment meta data mock */
		when(mockLevel2SegmentMetaData.getRecordMetaData()).thenReturn(mockLevel2RecordMetaData);
		when(mockLevel2SegmentMetaData.getType()).thenReturn(LEVEL2);
		when(mockLevel2SegmentMetaData.getKey()).thenReturn(LEVEL2_SEGMENT_KEY);
		when(mockLevel2SegmentMetaData.getDefinition()).thenReturn(LEVEL2);
		when(mockLevel2SegmentMetaData.getDescription()).thenReturn(LEVEL2_DESCRIPTION);
		when(mockLevel2SegmentMetaData.getHierarchyLevel()).thenReturn(2);
		when(mockLevel2SegmentMetaData.getIDocType()).thenReturn(TEST_IDOC_TYPE);
		when(mockLevel2SegmentMetaData.getIDocTypeExtension()).thenReturn(TEST_IDOC_TYPE_EXTENSION);
		when(mockLevel2SegmentMetaData.getSystemRelease()).thenReturn(TEST_SYSTEM_RELEASE);
		when(mockLevel2SegmentMetaData.getApplicationRelease()).thenReturn(TEST_APPLICATION_RELEASE);
		when(mockLevel2SegmentMetaData.getMaxOccurrence()).thenReturn(9999999999L);
		when(mockLevel2SegmentMetaData.getMinOccurrence()).thenReturn(1L);
		when(mockLevel2SegmentMetaData.isLocked()).thenReturn(true);
		when(mockLevel2SegmentMetaData.isMandatory()).thenReturn(true);
		when(mockLevel2SegmentMetaData.isQualified()).thenReturn(false);
		when(mockLevel2SegmentMetaData.getChildren()).thenReturn(new IDocSegmentMetaData[] { mockLevel3SegmentMetaData });

		/* Enhance Level 2 Segment record meta data mock */
		when(mockLevel2RecordMetaData.getName()).thenReturn(LEVEL2);
		when(mockLevel2RecordMetaData.getNumFields()).thenReturn(21);
		when(mockLevel2RecordMetaData.getRecordLength()).thenReturn(210);

		when(mockLevel2RecordMetaData.getName(0)).thenReturn(FIELD0);
		when(mockLevel2RecordMetaData.getDataTypeName(0)).thenReturn("CHAR");
		when(mockLevel2RecordMetaData.getDatatype(0)).thenReturn(IDocDatatype.STRING);
		when(mockLevel2RecordMetaData.getType(0)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel2RecordMetaData.getTypeAsString(0)).thenReturn("CHAR");
		when(mockLevel2RecordMetaData.getDataElementName(0)).thenReturn("FIELD0_DATA_ELEMENT");
		when(mockLevel2RecordMetaData.getDomainName(0)).thenReturn("FIELD0_DOMAIN_NAME");
		when(mockLevel2RecordMetaData.getDescription(0)).thenReturn("FIELD0_DATA_ELEMENT Description");
		when(mockLevel2RecordMetaData.getCheckTableName(0)).thenReturn("FIELD0_CHECK_TABLE_NAME");
		when(mockLevel2RecordMetaData.getInternalLength(0)).thenReturn(10);
		when(mockLevel2RecordMetaData.getLength(0)).thenReturn(10);
		when(mockLevel2RecordMetaData.getOffset(0)).thenReturn(0);
		when(mockLevel2RecordMetaData.getOutputLength(0)).thenReturn(10);
		when(mockLevel2RecordMetaData.getValues(0)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel2RecordMetaData.getValueDescriptions(0)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel2RecordMetaData.getValueRanges(0)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel2RecordMetaData.isISOCode(0)).thenReturn(false);

		when(mockLevel2RecordMetaData.getName(1)).thenReturn(FIELD1);
		when(mockLevel2RecordMetaData.getDataTypeName(1)).thenReturn("QUAN");
		when(mockLevel2RecordMetaData.getDatatype(1)).thenReturn(IDocDatatype.DECIMAL);
		when(mockLevel2RecordMetaData.getType(1)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel2RecordMetaData.getTypeAsString(1)).thenReturn("CHAR");
		when(mockLevel2RecordMetaData.getDataElementName(1)).thenReturn("FIELD1_DATA_ELEMENT");
		when(mockLevel2RecordMetaData.getDomainName(1)).thenReturn("FIELD1_DOMAIN_NAME");
		when(mockLevel2RecordMetaData.getDescription(1)).thenReturn("FIELD1_DATA_ELEMENT Description");
		when(mockLevel2RecordMetaData.getCheckTableName(1)).thenReturn("FIELD1_CHECK_TABLE_NAME");
		when(mockLevel2RecordMetaData.getInternalLength(1)).thenReturn(10);
		when(mockLevel2RecordMetaData.getLength(1)).thenReturn(10);
		when(mockLevel2RecordMetaData.getOffset(1)).thenReturn(10);
		when(mockLevel2RecordMetaData.getOutputLength(1)).thenReturn(10);
		when(mockLevel2RecordMetaData.getValues(1)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel2RecordMetaData.getValueDescriptions(1)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel2RecordMetaData.getValueRanges(1)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel2RecordMetaData.isISOCode(1)).thenReturn(false);

		when(mockLevel2RecordMetaData.getName(2)).thenReturn(FIELD2);
		when(mockLevel2RecordMetaData.getDataTypeName(2)).thenReturn("UNIT");
		when(mockLevel2RecordMetaData.getDatatype(2)).thenReturn(IDocDatatype.STRING);
		when(mockLevel2RecordMetaData.getType(2)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel2RecordMetaData.getTypeAsString(2)).thenReturn("CHAR");
		when(mockLevel2RecordMetaData.getDataElementName(2)).thenReturn("FIELD2_DATA_ELEMENT");
		when(mockLevel2RecordMetaData.getDomainName(2)).thenReturn("FIELD2_DOMAIN_NAME");
		when(mockLevel2RecordMetaData.getDescription(2)).thenReturn("FIELD2_DATA_ELEMENT Description");
		when(mockLevel2RecordMetaData.getCheckTableName(2)).thenReturn("FIELD2_CHECK_TABLE_NAME");
		when(mockLevel2RecordMetaData.getInternalLength(2)).thenReturn(10);
		when(mockLevel2RecordMetaData.getLength(2)).thenReturn(10);
		when(mockLevel2RecordMetaData.getOffset(2)).thenReturn(20);
		when(mockLevel2RecordMetaData.getOutputLength(2)).thenReturn(10);
		when(mockLevel2RecordMetaData.getValues(2)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel2RecordMetaData.getValueDescriptions(2)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel2RecordMetaData.getValueRanges(2)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel2RecordMetaData.isISOCode(2)).thenReturn(false);

		when(mockLevel2RecordMetaData.getName(3)).thenReturn(FIELD3);
		when(mockLevel2RecordMetaData.getDataTypeName(3)).thenReturn("NUMC");
		when(mockLevel2RecordMetaData.getDatatype(3)).thenReturn(IDocDatatype.NUMERIC);
		when(mockLevel2RecordMetaData.getType(3)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel2RecordMetaData.getTypeAsString(3)).thenReturn("CHAR");
		when(mockLevel2RecordMetaData.getDataElementName(3)).thenReturn("FIELD3_DATA_ELEMENT");
		when(mockLevel2RecordMetaData.getDomainName(3)).thenReturn("FIELD3_DOMAIN_NAME");
		when(mockLevel2RecordMetaData.getDescription(3)).thenReturn("FIELD3_DATA_ELEMENT Description");
		when(mockLevel2RecordMetaData.getCheckTableName(3)).thenReturn("FIELD3_CHECK_TABLE_NAME");
		when(mockLevel2RecordMetaData.getInternalLength(3)).thenReturn(10);
		when(mockLevel2RecordMetaData.getLength(3)).thenReturn(10);
		when(mockLevel2RecordMetaData.getOffset(3)).thenReturn(30);
		when(mockLevel2RecordMetaData.getOutputLength(3)).thenReturn(10);
		when(mockLevel2RecordMetaData.getValues(3)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel2RecordMetaData.getValueDescriptions(3)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel2RecordMetaData.getValueRanges(3)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel2RecordMetaData.isISOCode(3)).thenReturn(false);

		when(mockLevel2RecordMetaData.getName(4)).thenReturn(FIELD4);
		when(mockLevel2RecordMetaData.getDataTypeName(4)).thenReturn("DATS");
		when(mockLevel2RecordMetaData.getDatatype(4)).thenReturn(IDocDatatype.DATE);
		when(mockLevel2RecordMetaData.getType(4)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel2RecordMetaData.getTypeAsString(4)).thenReturn("CHAR");
		when(mockLevel2RecordMetaData.getDataElementName(4)).thenReturn("FIELD4_DATA_ELEMENT");
		when(mockLevel2RecordMetaData.getDomainName(4)).thenReturn("FIELD4_DOMAIN_NAME");
		when(mockLevel2RecordMetaData.getDescription(4)).thenReturn("FIELD4_DATA_ELEMENT Description");
		when(mockLevel2RecordMetaData.getCheckTableName(4)).thenReturn("FIELD4_CHECK_TABLE_NAME");
		when(mockLevel2RecordMetaData.getInternalLength(4)).thenReturn(10);
		when(mockLevel2RecordMetaData.getLength(4)).thenReturn(10);
		when(mockLevel2RecordMetaData.getOffset(4)).thenReturn(40);
		when(mockLevel2RecordMetaData.getOutputLength(4)).thenReturn(10);
		when(mockLevel2RecordMetaData.getValues(4)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel2RecordMetaData.getValueDescriptions(4)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel2RecordMetaData.getValueRanges(4)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel2RecordMetaData.isISOCode(4)).thenReturn(false);

		when(mockLevel2RecordMetaData.getName(5)).thenReturn(FIELD5);
		when(mockLevel2RecordMetaData.getDataTypeName(5)).thenReturn("TIMS");
		when(mockLevel2RecordMetaData.getDatatype(5)).thenReturn(IDocDatatype.TIME);
		when(mockLevel2RecordMetaData.getType(5)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel2RecordMetaData.getTypeAsString(5)).thenReturn("CHAR");
		when(mockLevel2RecordMetaData.getDataElementName(5)).thenReturn("FIELD5_DATA_ELEMENT");
		when(mockLevel2RecordMetaData.getDomainName(5)).thenReturn("FIELD5_DOMAIN_NAME");
		when(mockLevel2RecordMetaData.getDescription(5)).thenReturn("FIELD5_DATA_ELEMENT Description");
		when(mockLevel2RecordMetaData.getCheckTableName(5)).thenReturn("FIELD5_CHECK_TABLE_NAME");
		when(mockLevel2RecordMetaData.getInternalLength(5)).thenReturn(10);
		when(mockLevel2RecordMetaData.getLength(5)).thenReturn(10);
		when(mockLevel2RecordMetaData.getOffset(5)).thenReturn(50);
		when(mockLevel2RecordMetaData.getOutputLength(5)).thenReturn(10);
		when(mockLevel2RecordMetaData.getValues(5)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel2RecordMetaData.getValueDescriptions(5)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel2RecordMetaData.getValueRanges(5)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel2RecordMetaData.isISOCode(5)).thenReturn(false);

		when(mockLevel2RecordMetaData.getName(6)).thenReturn(FIELD6);
		when(mockLevel2RecordMetaData.getDataTypeName(6)).thenReturn("CURR");
		when(mockLevel2RecordMetaData.getDatatype(6)).thenReturn(IDocDatatype.DECIMAL);
		when(mockLevel2RecordMetaData.getType(6)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel2RecordMetaData.getTypeAsString(6)).thenReturn("CHAR");
		when(mockLevel2RecordMetaData.getDataElementName(6)).thenReturn("FIELD6_DATA_ELEMENT");
		when(mockLevel2RecordMetaData.getDomainName(6)).thenReturn("FIELD6_DOMAIN_NAME");
		when(mockLevel2RecordMetaData.getDescription(6)).thenReturn("FIELD6_DATA_ELEMENT Description");
		when(mockLevel2RecordMetaData.getCheckTableName(6)).thenReturn("FIELD6_CHECK_TABLE_NAME");
		when(mockLevel2RecordMetaData.getInternalLength(6)).thenReturn(10);
		when(mockLevel2RecordMetaData.getLength(6)).thenReturn(10);
		when(mockLevel2RecordMetaData.getOffset(6)).thenReturn(60);
		when(mockLevel2RecordMetaData.getOutputLength(6)).thenReturn(10);
		when(mockLevel2RecordMetaData.getValues(6)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel2RecordMetaData.getValueDescriptions(6)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel2RecordMetaData.getValueRanges(6)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel2RecordMetaData.isISOCode(6)).thenReturn(false);

		when(mockLevel2RecordMetaData.getName(7)).thenReturn(FIELD7);
		when(mockLevel2RecordMetaData.getDataTypeName(7)).thenReturn("CUKY");
		when(mockLevel2RecordMetaData.getDatatype(7)).thenReturn(IDocDatatype.STRING);
		when(mockLevel2RecordMetaData.getType(7)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel2RecordMetaData.getTypeAsString(7)).thenReturn("CHAR");
		when(mockLevel2RecordMetaData.getDataElementName(7)).thenReturn("FIELD7_DATA_ELEMENT");
		when(mockLevel2RecordMetaData.getDomainName(7)).thenReturn("FIELD7_DOMAIN_NAME");
		when(mockLevel2RecordMetaData.getDescription(7)).thenReturn("FIELD7_DATA_ELEMENT Description");
		when(mockLevel2RecordMetaData.getCheckTableName(7)).thenReturn("FIELD7_CHECK_TABLE_NAME");
		when(mockLevel2RecordMetaData.getInternalLength(7)).thenReturn(10);
		when(mockLevel2RecordMetaData.getLength(7)).thenReturn(10);
		when(mockLevel2RecordMetaData.getOffset(7)).thenReturn(70);
		when(mockLevel2RecordMetaData.getOutputLength(7)).thenReturn(10);
		when(mockLevel2RecordMetaData.getValues(7)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel2RecordMetaData.getValueDescriptions(7)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel2RecordMetaData.getValueRanges(7)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel2RecordMetaData.isISOCode(7)).thenReturn(false);

		when(mockLevel2RecordMetaData.getName(8)).thenReturn(FIELD8);
		when(mockLevel2RecordMetaData.getDataTypeName(8)).thenReturn("LANG");
		when(mockLevel2RecordMetaData.getDatatype(8)).thenReturn(IDocDatatype.STRING);
		when(mockLevel2RecordMetaData.getType(8)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel2RecordMetaData.getTypeAsString(8)).thenReturn("CHAR");
		when(mockLevel2RecordMetaData.getDataElementName(8)).thenReturn("FIELD8_DATA_ELEMENT");
		when(mockLevel2RecordMetaData.getDomainName(8)).thenReturn("FIELD8_DOMAIN_NAME");
		when(mockLevel2RecordMetaData.getDescription(8)).thenReturn("FIELD8_DATA_ELEMENT Description");
		when(mockLevel2RecordMetaData.getCheckTableName(8)).thenReturn("FIELD8_CHECK_TABLE_NAME");
		when(mockLevel2RecordMetaData.getInternalLength(8)).thenReturn(10);
		when(mockLevel2RecordMetaData.getLength(8)).thenReturn(10);
		when(mockLevel2RecordMetaData.getOffset(8)).thenReturn(80);
		when(mockLevel2RecordMetaData.getOutputLength(8)).thenReturn(10);
		when(mockLevel2RecordMetaData.getValues(8)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel2RecordMetaData.getValueDescriptions(8)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel2RecordMetaData.getValueRanges(8)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel2RecordMetaData.isISOCode(8)).thenReturn(false);

		when(mockLevel2RecordMetaData.getName(9)).thenReturn(FIELD9);
		when(mockLevel2RecordMetaData.getDataTypeName(9)).thenReturn("CLNT");
		when(mockLevel2RecordMetaData.getDatatype(9)).thenReturn(IDocDatatype.STRING);
		when(mockLevel2RecordMetaData.getType(9)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel2RecordMetaData.getTypeAsString(9)).thenReturn("CHAR");
		when(mockLevel2RecordMetaData.getDataElementName(9)).thenReturn("FIELD9_DATA_ELEMENT");
		when(mockLevel2RecordMetaData.getDomainName(9)).thenReturn("FIELD9_DOMAIN_NAME");
		when(mockLevel2RecordMetaData.getDescription(9)).thenReturn("FIELD9_DATA_ELEMENT Description");
		when(mockLevel2RecordMetaData.getCheckTableName(9)).thenReturn("FIELD9_CHECK_TABLE_NAME");
		when(mockLevel2RecordMetaData.getInternalLength(9)).thenReturn(10);
		when(mockLevel2RecordMetaData.getLength(9)).thenReturn(10);
		when(mockLevel2RecordMetaData.getOffset(9)).thenReturn(90);
		when(mockLevel2RecordMetaData.getOutputLength(9)).thenReturn(10);
		when(mockLevel2RecordMetaData.getValues(9)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel2RecordMetaData.getValueDescriptions(9)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel2RecordMetaData.getValueRanges(9)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel2RecordMetaData.isISOCode(9)).thenReturn(false);

		when(mockLevel2RecordMetaData.getName(10)).thenReturn(FIELD10);
		when(mockLevel2RecordMetaData.getDataTypeName(10)).thenReturn("INT1");
		when(mockLevel2RecordMetaData.getDatatype(10)).thenReturn(IDocDatatype.INTEGER);
		when(mockLevel2RecordMetaData.getType(10)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel2RecordMetaData.getTypeAsString(10)).thenReturn("CHAR");
		when(mockLevel2RecordMetaData.getDataElementName(10)).thenReturn("FIELD10_DATA_ELEMENT");
		when(mockLevel2RecordMetaData.getDomainName(10)).thenReturn("FIELD10_DOMAIN_NAME");
		when(mockLevel2RecordMetaData.getDescription(10)).thenReturn("FIELD10_DATA_ELEMENT Description");
		when(mockLevel2RecordMetaData.getCheckTableName(10)).thenReturn("FIELD10_CHECK_TABLE_NAME");
		when(mockLevel2RecordMetaData.getInternalLength(10)).thenReturn(10);
		when(mockLevel2RecordMetaData.getLength(10)).thenReturn(10);
		when(mockLevel2RecordMetaData.getOffset(10)).thenReturn(100);
		when(mockLevel2RecordMetaData.getOutputLength(10)).thenReturn(10);
		when(mockLevel2RecordMetaData.getValues(10)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel2RecordMetaData.getValueDescriptions(10)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel2RecordMetaData.getValueRanges(10)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel2RecordMetaData.isISOCode(10)).thenReturn(false);

		when(mockLevel2RecordMetaData.getName(11)).thenReturn(FIELD11);
		when(mockLevel2RecordMetaData.getDataTypeName(11)).thenReturn("INT2");
		when(mockLevel2RecordMetaData.getDatatype(11)).thenReturn(IDocDatatype.INTEGER);
		when(mockLevel2RecordMetaData.getType(11)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel2RecordMetaData.getTypeAsString(11)).thenReturn("CHAR");
		when(mockLevel2RecordMetaData.getDataElementName(11)).thenReturn("FIELD11_DATA_ELEMENT");
		when(mockLevel2RecordMetaData.getDomainName(11)).thenReturn("FIELD11_DOMAIN_NAME");
		when(mockLevel2RecordMetaData.getDescription(11)).thenReturn("FIELD11_DATA_ELEMENT Description");
		when(mockLevel2RecordMetaData.getCheckTableName(11)).thenReturn("FIELD11_CHECK_TABLE_NAME");
		when(mockLevel2RecordMetaData.getInternalLength(11)).thenReturn(10);
		when(mockLevel2RecordMetaData.getLength(11)).thenReturn(10);
		when(mockLevel2RecordMetaData.getOffset(11)).thenReturn(110);
		when(mockLevel2RecordMetaData.getOutputLength(11)).thenReturn(10);
		when(mockLevel2RecordMetaData.getValues(11)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel2RecordMetaData.getValueDescriptions(11)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel2RecordMetaData.getValueRanges(11)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel2RecordMetaData.isISOCode(11)).thenReturn(false);

		when(mockLevel2RecordMetaData.getName(12)).thenReturn(FIELD12);
		when(mockLevel2RecordMetaData.getDataTypeName(12)).thenReturn("INT4");
		when(mockLevel2RecordMetaData.getDatatype(12)).thenReturn(IDocDatatype.INTEGER);
		when(mockLevel2RecordMetaData.getType(12)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel2RecordMetaData.getTypeAsString(12)).thenReturn("CHAR");
		when(mockLevel2RecordMetaData.getDataElementName(12)).thenReturn("FIELD12_DATA_ELEMENT");
		when(mockLevel2RecordMetaData.getDomainName(12)).thenReturn("FIELD12_DOMAIN_NAME");
		when(mockLevel2RecordMetaData.getDescription(12)).thenReturn("FIELD12_DATA_ELEMENT Description");
		when(mockLevel2RecordMetaData.getCheckTableName(12)).thenReturn("FIELD12_CHECK_TABLE_NAME");
		when(mockLevel2RecordMetaData.getInternalLength(12)).thenReturn(10);
		when(mockLevel2RecordMetaData.getLength(12)).thenReturn(10);
		when(mockLevel2RecordMetaData.getOffset(12)).thenReturn(120);
		when(mockLevel2RecordMetaData.getOutputLength(12)).thenReturn(10);
		when(mockLevel2RecordMetaData.getValues(12)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel2RecordMetaData.getValueDescriptions(12)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel2RecordMetaData.getValueRanges(12)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel2RecordMetaData.isISOCode(12)).thenReturn(false);

		when(mockLevel2RecordMetaData.getName(13)).thenReturn(FIELD13);
		when(mockLevel2RecordMetaData.getDataTypeName(13)).thenReturn("FLTP");
		when(mockLevel2RecordMetaData.getDatatype(13)).thenReturn(IDocDatatype.DECIMAL);
		when(mockLevel2RecordMetaData.getType(13)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel2RecordMetaData.getTypeAsString(13)).thenReturn("CHAR");
		when(mockLevel2RecordMetaData.getDataElementName(13)).thenReturn("FIELD13_DATA_ELEMENT");
		when(mockLevel2RecordMetaData.getDomainName(13)).thenReturn("FIELD13_DOMAIN_NAME");
		when(mockLevel2RecordMetaData.getDescription(13)).thenReturn("FIELD13_DATA_ELEMENT Description");
		when(mockLevel2RecordMetaData.getCheckTableName(13)).thenReturn("FIELD13_CHECK_TABLE_NAME");
		when(mockLevel2RecordMetaData.getInternalLength(13)).thenReturn(10);
		when(mockLevel2RecordMetaData.getLength(13)).thenReturn(10);
		when(mockLevel2RecordMetaData.getOffset(13)).thenReturn(130);
		when(mockLevel2RecordMetaData.getOutputLength(13)).thenReturn(10);
		when(mockLevel2RecordMetaData.getValues(13)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel2RecordMetaData.getValueDescriptions(13)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel2RecordMetaData.getValueRanges(13)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel2RecordMetaData.isISOCode(13)).thenReturn(false);

		when(mockLevel2RecordMetaData.getName(14)).thenReturn(FIELD14);
		when(mockLevel2RecordMetaData.getDataTypeName(14)).thenReturn("ACCP");
		when(mockLevel2RecordMetaData.getDatatype(14)).thenReturn(IDocDatatype.NUMERIC);
		when(mockLevel2RecordMetaData.getType(14)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel2RecordMetaData.getTypeAsString(14)).thenReturn("CHAR");
		when(mockLevel2RecordMetaData.getDataElementName(14)).thenReturn("FIELD14_DATA_ELEMENT");
		when(mockLevel2RecordMetaData.getDomainName(14)).thenReturn("FIELD14_DOMAIN_NAME");
		when(mockLevel2RecordMetaData.getDescription(14)).thenReturn("FIELD14_DATA_ELEMENT Description");
		when(mockLevel2RecordMetaData.getCheckTableName(14)).thenReturn("FIELD14_CHECK_TABLE_NAME");
		when(mockLevel2RecordMetaData.getInternalLength(14)).thenReturn(10);
		when(mockLevel2RecordMetaData.getLength(14)).thenReturn(10);
		when(mockLevel2RecordMetaData.getOffset(14)).thenReturn(140);
		when(mockLevel2RecordMetaData.getOutputLength(14)).thenReturn(10);
		when(mockLevel2RecordMetaData.getValues(14)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel2RecordMetaData.getValueDescriptions(14)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel2RecordMetaData.getValueRanges(14)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel2RecordMetaData.isISOCode(14)).thenReturn(false);

		when(mockLevel2RecordMetaData.getName(15)).thenReturn(FIELD15);
		when(mockLevel2RecordMetaData.getDataTypeName(15)).thenReturn("PREC");
		when(mockLevel2RecordMetaData.getDatatype(15)).thenReturn(IDocDatatype.NUMERIC);
		when(mockLevel2RecordMetaData.getType(15)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel2RecordMetaData.getTypeAsString(15)).thenReturn("CHAR");
		when(mockLevel2RecordMetaData.getDataElementName(15)).thenReturn("FIELD15_DATA_ELEMENT");
		when(mockLevel2RecordMetaData.getDomainName(15)).thenReturn("FIELD15_DOMAIN_NAME");
		when(mockLevel2RecordMetaData.getDescription(15)).thenReturn("FIELD15_DATA_ELEMENT Description");
		when(mockLevel2RecordMetaData.getCheckTableName(15)).thenReturn("FIELD15_CHECK_TABLE_NAME");
		when(mockLevel2RecordMetaData.getInternalLength(15)).thenReturn(10);
		when(mockLevel2RecordMetaData.getLength(15)).thenReturn(10);
		when(mockLevel2RecordMetaData.getOffset(15)).thenReturn(150);
		when(mockLevel2RecordMetaData.getOutputLength(15)).thenReturn(10);
		when(mockLevel2RecordMetaData.getValues(15)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel2RecordMetaData.getValueDescriptions(15)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel2RecordMetaData.getValueRanges(15)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel2RecordMetaData.isISOCode(15)).thenReturn(false);

		when(mockLevel2RecordMetaData.getName(16)).thenReturn(FIELD16);
		when(mockLevel2RecordMetaData.getDataTypeName(16)).thenReturn("LRAW");
		when(mockLevel2RecordMetaData.getDatatype(16)).thenReturn(IDocDatatype.BINARY);
		when(mockLevel2RecordMetaData.getType(16)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel2RecordMetaData.getTypeAsString(16)).thenReturn("CHAR");
		when(mockLevel2RecordMetaData.getDataElementName(16)).thenReturn("FIELD16_DATA_ELEMENT");
		when(mockLevel2RecordMetaData.getDomainName(16)).thenReturn("FIELD16_DOMAIN_NAME");
		when(mockLevel2RecordMetaData.getDescription(16)).thenReturn("FIELD16_DATA_ELEMENT Description");
		when(mockLevel2RecordMetaData.getCheckTableName(16)).thenReturn("FIELD16_CHECK_TABLE_NAME");
		when(mockLevel2RecordMetaData.getInternalLength(16)).thenReturn(10);
		when(mockLevel2RecordMetaData.getLength(16)).thenReturn(10);
		when(mockLevel2RecordMetaData.getOffset(16)).thenReturn(160);
		when(mockLevel2RecordMetaData.getOutputLength(16)).thenReturn(10);
		when(mockLevel2RecordMetaData.getValues(16)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel2RecordMetaData.getValueDescriptions(16)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel2RecordMetaData.getValueRanges(16)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel2RecordMetaData.isISOCode(16)).thenReturn(false);

		when(mockLevel2RecordMetaData.getName(17)).thenReturn(FIELD17);
		when(mockLevel2RecordMetaData.getDataTypeName(17)).thenReturn("DEC");
		when(mockLevel2RecordMetaData.getDatatype(17)).thenReturn(IDocDatatype.DECIMAL);
		when(mockLevel2RecordMetaData.getType(17)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel2RecordMetaData.getTypeAsString(17)).thenReturn("CHAR");
		when(mockLevel2RecordMetaData.getDataElementName(17)).thenReturn("FIELD17_DATA_ELEMENT");
		when(mockLevel2RecordMetaData.getDomainName(17)).thenReturn("FIELD17_DOMAIN_NAME");
		when(mockLevel2RecordMetaData.getDescription(17)).thenReturn("FIELD17_DATA_ELEMENT Description");
		when(mockLevel2RecordMetaData.getCheckTableName(17)).thenReturn("FIELD17_CHECK_TABLE_NAME");
		when(mockLevel2RecordMetaData.getInternalLength(17)).thenReturn(10);
		when(mockLevel2RecordMetaData.getLength(17)).thenReturn(10);
		when(mockLevel2RecordMetaData.getOffset(17)).thenReturn(170);
		when(mockLevel2RecordMetaData.getOutputLength(17)).thenReturn(10);
		when(mockLevel2RecordMetaData.getValues(17)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel2RecordMetaData.getValueDescriptions(17)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel2RecordMetaData.getValueRanges(17)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel2RecordMetaData.isISOCode(17)).thenReturn(false);

		when(mockLevel2RecordMetaData.getName(18)).thenReturn(FIELD18);
		when(mockLevel2RecordMetaData.getDataTypeName(18)).thenReturn("RAW");
		when(mockLevel2RecordMetaData.getDatatype(18)).thenReturn(IDocDatatype.BINARY);
		when(mockLevel2RecordMetaData.getType(18)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel2RecordMetaData.getTypeAsString(18)).thenReturn("CHAR");
		when(mockLevel2RecordMetaData.getDataElementName(18)).thenReturn("FIELD18_DATA_ELEMENT");
		when(mockLevel2RecordMetaData.getDomainName(18)).thenReturn("FIELD18_DOMAIN_NAME");
		when(mockLevel2RecordMetaData.getDescription(18)).thenReturn("FIELD18_DATA_ELEMENT Description");
		when(mockLevel2RecordMetaData.getCheckTableName(18)).thenReturn("FIELD18_CHECK_TABLE_NAME");
		when(mockLevel2RecordMetaData.getInternalLength(18)).thenReturn(10);
		when(mockLevel2RecordMetaData.getLength(18)).thenReturn(10);
		when(mockLevel2RecordMetaData.getOffset(18)).thenReturn(180);
		when(mockLevel2RecordMetaData.getOutputLength(18)).thenReturn(10);
		when(mockLevel2RecordMetaData.getValues(18)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel2RecordMetaData.getValueDescriptions(18)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel2RecordMetaData.getValueRanges(18)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel2RecordMetaData.isISOCode(18)).thenReturn(false);

		when(mockLevel2RecordMetaData.getName(19)).thenReturn(FIELD19);
		when(mockLevel2RecordMetaData.getDataTypeName(19)).thenReturn("STRING");
		when(mockLevel2RecordMetaData.getDatatype(19)).thenReturn(IDocDatatype.STRING);
		when(mockLevel2RecordMetaData.getType(19)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel2RecordMetaData.getTypeAsString(19)).thenReturn("CHAR");
		when(mockLevel2RecordMetaData.getDataElementName(19)).thenReturn("FIELD19_DATA_ELEMENT");
		when(mockLevel2RecordMetaData.getDomainName(19)).thenReturn("FIELD19_DOMAIN_NAME");
		when(mockLevel2RecordMetaData.getDescription(19)).thenReturn("FIELD19_DATA_ELEMENT Description");
		when(mockLevel2RecordMetaData.getCheckTableName(19)).thenReturn("FIELD19_CHECK_TABLE_NAME");
		when(mockLevel2RecordMetaData.getInternalLength(19)).thenReturn(10);
		when(mockLevel2RecordMetaData.getLength(19)).thenReturn(10);
		when(mockLevel2RecordMetaData.getOffset(19)).thenReturn(190);
		when(mockLevel2RecordMetaData.getOutputLength(19)).thenReturn(10);
		when(mockLevel2RecordMetaData.getValues(19)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel2RecordMetaData.getValueDescriptions(19)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel2RecordMetaData.getValueRanges(19)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel2RecordMetaData.isISOCode(19)).thenReturn(false);

		when(mockLevel2RecordMetaData.getName(20)).thenReturn(FIELD20);
		when(mockLevel2RecordMetaData.getDataTypeName(20)).thenReturn("RAWSTRING");
		when(mockLevel2RecordMetaData.getDatatype(20)).thenReturn(IDocDatatype.BINARY);
		when(mockLevel2RecordMetaData.getType(20)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel2RecordMetaData.getTypeAsString(20)).thenReturn("CHAR");
		when(mockLevel2RecordMetaData.getDataElementName(20)).thenReturn("FIELD20_DATA_ELEMENT");
		when(mockLevel2RecordMetaData.getDomainName(20)).thenReturn("FIELD20_DOMAIN_NAME");
		when(mockLevel2RecordMetaData.getDescription(20)).thenReturn("FIELD20_DATA_ELEMENT Description");
		when(mockLevel2RecordMetaData.getCheckTableName(20)).thenReturn("FIELD20_CHECK_TABLE_NAME");
		when(mockLevel2RecordMetaData.getInternalLength(20)).thenReturn(10);
		when(mockLevel2RecordMetaData.getLength(20)).thenReturn(10);
		when(mockLevel2RecordMetaData.getOffset(20)).thenReturn(200);
		when(mockLevel2RecordMetaData.getOutputLength(20)).thenReturn(10);
		when(mockLevel2RecordMetaData.getValues(20)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel2RecordMetaData.getValueDescriptions(20)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel2RecordMetaData.getValueRanges(20)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel2RecordMetaData.isISOCode(20)).thenReturn(false);

		/* Enhance Level 3 Segment meta data mock */
		when(mockLevel3SegmentMetaData.getRecordMetaData()).thenReturn(mockLevel3RecordMetaData);
		when(mockLevel3SegmentMetaData.getType()).thenReturn(LEVEL3);
		when(mockLevel3SegmentMetaData.getKey()).thenReturn(LEVEL3_SEGMENT_KEY);
		when(mockLevel3SegmentMetaData.getDefinition()).thenReturn(LEVEL3);
		when(mockLevel3SegmentMetaData.getDescription()).thenReturn(LEVEL3_DESCRIPTION);
		when(mockLevel3SegmentMetaData.getHierarchyLevel()).thenReturn(2);
		when(mockLevel3SegmentMetaData.getIDocType()).thenReturn(TEST_IDOC_TYPE);
		when(mockLevel3SegmentMetaData.getIDocTypeExtension()).thenReturn(TEST_IDOC_TYPE_EXTENSION);
		when(mockLevel3SegmentMetaData.getSystemRelease()).thenReturn(TEST_SYSTEM_RELEASE);
		when(mockLevel3SegmentMetaData.getApplicationRelease()).thenReturn(TEST_APPLICATION_RELEASE);
		when(mockLevel3SegmentMetaData.getMaxOccurrence()).thenReturn(9999999999L);
		when(mockLevel3SegmentMetaData.getMinOccurrence()).thenReturn(1L);
		when(mockLevel3SegmentMetaData.isLocked()).thenReturn(true);
		when(mockLevel3SegmentMetaData.isMandatory()).thenReturn(true);
		when(mockLevel3SegmentMetaData.isQualified()).thenReturn(false);
		when(mockLevel3SegmentMetaData.getChildren()).thenReturn(new IDocSegmentMetaData[0]);

		when(mockLevel2Segment.addChild(LEVEL3)).thenReturn(mockLevel3Segment);
		when(mockLevel2Segment.getChildren(LEVEL3)).thenReturn(new IDocSegment[] { mockLevel3Segment });
		when(mockLevel2Segment.getValue(FIELD0)).thenReturn(FIELD0_VALUE);
		when(mockLevel2Segment.getValue(FIELD1)).thenReturn(FIELD1_VALUE);
		when(mockLevel2Segment.getValue(FIELD2)).thenReturn(FIELD2_VALUE);
		when(mockLevel2Segment.getValue(FIELD3)).thenReturn(FIELD3_VALUE);
		when(mockLevel2Segment.getValue(FIELD4)).thenReturn(FIELD4_VALUE);
		when(mockLevel2Segment.getValue(FIELD5)).thenReturn(FIELD5_VALUE);
		when(mockLevel2Segment.getValue(FIELD6)).thenReturn(FIELD6_VALUE);
		when(mockLevel2Segment.getValue(FIELD7)).thenReturn(FIELD7_VALUE);
		when(mockLevel2Segment.getValue(FIELD8)).thenReturn(FIELD8_VALUE);
		when(mockLevel2Segment.getValue(FIELD9)).thenReturn(FIELD9_VALUE);
		when(mockLevel2Segment.getValue(FIELD10)).thenReturn(FIELD10_VALUE);
		when(mockLevel2Segment.getValue(FIELD11)).thenReturn(FIELD11_VALUE);
		when(mockLevel2Segment.getValue(FIELD12)).thenReturn(FIELD12_VALUE);
		when(mockLevel2Segment.getValue(FIELD13)).thenReturn(FIELD13_VALUE);
		when(mockLevel2Segment.getValue(FIELD14)).thenReturn(FIELD14_VALUE);
		when(mockLevel2Segment.getValue(FIELD15)).thenReturn(FIELD15_VALUE);
		when(mockLevel2Segment.getValue(FIELD16)).thenReturn(FIELD16_VALUE);
		when(mockLevel2Segment.getValue(FIELD17)).thenReturn(FIELD17_VALUE);
		when(mockLevel2Segment.getValue(FIELD18)).thenReturn(FIELD18_VALUE);
		when(mockLevel2Segment.getValue(FIELD19)).thenReturn(FIELD19_VALUE);
		when(mockLevel2Segment.getValue(FIELD20)).thenReturn(FIELD20_VALUE);

	}

	public void enhanceLevel3Segment() throws Exception {

		/* Enhance Level 3 Segment meta data mock */
		when(mockLevel3SegmentMetaData.getRecordMetaData()).thenReturn(mockLevel2RecordMetaData);
		when(mockLevel3SegmentMetaData.getType()).thenReturn(LEVEL3);
		when(mockLevel3SegmentMetaData.getKey()).thenReturn(LEVEL2_SEGMENT_KEY);
		when(mockLevel3SegmentMetaData.getDefinition()).thenReturn(LEVEL3);
		when(mockLevel3SegmentMetaData.getDescription()).thenReturn(LEVEL3_DESCRIPTION);
		when(mockLevel3SegmentMetaData.getHierarchyLevel()).thenReturn(3);
		when(mockLevel3SegmentMetaData.getIDocType()).thenReturn(TEST_IDOC_TYPE);
		when(mockLevel3SegmentMetaData.getIDocTypeExtension()).thenReturn(TEST_IDOC_TYPE_EXTENSION);
		when(mockLevel3SegmentMetaData.getSystemRelease()).thenReturn(TEST_SYSTEM_RELEASE);
		when(mockLevel3SegmentMetaData.getApplicationRelease()).thenReturn(TEST_APPLICATION_RELEASE);
		when(mockLevel3SegmentMetaData.getMaxOccurrence()).thenReturn(9999999999L);
		when(mockLevel3SegmentMetaData.getMinOccurrence()).thenReturn(1L);
		when(mockLevel3SegmentMetaData.isLocked()).thenReturn(true);
		when(mockLevel3SegmentMetaData.isMandatory()).thenReturn(true);
		when(mockLevel3SegmentMetaData.isQualified()).thenReturn(false);
		when(mockLevel3SegmentMetaData.getChildren()).thenReturn(new IDocSegmentMetaData[] { });

		/* Enhance Level 3 Segment record meta data mock */
		when(mockLevel3RecordMetaData.getName()).thenReturn(LEVEL3);
		when(mockLevel3RecordMetaData.getNumFields()).thenReturn(21);
		when(mockLevel3RecordMetaData.getRecordLength()).thenReturn(210);

		when(mockLevel3RecordMetaData.getName(0)).thenReturn(FIELD0);
		when(mockLevel3RecordMetaData.getDataTypeName(0)).thenReturn("CHAR");
		when(mockLevel3RecordMetaData.getDatatype(0)).thenReturn(IDocDatatype.STRING);
		when(mockLevel3RecordMetaData.getType(0)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel3RecordMetaData.getTypeAsString(0)).thenReturn("CHAR");
		when(mockLevel3RecordMetaData.getDataElementName(0)).thenReturn("FIELD0_DATA_ELEMENT");
		when(mockLevel3RecordMetaData.getDomainName(0)).thenReturn("FIELD0_DOMAIN_NAME");
		when(mockLevel3RecordMetaData.getDescription(0)).thenReturn("FIELD0_DATA_ELEMENT Description");
		when(mockLevel3RecordMetaData.getCheckTableName(0)).thenReturn("FIELD0_CHECK_TABLE_NAME");
		when(mockLevel3RecordMetaData.getInternalLength(0)).thenReturn(10);
		when(mockLevel3RecordMetaData.getLength(0)).thenReturn(10);
		when(mockLevel3RecordMetaData.getOffset(0)).thenReturn(0);
		when(mockLevel3RecordMetaData.getOutputLength(0)).thenReturn(10);
		when(mockLevel3RecordMetaData.getValues(0)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel3RecordMetaData.getValueDescriptions(0)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel3RecordMetaData.getValueRanges(0)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel3RecordMetaData.isISOCode(0)).thenReturn(false);

		when(mockLevel3RecordMetaData.getName(1)).thenReturn(FIELD1);
		when(mockLevel3RecordMetaData.getDataTypeName(1)).thenReturn("QUAN");
		when(mockLevel3RecordMetaData.getDatatype(1)).thenReturn(IDocDatatype.DECIMAL);
		when(mockLevel3RecordMetaData.getType(1)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel3RecordMetaData.getTypeAsString(1)).thenReturn("CHAR");
		when(mockLevel3RecordMetaData.getDataElementName(1)).thenReturn("FIELD1_DATA_ELEMENT");
		when(mockLevel3RecordMetaData.getDomainName(1)).thenReturn("FIELD1_DOMAIN_NAME");
		when(mockLevel3RecordMetaData.getDescription(1)).thenReturn("FIELD1_DATA_ELEMENT Description");
		when(mockLevel3RecordMetaData.getCheckTableName(1)).thenReturn("FIELD1_CHECK_TABLE_NAME");
		when(mockLevel3RecordMetaData.getInternalLength(1)).thenReturn(10);
		when(mockLevel3RecordMetaData.getLength(1)).thenReturn(10);
		when(mockLevel3RecordMetaData.getOffset(1)).thenReturn(10);
		when(mockLevel3RecordMetaData.getOutputLength(1)).thenReturn(10);
		when(mockLevel3RecordMetaData.getValues(1)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel3RecordMetaData.getValueDescriptions(1)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel3RecordMetaData.getValueRanges(1)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel3RecordMetaData.isISOCode(1)).thenReturn(false);

		when(mockLevel3RecordMetaData.getName(2)).thenReturn(FIELD2);
		when(mockLevel3RecordMetaData.getDataTypeName(2)).thenReturn("UNIT");
		when(mockLevel3RecordMetaData.getDatatype(2)).thenReturn(IDocDatatype.STRING);
		when(mockLevel3RecordMetaData.getType(2)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel3RecordMetaData.getTypeAsString(2)).thenReturn("CHAR");
		when(mockLevel3RecordMetaData.getDataElementName(2)).thenReturn("FIELD2_DATA_ELEMENT");
		when(mockLevel3RecordMetaData.getDomainName(2)).thenReturn("FIELD2_DOMAIN_NAME");
		when(mockLevel3RecordMetaData.getDescription(2)).thenReturn("FIELD2_DATA_ELEMENT Description");
		when(mockLevel3RecordMetaData.getCheckTableName(2)).thenReturn("FIELD2_CHECK_TABLE_NAME");
		when(mockLevel3RecordMetaData.getInternalLength(2)).thenReturn(10);
		when(mockLevel3RecordMetaData.getLength(2)).thenReturn(10);
		when(mockLevel3RecordMetaData.getOffset(2)).thenReturn(20);
		when(mockLevel3RecordMetaData.getOutputLength(2)).thenReturn(10);
		when(mockLevel3RecordMetaData.getValues(2)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel3RecordMetaData.getValueDescriptions(2)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel3RecordMetaData.getValueRanges(2)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel3RecordMetaData.isISOCode(2)).thenReturn(false);

		when(mockLevel3RecordMetaData.getName(3)).thenReturn(FIELD3);
		when(mockLevel3RecordMetaData.getDataTypeName(3)).thenReturn("NUMC");
		when(mockLevel3RecordMetaData.getDatatype(3)).thenReturn(IDocDatatype.NUMERIC);
		when(mockLevel3RecordMetaData.getType(3)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel3RecordMetaData.getTypeAsString(3)).thenReturn("CHAR");
		when(mockLevel3RecordMetaData.getDataElementName(3)).thenReturn("FIELD3_DATA_ELEMENT");
		when(mockLevel3RecordMetaData.getDomainName(3)).thenReturn("FIELD3_DOMAIN_NAME");
		when(mockLevel3RecordMetaData.getDescription(3)).thenReturn("FIELD3_DATA_ELEMENT Description");
		when(mockLevel3RecordMetaData.getCheckTableName(3)).thenReturn("FIELD3_CHECK_TABLE_NAME");
		when(mockLevel3RecordMetaData.getInternalLength(3)).thenReturn(10);
		when(mockLevel3RecordMetaData.getLength(3)).thenReturn(10);
		when(mockLevel3RecordMetaData.getOffset(3)).thenReturn(30);
		when(mockLevel3RecordMetaData.getOutputLength(3)).thenReturn(10);
		when(mockLevel3RecordMetaData.getValues(3)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel3RecordMetaData.getValueDescriptions(3)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel3RecordMetaData.getValueRanges(3)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel3RecordMetaData.isISOCode(3)).thenReturn(false);

		when(mockLevel3RecordMetaData.getName(4)).thenReturn(FIELD4);
		when(mockLevel3RecordMetaData.getDataTypeName(4)).thenReturn("DATS");
		when(mockLevel3RecordMetaData.getDatatype(4)).thenReturn(IDocDatatype.DATE);
		when(mockLevel3RecordMetaData.getType(4)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel3RecordMetaData.getTypeAsString(4)).thenReturn("CHAR");
		when(mockLevel3RecordMetaData.getDataElementName(4)).thenReturn("FIELD4_DATA_ELEMENT");
		when(mockLevel3RecordMetaData.getDomainName(4)).thenReturn("FIELD4_DOMAIN_NAME");
		when(mockLevel3RecordMetaData.getDescription(4)).thenReturn("FIELD4_DATA_ELEMENT Description");
		when(mockLevel3RecordMetaData.getCheckTableName(4)).thenReturn("FIELD4_CHECK_TABLE_NAME");
		when(mockLevel3RecordMetaData.getInternalLength(4)).thenReturn(10);
		when(mockLevel3RecordMetaData.getLength(4)).thenReturn(10);
		when(mockLevel3RecordMetaData.getOffset(4)).thenReturn(40);
		when(mockLevel3RecordMetaData.getOutputLength(4)).thenReturn(10);
		when(mockLevel3RecordMetaData.getValues(4)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel3RecordMetaData.getValueDescriptions(4)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel3RecordMetaData.getValueRanges(4)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel3RecordMetaData.isISOCode(4)).thenReturn(false);

		when(mockLevel3RecordMetaData.getName(5)).thenReturn(FIELD5);
		when(mockLevel3RecordMetaData.getDataTypeName(5)).thenReturn("TIMS");
		when(mockLevel3RecordMetaData.getDatatype(5)).thenReturn(IDocDatatype.TIME);
		when(mockLevel3RecordMetaData.getType(5)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel3RecordMetaData.getTypeAsString(5)).thenReturn("CHAR");
		when(mockLevel3RecordMetaData.getDataElementName(5)).thenReturn("FIELD5_DATA_ELEMENT");
		when(mockLevel3RecordMetaData.getDomainName(5)).thenReturn("FIELD5_DOMAIN_NAME");
		when(mockLevel3RecordMetaData.getDescription(5)).thenReturn("FIELD5_DATA_ELEMENT Description");
		when(mockLevel3RecordMetaData.getCheckTableName(5)).thenReturn("FIELD5_CHECK_TABLE_NAME");
		when(mockLevel3RecordMetaData.getInternalLength(5)).thenReturn(10);
		when(mockLevel3RecordMetaData.getLength(5)).thenReturn(10);
		when(mockLevel3RecordMetaData.getOffset(5)).thenReturn(50);
		when(mockLevel3RecordMetaData.getOutputLength(5)).thenReturn(10);
		when(mockLevel3RecordMetaData.getValues(5)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel3RecordMetaData.getValueDescriptions(5)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel3RecordMetaData.getValueRanges(5)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel3RecordMetaData.isISOCode(5)).thenReturn(false);

		when(mockLevel3RecordMetaData.getName(6)).thenReturn(FIELD6);
		when(mockLevel3RecordMetaData.getDataTypeName(6)).thenReturn("CURR");
		when(mockLevel3RecordMetaData.getDatatype(6)).thenReturn(IDocDatatype.DECIMAL);
		when(mockLevel3RecordMetaData.getType(6)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel3RecordMetaData.getTypeAsString(6)).thenReturn("CHAR");
		when(mockLevel3RecordMetaData.getDataElementName(6)).thenReturn("FIELD6_DATA_ELEMENT");
		when(mockLevel3RecordMetaData.getDomainName(6)).thenReturn("FIELD6_DOMAIN_NAME");
		when(mockLevel3RecordMetaData.getDescription(6)).thenReturn("FIELD6_DATA_ELEMENT Description");
		when(mockLevel3RecordMetaData.getCheckTableName(6)).thenReturn("FIELD6_CHECK_TABLE_NAME");
		when(mockLevel3RecordMetaData.getInternalLength(6)).thenReturn(10);
		when(mockLevel3RecordMetaData.getLength(6)).thenReturn(10);
		when(mockLevel3RecordMetaData.getOffset(6)).thenReturn(60);
		when(mockLevel3RecordMetaData.getOutputLength(6)).thenReturn(10);
		when(mockLevel3RecordMetaData.getValues(6)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel3RecordMetaData.getValueDescriptions(6)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel3RecordMetaData.getValueRanges(6)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel3RecordMetaData.isISOCode(6)).thenReturn(false);

		when(mockLevel3RecordMetaData.getName(7)).thenReturn(FIELD7);
		when(mockLevel3RecordMetaData.getDataTypeName(7)).thenReturn("CUKY");
		when(mockLevel3RecordMetaData.getDatatype(7)).thenReturn(IDocDatatype.STRING);
		when(mockLevel3RecordMetaData.getType(7)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel3RecordMetaData.getTypeAsString(7)).thenReturn("CHAR");
		when(mockLevel3RecordMetaData.getDataElementName(7)).thenReturn("FIELD7_DATA_ELEMENT");
		when(mockLevel3RecordMetaData.getDomainName(7)).thenReturn("FIELD7_DOMAIN_NAME");
		when(mockLevel3RecordMetaData.getDescription(7)).thenReturn("FIELD7_DATA_ELEMENT Description");
		when(mockLevel3RecordMetaData.getCheckTableName(7)).thenReturn("FIELD7_CHECK_TABLE_NAME");
		when(mockLevel3RecordMetaData.getInternalLength(7)).thenReturn(10);
		when(mockLevel3RecordMetaData.getLength(7)).thenReturn(10);
		when(mockLevel3RecordMetaData.getOffset(7)).thenReturn(70);
		when(mockLevel3RecordMetaData.getOutputLength(7)).thenReturn(10);
		when(mockLevel3RecordMetaData.getValues(7)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel3RecordMetaData.getValueDescriptions(7)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel3RecordMetaData.getValueRanges(7)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel3RecordMetaData.isISOCode(7)).thenReturn(false);

		when(mockLevel3RecordMetaData.getName(8)).thenReturn(FIELD8);
		when(mockLevel3RecordMetaData.getDataTypeName(8)).thenReturn("LANG");
		when(mockLevel3RecordMetaData.getDatatype(8)).thenReturn(IDocDatatype.STRING);
		when(mockLevel3RecordMetaData.getType(8)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel3RecordMetaData.getTypeAsString(8)).thenReturn("CHAR");
		when(mockLevel3RecordMetaData.getDataElementName(8)).thenReturn("FIELD8_DATA_ELEMENT");
		when(mockLevel3RecordMetaData.getDomainName(8)).thenReturn("FIELD8_DOMAIN_NAME");
		when(mockLevel3RecordMetaData.getDescription(8)).thenReturn("FIELD8_DATA_ELEMENT Description");
		when(mockLevel3RecordMetaData.getCheckTableName(8)).thenReturn("FIELD8_CHECK_TABLE_NAME");
		when(mockLevel3RecordMetaData.getInternalLength(8)).thenReturn(10);
		when(mockLevel3RecordMetaData.getLength(8)).thenReturn(10);
		when(mockLevel3RecordMetaData.getOffset(8)).thenReturn(80);
		when(mockLevel3RecordMetaData.getOutputLength(8)).thenReturn(10);
		when(mockLevel3RecordMetaData.getValues(8)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel3RecordMetaData.getValueDescriptions(8)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel3RecordMetaData.getValueRanges(8)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel3RecordMetaData.isISOCode(8)).thenReturn(false);

		when(mockLevel3RecordMetaData.getName(9)).thenReturn(FIELD9);
		when(mockLevel3RecordMetaData.getDataTypeName(9)).thenReturn("CLNT");
		when(mockLevel3RecordMetaData.getDatatype(9)).thenReturn(IDocDatatype.STRING);
		when(mockLevel3RecordMetaData.getType(9)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel3RecordMetaData.getTypeAsString(9)).thenReturn("CHAR");
		when(mockLevel3RecordMetaData.getDataElementName(9)).thenReturn("FIELD9_DATA_ELEMENT");
		when(mockLevel3RecordMetaData.getDomainName(9)).thenReturn("FIELD9_DOMAIN_NAME");
		when(mockLevel3RecordMetaData.getDescription(9)).thenReturn("FIELD9_DATA_ELEMENT Description");
		when(mockLevel3RecordMetaData.getCheckTableName(9)).thenReturn("FIELD9_CHECK_TABLE_NAME");
		when(mockLevel3RecordMetaData.getInternalLength(9)).thenReturn(10);
		when(mockLevel3RecordMetaData.getLength(9)).thenReturn(10);
		when(mockLevel3RecordMetaData.getOffset(9)).thenReturn(90);
		when(mockLevel3RecordMetaData.getOutputLength(9)).thenReturn(10);
		when(mockLevel3RecordMetaData.getValues(9)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel3RecordMetaData.getValueDescriptions(9)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel3RecordMetaData.getValueRanges(9)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel3RecordMetaData.isISOCode(9)).thenReturn(false);

		when(mockLevel3RecordMetaData.getName(10)).thenReturn(FIELD10);
		when(mockLevel3RecordMetaData.getDataTypeName(10)).thenReturn("INT1");
		when(mockLevel3RecordMetaData.getDatatype(10)).thenReturn(IDocDatatype.INTEGER);
		when(mockLevel3RecordMetaData.getType(10)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel3RecordMetaData.getTypeAsString(10)).thenReturn("CHAR");
		when(mockLevel3RecordMetaData.getDataElementName(10)).thenReturn("FIELD10_DATA_ELEMENT");
		when(mockLevel3RecordMetaData.getDomainName(10)).thenReturn("FIELD10_DOMAIN_NAME");
		when(mockLevel3RecordMetaData.getDescription(10)).thenReturn("FIELD10_DATA_ELEMENT Description");
		when(mockLevel3RecordMetaData.getCheckTableName(10)).thenReturn("FIELD10_CHECK_TABLE_NAME");
		when(mockLevel3RecordMetaData.getInternalLength(10)).thenReturn(10);
		when(mockLevel3RecordMetaData.getLength(10)).thenReturn(10);
		when(mockLevel3RecordMetaData.getOffset(10)).thenReturn(100);
		when(mockLevel3RecordMetaData.getOutputLength(10)).thenReturn(10);
		when(mockLevel3RecordMetaData.getValues(10)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel3RecordMetaData.getValueDescriptions(10)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel3RecordMetaData.getValueRanges(10)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel3RecordMetaData.isISOCode(10)).thenReturn(false);

		when(mockLevel3RecordMetaData.getName(11)).thenReturn(FIELD11);
		when(mockLevel3RecordMetaData.getDataTypeName(11)).thenReturn("INT2");
		when(mockLevel3RecordMetaData.getDatatype(11)).thenReturn(IDocDatatype.INTEGER);
		when(mockLevel3RecordMetaData.getType(11)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel3RecordMetaData.getTypeAsString(11)).thenReturn("CHAR");
		when(mockLevel3RecordMetaData.getDataElementName(11)).thenReturn("FIELD11_DATA_ELEMENT");
		when(mockLevel3RecordMetaData.getDomainName(11)).thenReturn("FIELD11_DOMAIN_NAME");
		when(mockLevel3RecordMetaData.getDescription(11)).thenReturn("FIELD11_DATA_ELEMENT Description");
		when(mockLevel3RecordMetaData.getCheckTableName(11)).thenReturn("FIELD11_CHECK_TABLE_NAME");
		when(mockLevel3RecordMetaData.getInternalLength(11)).thenReturn(10);
		when(mockLevel3RecordMetaData.getLength(11)).thenReturn(10);
		when(mockLevel3RecordMetaData.getOffset(11)).thenReturn(110);
		when(mockLevel3RecordMetaData.getOutputLength(11)).thenReturn(10);
		when(mockLevel3RecordMetaData.getValues(11)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel3RecordMetaData.getValueDescriptions(11)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel3RecordMetaData.getValueRanges(11)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel3RecordMetaData.isISOCode(11)).thenReturn(false);

		when(mockLevel3RecordMetaData.getName(12)).thenReturn(FIELD12);
		when(mockLevel3RecordMetaData.getDataTypeName(12)).thenReturn("INT4");
		when(mockLevel3RecordMetaData.getDatatype(12)).thenReturn(IDocDatatype.INTEGER);
		when(mockLevel3RecordMetaData.getType(12)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel3RecordMetaData.getTypeAsString(12)).thenReturn("CHAR");
		when(mockLevel3RecordMetaData.getDataElementName(12)).thenReturn("FIELD12_DATA_ELEMENT");
		when(mockLevel3RecordMetaData.getDomainName(12)).thenReturn("FIELD12_DOMAIN_NAME");
		when(mockLevel3RecordMetaData.getDescription(12)).thenReturn("FIELD12_DATA_ELEMENT Description");
		when(mockLevel3RecordMetaData.getCheckTableName(12)).thenReturn("FIELD12_CHECK_TABLE_NAME");
		when(mockLevel3RecordMetaData.getInternalLength(12)).thenReturn(10);
		when(mockLevel3RecordMetaData.getLength(12)).thenReturn(10);
		when(mockLevel3RecordMetaData.getOffset(12)).thenReturn(120);
		when(mockLevel3RecordMetaData.getOutputLength(12)).thenReturn(10);
		when(mockLevel3RecordMetaData.getValues(12)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel3RecordMetaData.getValueDescriptions(12)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel3RecordMetaData.getValueRanges(12)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel3RecordMetaData.isISOCode(12)).thenReturn(false);

		when(mockLevel3RecordMetaData.getName(13)).thenReturn(FIELD13);
		when(mockLevel3RecordMetaData.getDataTypeName(13)).thenReturn("FLTP");
		when(mockLevel3RecordMetaData.getDatatype(13)).thenReturn(IDocDatatype.DECIMAL);
		when(mockLevel3RecordMetaData.getType(13)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel3RecordMetaData.getTypeAsString(13)).thenReturn("CHAR");
		when(mockLevel3RecordMetaData.getDataElementName(13)).thenReturn("FIELD13_DATA_ELEMENT");
		when(mockLevel3RecordMetaData.getDomainName(13)).thenReturn("FIELD13_DOMAIN_NAME");
		when(mockLevel3RecordMetaData.getDescription(13)).thenReturn("FIELD13_DATA_ELEMENT Description");
		when(mockLevel3RecordMetaData.getCheckTableName(13)).thenReturn("FIELD13_CHECK_TABLE_NAME");
		when(mockLevel3RecordMetaData.getInternalLength(13)).thenReturn(10);
		when(mockLevel3RecordMetaData.getLength(13)).thenReturn(10);
		when(mockLevel3RecordMetaData.getOffset(13)).thenReturn(130);
		when(mockLevel3RecordMetaData.getOutputLength(13)).thenReturn(10);
		when(mockLevel3RecordMetaData.getValues(13)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel3RecordMetaData.getValueDescriptions(13)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel3RecordMetaData.getValueRanges(13)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel3RecordMetaData.isISOCode(13)).thenReturn(false);

		when(mockLevel3RecordMetaData.getName(14)).thenReturn(FIELD14);
		when(mockLevel3RecordMetaData.getDataTypeName(14)).thenReturn("ACCP");
		when(mockLevel3RecordMetaData.getDatatype(14)).thenReturn(IDocDatatype.NUMERIC);
		when(mockLevel3RecordMetaData.getType(14)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel3RecordMetaData.getTypeAsString(14)).thenReturn("CHAR");
		when(mockLevel3RecordMetaData.getDataElementName(14)).thenReturn("FIELD14_DATA_ELEMENT");
		when(mockLevel3RecordMetaData.getDomainName(14)).thenReturn("FIELD14_DOMAIN_NAME");
		when(mockLevel3RecordMetaData.getDescription(14)).thenReturn("FIELD14_DATA_ELEMENT Description");
		when(mockLevel3RecordMetaData.getCheckTableName(14)).thenReturn("FIELD14_CHECK_TABLE_NAME");
		when(mockLevel3RecordMetaData.getInternalLength(14)).thenReturn(10);
		when(mockLevel3RecordMetaData.getLength(14)).thenReturn(10);
		when(mockLevel3RecordMetaData.getOffset(14)).thenReturn(140);
		when(mockLevel3RecordMetaData.getOutputLength(14)).thenReturn(10);
		when(mockLevel3RecordMetaData.getValues(14)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel3RecordMetaData.getValueDescriptions(14)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel3RecordMetaData.getValueRanges(14)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel3RecordMetaData.isISOCode(14)).thenReturn(false);

		when(mockLevel3RecordMetaData.getName(15)).thenReturn(FIELD15);
		when(mockLevel3RecordMetaData.getDataTypeName(15)).thenReturn("PREC");
		when(mockLevel3RecordMetaData.getDatatype(15)).thenReturn(IDocDatatype.NUMERIC);
		when(mockLevel3RecordMetaData.getType(15)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel3RecordMetaData.getTypeAsString(15)).thenReturn("CHAR");
		when(mockLevel3RecordMetaData.getDataElementName(15)).thenReturn("FIELD15_DATA_ELEMENT");
		when(mockLevel3RecordMetaData.getDomainName(15)).thenReturn("FIELD15_DOMAIN_NAME");
		when(mockLevel3RecordMetaData.getDescription(15)).thenReturn("FIELD15_DATA_ELEMENT Description");
		when(mockLevel3RecordMetaData.getCheckTableName(15)).thenReturn("FIELD15_CHECK_TABLE_NAME");
		when(mockLevel3RecordMetaData.getInternalLength(15)).thenReturn(10);
		when(mockLevel3RecordMetaData.getLength(15)).thenReturn(10);
		when(mockLevel3RecordMetaData.getOffset(15)).thenReturn(150);
		when(mockLevel3RecordMetaData.getOutputLength(15)).thenReturn(10);
		when(mockLevel3RecordMetaData.getValues(15)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel3RecordMetaData.getValueDescriptions(15)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel3RecordMetaData.getValueRanges(15)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel3RecordMetaData.isISOCode(15)).thenReturn(false);

		when(mockLevel3RecordMetaData.getName(16)).thenReturn(FIELD16);
		when(mockLevel3RecordMetaData.getDataTypeName(16)).thenReturn("LRAW");
		when(mockLevel3RecordMetaData.getDatatype(16)).thenReturn(IDocDatatype.BINARY);
		when(mockLevel3RecordMetaData.getType(16)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel3RecordMetaData.getTypeAsString(16)).thenReturn("CHAR");
		when(mockLevel3RecordMetaData.getDataElementName(16)).thenReturn("FIELD16_DATA_ELEMENT");
		when(mockLevel3RecordMetaData.getDomainName(16)).thenReturn("FIELD16_DOMAIN_NAME");
		when(mockLevel3RecordMetaData.getDescription(16)).thenReturn("FIELD16_DATA_ELEMENT Description");
		when(mockLevel3RecordMetaData.getCheckTableName(16)).thenReturn("FIELD16_CHECK_TABLE_NAME");
		when(mockLevel3RecordMetaData.getInternalLength(16)).thenReturn(10);
		when(mockLevel3RecordMetaData.getLength(16)).thenReturn(10);
		when(mockLevel3RecordMetaData.getOffset(16)).thenReturn(160);
		when(mockLevel3RecordMetaData.getOutputLength(16)).thenReturn(10);
		when(mockLevel3RecordMetaData.getValues(16)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel3RecordMetaData.getValueDescriptions(16)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel3RecordMetaData.getValueRanges(16)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel3RecordMetaData.isISOCode(16)).thenReturn(false);

		when(mockLevel3RecordMetaData.getName(17)).thenReturn(FIELD17);
		when(mockLevel3RecordMetaData.getDataTypeName(17)).thenReturn("DEC");
		when(mockLevel3RecordMetaData.getDatatype(17)).thenReturn(IDocDatatype.DECIMAL);
		when(mockLevel3RecordMetaData.getType(17)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel3RecordMetaData.getTypeAsString(17)).thenReturn("CHAR");
		when(mockLevel3RecordMetaData.getDataElementName(17)).thenReturn("FIELD17_DATA_ELEMENT");
		when(mockLevel3RecordMetaData.getDomainName(17)).thenReturn("FIELD17_DOMAIN_NAME");
		when(mockLevel3RecordMetaData.getDescription(17)).thenReturn("FIELD17_DATA_ELEMENT Description");
		when(mockLevel3RecordMetaData.getCheckTableName(17)).thenReturn("FIELD17_CHECK_TABLE_NAME");
		when(mockLevel3RecordMetaData.getInternalLength(17)).thenReturn(10);
		when(mockLevel3RecordMetaData.getLength(17)).thenReturn(10);
		when(mockLevel3RecordMetaData.getOffset(17)).thenReturn(170);
		when(mockLevel3RecordMetaData.getOutputLength(17)).thenReturn(10);
		when(mockLevel3RecordMetaData.getValues(17)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel3RecordMetaData.getValueDescriptions(17)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel3RecordMetaData.getValueRanges(17)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel3RecordMetaData.isISOCode(17)).thenReturn(false);

		when(mockLevel3RecordMetaData.getName(18)).thenReturn(FIELD18);
		when(mockLevel3RecordMetaData.getDataTypeName(18)).thenReturn("RAW");
		when(mockLevel3RecordMetaData.getDatatype(18)).thenReturn(IDocDatatype.BINARY);
		when(mockLevel3RecordMetaData.getType(18)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel3RecordMetaData.getTypeAsString(18)).thenReturn("CHAR");
		when(mockLevel3RecordMetaData.getDataElementName(18)).thenReturn("FIELD18_DATA_ELEMENT");
		when(mockLevel3RecordMetaData.getDomainName(18)).thenReturn("FIELD18_DOMAIN_NAME");
		when(mockLevel3RecordMetaData.getDescription(18)).thenReturn("FIELD18_DATA_ELEMENT Description");
		when(mockLevel3RecordMetaData.getCheckTableName(18)).thenReturn("FIELD18_CHECK_TABLE_NAME");
		when(mockLevel3RecordMetaData.getInternalLength(18)).thenReturn(10);
		when(mockLevel3RecordMetaData.getLength(18)).thenReturn(10);
		when(mockLevel3RecordMetaData.getOffset(18)).thenReturn(180);
		when(mockLevel3RecordMetaData.getOutputLength(18)).thenReturn(10);
		when(mockLevel3RecordMetaData.getValues(18)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel3RecordMetaData.getValueDescriptions(18)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel3RecordMetaData.getValueRanges(18)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel3RecordMetaData.isISOCode(18)).thenReturn(false);

		when(mockLevel3RecordMetaData.getName(19)).thenReturn(FIELD19);
		when(mockLevel3RecordMetaData.getDataTypeName(19)).thenReturn("STRING");
		when(mockLevel3RecordMetaData.getDatatype(19)).thenReturn(IDocDatatype.STRING);
		when(mockLevel3RecordMetaData.getType(19)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel3RecordMetaData.getTypeAsString(19)).thenReturn("CHAR");
		when(mockLevel3RecordMetaData.getDataElementName(19)).thenReturn("FIELD19_DATA_ELEMENT");
		when(mockLevel3RecordMetaData.getDomainName(19)).thenReturn("FIELD19_DOMAIN_NAME");
		when(mockLevel3RecordMetaData.getDescription(19)).thenReturn("FIELD19_DATA_ELEMENT Description");
		when(mockLevel3RecordMetaData.getCheckTableName(19)).thenReturn("FIELD19_CHECK_TABLE_NAME");
		when(mockLevel3RecordMetaData.getInternalLength(19)).thenReturn(10);
		when(mockLevel3RecordMetaData.getLength(19)).thenReturn(10);
		when(mockLevel3RecordMetaData.getOffset(19)).thenReturn(190);
		when(mockLevel3RecordMetaData.getOutputLength(19)).thenReturn(10);
		when(mockLevel3RecordMetaData.getValues(19)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel3RecordMetaData.getValueDescriptions(19)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel3RecordMetaData.getValueRanges(19)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel3RecordMetaData.isISOCode(19)).thenReturn(false);

		when(mockLevel3RecordMetaData.getName(20)).thenReturn(FIELD20);
		when(mockLevel3RecordMetaData.getDataTypeName(20)).thenReturn("RAWSTRING");
		when(mockLevel3RecordMetaData.getDatatype(20)).thenReturn(IDocDatatype.BINARY);
		when(mockLevel3RecordMetaData.getType(20)).thenReturn(IDocRecordMetaData.TYPE_CHAR);
		when(mockLevel3RecordMetaData.getTypeAsString(20)).thenReturn("CHAR");
		when(mockLevel3RecordMetaData.getDataElementName(20)).thenReturn("FIELD20_DATA_ELEMENT");
		when(mockLevel3RecordMetaData.getDomainName(20)).thenReturn("FIELD20_DOMAIN_NAME");
		when(mockLevel3RecordMetaData.getDescription(20)).thenReturn("FIELD20_DATA_ELEMENT Description");
		when(mockLevel3RecordMetaData.getCheckTableName(20)).thenReturn("FIELD20_CHECK_TABLE_NAME");
		when(mockLevel3RecordMetaData.getInternalLength(20)).thenReturn(10);
		when(mockLevel3RecordMetaData.getLength(20)).thenReturn(10);
		when(mockLevel3RecordMetaData.getOffset(20)).thenReturn(200);
		when(mockLevel3RecordMetaData.getOutputLength(20)).thenReturn(10);
		when(mockLevel3RecordMetaData.getValues(20)).thenReturn(RECORD_FIELD_VALUES);
		when(mockLevel3RecordMetaData.getValueDescriptions(20)).thenReturn(RECORD_FIELD_VALUE_DESCRIPTIONS);
		when(mockLevel3RecordMetaData.getValueRanges(20)).thenReturn(RECORD_FIELD_VALUE_RANGES);
		when(mockLevel3RecordMetaData.isISOCode(20)).thenReturn(false);

		when(mockLevel3Segment.getValue(FIELD0)).thenReturn(FIELD0_VALUE);
		when(mockLevel3Segment.getValue(FIELD1)).thenReturn(FIELD1_VALUE);
		when(mockLevel3Segment.getValue(FIELD2)).thenReturn(FIELD2_VALUE);
		when(mockLevel3Segment.getValue(FIELD3)).thenReturn(FIELD3_VALUE);
		when(mockLevel3Segment.getValue(FIELD4)).thenReturn(FIELD4_VALUE);
		when(mockLevel3Segment.getValue(FIELD5)).thenReturn(FIELD5_VALUE);
		when(mockLevel3Segment.getValue(FIELD6)).thenReturn(FIELD6_VALUE);
		when(mockLevel3Segment.getValue(FIELD7)).thenReturn(FIELD7_VALUE);
		when(mockLevel3Segment.getValue(FIELD8)).thenReturn(FIELD8_VALUE);
		when(mockLevel3Segment.getValue(FIELD9)).thenReturn(FIELD9_VALUE);
		when(mockLevel3Segment.getValue(FIELD10)).thenReturn(FIELD10_VALUE);
		when(mockLevel3Segment.getValue(FIELD11)).thenReturn(FIELD11_VALUE);
		when(mockLevel3Segment.getValue(FIELD12)).thenReturn(FIELD12_VALUE);
		when(mockLevel3Segment.getValue(FIELD13)).thenReturn(FIELD13_VALUE);
		when(mockLevel3Segment.getValue(FIELD14)).thenReturn(FIELD14_VALUE);
		when(mockLevel3Segment.getValue(FIELD15)).thenReturn(FIELD15_VALUE);
		when(mockLevel3Segment.getValue(FIELD16)).thenReturn(FIELD16_VALUE);
		when(mockLevel3Segment.getValue(FIELD17)).thenReturn(FIELD17_VALUE);
		when(mockLevel3Segment.getValue(FIELD18)).thenReturn(FIELD18_VALUE);
		when(mockLevel3Segment.getValue(FIELD19)).thenReturn(FIELD19_VALUE);
		when(mockLevel3Segment.getValue(FIELD20)).thenReturn(FIELD20_VALUE);

	}

	public void enhanceIDocDocument() throws Exception {

		/* Enhance IDoc Document mock */
		when(mockIDocDocument.getRootSegment()).thenReturn(mockRootSegment);
		when(mockIDocDocument.getArchiveKey()).thenReturn(ARCHIVE_KEY_VALUE);
		when(mockIDocDocument.getClient()).thenReturn(CLIENT_VALUE);
		when(mockIDocDocument.getCreationDate()).thenReturn(DATE_VALUE.getTime());
		when(mockIDocDocument.getCreationTime()).thenReturn(TIME_VALUE.getTime());
		when(mockIDocDocument.getDirection()).thenReturn(DIRECTION_VALUE);
		when(mockIDocDocument.getEDIMessage()).thenReturn(EDI_MESSAGE_VALUE);
		when(mockIDocDocument.getEDIMessageGroup()).thenReturn(EDI_MESSAGE_GROUP_VALUE);
		when(mockIDocDocument.getEDIMessageType()).thenReturn(EDI_MESSAGE_TYPE_VALUE);
		when(mockIDocDocument.getEDIStandardFlag()).thenReturn(EDI_STANDARD_FLAG_VALUE);
		when(mockIDocDocument.getEDIStandardVersion()).thenReturn(EDI_STANDARD_VERSION_VALUE);
		when(mockIDocDocument.getEDITransmissionFile()).thenReturn(EDI_TRANSMISSION_FILE_VALUE);
		when(mockIDocDocument.getIDocCompoundType()).thenReturn(IDOC_COMPOUND_TYPE_VALUE);
		when(mockIDocDocument.getIDocNumber()).thenReturn(IDOC_NUMBER_VALUE);
		when(mockIDocDocument.getIDocSAPRelease()).thenReturn(IDOC_SAP_RELEASE_VALUE);
		when(mockIDocDocument.getIDocType()).thenReturn(IDOC_TYPE_VALUE);
		when(mockIDocDocument.getIDocTypeExtension()).thenReturn(IDOC_TYPE_EXTENSION_VALUE);
		when(mockIDocDocument.getMessageCode()).thenReturn(MESSAGE_CODE_VALUE);
		when(mockIDocDocument.getMessageFunction()).thenReturn(MESSAGE_FUNCTION_VALUE);
		when(mockIDocDocument.getMessageType()).thenReturn(MESSAGE_TYPE_VALUE);
		when(mockIDocDocument.getOutputMode()).thenReturn(OUTPUT_MODE_VALUE);
		when(mockIDocDocument.getRecipientAddress()).thenReturn(RECIPIENT_ADDRESS_VALUE);
		when(mockIDocDocument.getRecipientLogicalAddress()).thenReturn(RECIPIENT_LOGICAL_ADDRESS_VALUE);
		when(mockIDocDocument.getRecipientPartnerFunction()).thenReturn(RECIPIENT_PARTNER_FUNCTION_VALUE);
		when(mockIDocDocument.getRecipientPartnerType()).thenReturn(RECIPIENT_PARTNER_TYPE_VALUE);
		when(mockIDocDocument.getRecipientPartnerNumber()).thenReturn(RECIPIENT_PARTNER_NUMBER_VALUE);
		when(mockIDocDocument.getRecipientPort()).thenReturn(RECIPIENT_PORT_VALUE);
		when(mockIDocDocument.getSenderAddress()).thenReturn(SENDER_ADDRESS_VALUE);
		when(mockIDocDocument.getSenderLogicalAddress()).thenReturn(SENDER_LOGICAL_ADDRESS_VALUE);
		when(mockIDocDocument.getSenderPartnerFunction()).thenReturn(SENDER_PARTNER_FUNCTION_VALUE);
		when(mockIDocDocument.getSenderPartnerNumber()).thenReturn(SENDER_PARTNER_NUMBER_VALUE);
		when(mockIDocDocument.getSenderPartnerType()).thenReturn(SENDER_PARTNER_TYPE_VALUE);
		when(mockIDocDocument.getSenderPort()).thenReturn(SENDER_PORT_VALUE);
		when(mockIDocDocument.getSerialization()).thenReturn(SERIALIZATION_VALUE);
		when(mockIDocDocument.getStatus()).thenReturn(STATUS_VALUE);
		when(mockIDocDocument.getTestFlag()).thenReturn(TEST_FLAG_VALUE);

	}

	@Override
	public void doPreSetup() throws Exception {
		super.doPreSetup();

		createMocks();

		/* Enhance Destination mock */
		when(mockDestination.createTID()).thenReturn(TEST_TID);

		/* Enhance IDoc Server mock */
		when(mockIDocServer.getRepositoryDestination()).thenReturn(TEST_DEST);
		when(mockIDocServer.getProgramID()).thenReturn(TEST_PROGRAM_ID);
		when(mockIDocServer.getIDocHandlerFactory()).thenReturn(mockIDocHandlerFactory);
		when(mockIDocServer.getIDocRepository()).thenReturn(mockIDocRepository);
		when(mockIDocServer.getState()).thenReturn(JCoServerState.STOPPED);

		/* Enhance IDoc Repository  mock */
		when(mockIDocRepository.getName()).thenReturn(TEST_REPOSITORY);
		when(mockIDocRepository.getRootSegmentMetaData(TEST_IDOC_TYPE, TEST_IDOC_TYPE_EXTENSION, TEST_SYSTEM_RELEASE, TEST_APPLICATION_RELEASE)).thenReturn(mockRootSegmentMetaData);

		/* Enhance IDoc Factory mock */
		when(mockIDocFactory.createIDocDocument(mockIDocRepository, TEST_IDOC_TYPE, TEST_IDOC_TYPE_EXTENSION, TEST_SYSTEM_RELEASE, TEST_APPLICATION_RELEASE)).thenReturn(mockIDocDocument);
		when(mockIDocFactory.createIDocDocumentList(mockIDocRepository, TEST_IDOC_TYPE, TEST_IDOC_TYPE_EXTENSION, TEST_SYSTEM_RELEASE, TEST_APPLICATION_RELEASE)).thenReturn(mockIDocDocumentList);

		/* Enhance IDoc Document List mock */
		when(mockIDocDocumentList.iterator()).thenReturn(mockIDocDocumentListIterator);
		when(mockIDocDocumentList.getIDocType()).thenReturn(TEST_IDOC_TYPE);
		when(mockIDocDocumentList.getIDocTypeExtension()).thenReturn(TEST_IDOC_TYPE_EXTENSION);
		when(mockIDocDocumentList.getSystemRelease()).thenReturn(TEST_SYSTEM_RELEASE);
		when(mockIDocDocumentList.getApplicationRelease()).thenReturn(TEST_APPLICATION_RELEASE);
		when(mockIDocDocumentList.addNew()).thenReturn(mockIDocDocument);

		/* Enhance IDoc Document List Iterator mock */
		when(mockIDocDocumentListIterator.hasNext()).thenReturn(true).thenReturn(true).thenReturn(false);
		when(mockIDocDocumentListIterator.next()).thenReturn(mockIDocDocument).thenReturn(mockIDocDocument).thenThrow(new NoSuchElementException());

		enhanceRootSegment();
		enhanceLevel1Segment();
		enhanceLevel2Segment();
		enhanceLevel3Segment();
		enhanceIDocDocument();
	}

	protected Document createAndPopulateDocument() throws Exception {
		Document document = IDocUtil.createDocument(mockIDocRepository, TEST_IDOC_TYPE, TEST_IDOC_TYPE_EXTENSION, TEST_SYSTEM_RELEASE, TEST_APPLICATION_RELEASE);

		document.setArchiveKey(ARCHIVE_KEY_VALUE);
		document.setClient(CLIENT_VALUE);
		document.setCreationDate(DATE_VALUE.getTime());
		document.setCreationTime(TIME_VALUE.getTime());
		document.setDirection(DIRECTION_VALUE);
		document.setEDIMessage(EDI_MESSAGE_VALUE);
		document.setEDIMessageGroup(EDI_MESSAGE_GROUP_VALUE);
		document.setEDIMessageType(EDI_MESSAGE_TYPE_VALUE);
		document.setEDIStandardFlag(EDI_STANDARD_FLAG_VALUE);
		document.setEDIStandardVersion(EDI_STANDARD_VERSION_VALUE);
		document.setEDITransmissionFile(EDI_TRANSMISSION_FILE_VALUE);
		document.setIDocCompoundType(IDOC_COMPOUND_TYPE_VALUE);
		document.setIDocNumber(IDOC_NUMBER_VALUE);
		document.setIDocSAPRelease(IDOC_SAP_RELEASE_VALUE);
		document.setIDocType(IDOC_TYPE_VALUE);
		document.setIDocTypeExtension(IDOC_TYPE_EXTENSION_VALUE);
		document.setMessageCode(MESSAGE_CODE_VALUE);
		document.setMessageFunction(MESSAGE_FUNCTION_VALUE);
		document.setMessageType(MESSAGE_TYPE_VALUE);
		document.setOutputMode(OUTPUT_MODE_VALUE);
		document.setRecipientAddress(RECIPIENT_ADDRESS_VALUE);
		document.setRecipientLogicalAddress(RECIPIENT_LOGICAL_ADDRESS_VALUE);
		document.setRecipientPartnerFunction(RECIPIENT_PARTNER_FUNCTION_VALUE);
		document.setRecipientPartnerNumber(RECIPIENT_PARTNER_NUMBER_VALUE);
		document.setRecipientPartnerType(RECIPIENT_PARTNER_TYPE_VALUE);
		document.setRecipientPort(RECIPIENT_PORT_VALUE);
		document.setSenderAddress(SENDER_ADDRESS_VALUE);
		document.setSenderLogicalAddress(SENDER_LOGICAL_ADDRESS_VALUE);
		document.setSenderPartnerFunction(SENDER_PARTNER_FUNCTION_VALUE);
		document.setSenderPartnerNumber(SENDER_PARTNER_NUMBER_VALUE);
		document.setSenderPartnerType(SENDER_PARTNER_TYPE_VALUE);
		document.setSenderPort(SENDER_PORT_VALUE);
		document.setSerialization(SERIALIZATION_VALUE);
		document.setStatus(STATUS_VALUE);
		document.setTestFlag(TEST_FLAG_VALUE);

		Segment rootSegment = document.getRootSegment();

		Segment level1Segment = rootSegment.getChildren(LEVEL1).add();
		level1Segment.put(FIELD0, FIELD0_VALUE);
		level1Segment.put(FIELD1, FIELD1_VALUE);
		level1Segment.put(FIELD2, FIELD2_VALUE);
		level1Segment.put(FIELD3, FIELD3_VALUE);
		level1Segment.put(FIELD4, FIELD4_VALUE);
		level1Segment.put(FIELD5, FIELD5_VALUE);
		level1Segment.put(FIELD6, FIELD6_VALUE);
		level1Segment.put(FIELD7, FIELD7_VALUE);
		level1Segment.put(FIELD8, FIELD8_VALUE);
		level1Segment.put(FIELD9, FIELD9_VALUE);
		level1Segment.put(FIELD10, FIELD10_VALUE);
		level1Segment.put(FIELD11, FIELD11_VALUE);
		level1Segment.put(FIELD12, FIELD12_VALUE);
		level1Segment.put(FIELD13, FIELD13_VALUE);
		level1Segment.put(FIELD14, FIELD14_VALUE);
		level1Segment.put(FIELD15, FIELD15_VALUE);
		level1Segment.put(FIELD16, FIELD16_VALUE);
		level1Segment.put(FIELD17, FIELD17_VALUE);
		level1Segment.put(FIELD18, FIELD18_VALUE);
		level1Segment.put(FIELD19, FIELD19_VALUE);
		level1Segment.put(FIELD20, FIELD20_VALUE);

		Segment level2Segment = level1Segment.getChildren(LEVEL2).add();
		level2Segment.put(FIELD0, FIELD0_VALUE);
		level2Segment.put(FIELD1, FIELD1_VALUE);
		level2Segment.put(FIELD2, FIELD2_VALUE);
		level2Segment.put(FIELD3, FIELD3_VALUE);
		level2Segment.put(FIELD4, FIELD4_VALUE);
		level2Segment.put(FIELD5, FIELD5_VALUE);
		level2Segment.put(FIELD6, FIELD6_VALUE);
		level2Segment.put(FIELD7, FIELD7_VALUE);
		level2Segment.put(FIELD8, FIELD8_VALUE);
		level2Segment.put(FIELD9, FIELD9_VALUE);
		level2Segment.put(FIELD10, FIELD10_VALUE);
		level2Segment.put(FIELD11, FIELD11_VALUE);
		level2Segment.put(FIELD12, FIELD12_VALUE);
		level2Segment.put(FIELD13, FIELD13_VALUE);
		level2Segment.put(FIELD14, FIELD14_VALUE);
		level2Segment.put(FIELD15, FIELD15_VALUE);
		level2Segment.put(FIELD16, FIELD16_VALUE);
		level2Segment.put(FIELD17, FIELD17_VALUE);
		level2Segment.put(FIELD18, FIELD18_VALUE);
		level2Segment.put(FIELD19, FIELD19_VALUE);
		level2Segment.put(FIELD20, FIELD20_VALUE);

		Segment level3Segment = level2Segment.getChildren(LEVEL3).add();
		level3Segment.put(FIELD0, FIELD0_VALUE);
		level3Segment.put(FIELD1, FIELD1_VALUE);
		level3Segment.put(FIELD2, FIELD2_VALUE);
		level3Segment.put(FIELD3, FIELD3_VALUE);
		level3Segment.put(FIELD4, FIELD4_VALUE);
		level3Segment.put(FIELD5, FIELD5_VALUE);
		level3Segment.put(FIELD6, FIELD6_VALUE);
		level3Segment.put(FIELD7, FIELD7_VALUE);
		level3Segment.put(FIELD8, FIELD8_VALUE);
		level3Segment.put(FIELD9, FIELD9_VALUE);
		level3Segment.put(FIELD10, FIELD10_VALUE);
		level3Segment.put(FIELD11, FIELD11_VALUE);
		level3Segment.put(FIELD12, FIELD12_VALUE);
		level3Segment.put(FIELD13, FIELD13_VALUE);
		level3Segment.put(FIELD14, FIELD14_VALUE);
		level3Segment.put(FIELD15, FIELD15_VALUE);
		level3Segment.put(FIELD16, FIELD16_VALUE);
		level3Segment.put(FIELD17, FIELD17_VALUE);
		level3Segment.put(FIELD18, FIELD18_VALUE);
		level3Segment.put(FIELD19, FIELD19_VALUE);
		level3Segment.put(FIELD20, FIELD20_VALUE);

		return document;
	}

	protected DocumentList createAndPopulateDocumentList() throws Exception {
		DocumentList documentList = IDocUtil.createDocumentList(mockIDocRepository, TEST_IDOC_TYPE, TEST_IDOC_TYPE_EXTENSION, TEST_SYSTEM_RELEASE, TEST_APPLICATION_RELEASE);
		Document document = createAndPopulateDocument();
		documentList.add(document);
		return documentList;
	}

	@Override
	protected AbstractApplicationContext createApplicationContext() {
		return new StaticApplicationContext();
	}

}