package org.jvalue.ods.processor.filter.domain;
import com.codahale.metrics.MetricRegistry;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.inject.assistedinject.Assisted;
import org.jvalue.ods.api.sources.DataSource;
import org.jvalue.ods.processor.filter.AbstractDataModifierFilter;
import org.jvalue.ods.processor.filter.FilterException;
import org.jvalue.ods.utils.StringUtils;
import javax.inject.Inject;
/**
* Prepares data received from PegelOnline to be merge with other water level
* data sources.
*/
public class PegelOnlineMerger extends AbstractDataModifierFilter {
@Inject
PegelOnlineMerger(@Assisted DataSource source, MetricRegistry registry) {
super(source, registry);
}
@Override
protected ObjectNode doFilter(ObjectNode data) throws FilterException {
// remove uuid (not needed)
data.remove("uuid");
// rename number to gaugeId
rename(data, "number", "gaugeId");
// move measurement "up"
ObjectNode oldMeasurements = null;
for (JsonNode timeseriesNode : data.get("timeseries")) {
if (timeseriesNode.path("shortname").asText().equals("W")) {
oldMeasurements = (ObjectNode) timeseriesNode;
break;
}
}
if (oldMeasurements != null) {
ObjectNode newMeasurements = data.putObject("currentMeasurement");
newMeasurements.put("unit", oldMeasurements.path("unit").asText());
newMeasurements.put("timestamp", oldMeasurements.path("currentMeasurement").path("timestamp"));
newMeasurements.put("value", oldMeasurements.path("currentMeasurement").path("value"));
newMeasurements.put("characteristicValues", oldMeasurements.path("characteristicValues"));
}
data.remove("timeseries");
// rename longname to name
String stationName = StringUtils.toProperCase(data.get("longname").asText());
data.put("name", stationName);
data.remove("shortname");
data.remove("longname");
// move water name "up"
String waterName = StringUtils.toProperCase(data.path("water").path("longname").asText());
data.put("water", waterName);
return data;
}
@Override
protected void doOnComplete() throws FilterException {
// nothing to do
}
}