/** * IbeverTimeSeriesSerializer converts TimeSeriesContent to CSV text files. * <p/> * Each timeseries value in the timeseries content is written as a serperate row in the file.<br> * Each row contains information on the location ID and name, parameter ID and name, date and time, value, unit, flag * Only non-missing values are printed. * <p/> * The following header information is present for every timeseries array: * <li>iBever header line</li> */ public class IbeverTimeSeriesSerializer implements TextSerializer<TimeSeriesContent> { private static final String[] HEADER_LINE = { "mpn_mpnomsch", /* 1 locationName */ "mpn_mpnident", /* 2 locationID */ "mwa_mwadtmb", /* 3 beginDatum */ "mwa_mwatijdb", /* 4 beginTijd */ "mwa_mwawrden", /* 5 meetwaarde */ "mep_domgwcod", /* 6 eenheid */ "mrsinovs_domafkrt", /* 7 Detectiegrens*/ "mps_domgwcod", /* 8 Parameter code*/ "hoe_domgwcod", /* 9 Hoedanigheid code*/ "mco_domgwcod", /* 10 compartiment */ "wtt_cod", /* 11 watertype */ "mpn_mrfxcoor", /* 12 xcoord */ "mpn_mrfycoor"}; /* 13 ycoord */ @Override public void serialize(TimeSeriesContent content, LineWriter writer, String virtualFileName) throws Exception { writer.writeLine(HEADER_LINE, ';'); String[] line = new String[13]; for (int i = 0, n = content.getTimeSeriesCount(); i < n; i++) { TimeSeriesHeader header = content.getTimeSeriesHeader(); for (int j = 0, m = content.getContentTimeCount(); j < m; j++) { content.setContentTimeIndex(j); if (!content.isTimeAvailable()) continue; String[] locationIdParts = TextUtils.split(header.getLocationId(), ';'); //split locationid line[0] = header.getLocationName(); line[1] = locationIdParts[0]; line[2] = content.getTime(content.getDefaultTimeZone(), "yyyy-MM-dd"); line[3] = content.getTime(content.getDefaultTimeZone(), "HH:mm:ss"); line[4] = content.getValue('.'); line[5] = header.getUnit(); line[6] = setOutOfDetectionRangeFlag(content.getOutOfDetectionRangeFlag()); line[7] = header.getParameterId(); //Qualifiers can be entered or not. If not then enter defaults line[8] = header.getQualifierCount() == 0 ? "NVT" : header.getQualifierId(0); // Hoedanigheid code //default altijd waarde 10, kan ook 80 zijn als het lucht betreft, of 40 voor waterbodem line[9] = header.getQualifierCount() == 0 ? "10" : header.getQualifierId(0); // compartiment line[10] = locationIdParts.length > 1 ? locationIdParts[1] : ""; // watertype line[11] = Double.toString(header.getGeometry().getX(0)); line[12] = Double.toString(header.getGeometry().getY(0)); writer.writeLine(line, ';'); } } } private static String setOutOfDetectionRangeFlag(OutOfDetectionRangeFlag setOutOfDetectionRangeFlag) { if (setOutOfDetectionRangeFlag == OutOfDetectionRangeFlag.BELOW_DETECTION_RANGE) return "<"; if (setOutOfDetectionRangeFlag == OutOfDetectionRangeFlag.ABOVE_DETECTION_RANGE) return ">"; return ""; } }