use of org.n52.sos.util.SosHelper in project SOS by 52North.
the class HibernateObservationUtilitiesTest method createSubObservationOfSweArrayObservationViaGetObservationById.
@Test
public // present
void createSubObservationOfSweArrayObservationViaGetObservationById() throws OwsExceptionReport, ConnectionProviderException, ConverterException {
// PREPARE
Session session = getSession();
try {
Transaction transaction = session.beginTransaction();
GetObservationByIdRequest request = new GetObservationByIdRequest();
request.setVersion(Sos2Constants.SERVICEVERSION);
FormatEntity hProcedureDescriptionFormat = new FormatEntity();
FormatEntity hFeatureOfInterestType = new FormatEntity();
FeatureEntity hFeatureOfInterest = new FeatureEntity();
PhenomenonEntity hObservableProperty = new PhenomenonEntity();
CategoryEntity hCategory = new CategoryEntity();
PlatformEntity hPlatform = new PlatformEntity();
FormatEntity hObservationType = new FormatEntity();
OfferingEntity hOffering = new OfferingEntity();
DatasetEntity hObservationConstellation = new DatasetEntity();
CodespaceEntity hCodespace = new CodespaceEntity();
ProcedureEntity hProcedure = new ProcedureEntity();
QuantityDataEntity hObservation = new QuantityDataEntity();
ResultTemplateEntity hResultTemplateEntity = new ResultTemplateEntity();
hProcedureDescriptionFormat.setFormat(PROCEDURE_DESCRIPTION_FORMAT);
hCodespace.setName(CODESPACE);
hProcedure.setIdentifier(PROCEDURE);
hProcedure.setFormat(hProcedureDescriptionFormat);
hFeatureOfInterestType.setFormat(FEATURE_OF_INTEREST_TYPE);
hFeatureOfInterest.setIdentifier(FEATURE);
hFeatureOfInterest.setFeatureType(hFeatureOfInterestType);
hFeatureOfInterest.setIdentifierCodespace(hCodespace);
hPlatform.setIdentifier(FEATURE);
hObservableProperty.setIdentifier(OBSERVABLE_PROPERTY);
hCategory.setIdentifier(OBSERVABLE_PROPERTY);
hObservationType.setFormat(OmConstants.OBS_TYPE_SWE_ARRAY_OBSERVATION);
hOffering.setIdentifier(OFFERING);
hObservationConstellation.setProcedure(hProcedure);
hObservationConstellation.setOffering(hOffering);
hObservationConstellation.setObservableProperty(hObservableProperty);
hObservationConstellation.setOmObservationType(hObservationType);
hObservationConstellation.setFeature(hFeatureOfInterest);
hObservationConstellation.setDeleted(false);
hObservationConstellation.setHidden(false);
hObservationConstellation.setCategory(hCategory);
hObservationConstellation.setPlatform(hPlatform);
hResultTemplateEntity.setFeature(hFeatureOfInterest);
hResultTemplateEntity.setOffering(hOffering);
hResultTemplateEntity.setPhenomenon(hObservableProperty);
hResultTemplateEntity.setProcedure(hProcedure);
hResultTemplateEntity.setIdentifier("test-rt-1");
hResultTemplateEntity.setEncoding("<swe:TextEncoding xmlns:swe=\"http://www.opengis.net/swe/2.0\" " + "xmlns:sams=\"http://www.opengis.net/samplingSpatial/2.0\" " + "xmlns:sml=\"http://www.opengis.net/sensorML/1.0.1\" " + "xmlns:sf=\"http://www.opengis.net/sampling/2.0\" " + "xmlns:swes=\"http://www.opengis.net/swes/2.0\" " + "xmlns:sos=\"http://www.opengis.net/sos/2.0\" " + "xmlns:gml=\"http://www.opengis.net/gml/3.2\" " + "xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" " + "xmlns:om=\"http://www.opengis.net/om/2.0\" " + "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " + "xmlns:xlink=\"http://www.w3.org/1999/xlink\" " + "tokenSeparator=\"#\" blockSeparator=\"@\"/>");
hResultTemplateEntity.setStructure("\"<swe:DataRecord xmlns:swe=\"http://www.opengis.net/swe/2.0\" " + "xmlns:sams=\"http://www.opengis.net/samplingSpatial/2.0\" " + "xmlns:sml=\"http://www.opengis.net/sensorML/1.0.1\" " + "xmlns:sf=\"http://www.opengis.net/sampling/2.0\" " + "xmlns:swes=\"http://www.opengis.net/swes/2.0\" " + "xmlns:sos=\"http://www.opengis.net/sos/2.0\" " + "xmlns:gml=\"http://www.opengis.net/gml/3.2\" " + "xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" " + "xmlns:om=\"http://www.opengis.net/om/2.0\" " + "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " + "xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n" + " <swe:field name=\"phenomenonTime\">\r\n" + " <swe:Time definition=\"http://www.opengis.net/def/property/OGC/0/PhenomenonTime\">\r\n" + " <swe:uom xlink:href=\"http://www.opengis.net/def/uom/ISO-8601/0/Gregorian\"/>\r\n" + " </swe:Time>\r\n" + " </swe:field>\r\n" + " <swe:field name=\"Discharge\">\r\n" + " <swe:Quantity definition=\"http://sweet.jpl.nasa.gov/2.0/hydroSurface.owl#Discharge\">\r\n" + " <swe:uom code=\"m3\"/>\r\n" + " </swe:Quantity>\r\n" + " </swe:field>\r\n" + "</swe:DataRecord>\"");
session.save(hProcedureDescriptionFormat);
session.save(hProcedure);
session.save(hCodespace);
session.save(hOffering);
session.save(hFeatureOfInterestType);
session.save(hFeatureOfInterest);
session.save(hPlatform);
session.save(hObservableProperty);
session.save(hCategory);
session.save(hObservationType);
session.save(hObservationConstellation);
session.save(hResultTemplateEntity);
session.flush();
hObservation.setValue(BigDecimal.valueOf(1.0));
hObservation.setSamplingTimeStart(DateTime.now().toDate());
hObservation.setSamplingTimeEnd(hObservation.getSamplingTimeStart());
hObservation.setResultTime(hObservation.getSamplingTimeStart());
hObservation.setDataset(hObservationConstellation);
hObservation.setStaIdentifier("123");
hObservation.setDeleted(false);
session.save(hObservation);
transaction.commit();
ArrayList<DataEntity<?>> observationsFromDataBase = new ArrayList<>();
observationsFromDataBase.add(hObservation);
SosHelper sosHelper = new SosHelper();
sosHelper.setServiceURL(URI.create("http://test.org/"));
DaoFactory daoFactory = new DaoFactory();
daoFactory.setSosHelper(sosHelper);
// CALL
OmObservationCreatorContext ctx = new OmObservationCreatorContext(null, null, daoFactory, new ProfileHanlderMock(), Mockito.mock(AdditionalObservationCreatorRepository.class), null, new FeatureQueryHandlerMock(), null, null, null, null, null, Mockito.mock(BindingRepository.class));
ObservationStream resultList = HibernateObservationUtilities.createSosObservationsFromObservations(observationsFromDataBase, request, Locale.ENGLISH, null, ctx, session);
// TEST RESULTS
assertThat(resultList, is(notNullValue()));
assertThat(resultList.hasNext(), is(true));
Object value = resultList.next().getValue().getValue();
assertThat(resultList.hasNext(), is(false));
assertThat(value, is(instanceOf(QuantityValue.class)));
Double val = ((QuantityValue) value).getValue().doubleValue();
// assertThat(value, is(instanceOf(SweDataArray.class)));
// Double val = Double.parseDouble(((SweDataArray) value).getValues().get(0).get(1));
assertThat(val, is(closeTo(1.0, 0.00001)));
} finally {
returnSession(session);
}
}
use of org.n52.sos.util.SosHelper in project SOS by 52North.
the class AbstractInsertDAOTest method setUp.
public void setUp() throws OwsExceptionReport, ConverterException, EncodingException {
GEOMETRY.setSRID(4326);
SOSHibernateSessionHolder holder = new SOSHibernateSessionHolder();
holder.setConnectionProvider(this);
daoFactory.setSweHelper(new SweHelper());
SosHelper sosHelper = new SosHelper();
sosHelper.setServiceURL(URI.create("http://test.org"));
daoFactory.setSosHelper(sosHelper);
GeometryHandler geometryHandler = new GeometryHandler();
initGeometryHandler(geometryHandler);
daoFactory.setGeometryHandler(geometryHandler);
HibernateFeatureQueryHandler featureQueryHandler = new HibernateFeatureQueryHandler();
featureQueryHandler.setDaoFactory(daoFactory);
featureQueryHandler.setI18NDAORepository(i18NDAORepository);
featureQueryHandler.setGeometryHandler(geometryHandler);
featureQueryHandler.setContentCacheController(contentCacheController);
daoFactory.setFeatureQueryHandler(featureQueryHandler);
daoFactory.setDecoderRepository(decoderRepository);
daoFactory.setEncoderRepository(encoderRepository);
daoFactory.setI18NDAORepository(i18NDAORepository);
daoFactory.setSweHelper(initSweHelper());
cacheFeeder.setConnectionProvider(holder);
cacheFeeder.setI18NDAORepository(i18NDAORepository);
cacheFeeder.setGeometryHandler(geometryHandler);
initEncoder();
initDecoder();
bindingRepository.setComponentFactories(Optional.empty());
bindingRepository.setComponents(Optional.empty());
additionalObservationCreatorRepository.setComponentFactories(Optional.empty());
additionalObservationCreatorRepository.setComponents(Optional.empty());
contentCacheController.setPersistenceStrategy(Mockito.mock(ContentCachePersistenceStrategy.class));
contentCacheController.setCacheFactory(Mockito.mock(ContentCacheFactory.class));
contentCacheController.setCompleteCacheUpdateFactory(Mockito.mock(CompleteCacheUpdateFactory.class));
contentCacheController.setCache(cache);
cache.setSupportedTypeRepository(Mockito.mock(SupportedTypeRepository.class));
i18NDAORepository.init();
decoderRepository.init();
converterRepository.init();
factoryRepository.init();
bindingRepository.init();
additionalObservationCreatorRepository.init();
DefaultContentModificationListener defaultContentModificationListener = new DefaultContentModificationListener(cacheFeeder, contentCacheController);
defaultContentModificationListener.setConverterRepository(converterRepository);
serviceEventBus.register(defaultContentModificationListener);
ctx = new HibernateProcedureCreationContext(serviceMetadataRepository, decoderRepository, factoryRepository, i18NDAORepository, daoFactory, converterRepository, null, bindingRepository, null, contentCacheController, Mockito.mock(ProcedureDescriptionSettings.class));
observationCtx = new OmObservationCreatorContext(serviceMetadataRepository, i18NDAORepository, daoFactory, new ProfileHanlderMock(), additionalObservationCreatorRepository, contentCacheController, featureQueryHandler, converterRepository, factoryRepository, geometryHandler, decoderRepository, null, bindingRepository);
observationCtx.setDefaultLanguage("eng");
Session session = null;
try {
session = getSession();
HibernateMetadataCache.init(session);
} finally {
returnSession(session);
}
initDaos();
}
use of org.n52.sos.util.SosHelper in project arctic-sea by 52North.
the class OgcDecoderv100 method parseTemporalOperatorType.
/**
* parses a single temporal filter of the requests and returns SOS temporal
* filter
*
* @param xbBinaryTemporalOp
* XmlObject representing the temporal filter
*
* @return Returns SOS representation of temporal filter
*
* @throws DecodingException
* if parsing of the element failed
*/
private Object parseTemporalOperatorType(BinaryTemporalOpType xbBinaryTemporalOp) throws DecodingException {
TemporalFilter temporalFilter = new TemporalFilter();
// FIXME local workaround against SOSHelper check value reference
String valueRef = "phenomenonTime";
try {
NodeList nodes = xbBinaryTemporalOp.getDomNode().getChildNodes();
for (int i = 0; i < nodes.getLength(); i++) {
if (nodes.item(i).getNamespaceURI() != null && !nodes.item(i).getLocalName().equals(FilterConstants.EN_VALUE_REFERENCE)) {
// GML decoder will return TimeInstant or TimePriod
Object timeObject = decodeXmlElement(XmlObject.Factory.parse(nodes.item(i)));
if (timeObject instanceof PropertyNameType) {
PropertyNameType propType = (PropertyNameType) timeObject;
// TODO here apply logic for ogc property
// om:samplingTime etc
// valueRef = propType.getDomNode().getNodeValue();
}
if (timeObject instanceof Time) {
TimeOperator operator;
Time time = (Time) timeObject;
String localName = XmlHelper.getLocalName(xbBinaryTemporalOp);
// change to SOS 1.0. TMDuring kind of
if (localName.equals(TimeOperator.TM_During.name()) && time instanceof TimePeriod) {
operator = TimeOperator.TM_During;
} else if (localName.equals(TimeOperator.TM_Equals.name()) && time instanceof TimeInstant) {
operator = TimeOperator.TM_Equals;
} else if (localName.equals(TimeOperator.TM_After.name()) && time instanceof TimeInstant) {
operator = TimeOperator.TM_After;
} else if (localName.equals(TimeOperator.TM_Before.name()) && time instanceof TimeInstant) {
operator = TimeOperator.TM_Before;
} else {
throw unsupportedTemporalFilterOperand();
}
temporalFilter.setOperator(operator);
temporalFilter.setTime(time);
// actually it should be eg om:samplingTime
temporalFilter.setValueReference(valueRef);
break;
}
}
}
} catch (XmlException xmle) {
throw new DecodingException("Error while parsing temporal filter!", xmle);
}
return temporalFilter;
}
use of org.n52.sos.util.SosHelper in project arctic-sea by 52North.
the class OgcDecoderv100 method parseBBOXFilterType.
/**
* Parses the spatial filter of a request.
*
* @param xbBBOX
* XmlBean representing the feature of interest parameter of the
* request
*
* @return Returns SpatialFilter created from the passed foi request
* parameter
*
* @throws DecodingException
* * if creation of the SpatialFilter failed
*/
private SpatialFilter parseBBOXFilterType(BBOXTypeImpl xbBBOX) throws DecodingException {
SpatialFilter spatialFilter = new SpatialFilter();
// FIXME local workaround for SOSHelper check value reference
String valueRef = "om:featureOfInterest/sams:SF_SpatialSamplingFeature/sams:shape";
try {
spatialFilter.setOperator(FilterConstants.SpatialOperator.BBOX);
XmlCursor geometryCursor = xbBBOX.newCursor();
if (geometryCursor.toChild(GmlConstants.QN_ENVELOPE)) {
Object sosGeometry = decodeXmlElement(XmlObject.Factory.parse(geometryCursor.getDomNode()));
// }
if (sosGeometry instanceof Geometry) {
spatialFilter.setGeometry((Geometry) sosGeometry);
spatialFilter.setValueReference(valueRef);
}
} else {
throw unsupportedSpatialFilterOperand();
}
geometryCursor.dispose();
} catch (XmlException xmle) {
throw errorParsingSpatialFilter(xmle);
}
return spatialFilter;
}
Aggregations