@Override public boolean isNoDataValue(Collection<String> noDataValues) { Double value = getValue(); return value == null || Double.isNaN(value) || containsValue(noDataValues, value); }
private boolean containsValue(Collection<String> collection, double key) { if (collection == null) { return false; } for (Double noDataValue : convertToDoubles(collection)) { if (Math.abs(noDataValue / key - 1) < DOUBLE_THRESHOLD) { return true; } } return false; }
@Override public MeasurementDataEntity getFirstValue() { final MeasurementDataEntity firstValue = super.getFirstValue(); if (firstValue != null) { Date when = firstValue.getTimeend(); Double value = firstValue.getValue(); if (when == null || value == null) { return null; // empty component } } return firstValue; }
private MeasurementValue[] expandToInterval(Double value, MeasurementDatasetEntity series, DbQuery query) { MeasurementDataEntity referenceStart = new MeasurementDataEntity(); MeasurementDataEntity referenceEnd = new MeasurementDataEntity(); referenceStart.setTimestamp(query.getTimespan().getStart().toDate()); referenceEnd.setTimestamp(query.getTimespan().getEnd().toDate()); referenceStart.setValue(value); referenceEnd.setValue(value); return new MeasurementValue[]{createSeriesValueFor(referenceStart, series, query), createSeriesValueFor(referenceEnd, series, query)}; }
@Override public MeasurementValue createSeriesValueFor(MeasurementDataEntity observation, MeasurementDatasetEntity series, DbQuery query) { if (observation == null) { // do not fail on empty observations return null; } long timeend = observation.getTimeend().getTime(); long timestart = observation.getTimestart().getTime(); Double observationValue = !getServiceInfo().isNoDataValue(observation) ? format(observation, series) : null; MeasurementValue value = query.getParameters().isShowTimeIntervals() ? new MeasurementValue(timestart, timeend, observationValue) : new MeasurementValue(timeend, observationValue); if (query.isExpanded()) { addGeometry(observation, value); addValidTime(observation, value); addParameter(observation, value); } else if (series.getPlatform().isMobile()) { addGeometry(observation, value); } return value; }
private MeasurementData expandReferenceDataIfNecessary(MeasurementDatasetEntity seriesEntity, DbQuery query, Session session) throws DataAccessException { MeasurementData result = new MeasurementData(); DataDao<MeasurementDataEntity> dao = createDataDao(session); List<MeasurementDataEntity> observations = dao.getAllInstancesFor(seriesEntity, query); if (!hasValidEntriesWithinRequestedTimespan(observations)) { MeasurementValue lastValue = getLastValue(seriesEntity, session, query); result.addValues(expandToInterval(lastValue.getValue(), seriesEntity, query)); } if (hasSingleValidReferenceValue(observations)) { MeasurementDataEntity entity = observations.get(0); result.addValues(expandToInterval(entity.getValue(), seriesEntity, query)); } return result; }
@Override public MeasurementDataEntity getLastValue() { final MeasurementDataEntity lastValue = super.getLastValue(); if (lastValue != null) { Date when = lastValue.getTimeend(); Double value = lastValue.getValue(); if (when == null || value == null) { return null; // empty component } } return lastValue; }