@Override protected void encodeResponse(ObjectNode json, GetDataAvailabilityResponse t) throws EncodingException { ArrayNode a = json.putArray(GetDataAvailabilityConstants.DATA_AVAILABILITY); for (DataAvailability da : t.getDataAvailabilities()) { ObjectNode objectNode = a.addObject(); objectNode.put(JSONConstants.FEATURE_OF_INTEREST, da.getFeatureOfInterest().getHref()) .put(JSONConstants.PROCEDURE, da.getProcedure().getHref()) .put(JSONConstants.OBSERVED_PROPERTY, da.getObservedProperty().getHref()) .set(JSONConstants.PHENOMENON_TIME, encodeObjectToJson(da.getPhenomenonTime())); if (t.isSetResponseFormat() && GetDataAvailabilityConstants.NS_GDA_20.equals(t.getResponseFormat())) { if (da.isSetOffering()) { objectNode.put(JSONConstants.OFFERING, da.getOffering().getHref()); } if (da.isSetFormatDescriptors()) { ObjectNode fdNode = objectNode.putObject(GetDataAvailabilityConstants.FORMAT_DESCRIPTOR); encodeProcedureFormatDescriptor(da.getFormatDescriptor().getProcedureDescriptionFormatDescriptor(), fdNode); encodeObservationFormatDescriptor(da.getFormatDescriptor().getObservationFormatDescriptors(), fdNode); } } if (da.isSetCount()) { objectNode.put(JSONConstants.COUNT, da.getCount()); } } }
private Collection<DataAvailability> parseDataAvalabilities( net.opengis.sosgda.x20.GetDataAvailabilityResponseType response) throws DecodingException { List<DataAvailability> availabilities = Lists.newArrayList(); if (CollectionHelper.isNotNullOrEmpty(response.getDataAvailabilityMemberArray())) { Map<String, TimePeriod> periods = Maps.newHashMap(); for (net.opengis.sosgda.x20.DataAvailabilityMemberType damt : response.getDataAvailabilityMemberArray()) { ReferenceType procedure = decodeXmlElement(damt.getProcedure()); ReferenceType offering = decodeXmlElement(damt.getOffering()); ReferenceType featureOfInterest = decodeXmlElement(damt.getFeatureOfInterest()); ReferenceType observedProperty = decodeXmlElement(damt.getObservedProperty()); TimePeriod phenomenonTime = getPhenomenonTime(damt.getPhenomenonTime().getAbstractTimeObject(), damt.getPhenomenonTime().getHref(), periods); DataAvailability dataAvailability = new DataAvailability(procedure, observedProperty, featureOfInterest, offering, phenomenonTime); FormatDescriptor formatDescriptor = createFormatDescriptor(damt.getFormatDescriptor()); if (formatDescriptor != null) { dataAvailability.setFormatDescriptor(formatDescriptor); } availabilities.add(dataAvailability); } } return availabilities; }
@Override protected void wirteDataAvailabilityMember(DataAvailability da) throws XMLStreamException, EncodingException { start(GetDataAvailabilityConstants.GDA_DATA_AVAILABILITY_MEMBER); attr(GmlConstants.QN_ID_32, DATA_AVAILABILITY_PREFIX + dataAvailabilityCount++); writeProcedure(da, GetDataAvailabilityConstants.GDA_PROCEDURE); writeObservedProperty(da, GetDataAvailabilityConstants.GDA_OBSERVED_PROPERTY); writeFeatureOfInterest(da, GetDataAvailabilityConstants.GDA_FEATURE_OF_INTEREST); writePhenomenonTime(da, GetDataAvailabilityConstants.GDA_PHENOMENON_TIME); if (da.isSetCount()) { writeCount(da.getCount(), GetDataAvailabilityConstants.GDA_COUNT); } if (da.isSetResultTime()) { writeResultTimes(da.getResultTimes(), GetDataAvailabilityConstants.GDA_EXTENSION); } if (da.isSetOffering()) { writeOffering(da.getOffering(), GetDataAvailabilityConstants.GDA_EXTENSION); } if (da.isSetFormatDescriptors()) { Set<String> observationTypes = da.getFormatDescriptor().getObservationFormatDescriptors().stream() .map(ObservationFormatDescriptor::getObservationTypes).flatMap(Set::stream).collect(toSet()); writeObservationTypes(observationTypes); } if (da.isSetMetadata()) { writeMetadata(da.getMetadata(), GetDataAvailabilityConstants.GDA_EXTENSION); } end(GetDataAvailabilityConstants.GDA_DATA_AVAILABILITY_MEMBER); }
Criteria datasetCriteria = c.createCriteria(DataEntity.PROPERTY_DATASET); datasetCriteria.createCriteria(DatasetEntity.PROPERTY_FEATURE).add( Restrictions.eq(DatasetEntity.IDENTIFIER, dataAvailability.getFeatureOfInterest().getHref())); datasetCriteria.createCriteria( DatasetEntity.PROPERTY_PROCEDURE).add( Restrictions.eq(ProcedureEntity.IDENTIFIER, dataAvailability.getProcedure().getHref())); datasetCriteria.createCriteria(DatasetEntity.PROPERTY_PHENOMENON).add( Restrictions.eq(PhenomenonEntity.IDENTIFIER, dataAvailability.getObservedProperty().getHref())); if (request.isSetOfferings()) { c.createCriteria( DatasetEntity.PROPERTY_OFFERING).add(
Criteria datasetCriteria = c.createCriteria(DataEntity.PROPERTY_DATASET); datasetCriteria.createCriteria(DatasetEntity.PROPERTY_FEATURE).add( Restrictions.eq(DatasetEntity.IDENTIFIER, dataAvailability.getFeatureOfInterest().getHref())); datasetCriteria.createCriteria( DatasetEntity.PROPERTY_PROCEDURE).add( Restrictions.eq(ProcedureEntity.IDENTIFIER, dataAvailability.getProcedure().getHref())); datasetCriteria.createCriteria(DatasetEntity.PROPERTY_PHENOMENON).add( Restrictions.eq(PhenomenonEntity.IDENTIFIER, dataAvailability.getObservedProperty().getHref())); if (request.isSetOfferings()) { c.createCriteria( DatasetEntity.PROPERTY_OFFERING).add(
String phenomenonId = addPhenomenon(dataAvail, serviceConstellation); String categoryId = addCategory(dataAvail, serviceConstellation); String offeringId = addOffering(dataAvail.getOffering(), serviceConstellation); String featureId = dataAvail.getFeatureOfInterest().getHref(); if (!serviceConstellation.hasFeature(featureId)) { GetFeatureOfInterestResponse foiResponse = getFeatureOfInterestById(featureId, serviceUri);
protected void doForOffering(SosObservationOffering offering, ServiceConstellation serviceConstellation, DataSourceConfiguration config) { String offeringId = addOffering(offering, serviceConstellation); offering.getProcedures().forEach(procedureId -> { addProcedure(procedureId, true, false, serviceConstellation); GetFeatureOfInterestResponse foiResponse = getFeatureOfInterestByProcedure(procedureId, config.getUrl()); addFeature(foiResponse.getAbstractFeature(), serviceConstellation); GetDataAvailabilityResponse gdaResponse = getDataAvailabilityByProcedure(procedureId, config.getUrl()); if (gdaResponse != null) { gdaResponse.getDataAvailabilities().forEach(dataAval -> { String phenomenonId = addPhenomenon(dataAval, serviceConstellation); String categoryId = addCategory(dataAval, serviceConstellation); String featureId = dataAval.getFeatureOfInterest().getHref(); // TODO maybe not only QuantityDatasetConstellation serviceConstellation.add(new QuantityDatasetConstellation(procedureId, offeringId, categoryId, phenomenonId, featureId)); }); } LOGGER.info(foiResponse.toString()); }); } }
@Override protected void wirteDataAvailabilityMember(DataAvailability da) throws XMLStreamException, EncodingException { start(GetDataAvailabilityConstants.GDA_DATA_AVAILABILITY_20_MEMBER); attr(GmlConstants.QN_ID_32, DATA_AVAILABILITY_PREFIX + dataAvailabilityCount++); writeProcedure(da, GetDataAvailabilityConstants.GDA_20_PROCEDURE); writeObservedProperty(da, GetDataAvailabilityConstants.GDA_20_OBSERVED_PROPERTY); writeFeatureOfInterest(da, GetDataAvailabilityConstants.GDA_20_FEATURE_OF_INTEREST); writePhenomenonTime(da, GetDataAvailabilityConstants.GDA_20PHENOMENON_TIME); if (da.isSetCount()) { writeCount(da.getCount(), GetDataAvailabilityConstants.GDA_20_COUNT); } if (da.isSetResultTime()) { writeResultTimes(da.getResultTimes(), GetDataAvailabilityConstants.GDA_20_EXTENSION); } if (da.isSetOffering()) { writeOffering(da.getOffering()); } if (da.isSetFormatDescriptors()) { writeFormatDescriptor(da.getFormatDescriptor()); } if (da.isSetMetadata()) { writeMetadata(da.getMetadata(), GetDataAvailabilityConstants.GDA_20_EXTENSION); } end(GetDataAvailabilityConstants.GDA_DATA_AVAILABILITY_20_MEMBER); }
private List<DataAvailability> checkForDuplictation(List<DataAvailability> dataAvailabilityValues) { List<DataAvailability> checked = Lists.newLinkedList(); for (DataAvailability dataAvailability : dataAvailabilityValues) { if (checked.isEmpty()) { checked.add(dataAvailability); } else { boolean notDuplicated = true; for (DataAvailability checkedDA : checked) { if (dataAvailability.equals(checkedDA)) { checkedDA.getPhenomenonTime().extendToContain(dataAvailability.getPhenomenonTime()); notDuplicated = false; } } if (notDuplicated) { checked.add(dataAvailability); } } } return checked; }
@Override protected void wirteDataAvailabilityMember(DataAvailability da) throws XMLStreamException, EncodingException { start(GetDataAvailabilityConstants.GDA_DATA_AVAILABILITY_MEMBER); attr(GmlConstants.QN_ID_32, DATA_AVAILABILITY_PREFIX + dataAvailabilityCount++); writeProcedure(da, GetDataAvailabilityConstants.GDA_PROCEDURE); writeObservedProperty(da, GetDataAvailabilityConstants.GDA_OBSERVED_PROPERTY); writeFeatureOfInterest(da, GetDataAvailabilityConstants.GDA_FEATURE_OF_INTEREST); writePhenomenonTime(da, GetDataAvailabilityConstants.GDA_PHENOMENON_TIME); if (da.isSetCount()) { writeCount(da.getCount(), GetDataAvailabilityConstants.GDA_COUNT); } if (da.isSetResultTime()) { writeResultTimes(da.getResultTimes(), GetDataAvailabilityConstants.GDA_EXTENSION); } if (da.isSetOffering()) { writeOffering(da.getOffering(), GetDataAvailabilityConstants.GDA_EXTENSION); } if (da.isSetFormatDescriptors()) { Set<String> observationTypes = da.getFormatDescriptor().getObservationFormatDescriptors().stream() .map(ObservationFormatDescriptor::getObservationTypes).flatMap(Set::stream).collect(toSet()); writeObservationTypes(observationTypes); } if (da.isSetMetadata()) { writeMetadata(da.getMetadata(), GetDataAvailabilityConstants.GDA_EXTENSION); } end(GetDataAvailabilityConstants.GDA_DATA_AVAILABILITY_MEMBER); }
@Override protected void wirteDataAvailabilityMember(DataAvailability da) throws XMLStreamException, EncodingException { start(GetDataAvailabilityConstants.GDA_DATA_AVAILABILITY_20_MEMBER); attr(GmlConstants.QN_ID_32, DATA_AVAILABILITY_PREFIX + dataAvailabilityCount++); writeProcedure(da, GetDataAvailabilityConstants.GDA_20_PROCEDURE); writeObservedProperty(da, GetDataAvailabilityConstants.GDA_20_OBSERVED_PROPERTY); writeFeatureOfInterest(da, GetDataAvailabilityConstants.GDA_20_FEATURE_OF_INTEREST); writePhenomenonTime(da, GetDataAvailabilityConstants.GDA_20PHENOMENON_TIME); if (da.isSetCount()) { writeCount(da.getCount(), GetDataAvailabilityConstants.GDA_20_COUNT); } if (da.isSetResultTime()) { writeResultTimes(da.getResultTimes(), GetDataAvailabilityConstants.GDA_20_EXTENSION); } if (da.isSetOffering()) { writeOffering(da.getOffering()); } if (da.isSetFormatDescriptors()) { writeFormatDescriptor(da.getFormatDescriptor()); } if (da.isSetMetadata()) { writeMetadata(da.getMetadata(), GetDataAvailabilityConstants.GDA_20_EXTENSION); } end(GetDataAvailabilityConstants.GDA_DATA_AVAILABILITY_20_MEMBER); }
@Override public UnitEntity getUom(DatasetEntity seriesEntity) { GetDataAvailabilityResponse availabilityResponse = getDataAvailability(seriesEntity); if (availabilityResponse.getDataAvailabilities().size() == 1) { DateTime start = availabilityResponse.getDataAvailabilities().get(0).getPhenomenonTime().getStart(); GetObservationResponse response = createObservationResponse(seriesEntity, createTimeFilter(start)); return response.getObservationCollection().toStream() .findFirst() .map(OmObservation::getValue) .map(ObservationValue::getValue) .map(v -> v.getUnit()) .map(unit -> EntityBuilder.createUnit(unit, null, (ProxyServiceEntity) seriesEntity.getService())) .orElse(null); } return null; }
private Collection<DataAvailability> parseDataAvalabilities( GetDataAvailabilityResponseType response) throws DecodingException { List<DataAvailability> availabilities = Lists.newArrayList(); if (CollectionHelper.isNotNullOrEmpty(response.getDataAvailabilityMemberArray())) { Map<String, TimePeriod> periods = Maps.newHashMap(); for (DataAvailabilityMemberType damt : response.getDataAvailabilityMemberArray()) { ReferenceType procedure = decodeXmlElement(damt.getProcedure()); ReferenceType featureOfInterest = decodeXmlElement(damt.getFeatureOfInterest()); ReferenceType observedProperty = decodeXmlElement(damt.getObservedProperty()); TimePeriod phenomenonTime = getPhenomenonTime(damt.getPhenomenonTime().getAbstractTimeObject(), damt.getPhenomenonTime().getHref(), periods); availabilities.add(new DataAvailability(procedure, observedProperty, featureOfInterest, null, phenomenonTime)); } } return availabilities; }
private DataAvailability defaultProcessDataAvailability(Dataset entity, GDARequestContext context, Session session) throws OwsExceptionReport { TimePeriod timePeriod = createTimePeriod(entity); if (timePeriod != null && !timePeriod.isEmpty()) { DataAvailability dataAvailability = new DataAvailability(getProcedureReference(entity, context.getProcedures()), getObservedPropertyReference( entity, context.getObservableProperties()), getFeatureOfInterestReference(entity, context.getFeaturesOfInterest()), getOfferingReference(entity, context.getOfferings()), timePeriod); if (isShowCount(context.getRequest()) && entity.getObservationCount() >= 0) { dataAvailability.setCount(entity.getObservationCount()); } if (isIncludeResultTime(context.getRequest()) && dao.isPresent()) { dataAvailability.setResultTimes(dao.get().getResultTimes(dataAvailability, context.getRequest())); } return dataAvailability; } return null; }
public boolean isSetFormatDescriptors() { return getFormatDescriptor() != null; }
public boolean isSetFormatDescriptors() { return getFormatDescriptor() != null; }
public boolean isSetMetadata() { return getMetadata() != null && !getMetadata().isEmpty(); }
public boolean isSetOffering() { return getOffering() != null && getOffering().isSetHref(); }
public boolean isSetMetadata() { return getMetadata() != null && !getMetadata().isEmpty(); }
protected void writePhenomenonTime(DataAvailability da, QName element) throws DateTimeFormatException, XMLStreamException { if (times.containsKey(da.getPhenomenonTime())) { empty(element); attr(GetDataAvailabilityConstants.XLINK_HREF, "#" + times.get(da.getPhenomenonTime())); } else { start(element); da.getPhenomenonTime().setGmlId(TIME_PERIOD_PREFIX + timePeriodCount++); times.put(da.getPhenomenonTime(), da.getPhenomenonTime().getGmlId()); writeTimePeriod(da.getPhenomenonTime()); end(element); } }