Package org.shiftone.jrat.util.io.csv

Source Code of org.shiftone.jrat.util.io.csv.DelimitedReader

package org.shiftone.jrat.util.io.csv;

import org.shiftone.jrat.util.io.IOUtil;
import org.shiftone.jrat.util.io.InputOutputException;
import org.shiftone.jrat.util.io.csv.field.Field;
import org.shiftone.jrat.util.log.Logger;
import java.io.IOException;
import java.io.LineNumberReader;
import java.io.Reader;
import java.util.Date;
import java.util.StringTokenizer;

/**
* @author Jeff Drost
* @version $Revision: 1.5 $
*/
public class DelimitedReader {

  private static final Logger LOG = Logger.getLogger(DelimitedReader.class);
  private String[] current;
  private final LineNumberReader lineReader;
  private final DelimitedFormat delimitedFormat;
  private final String delimiter;

  public DelimitedReader(Reader reader, DelimitedFormat delimitedFormat) {

    this.delimitedFormat = delimitedFormat;
    this.delimitedFormat.lock();
    this.delimiter = String.valueOf(delimitedFormat.getDelimiter());
    if (reader instanceof LineNumberReader) {
      this.lineReader = (LineNumberReader) reader;
    } else {
      this.lineReader = new LineNumberReader(reader);
    }
  }

  public boolean next() throws IOException {

    current = readRecord();
    return current != null;
  }

  public int getLineNumber() {

    return lineReader.getLineNumber();
  }

  private synchronized String[] readRecord() throws IOException {

    String[] values = null;
    String line = lineReader.readLine();
    if (line != null) {
      StringTokenizer st = new StringTokenizer(line, delimiter, true);
      values = new String[delimitedFormat.getFieldCount()];
      int i = 0;
      while (st.hasMoreTokens()) {
        String token = st.nextToken();
        if (token.equals(delimiter)) {
          i++;
        } else {
          values[i] = token;
        }
      }
    }
    return values;
  }

  public void close() {

    IOUtil.close(lineReader);
  }

  // -----------------------------------------------------
  public Object getValue(int columnIndex) {

    return getValue(columnIndex, true);
  }

  public Object getValue(int columnIndex, boolean nullable) {

    if (current == null) {
      throw new InputOutputException("current record is null");
    }
    Field field = delimitedFormat.getField(columnIndex);
    String textValue = current[columnIndex];
    Object value = field.parse(textValue);
    if ((value == null) && (!nullable)) {
      throw new InputOutputException("value is null on line " + getLineNumber() + " column " + columnIndex);
    }
    return value;
  }

  public Object getValue(String columnName) {

    return getValue(columnName, true);
  }

  public Object getValue(String columnName, boolean nullable) {

    int index = delimitedFormat.getFieldIndex(columnName);
    return getValue(index);
  }

  public String getString(int columnIndex) {

    return (String) getValue(columnIndex);
  }

  public String getString(String columnName) {

    return (String) getValue(columnName);
  }

  public Number getNumber(int columnIndex) {

    return getNumber(columnIndex, true);
  }

  private Number getNumber(int columnIndex, boolean nullable) {

    return (Number) getValue(columnIndex, nullable);
  }

  public Number getNumber(String columnName) {

    return getNumber(columnName, true);
  }

  private Number getNumber(String columnName, boolean nullable) {

    return (Number) getValue(columnName, nullable);
  }

  public Date getDate(int columnIndex) {

    return (Date) getValue(columnIndex);
  }

  public Date getDate(String columnName) {

    return (Date) getValue(columnName);
  }

  public long getLong(int columnIndex) {

    return getNumber(columnIndex, false).longValue();
  }

  public long getLong(String columnName) {

    return getNumber(columnName, false).longValue();
  }

  public double getDouble(int columnIndex) {

    return getNumber(columnIndex, false).doubleValue();
  }

  public double getDouble(String columnName) {

    return getNumber(columnName, false).doubleValue();
  }

  public boolean getBoolean(int columnIndex) {

    Boolean value = (Boolean) getValue(columnIndex, false);
    return value.booleanValue();
  }

  public boolean getBoolean(String columnName) {

    Boolean value = (Boolean) getValue(columnName, false);
    return value.booleanValue();
  }
}
TOP

Related Classes of org.shiftone.jrat.util.io.csv.DelimitedReader

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.