/* ================================================================ * 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); } }