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