/* (c) 2015 Open Source Geospatial Foundation - all rights reserved * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.wps.sextante; import java.io.FileInputStream; import java.io.IOException; import java.nio.channels.FileChannel; import java.nio.charset.Charset; import org.geotools.data.shapefile.dbf.DbaseFileReader; import es.unex.sextante.dataObjects.AbstractTable; import es.unex.sextante.dataObjects.IRecordsetIterator; import es.unex.sextante.outputs.FileOutputChannel; import es.unex.sextante.outputs.IOutputChannel; public class GTDBFTableReader extends AbstractTable { private String m_sName; private final String m_sFilename; private int m_iRecordCount; private final DbaseFileReader m_BaseDataObject; public GTDBFTableReader(final String sFilename) throws IOException { final FileChannel in = new FileInputStream(sFilename).getChannel(); final DbaseFileReader r = new DbaseFileReader(in, false, Charset.defaultCharset()); m_BaseDataObject = r; m_sFilename = sFilename; } private DbaseFileReader getDBFReader() { return m_BaseDataObject; } public void addRecord(final Object[] attributes) { //this class is only for reading } public int getFieldCount() { return getDBFReader().getHeader().getNumFields(); } public String getFieldName(final int i) { return getDBFReader().getHeader().getFieldName(i); } public Class getFieldType(final int i) { return getDBFReader().getHeader().getFieldClass(i); } public long getRecordCount() { return m_iRecordCount; } public IRecordsetIterator iterator() { return new GTDBFIterator(getDBFReader()); } public void close() { try { getDBFReader().close(); } catch (final IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public IOutputChannel getOutputChannel() { return new FileOutputChannel(m_sFilename); } public String getName() { return m_sName; } public void open() { m_iRecordCount = 0; final DbaseFileReader reader = getDBFReader(); while (reader.hasNext()) { try { reader.readRow(); } catch (final IOException e) {} m_iRecordCount++; } } public void postProcess() throws Exception {} public void setName(final String name) { m_sName = name; } @Override public void free() {} @Override public Object getBaseDataObject() { return m_BaseDataObject; } }