package nl.wldelft.fews.system.plugin.dataExport;

import nl.wldelft.util.io.LineWriter;
import nl.wldelft.util.io.TextSerializer;
import nl.wldelft.util.timeseries.TimeSeriesContent;
import nl.wldelft.util.timeseries.TimeSeriesHeader;

import java.io.IOException;

public class RamTimeSeriesSerializer implements TextSerializer<TimeSeriesContent> {

     private LineWriter writer = null;
     private TimeSeriesContent content = null;

     @Override
     public void serialize(TimeSeriesContent content, LineWriter writer, String virtualFileName) throws Exception {
         this.writer = writer;
         this.content = content;

         content.setMissingValue(content.getDefaultMissingValue());

         writeLevelEvents();
         writeFlowEvents();
         writeFooter();
     }

     private void writeLevelEvents() throws IOException {
         //Loop over all timesteps and over all series, pick the level series

         for (int i = 0, n = content.getContentTimeCount(); i < n; i++) {
             content.setContentTimeIndex(i);

             //Write first line with parameter name
             writer.writeLine("[Water Levels]");
             writer.writeLine("Date=" + content.getTime(content.getDefaultTimeZone(), "dd.MM.yyyy HH.mm"));
             writer.writeLine("Variable=WaterLevel");
             writer.writeLine("\"Station\"" + ',' + "\"Level\"");

             //Get values of every timeseries for current time.
             for (int j = 0, m = content.getTimeSeriesCount(); j < m; j++) {
                 content.setTimeSeriesIndex(j);
                 TimeSeriesHeader header = content.getTimeSeriesHeader();
                 if (!header.getParameterId().equals("Level")) continue;
                 if (content.isValueMissing()) continue;
                 writer.writeLine('\"' + header.getLocationId() + "\"," + content.getValue('.'));
             }
             writer.newLine();
         }
         writer.newLine();
     }

     private void writeFlowEvents() throws IOException {
         //Loop over all timesteps and over all series, pick the flow series

         for (int i = 0, n = content.getContentTimeCount(); i < n; i++) {
             content.setContentTimeIndex(i);
             //Write first line with parameter name
             writer.writeLine("[Flows]");
             writer.writeLine("Date=" + content.getTime(content.getDefaultTimeZone(), "dd.MM.yyyy HH.mm"));
             writer.writeLine("Variable=Flow");
             writer.writeLine("\"Station\"" + ',' + "\"Flow\"");

             //Get values of every timeseries for current time.
             for (int j = 0, m = content.getTimeSeriesCount(); j < m; j++) {
                 content.setTimeSeriesIndex(j);
                 TimeSeriesHeader header = content.getTimeSeriesHeader();
                 if (!header.getParameterId().equals("Flow")) continue;
                 if (content.isValueMissing()) continue;
                 writer.writeLine('\"' + header.getLocationId() + "\"," + content.getValue('.'));
             }
             writer.newLine();
         }
         writer.newLine();
     }

     private void writeFooter() throws IOException {
         writer.writeLine("[Stuwen]");
         writer.writeLine("StuwProgrammaS285 = -1");
         writer.newLine();
         writer.writeLine("[Haringvlietsluizen]");
         writer.writeLine("SluisProgrammaLPH84 = -1");
         writer.newLine();
         writer.writeLine("[Dispersie]");
         writer.writeLine("DispersieBerekend = -1");
         writer.writeLine("DispersieWaarde = 100");
     }
}
  • No labels