Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 4.0
Code Block
/* ================================================================
 * 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.
 *
 * ----------------------------------------------------------------
 * UsgsTwisTimeSeriesParser.java
 * ----------------------------------------------------------------
 * (C) Copyright 2003, by WL | Delft Hydraulics
 *
 * Original Author:  pelgrim
 * Contributor(s):   
 *
 * Changes:
 * --------
 * 12/30/13 : Version 1 ();
 * 
 *
 */

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.TimeSeriesContentHandler;
import org.apache.log4j.Logger;

import java.io.IOException;
import java.util.Arrays;

public class UsgsTwisTimeSeriesParser implements TextParser<TimeSeriesContentHandler> {
    private TimeSeriesContentHandler contentHandler;
    private LineReader reader;
    private static final Logger log = Logger.getLogger(UsgsTwisTimeSeriesParser.class);

    @Override
    public void parse(LineReader reader, String virtualFileName, TimeSeriesContentHandler contentHandler) throws Exception {
        this.contentHandler = contentHandler;
        this.contentHandler.addMissingValue("NAN");

        this.reader = reader;
        parseHeader();

        DefaultTimeSeriesHeader header = new DefaultTimeSeriesHeader();

        for (String[] buffer; (buffer = this.reader.readLine('/')) != null; ) {
            String[] locTime = buffer[0].split(" ");
            if (locTime.length != 4) {
                log.warn("Skipping line with incorrect format, see debug for more info");
                log.debug("Line skipped: " + Arrays.toString(buffer));
                continue;
            }
            header.setLocationId(locTime[1]);
            this.contentHandler.setTime(this.contentHandler.getDefaultTimeZone(), "yyMMddHHmm", locTime[2] + locTime[3].substring(2));
            for (int i = 2 ; i < buffer.length ; i++) {
                String[] parVal = buffer[i].split(" ");
                if (parVal.length >= 2) {
                    header.setParameterId(parVal[0]);
                    this.contentHandler.setTimeSeriesHeader(header);
                    this.contentHandler.setValue('.', parVal[1]);
                    this.contentHandler.applyCurrentFields();
                }
                //End of parameter-value pairs
                if (parVal.length >= 3) {
                    break;
                }
            }
        }
    }

    private void parseHeader() throws IOException {
        this.reader.skipLines(1);
    }
}