use of org.n52.io.response.dataset.Data in project series-rest-api by 52North.
the class MultipleChartsRenderer method writeDataToChart.
@Override
public void writeDataToChart(DataCollection<QuantityData> data) {
Map<String, QuantityData> allTimeseries = data.getAllSeries();
List<? extends DatasetOutput> timeseriesMetadatas = getMetadataOutputs();
int rendererCount = timeseriesMetadatas.size();
for (int rendererIndex = 0; rendererIndex < timeseriesMetadatas.size(); rendererIndex++) {
/*
* For each index put data and its renderer configured to a particular style.
*
* As each timeseries may define its custom styling and different chart types we have to loop over
* all timeseries to configure chart rendering.
*/
DatasetOutput timeseriesMetadata = timeseriesMetadatas.get(rendererIndex);
String timeseriesId = timeseriesMetadata.getId();
StyleProperties style = getTimeseriesStyleFor(timeseriesId);
QuantityData timeseriesData = allTimeseries.get(timeseriesId);
String chartId = createChartId(timeseriesMetadata);
ChartIndexConfiguration configuration = new ChartIndexConfiguration(chartId, rendererIndex);
configuration.setData(timeseriesData, timeseriesMetadata, style);
configuration.setRenderer(createRenderer(style));
if (timeseriesData.hasReferenceValues()) {
int referenceIndex = rendererCount;
/*
* Configure timeseries reference value renderers with the same metadata and add it at the end
* of the plot's renderer list.
*/
QuantityDatasetMetadata metadata = timeseriesData.getMetadata();
Map<String, QuantityData> referenceValues = metadata.getReferenceValues();
for (Entry<String, QuantityData> referencedTimeseries : referenceValues.entrySet()) {
String referenceTimeseriesId = referencedTimeseries.getKey();
ReferenceValueOutput referenceOutput = getReferenceValue(referenceTimeseriesId, timeseriesMetadata);
String referenceChartId = createChartId(timeseriesMetadata, referenceOutput.getLabel());
QuantityData referenceData = referenceValues.get(referenceTimeseriesId);
ChartIndexConfiguration referenceConfiguration = new ChartIndexConfiguration(referenceChartId, referenceIndex);
StyleProperties referenceStyle = getTimeseriesStyleFor(timeseriesId, referenceTimeseriesId);
referenceConfiguration.setReferenceData(referenceData, timeseriesMetadata, referenceStyle);
referenceConfiguration.setRenderer(createRenderer(referenceStyle));
referenceIndex++;
}
}
}
}
use of org.n52.io.response.dataset.Data in project series-rest-api by 52North.
the class LargestTriangleThreeBucketsGeneralizer method generalize.
@Override
public DataCollection<QuantityData> generalize(DataCollection<QuantityData> data) throws GeneralizerException {
TvpDataCollection<QuantityData> generalizedDataCollection = new TvpDataCollection<>();
for (String timeseriesId : data.getAllSeries().keySet()) {
QuantityData timeseries = data.getSeries(timeseriesId);
QuantityData generalizedTimeseries = generalize(timeseries);
generalizedTimeseries.setMetadata(timeseries.getMetadata());
generalizedDataCollection.addNewSeries(timeseriesId, generalizedTimeseries);
}
return generalizedDataCollection;
}
use of org.n52.io.response.dataset.Data in project series-rest-api by 52North.
the class QuantityCsvIoHandler method writeData.
private void writeData(DataCollection<QuantityData> data, OutputStream stream) throws IOException {
for (DatasetOutput metadata : seriesMetadatas) {
QuantityData series = data.getSeries(metadata.getId());
writeData(metadata, (QuantityData) series, stream);
}
}
use of org.n52.io.response.dataset.Data in project series-rest-api by 52North.
the class DataController method getSeriesCollectionChart.
@RequestMapping(value = "/data", produces = { "image/png" }, method = RequestMethod.POST)
public void getSeriesCollectionChart(HttpServletResponse response, @RequestHeader(value = Parameters.HttpHeader.ACCEPT_LANGUAGE) String locale, @RequestBody RequestStyledParameterSet parameters) throws Exception {
RequestUtils.overrideQueryLocaleWhenSet(locale, parameters);
IoParameters map = QueryParameters.createFromQuery(parameters);
checkForUnknownDatasetIds(map, parameters.getDatasets());
LOGGER.debug("get data collection chart with query: {}", map);
final String datasetType = parameters.getValueType();
String outputFormat = MimeType.IMAGE_PNG.toString();
response.setContentType(outputFormat);
createIoFactory(datasetType).withStyledRequest(parameters).createHandler(outputFormat).writeBinary(response.getOutputStream());
}
use of org.n52.io.response.dataset.Data in project series-rest-api by 52North.
the class DataController method getSeriesData.
@RequestMapping(value = "/{seriesId}/data", produces = { "application/json" }, method = RequestMethod.GET)
public ModelAndView getSeriesData(HttpServletResponse response, @PathVariable String seriesId, @RequestHeader(value = Parameters.HttpHeader.ACCEPT_LANGUAGE) String locale, @RequestParam(required = false) MultiValueMap<String, String> query) throws Exception {
RequestUtils.overrideQueryLocaleWhenSet(locale, query);
IoParameters map = QueryParameters.createFromQuery(query);
LOGGER.debug("get data for item '{}' with query: {}", seriesId, map);
IntervalWithTimeZone timespan = map.getTimespan();
checkAgainstTimespanRestriction(timespan.toString());
checkForUnknownDatasetIds(map, seriesId);
RequestSimpleParameterSet parameters = RequestSimpleParameterSet.createForSingleSeries(seriesId, map);
String handleAsValueTypeFallback = map.getAsString(Parameters.HANDLE_AS_VALUE_TYPE);
String valueType = ValueType.extractType(seriesId, handleAsValueTypeFallback);
IoProcessChain<?> ioChain = createIoFactory(valueType).withSimpleRequest(parameters).createProcessChain();
DataCollection<?> formattedDataCollection = ioChain.getProcessedData();
final Map<String, ?> processed = formattedDataCollection.getAllSeries();
return map.isExpanded() ? new ModelAndView().addObject(processed) : new ModelAndView().addObject(processed.get(seriesId));
}
Aggregations