package nl.wldelft.timeseriesparsers;

import nl.wldelft.util.io.LineReader;
import nl.wldelft.util.io.TextParser;
import nl.wldelft.util.timeseries.DefaultTimeSeriesHeader;
import nl.wldelft.util.timeseries.OutOfDetectionRangeFlag;
import nl.wldelft.util.timeseries.TimeSeriesContentHandler;

import java.io.IOException;

/**
 * 1 : Monster Id
 * 2 : Location Id
 * 3 : Location Name
 * 4 : X
 * 5 : Y
 * 6 : Date
 * 7 : Time
 * 8 : Parameter Name
 * 9 : ?
 * 10: label
 * 11: Value
 * 12: Parameter Qualifier
 * 13: Unit
 * 14: ??
 * 15: Parameter Id
 *
 */

public class WQCSVTimeSeriesParser implements TextParser<TimeSeriesContentHandler> {
    @Override
    public void parse(LineReader reader, String virtualFileName, TimeSeriesContentHandler contentHandler) throws IOException {
        contentHandler.addMissingValue("");
        contentHandler.addMissingValue("n.b.");
        contentHandler.addMissingValue("nb");
        contentHandler.addMissingValue("n,b,");
        reader.setCommentLinePrefix('?');

        DefaultTimeSeriesHeader header = new DefaultTimeSeriesHeader();

        for (String[] buffer = new String[15]; reader.readLine(';', buffer) != -1;) {
            contentHandler.setSampleId(buffer[0]);
            header.setLocationId(buffer[1]);
            contentHandler.setTime(contentHandler.getDefaultTimeZone(), "dd-MM-yyyy", buffer[5], "HH:mm:ss", buffer[6]);
            contentHandler.setOutOfDetectionRangeFlag(getOutOfDetectionRangeFlag(buffer[9]));
            contentHandler.setValue(',', buffer[10]);
            //header .setQualifierIds(buffer[11]); temporarily deleted
            header.setUnit(buffer[12]);
            header.setParameterId(buffer[14]);
            contentHandler.setTimeSeriesHeader(header);
            contentHandler.applyCurrentFields();
        }
    }

    private static OutOfDetectionRangeFlag getOutOfDetectionRangeFlag(String qualityflag) {
        if (qualityflag.equals("<")) return OutOfDetectionRangeFlag.BELOW_DETECTION_RANGE;
        if (qualityflag.equals(">")) return OutOfDetectionRangeFlag.ABOVE_DETECTION_RANGE;
        return OutOfDetectionRangeFlag.INSIDE_DETECTION_RANGE;
    }
}
  • No labels