// Path: flatpack/src/main/java/net/sf/flatpack/structure/ColumnMetaData.java
// public class ColumnMetaData {
// 
//     /** Column Name */
//     private String colName = null;
// 
//     /** column length */
//     private int colLength = 0;
// 
//     /** starting position */
//     private int startPosition = 0;
// 
//     /** ending position */
//     private int endPosition = 0;
// 
//     public ColumnMetaData() {
//         super();
//     }
// 
//     /**
//      * @param colName column name
//      */
//     public ColumnMetaData(final String colName) {
//         super();
//         this.colName = colName;
//     }
// 
//     /**
//      * Returns the colLength.
//      *
//      * @return int
//      */
//     public int getColLength() {
//         return colLength;
//     }
// 
//     /**
//      * Returns the colName.
//      *
//      * @return String
//      */
//     public String getColName() {
//         return colName;
//     }
// 
//     /**
//      * Returns the endPosition.
//      *
//      * @return int
//      */
//     public int getEndPosition() {
//         return endPosition;
//     }
// 
//     /**
//      * Returns the startPosition.
//      *
//      * @return int
//      */
//     public int getStartPosition() {
//         return startPosition;
//     }
// 
//     /**
//      * Sets the colLength.
//      *
//      * @param colLength
//      *            The colLength to set
//      */
//     public void setColLength(final int colLength) {
//         this.colLength = colLength;
//     }
// 
//     /**
//      * Sets the colName.
//      *
//      * @param colName
//      *            The colName to set
//      */
//     public void setColName(final String colName) {
//         this.colName = colName;
//     }
// 
//     /**
//      * Sets the endPosition.
//      *
//      * @param endPosition
//      *            The endPosition to set
//      */
//     public void setEndPosition(final int endPosition) {
//         this.endPosition = endPosition;
//     }
// 
//     /**
//      * Sets the startPosition.
//      *
//      * @param startPosition
//      *            The startPosition to set
//      */
//     public void setStartPosition(final int startPosition) {
//         this.startPosition = startPosition;
//     }
// 
//     @Override
//     public String toString() {
//         final StringBuilder buf = new StringBuilder();
//         buf.append("Name:").append(colName).append(" Length:").append(colLength).append(" Start:").append(startPosition);
//         buf.append(" End:").append(endPosition).append(System.getProperty("line.separator"));
//         return buf.toString();
//     }
// }


import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import net.sf.flatpack.structure.ColumnMetaData;
import net.sf.flatpack.util.FPConstants;
package net.sf.flatpack.writer;



/**
 *
 * @author Dirk Holmes and Holger Holger Hoffstatte
 * @since 4.0 public methods are more fluent
 */
public class DelimiterWriter extends AbstractWriter {
    private final char delimiter;
    private final char qualifier;
    private final String replaceCarriageReturnWith;
    private List<String> columnTitles = null;
    private boolean columnTitlesWritten = false;

    protected DelimiterWriter(final Map columnMapping, final java.io.Writer output, final char delimiter, final char qualifier,
            final WriterOptions options) throws IOException {
        super(output);
        this.delimiter = delimiter;
        this.qualifier = qualifier;
        this.lineSeparator = options.getLineSeparator();
        this.replaceCarriageReturnWith = options.getReplaceCarriageReturnWith();

        columnTitles = new ArrayList<>();
// Path: flatpack/src/main/java/net/sf/flatpack/structure/ColumnMetaData.java
// public class ColumnMetaData {
// 
//     /** Column Name */
//     private String colName = null;
// 
//     /** column length */
//     private int colLength = 0;
// 
//     /** starting position */
//     private int startPosition = 0;
// 
//     /** ending position */
//     private int endPosition = 0;
// 
//     public ColumnMetaData() {
//         super();
//     }
// 
//     /**
//      * @param colName column name
//      */
//     public ColumnMetaData(final String colName) {
//         super();
//         this.colName = colName;
//     }
// 
//     /**
//      * Returns the colLength.
//      *
//      * @return int
//      */
//     public int getColLength() {
//         return colLength;
//     }
// 
//     /**
//      * Returns the colName.
//      *
//      * @return String
//      */
//     public String getColName() {
//         return colName;
//     }
// 
//     /**
//      * Returns the endPosition.
//      *
//      * @return int
//      */
//     public int getEndPosition() {
//         return endPosition;
//     }
// 
//     /**
//      * Returns the startPosition.
//      *
//      * @return int
//      */
//     public int getStartPosition() {
//         return startPosition;
//     }
// 
//     /**
//      * Sets the colLength.
//      *
//      * @param colLength
//      *            The colLength to set
//      */
//     public void setColLength(final int colLength) {
//         this.colLength = colLength;
//     }
// 
//     /**
//      * Sets the colName.
//      *
//      * @param colName
//      *            The colName to set
//      */
//     public void setColName(final String colName) {
//         this.colName = colName;
//     }
// 
//     /**
//      * Sets the endPosition.
//      *
//      * @param endPosition
//      *            The endPosition to set
//      */
//     public void setEndPosition(final int endPosition) {
//         this.endPosition = endPosition;
//     }
// 
//     /**
//      * Sets the startPosition.
//      *
//      * @param startPosition
//      *            The startPosition to set
//      */
//     public void setStartPosition(final int startPosition) {
//         this.startPosition = startPosition;
//     }
// 
//     @Override
//     public String toString() {
//         final StringBuilder buf = new StringBuilder();
//         buf.append("Name:").append(colName).append(" Length:").append(colLength).append(" Start:").append(startPosition);
//         buf.append(" End:").append(endPosition).append(System.getProperty("line.separator"));
//         return buf.toString();
//     }
// }


// Path: flatpack/src/main/java/net/sf/flatpack/writer/DelimiterWriter.java
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import net.sf.flatpack.structure.ColumnMetaData;
import net.sf.flatpack.util.FPConstants;

package net.sf.flatpack.writer;



/**
 *
 * @author Dirk Holmes and Holger Holger Hoffstatte
 * @since 4.0 public methods are more fluent
 */
public class DelimiterWriter extends AbstractWriter {
    private final char delimiter;
    private final char qualifier;
    private final String replaceCarriageReturnWith;
    private List<String> columnTitles = null;
    private boolean columnTitlesWritten = false;

    protected DelimiterWriter(final Map columnMapping, final java.io.Writer output, final char delimiter, final char qualifier,
            final WriterOptions options) throws IOException {
        super(output);
        this.delimiter = delimiter;
        this.qualifier = qualifier;
        this.lineSeparator = options.getLineSeparator();
        this.replaceCarriageReturnWith = options.getReplaceCarriageReturnWith();

        columnTitles = new ArrayList<>();
        final List<ColumnMetaData> columns = (List<ColumnMetaData>) columnMapping.get(FPConstants.DETAIL_ID);