You are viewing an old version of this page. View the current version.
Compare with Current
View Page History
Version 1
Current »
/* ================================================================
* Delft FEWS
* ================================================================
*
* Project Info: http://www.wldelft.nl/soft/fews/index.html
* Project Lead: Karel Heynert (karel.heynert@wldelft.nl)
*
* (C) Copyright 2003, by WL | Delft Hydraulics
* P.O. Box 177
* 2600 MH Delft
* The Netherlands
* http://www.wldelft.nl
*
* DELFT-FEWS is a sophisticated collection of modules designed
* for building a FEWS customised to the specific requirements
* of individual agencies. An open modelling approach allows users
* to add their own modules in an efficient way.
*
* ----------------------------------------------------------------
* ColumnPerLocationCsvParser.java
* ----------------------------------------------------------------
* (C) Copyright 2003, by WL | Delft Hydraulics
*
* Original Author: akker_o
* Contributor(s):
*
* Changes:
* --------
* 13-Mar-17 : Version 1 ();
*
*
*/
package nl.wldelft.timeseriesparsers;
import nl.wldelft.util.ColumnSeparatorConsumer;
import nl.wldelft.util.DateTimePatternConsumer;
import nl.wldelft.util.DecimalSeparatorConsumer;
import nl.wldelft.util.io.LineReader;
import nl.wldelft.util.io.TextParser;
import nl.wldelft.util.timeseries.DefaultTimeSeriesHeader;
import nl.wldelft.util.timeseries.TimeSeriesContentHandler;
import java.io.IOException;
import java.util.TimeZone;
/**
* @see <a href="https://publicwiki.deltares.nl/display/FEWSDOC/LocationIdsHeaderCsv">wiki</a>
*/
public class LocationIdsHeaderCsvParser implements TextParser<TimeSeriesContentHandler>, DecimalSeparatorConsumer, ColumnSeparatorConsumer, DateTimePatternConsumer {
private String dateTimePattern = "dd/MM/yyyy HH:mm:ss";
private char decimalSeparator = '.';
private char columnSeparator = ',';
@Override
public void parse(LineReader reader, String virtualFileName, TimeSeriesContentHandler contentHandler) throws IOException {
contentHandler.addMissingValue("-");
reader.setSkipEmptyLines(true);
DefaultTimeSeriesHeader header = new DefaultTimeSeriesHeader();
String[] headerLine = reader.readLine(columnSeparator);
for (int i = 1; i < headerLine.length; i++) {
header.setLocationId(headerLine[i]);
contentHandler.createTimeSeriesHeaderAlias(i, header);
}
TimeZone timeZone = contentHandler.getDefaultTimeZone();
for (String[] buffer = new String[headerLine.length]; reader.readLine(columnSeparator, '\"', buffer) != -1; ) {
contentHandler.setTime(timeZone, dateTimePattern, buffer[0]);
for (int i = 1; i < buffer.length; i++) {
contentHandler.setTimeSeriesHeader(i);
contentHandler.setValue(decimalSeparator, buffer[i]);
contentHandler.applyCurrentFields();
}
}
}
@Override
public void setColumnSeparator(char columnSeparator) {
this.columnSeparator = columnSeparator;
}
@Override
public void setDecimalSeparator(char decimalSeparator) {
this.decimalSeparator = decimalSeparator;
}
@Override
public void setDateTimePattern(String dateTimePattern) {
this.dateTimePattern = dateTimePattern;
}
}