/*
* Constellation - An open source and standard compliant SDI
* http://www.constellation-sdi.org
*
* Copyright 2014 Geomatys.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.constellation.wfs;
import java.io.File;
import java.io.StringWriter;
import java.net.URL;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.namespace.QName;
import org.apache.sis.util.logging.Logging;
import org.apache.sis.xml.MarshallerPool;
import org.constellation.business.IDataBusiness;
import org.constellation.business.ILayerBusiness;
import org.constellation.business.IProviderBusiness;
import org.constellation.business.IServiceBusiness;
import org.constellation.configuration.ConfigDirectory;
import org.constellation.admin.SpringHelper;
import org.constellation.api.ProviderType;
import org.constellation.configuration.ConfigurationException;
import org.constellation.configuration.LayerContext;
import org.constellation.provider.DataProviders;
import org.constellation.provider.FeatureData;
import org.constellation.provider.ProviderFactory;
import org.constellation.test.utils.CstlDOMComparator;
import org.constellation.test.utils.Order;
import org.constellation.test.utils.SpringTestRunner;
import org.constellation.util.QNameComparator;
import org.constellation.util.Util;
import org.constellation.wfs.ws.DefaultWFSWorker;
import org.constellation.wfs.ws.WFSWorker;
import org.constellation.wfs.ws.rs.FeatureCollectionWrapper;
import org.constellation.wfs.ws.rs.ValueCollectionWrapper;
import org.constellation.ws.CstlServiceException;
import org.constellation.ws.embedded.AbstractGrizzlyServer;
import org.geotoolkit.data.FeatureCollection;
import org.geotoolkit.feature.Feature;
import org.geotoolkit.feature.type.FeatureType;
import org.geotoolkit.util.NamesExt;
import org.geotoolkit.feature.xml.XmlFeatureWriter;
import org.geotoolkit.feature.xml.jaxp.JAXPStreamFeatureReader;
import org.geotoolkit.feature.xml.jaxp.JAXPStreamFeatureWriter;
import org.geotoolkit.feature.xml.jaxp.JAXPStreamValueCollectionWriter;
import org.geotoolkit.gml.xml.v321.DirectPositionType;
import org.geotoolkit.gml.xml.v321.EnvelopeType;
import org.geotoolkit.internal.sql.DefaultDataSource;
import org.geotoolkit.ogc.xml.v200.AndType;
import org.geotoolkit.ogc.xml.v200.BBOXType;
import org.geotoolkit.ogc.xml.v200.ComparisonOpsType;
import org.geotoolkit.ogc.xml.v200.FilterType;
import org.geotoolkit.ogc.xml.v200.LiteralType;
import org.geotoolkit.ogc.xml.v200.LogicOpsType;
import org.geotoolkit.ogc.xml.v200.PropertyIsEqualToType;
import org.geotoolkit.ogc.xml.v200.ResourceIdType;
import org.geotoolkit.ogc.xml.v200.SortByType;
import org.geotoolkit.ogc.xml.v200.SortOrderType;
import org.geotoolkit.ogc.xml.v200.SortPropertyType;
import org.geotoolkit.ogc.xml.v200.SpatialOpsType;
import static org.geotoolkit.ows.xml.OWSExceptionCode.INVALID_PARAMETER_VALUE;
import static org.geotoolkit.ows.xml.OWSExceptionCode.INVALID_VALUE;
import static org.geotoolkit.ows.xml.OWSExceptionCode.MISSING_PARAMETER_VALUE;
import static org.geotoolkit.ows.xml.OWSExceptionCode.VERSION_NEGOTIATION_FAILED;
import static org.geotoolkit.utility.parameter.ParametersExt.getOrCreateGroup;
import static org.geotoolkit.utility.parameter.ParametersExt.getOrCreateValue;
import org.geotoolkit.referencing.CRS;
import org.geotoolkit.util.FileUtilities;
import org.geotoolkit.util.sql.DerbySqlScriptRunner;
import org.geotoolkit.wfs.xml.AllSomeType;
import org.geotoolkit.wfs.xml.CreateStoredQueryResponse;
import org.geotoolkit.wfs.xml.DescribeStoredQueriesResponse;
import org.geotoolkit.wfs.xml.DropStoredQueryResponse;
import org.geotoolkit.wfs.xml.ListStoredQueriesResponse;
import org.geotoolkit.wfs.xml.ResultTypeType;
import org.geotoolkit.wfs.xml.StoredQueries;
import org.geotoolkit.wfs.xml.StoredQueryDescription;
import org.geotoolkit.wfs.xml.TransactionResponse;
import org.geotoolkit.wfs.xml.ValueCollection;
import org.geotoolkit.wfs.xml.WFSCapabilities;
import org.geotoolkit.wfs.xml.WFSMarshallerPool;
import org.geotoolkit.wfs.xml.v200.ActionResultsType;
import org.geotoolkit.wfs.xml.v200.CreateStoredQueryResponseType;
import org.geotoolkit.wfs.xml.v200.CreateStoredQueryType;
import org.geotoolkit.wfs.xml.v200.CreatedOrModifiedFeatureType;
import org.geotoolkit.wfs.xml.v200.DeleteType;
import org.geotoolkit.wfs.xml.v200.DescribeFeatureTypeType;
import org.geotoolkit.wfs.xml.v200.DescribeStoredQueriesResponseType;
import org.geotoolkit.wfs.xml.v200.DescribeStoredQueriesType;
import org.geotoolkit.wfs.xml.v200.DropStoredQueryResponseType;
import org.geotoolkit.wfs.xml.v200.DropStoredQueryType;
import org.geotoolkit.wfs.xml.v200.FeatureCollectionType;
import org.geotoolkit.wfs.xml.v200.GetFeatureType;
import org.geotoolkit.wfs.xml.v200.GetPropertyValueType;
import org.geotoolkit.wfs.xml.v200.InsertType;
import org.geotoolkit.wfs.xml.v200.ListStoredQueriesResponseType;
import org.geotoolkit.wfs.xml.v200.ListStoredQueriesType;
import org.geotoolkit.wfs.xml.v200.ObjectFactory;
import org.geotoolkit.wfs.xml.v200.ParameterExpressionType;
import org.geotoolkit.wfs.xml.v200.ParameterType;
import org.geotoolkit.wfs.xml.v200.PropertyName;
import org.geotoolkit.wfs.xml.v200.PropertyType;
import org.geotoolkit.wfs.xml.v200.QueryExpressionTextType;
import org.geotoolkit.wfs.xml.v200.QueryType;
import org.geotoolkit.wfs.xml.v200.ReplaceType;
import org.geotoolkit.wfs.xml.v200.StoredQueryDescriptionType;
import org.geotoolkit.wfs.xml.v200.StoredQueryListItemType;
import org.geotoolkit.wfs.xml.v200.StoredQueryType;
import org.geotoolkit.wfs.xml.v200.Title;
import org.geotoolkit.wfs.xml.v200.TransactionResponseType;
import org.geotoolkit.wfs.xml.v200.TransactionSummaryType;
import org.geotoolkit.wfs.xml.v200.TransactionType;
import org.geotoolkit.wfs.xml.v200.UpdateActionType;
import org.geotoolkit.wfs.xml.v200.UpdateType;
import org.geotoolkit.wfs.xml.v200.ValueReference;
import org.geotoolkit.xsd.xml.v2001.ComplexType;
import org.geotoolkit.xsd.xml.v2001.Schema;
import org.geotoolkit.xsd.xml.v2001.TopLevelComplexType;
import org.geotoolkit.xsd.xml.v2001.TopLevelElement;
import org.geotoolkit.xsd.xml.v2001.XSDMarshallerPool;
import org.junit.After;
import org.junit.AfterClass;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.opengis.parameter.ParameterValueGroup;
import org.opengis.util.GenericName;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration;
/**
*
* @author Guilhem Legal (Geomatys)
*/
@RunWith(SpringTestRunner.class)
@ContextConfiguration("classpath:/cstl/spring/test-context.xml")
@ActiveProfiles({"standard"})
public class WFS2WorkerTest implements ApplicationContextAware {
private static final Logger LOGGER = Logging.getLogger("org.constellation.wfs");
protected ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
private static MarshallerPool pool;
private static WFSWorker worker ;
@Inject
private IServiceBusiness serviceBusiness;
@Inject
protected ILayerBusiness layerBusiness;
@Inject
protected IProviderBusiness providerBusiness;
@Inject
protected IDataBusiness dataBusiness;
private static final DefaultDataSource ds = null;
private static DefaultDataSource ds2 = null;
private XmlFeatureWriter featureWriter;
private XmlFeatureWriter valueWriter;
private static String EPSG_VERSION;
private static final ObjectFactory wfsFactory = new ObjectFactory();
private static final org.geotoolkit.ogc.xml.v200.ObjectFactory ogcFactory = new org.geotoolkit.ogc.xml.v200.ObjectFactory();
private static final List<QName> alltypes = new ArrayList<>();
private static boolean initialized = false;
private static boolean mdweb_active = true;
@BeforeClass
public static void initTestDir() {
ConfigDirectory.setupTestEnvironement("WFS2WorkerTest");
}
@PostConstruct
public void setUpClass() {
SpringHelper.setApplicationContext(applicationContext);
if (!initialized) {
try {
layerBusiness.removeAll();
serviceBusiness.deleteAll();
dataBusiness.deleteAll();
providerBusiness.removeAll();
final ProviderFactory featfactory = DataProviders.getInstance().getFactory("feature-store");
final File outputDir = AbstractGrizzlyServer.initDataDirectory();
final ParameterValueGroup sourcef = featfactory.getProviderDescriptor().createValue();
getOrCreateValue(sourcef, "id").setValue("shapeSrc");
getOrCreateValue(sourcef, "load_all").setValue(true);
final ParameterValueGroup choice2 = getOrCreateGroup(sourcef, "choice");
final ParameterValueGroup shpconfig = getOrCreateGroup(choice2, "ShapefileParametersFolder");
getOrCreateValue(shpconfig, "url").setValue(new URL("file:"+outputDir.getAbsolutePath() + "/org/constellation/ws/embedded/wms111/shapefiles"));
getOrCreateValue(shpconfig, "namespace").setValue("http://www.opengis.net/gml/3.2");
final ParameterValueGroup layer = getOrCreateGroup(sourcef, "Layer");
getOrCreateValue(layer, "name").setValue("NamedPlaces");
getOrCreateValue(layer, "style").setValue("cite_style_NamedPlaces");
providerBusiness.storeProvider("shapeSrc", null, ProviderType.LAYER, "feature-store", sourcef);
dataBusiness.create(new QName("http://www.opengis.net/gml/3.2", "BuildingCenters"), "shapeSrc", "VECTOR", false, true, null, null);
dataBusiness.create(new QName("http://www.opengis.net/gml/3.2", "BasicPolygons"), "shapeSrc", "VECTOR", false, true, null, null);
dataBusiness.create(new QName("http://www.opengis.net/gml/3.2", "Bridges"), "shapeSrc", "VECTOR", false, true, null, null);
dataBusiness.create(new QName("http://www.opengis.net/gml/3.2", "Streams"), "shapeSrc", "VECTOR", false, true, null, null);
dataBusiness.create(new QName("http://www.opengis.net/gml/3.2", "Lakes"), "shapeSrc", "VECTOR", false, true, null, null);
dataBusiness.create(new QName("http://www.opengis.net/gml/3.2", "NamedPlaces"), "shapeSrc", "VECTOR", false, true, null, null);
dataBusiness.create(new QName("http://www.opengis.net/gml/3.2", "Buildings"), "shapeSrc", "VECTOR", false, true, null, null);
dataBusiness.create(new QName("http://www.opengis.net/gml/3.2", "RoadSegments"), "shapeSrc", "VECTOR", false, true, null, null);
dataBusiness.create(new QName("http://www.opengis.net/gml/3.2", "DividedRoutes"), "shapeSrc", "VECTOR", false, true, null, null);
dataBusiness.create(new QName("http://www.opengis.net/gml/3.2", "Forests"), "shapeSrc", "VECTOR", false, true, null, null);
dataBusiness.create(new QName("http://www.opengis.net/gml/3.2", "MapNeatline"), "shapeSrc", "VECTOR", false, true, null, null);
dataBusiness.create(new QName("http://www.opengis.net/gml/3.2", "Ponds"), "shapeSrc", "VECTOR", false, true, null, null);
final String url = "jdbc:derby:memory:TestWFS2WorkerOM";
final DefaultDataSource ds = new DefaultDataSource(url + ";create=true");
Connection con = ds.getConnection();
DerbySqlScriptRunner sr = new DerbySqlScriptRunner(con);
String sql = FileUtilities.getStringFromStream(Util.getResourceAsStream("org/constellation/om2/structure_observations.sql"));
sql = sql.replace("$SCHEMA", "");
sr.run(sql);
sr.run(Util.getResourceAsStream("org/constellation/sql/sos-data-om2.sql"));
con.close();
ds.shutdown();
final ParameterValueGroup sourceOM = featfactory.getProviderDescriptor().createValue();
getOrCreateValue(sourceOM, "id").setValue("omSrc");
getOrCreateValue(sourceOM, "load_all").setValue(true);
final ParameterValueGroup choiceOM = getOrCreateGroup(sourceOM, "choice");
final ParameterValueGroup omconfig = getOrCreateGroup(choiceOM, " SOSDBParameters");
getOrCreateValue(omconfig, "sgbdtype").setValue("derby");
getOrCreateValue(omconfig, "derbyurl").setValue(url);
providerBusiness.storeProvider("omSrc", null, ProviderType.LAYER, "feature-store", sourceOM);
dataBusiness.create(new QName("http://www.opengis.net/sampling/1.0", "SamplingPoint"), "omSrc", "VECTOR", false, true, null, null);
// MDWEB store
mdweb_active = Util.getResourceAsStream("org/mdweb/sql/v24/metadata/model/mdw_schema_2.4_derby.sql") != null;
if (mdweb_active) {
final String url2 = "jdbc:derby:memory:TestWFS2WorkerSMl";
ds2 = new DefaultDataSource(url2 + ";create=true");
Connection con2 = ds2.getConnection();
DerbySqlScriptRunner sr2 = new DerbySqlScriptRunner(con2);
sr2.run(Util.getResourceAsStream("org/mdweb/sql/v24/metadata/model/mdw_schema_2.4_derby.sql"));
sr2.run(Util.getResourceAsStream("org/mdweb/sql/v24/metadata/schemas/ISO19115.sql"));
sr2.run(Util.getResourceAsStream("org/mdweb/sql/v24/metadata/schemas/ISO19119.sql"));
sr2.run(Util.getResourceAsStream("org/mdweb/sql/v24/metadata/schemas/ISO19108.sql"));
sr2.run(Util.getResourceAsStream("org/mdweb/sql/v24/metadata/data/defaultRecordSets.sql"));
sr2.run(Util.getResourceAsStream("org/mdweb/sql/v24/metadata/users/creation_user.sql"));
sr2.run(Util.getResourceAsStream("org/mdweb/sql/v24/metadata/schemas/SensorML.sql"));
sr2.run(Util.getResourceAsStream("org/constellation/sql/sml-data.sql"));
con.close();
final ParameterValueGroup sourceSML = featfactory.getProviderDescriptor().createValue();
getOrCreateValue(sourceSML, "id").setValue("smlSrc");
getOrCreateValue(sourceSML, "load_all").setValue(true);
final ParameterValueGroup choiceSML = getOrCreateGroup(sourceSML, "choice");
final ParameterValueGroup smlconfig = getOrCreateGroup(choiceSML, "SMLParameters");
getOrCreateValue(smlconfig, "sgbdtype").setValue("derby");
getOrCreateValue(smlconfig, "derbyurl").setValue(url2);
providerBusiness.storeProvider("smlSrc", null, ProviderType.LAYER, "feature-store", sourceSML);
dataBusiness.create(new QName("http://www.opengis.net/sml/1.0", "System"), "smlSrc", "VECTOR", false, true, null, null);
dataBusiness.create(new QName("http://www.opengis.net/sml/1.0", "Component"), "smlSrc", "VECTOR", false, true, null, null);
dataBusiness.create(new QName("http://www.opengis.net/sml/1.0", "DataSourceType"), "smlSrc", "VECTOR", false, true, null, null);
dataBusiness.create(new QName("http://www.opengis.net/sml/1.0", "ProcessModel"), "smlSrc", "VECTOR", false, true, null, null);
dataBusiness.create(new QName("http://www.opengis.net/sml/1.0", "ProcessChain"), "smlSrc", "VECTOR", false, true, null, null);
}
initAllTypes();
DataProviders.getInstance().reload();
final LayerContext config2 = new LayerContext();
config2.getCustomParameters().put("shiroAccessible", "false");
config2.getCustomParameters().put("transactionSecurized", "false");
config2.getCustomParameters().put("transactionnal", "true");
serviceBusiness.create("wfs", "test1", config2, null);
layerBusiness.add("SamplingPoint", "http://www.opengis.net/sampling/1.0", "omSrc", null, "test1", "wfs", null);
layerBusiness.add("BuildingCenters", "http://www.opengis.net/gml/3.2", "shapeSrc", null, "test1", "wfs", null);
layerBusiness.add("BasicPolygons", "http://www.opengis.net/gml/3.2", "shapeSrc", null, "test1", "wfs", null);
layerBusiness.add("Bridges", "http://www.opengis.net/gml/3.2", "shapeSrc", null, "test1", "wfs", null);
layerBusiness.add("Streams", "http://www.opengis.net/gml/3.2", "shapeSrc", null, "test1", "wfs", null);
layerBusiness.add("Lakes", "http://www.opengis.net/gml/3.2", "shapeSrc", null, "test1", "wfs", null);
layerBusiness.add("NamedPlaces", "http://www.opengis.net/gml/3.2", "shapeSrc", null, "test1", "wfs", null);
layerBusiness.add("Buildings", "http://www.opengis.net/gml/3.2", "shapeSrc", null, "test1", "wfs", null);
layerBusiness.add("RoadSegments", "http://www.opengis.net/gml/3.2", "shapeSrc", null, "test1", "wfs", null);
layerBusiness.add("DividedRoutes", "http://www.opengis.net/gml/3.2", "shapeSrc", null, "test1", "wfs", null);
layerBusiness.add("Forests", "http://www.opengis.net/gml/3.2", "shapeSrc", null, "test1", "wfs", null);
layerBusiness.add("MapNeatline", "http://www.opengis.net/gml/3.2", "shapeSrc", null, "test1", "wfs", null);
layerBusiness.add("Ponds", "http://www.opengis.net/gml/3.2", "shapeSrc", null, "test1", "wfs", null);
if (mdweb_active) {
layerBusiness.add("System", "http://www.opengis.net/sml/1.0", "smlSrc", null, "test1", "wfs", null);
layerBusiness.add("Component", "http://www.opengis.net/sml/1.0", "smlSrc", null, "test1", "wfs", null);
layerBusiness.add("DataSourceType", "http://www.opengis.net/sml/1.0", "smlSrc", null, "test1", "wfs", null);
layerBusiness.add("ProcessModel", "http://www.opengis.net/sml/1.0", "smlSrc", null, "test1", "wfs", null);
layerBusiness.add("ProcessChain", "http://www.opengis.net/sml/1.0", "smlSrc", null, "test1", "wfs", null);
}
pool = WFSMarshallerPool.getInstance();
final List<StoredQueryDescription> descriptions = new ArrayList<>();
final ParameterExpressionType param = new ParameterExpressionType("name", "name Parameter", "A parameter on the name of the feature", new QName("http://www.w3.org/2001/XMLSchema", "string", "xs"));
final List<QName> types = Arrays.asList(new QName("http://www.opengis.net/sampling/1.0", "SamplingPoint"));
final PropertyIsEqualToType pis = new PropertyIsEqualToType(new LiteralType("${name}"), "name", true);
final FilterType filter = new FilterType(pis);
final QueryType query = new QueryType(filter, types, "2.0.0");
final QueryExpressionTextType queryEx = new QueryExpressionTextType("urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression", null, types);
final ObjectFactory factory = new ObjectFactory();
queryEx.getContent().add(factory.createQuery(query));
final StoredQueryDescriptionType des1 = new StoredQueryDescriptionType("nameQuery", "Name query" , "filter on name for samplingPoint", param, queryEx);
descriptions.add(des1);
final StoredQueries queries = new StoredQueries(descriptions);
serviceBusiness.setExtraConfiguration("wfs", "test1", "StoredQueries.xml", queries, pool);
EPSG_VERSION = CRS.getVersion("EPSG").toString();
worker = new DefaultWFSWorker("test1");
worker.setLogLevel(Level.FINER);
worker.setServiceUrl("http://geomatys.com/constellation/WS/");
worker.setShiroAccessible(false);
initialized = true;
} catch (Exception ex) {
Logger.getAnonymousLogger().log(Level.SEVERE, "error while initializing test", ex);
}
}
}
public static void initAllTypes() {
alltypes.add(new QName("http://www.opengis.net/gml/3.2","BuildingCenters"));
alltypes.add(new QName("http://www.opengis.net/gml/3.2","BasicPolygons"));
if (mdweb_active) alltypes.add(new QName("http://www.opengis.net/sml/1.0","System"));
alltypes.add(new QName("http://www.opengis.net/gml/3.2","Bridges"));
alltypes.add(new QName("http://www.opengis.net/gml/3.2","Streams"));
if (mdweb_active) alltypes.add(new QName("http://www.opengis.net/sml/1.0","Component"));
if (mdweb_active) alltypes.add(new QName("http://www.opengis.net/sml/1.0","DataSourceType"));
alltypes.add(new QName("http://www.opengis.net/sampling/1.0","SamplingPoint"));
alltypes.add(new QName("http://www.opengis.net/gml/3.2","Lakes"));
alltypes.add(new QName("http://www.opengis.net/gml/3.2","NamedPlaces"));
alltypes.add(new QName("http://www.opengis.net/gml/3.2","Buildings"));
alltypes.add(new QName("http://www.opengis.net/gml/3.2","RoadSegments"));
alltypes.add(new QName("http://www.opengis.net/gml/3.2","DividedRoutes"));
alltypes.add(new QName("http://www.opengis.net/gml/3.2","Forests"));
alltypes.add(new QName("http://www.opengis.net/gml/3.2","MapNeatline"));
if (mdweb_active) alltypes.add(new QName("http://www.opengis.net/sml/1.0","ProcessModel"));
if (mdweb_active) alltypes.add(new QName("http://www.opengis.net/sml/1.0","ProcessChain"));
alltypes.add(new QName("http://www.opengis.net/gml/3.2","Ponds"));
Collections.sort(alltypes, new QNameComparator());
}
@AfterClass
public static void tearDownClass() throws Exception {
try {
final ILayerBusiness layerBean = SpringHelper.getBean(ILayerBusiness.class);
if (layerBean != null) {
layerBean.removeAll();
}
final IServiceBusiness service = SpringHelper.getBean(IServiceBusiness.class);
if (service != null) {
service.deleteAll();
}
final IDataBusiness dataBean = SpringHelper.getBean(IDataBusiness.class);
if (dataBean != null) {
dataBean.deleteAll();
}
final IProviderBusiness provider = SpringHelper.getBean(IProviderBusiness.class);
if (provider != null) {
provider.removeAll();
}
} catch (ConfigurationException ex) {
Logger.getAnonymousLogger().log(Level.WARNING, ex.getMessage());
}
ConfigDirectory.shutdownTestEnvironement("WFS2WorkerTest");
if (ds != null) {
ds.shutdown();
}
if (ds2 != null) {
ds2.shutdown();
}
if (worker != null) {
worker.destroy();
}
File derbyLog = new File("derby.log");
if (derbyLog.exists()) {
derbyLog.delete();
}
}
@Before
public void setUp() throws Exception {
featureWriter = new JAXPStreamFeatureWriter("3.2.1", "2.0.0", new HashMap<String, String>());
}
@After
public void tearDown() throws Exception {
}
/**
* test the feature marshall
*
*/
@Test
@Order(order=1)
public void getCapabilitiesTest() throws Exception {
final Marshaller marshaller = pool.acquireMarshaller();
org.geotoolkit.ows.xml.v110.AcceptVersionsType acceptVersion = new org.geotoolkit.ows.xml.v110.AcceptVersionsType("2.0.0");
org.geotoolkit.ows.xml.v110.SectionsType sections = new org.geotoolkit.ows.xml.v110.SectionsType("featureTypeList");
org.geotoolkit.wfs.xml.v200.GetCapabilitiesType request = new org.geotoolkit.wfs.xml.v200.GetCapabilitiesType(acceptVersion, sections, null, null, "WFS");
WFSCapabilities result = worker.getCapabilities(request);
StringWriter sw = new StringWriter();
marshaller.marshal(result, sw);
if (mdweb_active) {
domCompare(FileUtilities.getFileFromResource("org.constellation.wfs.xml.WFSCapabilities2-0-0-ftl-mdw.xml"),
sw.toString());
} else {
domCompare(FileUtilities.getFileFromResource("org.constellation.wfs.xml.WFSCapabilities2-0-0-ftl.xml"),
sw.toString());
}
request = new org.geotoolkit.wfs.xml.v200.GetCapabilitiesType();
request.setAcceptVersions(new org.geotoolkit.ows.xml.v110.AcceptVersionsType("2.0.0"));
result = worker.getCapabilities(request);
sw = new StringWriter();
marshaller.marshal(result, sw);
if (mdweb_active) {
domCompare(FileUtilities.getFileFromResource("org.constellation.wfs.xml.WFSCapabilities2-0-0-mdw.xml"),
sw.toString());
} else {
domCompare(FileUtilities.getFileFromResource("org.constellation.wfs.xml.WFSCapabilities2-0-0.xml"),
sw.toString());
}
acceptVersion = new org.geotoolkit.ows.xml.v110.AcceptVersionsType("2.3.0");
request = new org.geotoolkit.wfs.xml.v200.GetCapabilitiesType(acceptVersion, null, null, null, "WFS");
try {
worker.getCapabilities(request);
fail("Should have raised an error.");
} catch (CstlServiceException ex) {
assertEquals(ex.getExceptionCode(), VERSION_NEGOTIATION_FAILED);
assertEquals(ex.getLocator(), "version");
}
request = new org.geotoolkit.wfs.xml.v200.GetCapabilitiesType(acceptVersion, null, null, null, "WPS");
try {
worker.getCapabilities(request);
fail("Should have raised an error.");
} catch (CstlServiceException ex) {
assertEquals(ex.getExceptionCode(), INVALID_PARAMETER_VALUE);
assertEquals(ex.getLocator(), "service");
}
request = new org.geotoolkit.wfs.xml.v200.GetCapabilitiesType();
request.setService(null);
try {
worker.getCapabilities(request);
fail("Should have raised an error.");
} catch (CstlServiceException ex) {
assertEquals(ex.getExceptionCode(), MISSING_PARAMETER_VALUE);
assertEquals(ex.getLocator(), "service");
}
acceptVersion = new org.geotoolkit.ows.xml.v110.AcceptVersionsType("2.0.0");
sections = new org.geotoolkit.ows.xml.v110.SectionsType("operationsMetadata");
request = new org.geotoolkit.wfs.xml.v200.GetCapabilitiesType(acceptVersion, sections, null, null, "WFS");
result = worker.getCapabilities(request);
sw = new StringWriter();
marshaller.marshal(result, sw);
domCompare(FileUtilities.getFileFromResource("org.constellation.wfs.xml.WFSCapabilities2-0-0-om.xml"),
sw.toString());
acceptVersion = new org.geotoolkit.ows.xml.v110.AcceptVersionsType("2.0.0");
sections = new org.geotoolkit.ows.xml.v110.SectionsType("serviceIdentification");
request = new org.geotoolkit.wfs.xml.v200.GetCapabilitiesType(acceptVersion, sections, null, null, "WFS");
result = worker.getCapabilities(request);
sw = new StringWriter();
marshaller.marshal(result, sw);
domCompare(FileUtilities.getFileFromResource("org.constellation.wfs.xml.WFSCapabilities2-0-0-si.xml"),
sw.toString());
acceptVersion = new org.geotoolkit.ows.xml.v110.AcceptVersionsType("2.0.0");
sections = new org.geotoolkit.ows.xml.v110.SectionsType("serviceProvider");
request = new org.geotoolkit.wfs.xml.v200.GetCapabilitiesType(acceptVersion, sections, null, null, "WFS");
result = worker.getCapabilities(request);
sw = new StringWriter();
marshaller.marshal(result, sw);
domCompare(FileUtilities.getFileFromResource("org.constellation.wfs.xml.WFSCapabilities2-0-0-sp.xml"),
sw.toString());
acceptVersion = new org.geotoolkit.ows.xml.v110.AcceptVersionsType("10.0.0","2.0.0","1.1.0");
request = new org.geotoolkit.wfs.xml.v200.GetCapabilitiesType(acceptVersion, null, null, null, "WFS");
result = worker.getCapabilities(request);
sw = new StringWriter();
marshaller.marshal(result, sw);
domCompare(FileUtilities.getFileFromResource("org.constellation.wfs.xml.WFSCapabilities2-0-0.xml"),
sw.toString());
pool.recycle(marshaller);
}
/**
* test the Getfeature operations with bad parameter causing exception return
*
*/
@Test
@Order(order=2)
public void getFeatureErrorTest() throws Exception {
/**
* Test 1 : empty query => error
*/
Integer startIndex = null;
GetFeatureType request = new GetFeatureType("WFS", "2.0.0", null, startIndex, Integer.MAX_VALUE, null, ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
Object result = null;
try {
result = worker.getFeature(request);
fail("Should have raised an error.");
} catch (CstlServiceException ex) {
//ok
}
/**
* Test 2 : bad version => error
*/
request = new GetFeatureType("WFS", "1.2.0", null, startIndex, Integer.MAX_VALUE, null, ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
try {
result = worker.getFeature(request);
fail("Should have raised an error.");
} catch (CstlServiceException ex) {
assertEquals(ex.getExceptionCode(), INVALID_PARAMETER_VALUE);
assertEquals(ex.getLocator(), "version");
}
}
/**
* test the feature marshall
*
*/
@Test
@Order(order=3)
public void getFeatureOMTest() throws Exception {
/**
* Test 1 : query on typeName samplingPoint
*/
List<QueryType> queries = new ArrayList<>();
queries.add(new QueryType(null, Arrays.asList(new QName("http://www.opengis.net/sampling/1.0", "SamplingPoint")), null));
GetFeatureType request = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
Object result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
FeatureCollectionWrapper wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
StringWriter writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer, 6);
String expectedResult = FileUtilities.getStringFromFile(FileUtilities.getFileFromResource("org.constellation.wfs.xml.samplingPointCollection-3v2.xml"));
expectedResult = expectedResult.replace("EPSG_VERSION", EPSG_VERSION);
String sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(expectedResult, sresult);
/**
* Test 2 : query on typeName samplingPoint whith HITS result type
*/
queries = new ArrayList<>();
QueryType query = new QueryType(null, Arrays.asList(new QName("http://www.opengis.net/sampling/1.0", "SamplingPoint")), null);
queries.add(query);
request = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.HITS, "text/xml; subtype=gml/3.2.1");
FeatureCollectionType resultHits = (FeatureCollectionType) worker.getFeature(request);
assertTrue("results:" + resultHits, resultHits.getNumberReturned() == 6);
/**
* Test 3 : query on typeName samplingPoint with propertyName = {gml:name}
*/
queries = new ArrayList<>();
query = new QueryType(null, Arrays.asList(new QName("http://www.opengis.net/sampling/1.0", "SamplingPoint")), null);
query.getAbstractProjectionClause().add(wfsFactory.createPropertyName(new PropertyName(new QName("http://www.opengis.net/gml/3.2", "name"))));
queries.add(query);
request = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer);
expectedResult = FileUtilities.getStringFromFile(FileUtilities.getFileFromResource("org.constellation.wfs.xml.samplingPointCollection-5v2.xml"));
expectedResult = expectedResult.replace("EPSG_VERSION", EPSG_VERSION);
sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(expectedResult, sresult);
/**
* Test 4 : query on typeName samplingPoint whith a filter name = 10972X0137-PONT
*/
queries = new ArrayList<>();
ComparisonOpsType pe = new PropertyIsEqualToType(new LiteralType("10972X0137-PONT"), "name", Boolean.TRUE);
FilterType filter = new FilterType(pe);
queries.add(new QueryType(filter, Arrays.asList(new QName("http://www.opengis.net/sampling/1.0", "SamplingPoint")), null));
request = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer);
expectedResult = FileUtilities.getStringFromFile(FileUtilities.getFileFromResource("org.constellation.wfs.xml.samplingPointCollection-4v2.xml"));
expectedResult = expectedResult.replace("EPSG_VERSION", EPSG_VERSION);
sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(expectedResult, sresult);
/**
* Test 5 : query on typeName samplingPoint whith a filter xpath //gml:name = 10972X0137-PONT
*/
queries = new ArrayList<>();
pe = new PropertyIsEqualToType(new LiteralType("10972X0137-PONT"), "//{http://www.opengis.net/gml}name", Boolean.TRUE);
filter = new FilterType(pe);
queries.add(new QueryType(filter, Arrays.asList(new QName("http://www.opengis.net/sampling/1.0", "SamplingPoint")), null));
request = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer);
expectedResult = FileUtilities.getStringFromFile(FileUtilities.getFileFromResource("org.constellation.wfs.xml.samplingPointCollection-4v2.xml"));
expectedResult = expectedResult.replace("EPSG_VERSION", EPSG_VERSION);
sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(expectedResult, sresult);
/**
* Test 6 : query on typeName samplingPoint whith a spatial filter BBOX
*/
queries = new ArrayList<>();
SpatialOpsType bbox = new BBOXType("{http://www.opengis.net/sampling/1.0}position", 65300.0, 1731360.0, 65500.0, 1731400.0, "urn:ogc:def:crs:epsg:7.6:27582");
filter = new FilterType(bbox);
queries.add(new QueryType(filter, Arrays.asList(new QName("http://www.opengis.net/sampling/1.0", "SamplingPoint")), null));
request = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer);
expectedResult = FileUtilities.getStringFromFile(FileUtilities.getFileFromResource("org.constellation.wfs.xml.samplingPointCollection-8v2.xml"));
expectedResult = expectedResult.replace("EPSG_VERSION", EPSG_VERSION);
sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(expectedResult, sresult);
/**
* Test 7 : query on typeName samplingPoint whith a spatial filter BBOX () with no namespace
*/
queries = new ArrayList<>();
bbox = new BBOXType("position", 65300.0, 1731360.0, 65500.0, 1731400.0, "urn:ogc:def:crs:epsg:7.6:27582");
filter = new FilterType(bbox);
queries.add(new QueryType(filter, Arrays.asList(new QName("http://www.opengis.net/sampling/1.0", "SamplingPoint")), null));
request = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer);
expectedResult = FileUtilities.getStringFromFile(FileUtilities.getFileFromResource("org.constellation.wfs.xml.samplingPointCollection-8v2.xml"));
expectedResult = expectedResult.replace("EPSG_VERSION", EPSG_VERSION);
sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(expectedResult, sresult);
/**
* Test 8 : query on typeName samplingPoint with sort on gml:name
*/
queries = new ArrayList<>();
query = new QueryType(null, Arrays.asList(new QName("http://www.opengis.net/sampling/1.0", "SamplingPoint")), null);
query.setAbstractSortingClause(ogcFactory.createSortBy(new SortByType(Arrays.asList(new SortPropertyType("http://www.opengis.net/gml:name", SortOrderType.ASC)))));
queries.add(query);
request = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer);
expectedResult = FileUtilities.getStringFromFile(FileUtilities.getFileFromResource("org.constellation.wfs.xml.samplingPointCollection-6v2.xml"));
expectedResult = expectedResult.replace("EPSG_VERSION", EPSG_VERSION);
sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(expectedResult, sresult);
/**
* Test 9 : query on typeName samplingPoint with sort on gml:name
*/
queries = new ArrayList<>();
query = new QueryType(null, Arrays.asList(new QName("http://www.opengis.net/sampling/1.0", "SamplingPoint")), null);
query.setAbstractSortingClause(ogcFactory.createSortBy(new SortByType(Arrays.asList(new SortPropertyType("http://www.opengis.net/gml:name", SortOrderType.DESC)))));
queries.add(query);
request = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer);
expectedResult = FileUtilities.getStringFromFile(FileUtilities.getFileFromResource("org.constellation.wfs.xml.samplingPointCollection-7v2.xml"));
expectedResult = expectedResult.replace("EPSG_VERSION", EPSG_VERSION);
sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(expectedResult, sresult);
/**
* Test 10 : query on typeName samplingPoint with sort on gml:name and startIndex and maxFeature
*/
queries = new ArrayList<>();
query = new QueryType(null, Arrays.asList(new QName("http://www.opengis.net/sampling/1.0", "SamplingPoint")), null);
query.setAbstractSortingClause(ogcFactory.createSortBy(new SortByType(Arrays.asList(new SortPropertyType("http://www.opengis.net/gml:name", SortOrderType.DESC)))));
queries.add(query);
request = new GetFeatureType("WFS", "2.0.0", null, null, 2, queries, ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
request.setStartIndex(2);
result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer);
expectedResult = FileUtilities.getStringFromFile(FileUtilities.getFileFromResource("org.constellation.wfs.xml.samplingPointCollection-9v2.xml"));
expectedResult = expectedResult.replace("EPSG_VERSION", EPSG_VERSION);
sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(expectedResult, sresult);
/**
* Test 11 : query on typeName samplingPoint whith HITS result type
*/
queries = new ArrayList<>();
query = new QueryType(null, Arrays.asList(new QName("http://www.opengis.net/sampling/1.0", "SamplingPoint")), null);
queries.add(query);
request = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.HITS, "text/xml; subtype=gml/3.2.1");
resultHits = (FeatureCollectionType) worker.getFeature(request);
assertTrue(resultHits.getNumberReturned() == 6);
/**
* Test 12 : query on typeName samplingPoint whith a filter with unexpected property
*/
queries = new ArrayList<>();
pe = new PropertyIsEqualToType(new LiteralType("whatever"), "wrongProperty", Boolean.TRUE);
filter = new FilterType(pe);
queries.add(new QueryType(filter, Arrays.asList(new QName("http://www.opengis.net/sampling/1.0", "SamplingPoint")), null));
request = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
try {
worker.getFeature(request);
fail("Should have raised an error.");
} catch (CstlServiceException ex) {
//ok
}
/**
* Test 13 : query on typeName samplingPoint whith a an unexpected property in propertyNames
*/
queries = new ArrayList<>();
query = new QueryType(filter, Arrays.asList(new QName("http://www.opengis.net/sampling/1.0", "SamplingPoint")), null);
query.getAbstractProjectionClause().add(wfsFactory.createPropertyName(new PropertyName(new QName("wrongProperty"))));
queries.add(query);
request = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
try {
worker.getFeature(request);
fail("Should have raised an error.");
} catch (CstlServiceException ex) {
assertEquals(ex.getExceptionCode(), INVALID_PARAMETER_VALUE);
}
}
/**
* test the feature marshall
*
*/
@Test
@Order(order=4)
public void getPropertyValueOMTest() throws Exception {
/**
* Test 1 : query on typeName samplingPoint with HITS
*/
QueryType query = new QueryType(null, Arrays.asList(new QName("http://www.opengis.net/sampling/1.0", "SamplingPoint")), null);
String valueReference = "sampledFeature";
GetPropertyValueType request = new GetPropertyValueType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, query, ResultTypeType.HITS, "text/xml; subtype=gml/3.2.1", valueReference);
Object result = worker.getPropertyValue(request);
assertTrue(result instanceof ValueCollection);
assertEquals(6, ((ValueCollection)result).getNumberReturned());
/**
* Test 2 : query on typeName samplingPoint with RESULTS
*/
request.setResultType(ResultTypeType.RESULTS);
result = worker.getPropertyValue(request);
assertTrue(result instanceof ValueCollectionWrapper);
ValueCollectionWrapper wrapper = (ValueCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
valueWriter = new JAXPStreamValueCollectionWriter(valueReference);
StringWriter writer = new StringWriter();
valueWriter.write((FeatureCollection)result,writer);
String expectedResult = FileUtilities.getStringFromFile(FileUtilities.getFileFromResource("org.constellation.wfs.xml.ValueCollectionOM1.xml"));
domCompare(expectedResult, writer.toString());
/**
* Test 3 : query on typeName samplingPoint with RESULTS
*/
valueReference = "position";
request.setValueReference(valueReference);
result = worker.getPropertyValue(request);
assertTrue(result instanceof ValueCollectionWrapper);
wrapper = (ValueCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
valueWriter = new JAXPStreamValueCollectionWriter(valueReference);
writer = new StringWriter();
valueWriter.write((FeatureCollection)result,writer);
expectedResult = FileUtilities.getStringFromFile(FileUtilities.getFileFromResource("org.constellation.wfs.xml.ValueCollectionOM2.xml"));
expectedResult = expectedResult.replace("EPSG_VERSION", EPSG_VERSION);
domCompare(expectedResult, writer.toString());
/**
* Test 4 : empty value reference
*/
valueReference = "";
request.setValueReference(valueReference);
boolean exLaunched = false;
try {
worker.getPropertyValue(request);
} catch (CstlServiceException ex) {
exLaunched = true;
}
assertTrue(exLaunched);
}
/**
* test the feature marshall
*
*/
@Test
@Order(order=5)
public void getPropertyValueSMLTest() throws Exception {
if (!mdweb_active) return;
/**
* Test 1 : query on typeName System with HITS
*/
QueryType query = new QueryType(null, Arrays.asList(new QName("http://www.opengis.net/sml/1.0", "System")), null);
String valueReference = "inputs";
GetPropertyValueType request = new GetPropertyValueType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, query, ResultTypeType.HITS, "text/xml; subtype=gml/3.2.1", valueReference);
Object result = worker.getPropertyValue(request);
assertTrue(result instanceof ValueCollection);
assertEquals(3, ((ValueCollection)result).getNumberReturned());
/**
* Test 2 : query on typeName System with RESULTS
*/
request.setResultType(ResultTypeType.RESULTS);
result = worker.getPropertyValue(request);
assertTrue(result instanceof ValueCollectionWrapper);
ValueCollectionWrapper wrapper = (ValueCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
valueWriter = new JAXPStreamValueCollectionWriter(valueReference);
StringWriter writer = new StringWriter();
valueWriter.write((FeatureCollection)result,writer);
String expectedResult = FileUtilities.getStringFromFile(FileUtilities.getFileFromResource("org.constellation.wfs.xml.ValueCollectionSML1.xml"));
domCompare(expectedResult, writer.toString());
/**
* Test 3 : query on typeName System with RESULTS
*/
valueReference = "keywords";
request.setValueReference(valueReference);
result = worker.getPropertyValue(request);
assertTrue(result instanceof ValueCollectionWrapper);
wrapper = (ValueCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
valueWriter = new JAXPStreamValueCollectionWriter(valueReference);
writer = new StringWriter();
valueWriter.write((FeatureCollection)result,writer);
expectedResult = FileUtilities.getStringFromFile(FileUtilities.getFileFromResource("org.constellation.wfs.xml.ValueCollectionSML2.xml"));
expectedResult = expectedResult.replace("EPSG_VERSION", EPSG_VERSION);
domCompare(expectedResult, writer.toString());
}
/**
* test the feature marshall
*
*/
@Test
@Order(order=6)
public void getFeatureSMLTest() throws Exception {
if (!mdweb_active) return;
/**
* Test 1 : query on typeName sml:System
*/
List<QueryType> queries = new ArrayList<>();
queries.add(new QueryType(null, Arrays.asList(new QName("http://www.opengis.net/sml/1.0", "System")), null));
GetFeatureType request = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
Object result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
FeatureCollectionWrapper wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
StringWriter writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer);
String expectedResult = FileUtilities.getStringFromFile(FileUtilities.getFileFromResource("org.constellation.wfs.xml.systemCollection-3v2.xml"));
expectedResult = expectedResult.replace("EPSG_VERSION", EPSG_VERSION);
String sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(expectedResult, sresult);
/**
* Test 2 : query on typeName sml:System avec srsName = EPSG:4326
*/
queries = new ArrayList<>();
QueryType query = new QueryType(null, Arrays.asList(new QName("http://www.opengis.net/sml/1.0", "System")), null);
query.setSrsName("EPSG:4326");
queries.add(query);
request = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer);
expectedResult = FileUtilities.getStringFromFile(FileUtilities.getFileFromResource("org.constellation.wfs.xml.systemCollection-3v2.xml"));
expectedResult = expectedResult.replace("EPSG_VERSION", EPSG_VERSION);
sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(expectedResult, sresult);
/**
* Test 3 : query on typeName sml:System with propertyName = {sml:keywords, sml:phenomenons}
*/
queries = new ArrayList<>();
query = new QueryType(null, Arrays.asList(new QName("http://www.opengis.net/sml/1.0", "System")), null);
query.getAbstractProjectionClause().add(wfsFactory.createPropertyName(new PropertyName(new QName("http://www.opengis.net/sml/1.0", "keywords"))));
query.getAbstractProjectionClause().add(wfsFactory.createPropertyName(new PropertyName(new QName("http://www.opengis.net/sml/1.0", "phenomenons"))));
queries.add(query);
request = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.RESULTS, null);
result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer);
expectedResult = FileUtilities.getStringFromFile(FileUtilities.getFileFromResource("org.constellation.wfs.xml.systemCollection-2v2.xml"));
expectedResult = expectedResult.replace("EPSG_VERSION", EPSG_VERSION);
sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(expectedResult, sresult);
/**
* Test 4 : query on typeName sml:System filter on name = 'Piezometer Test'
*/
ComparisonOpsType pe1 = new PropertyIsEqualToType(new LiteralType("Piezometer Test"), "name", Boolean.TRUE);
FilterType filter = new FilterType(pe1);
queries = new ArrayList<>();
query = new QueryType(filter, Arrays.asList(new QName("http://www.opengis.net/sml/1.0", "System")), null);
queries.add(query);
request = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.RESULTS, null);
result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer);
expectedResult = FileUtilities.getStringFromFile(FileUtilities.getFileFromResource("org.constellation.wfs.xml.systemCollection-4v2.xml"));
expectedResult = expectedResult.replace("EPSG_VERSION", EPSG_VERSION);
sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(expectedResult, sresult);
/**
* Test 5 : same test xpath style
*/
pe1 = new PropertyIsEqualToType(new LiteralType("Piezometer Test"), "/name", Boolean.TRUE);
filter = new FilterType(pe1);
queries = new ArrayList<>();
query = new QueryType(filter, Arrays.asList(new QName("http://www.opengis.net/sml/1.0", "System")), null);
queries.add(query);
request = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.RESULTS, null);
result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer);
expectedResult = FileUtilities.getStringFromFile(FileUtilities.getFileFromResource("org.constellation.wfs.xml.systemCollection-4v2.xml"));
expectedResult = expectedResult.replace("EPSG_VERSION", EPSG_VERSION);
sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(expectedResult, sresult);
/**
* Test 6 : query on typeName sml:System filter on input name = 'height' (xpath style)
*/
pe1 = new PropertyIsEqualToType(new LiteralType("height"), "/inputs/input/name", Boolean.TRUE);
filter = new FilterType(pe1);
queries = new ArrayList<>();
query = new QueryType(filter, Arrays.asList(new QName("http://www.opengis.net/sml/1.0", "System")), null);
queries.add(query);
request = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.RESULTS, null);
result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer);
expectedResult = FileUtilities.getStringFromFile(FileUtilities.getFileFromResource("org.constellation.wfs.xml.systemCollection-5v2.xml"));
expectedResult = expectedResult.replace("EPSG_VERSION", EPSG_VERSION);
sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(expectedResult, sresult);
/**
* Test 7 : query on typeName sml:System with bad xpath NOT WORKING
pe1 = new PropertyIsEqualToType(new LiteralType("height"), "/inputs/inputation/namein", Boolean.TRUE);
filter = new FilterType(pe1);
queries = new ArrayList<>();
query = new QueryType(filter, Arrays.asList(new QName("http://www.opengis.net/sml/1.0", "System")), null);
queries.add(query);
request = new GetFeatureType("WFS", "2.0.0", null, Integer.MAX_VALUE, queries, ResultTypeType.RESULTS, null);
result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer);
expectedResult = FileUtilities.getStringFromFile(FileUtilities.getFileFromResource("org.constellation.wfs.xml.systemCollection-5v2.xml"));
expectedResult = expectedResult.replace("EPSG_VERSION", EPSG_VERSION);
domCompare(expectedResult, writer.toString());
*/
/**
* Test 8 : query on typeName sml:System filter on input name = 'height' (xpath style) prefixed with featureType name
*/
pe1 = new PropertyIsEqualToType(new LiteralType("height"), "{http://www.opengis.net/sml/1.0}System/inputs/input/name", Boolean.TRUE);
filter = new FilterType(pe1);
queries = new ArrayList<>();
query = new QueryType(filter, Arrays.asList(new QName("http://www.opengis.net/sml/1.0", "System")), null);
queries.add(query);
request = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.RESULTS, null);
result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer);
expectedResult = FileUtilities.getStringFromFile(FileUtilities.getFileFromResource("org.constellation.wfs.xml.systemCollection-5v2.xml"));
expectedResult = expectedResult.replace("EPSG_VERSION", EPSG_VERSION);
sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(expectedResult, sresult);
/**
* Test 8 : query on typeName sml:System aliased as "a" filter on input name = 'height' (xpath style) prefixed with featureType name
*/
pe1 = new PropertyIsEqualToType(new LiteralType("height"), "a/inputs/input/name", Boolean.TRUE);
filter = new FilterType(pe1);
queries = new ArrayList<>();
query = new QueryType(filter, Arrays.asList(new QName("http://www.opengis.net/sml/1.0", "System")), null);
query.setAliases(Arrays.asList("a"));
queries.add(query);
request = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.RESULTS, null);
result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer);
expectedResult = FileUtilities.getStringFromFile(FileUtilities.getFileFromResource("org.constellation.wfs.xml.systemCollection-5v2.xml"));
expectedResult = expectedResult.replace("EPSG_VERSION", EPSG_VERSION);
sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(expectedResult, sresult);
}
/**
* test the feature marshall
*
*/
@Ignore
@Order(order=7)
public void getFeatureSelfJoinTest() throws Exception {
/**
* Test 1 : query on typeName sml:System
*/
ComparisonOpsType pe1 = new PropertyIsEqualToType(new LiteralType("Piezometer Test"), "a/name", Boolean.TRUE);
PropertyIsEqualToType pe2 = new PropertyIsEqualToType();
pe2.addValueReference("a/smlref");
pe2.addValueReference("b/name");
LogicOpsType le = new AndType(pe1, pe2);
FilterType filter = new FilterType(le);
List<QueryType> queries = new ArrayList<>();
QueryType selfJoinQuery = new QueryType(filter, Arrays.asList(new QName("http://www.opengis.net/sml/1.0", "System"), new QName("http://www.opengis.net/sml/1.0", "System")), null);
selfJoinQuery.getAliases().add("a");
selfJoinQuery.getAliases().add("b");
queries.add(selfJoinQuery);
GetFeatureType request = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
Object result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
FeatureCollectionWrapper wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
StringWriter writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer);
String expectedResult = FileUtilities.getStringFromFile(FileUtilities.getFileFromResource("org.constellation.wfs.xml.systemCollectionSelfJoin.xml"));
expectedResult = expectedResult.replace("EPSG_VERSION", EPSG_VERSION);
domCompare(expectedResult, writer.toString());
}
/**
* test the feature marshall
*
*/
@Ignore
@Order(order=8)
public void getFeatureJoinTest() throws Exception {
/**
* Test 1 : query on typeName sml:System
*/
ComparisonOpsType pe1 = new PropertyIsEqualToType(new LiteralType("Piezometer Test"), "{http://www.opengis.net/sml/1.0}System/name", Boolean.TRUE);
PropertyIsEqualToType pe2 = new PropertyIsEqualToType();
pe2.addValueReference("{http://www.opengis.net/sml/1.0}System/smlref");
pe2.addValueReference("{http://www.opengis.net/sml/1.0}System/name");
LogicOpsType le = new AndType(pe1, pe2);
FilterType filter = new FilterType(le);
List<QueryType> queries = new ArrayList<>();
QueryType selfJoinQuery = new QueryType(filter, Arrays.asList(new QName("http://www.opengis.net/sml/1.0", "System"), new QName("http://www.opengis.net/sml/1.0", "System")), null);
selfJoinQuery.getAliases().add("a");
selfJoinQuery.getAliases().add("b");
queries.add(selfJoinQuery);
GetFeatureType request = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
Object result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
FeatureCollectionWrapper wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
StringWriter writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer);
String expectedResult = FileUtilities.getStringFromFile(FileUtilities.getFileFromResource("org.constellation.wfs.xml.systemCollectionSelfJoin.xml"));
expectedResult = expectedResult.replace("EPSG_VERSION", EPSG_VERSION);
domCompare(expectedResult, writer.toString());
}
/**
* test the feature marshall
*
*/
@Test
@Order(order=9)
public void getFeatureShapeFileTest() throws Exception {
/**
* Test 1 : query on typeName bridges
*/
List<QueryType> queries = new ArrayList<>();
queries.add(new QueryType(null, Arrays.asList(new QName("http://www.opengis.net/gml/3.2", "Bridges")), null));
GetFeatureType request = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
Object result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
FeatureCollectionWrapper wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
StringWriter writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer);
String sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(
FileUtilities.getFileFromResource("org.constellation.wfs.xml.bridgeCollectionv2.xml"),
sresult);
/**
* Test 2 : query on typeName bridges with propertyName = {FID}
*/
queries = new ArrayList<>();
QueryType query = new QueryType(null, Arrays.asList(new QName("http://www.opengis.net/gml/3.2", "Bridges")), null);
query.getAbstractProjectionClause().add(wfsFactory.createPropertyName(new PropertyName(new QName("FID"))));
queries.add(query);
request = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer);
sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(
FileUtilities.getFileFromResource("org.constellation.wfs.xml.bridgeCollection-2v2.xml"),
sresult);
/**
* Test 3 : query on typeName NamedPlaces
*/
queries = new ArrayList<>();
queries.add(new QueryType(null, Arrays.asList(new QName("http://www.opengis.net/gml/3.2", "NamedPlaces")), null));
request = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer);
sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(
FileUtilities.getFileFromResource("org.constellation.wfs.xml.namedPlacesCollection-1v2.xml"),
sresult);
/**
* Test 4 : query on typeName NamedPlaces with resultType = HITS
*/
queries = new ArrayList<>();
queries.add(new QueryType(null, Arrays.asList(new QName("http://www.opengis.net/gml/3.2", "NamedPlaces")), null));
request = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.HITS, "text/xml; subtype=gml/3.2.1");
result = worker.getFeature(request);
FeatureCollectionType resultHits = (FeatureCollectionType)result;
assertTrue(resultHits.getNumberReturned() == 2);
/**
* Test 5 : query on typeName NamedPlaces with srsName = EPSG:27582
*/
queries = new ArrayList<>();
query = new QueryType(null, Arrays.asList(new QName("http://www.opengis.net/gml/3.2", "NamedPlaces")), null);
query.setSrsName("EPSG:27582");
queries.add(query);
request = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer);
sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(
FileUtilities.getFileFromResource("org.constellation.wfs.xml.namedPlacesCollection-1_reprojv2.xml"),
sresult);
/**
* Test 6 : query on typeName NamedPlaces with DESC sortBy on NAME property (not supported)
*/
queries = new ArrayList<>();
query = new QueryType(null, Arrays.asList(new QName("http://www.opengis.net/gml/3.2", "NamedPlaces")), null);
query.setAbstractSortingClause(ogcFactory.createSortBy(new SortByType(Arrays.asList(new SortPropertyType("NAME", SortOrderType.DESC)))));
queries.add(query);
request = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer);
sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(
FileUtilities.getFileFromResource("org.constellation.wfs.xml.namedPlacesCollection-5v2.xml"),
sresult);
/**
* Test 7 : query on typeName NamedPlaces with ASC sortBy on NAME property (not supported)
*/
queries = new ArrayList<>();
query = new QueryType(null, Arrays.asList(new QName("http://www.opengis.net/gml/3.2", "NamedPlaces")), null);
query.setAbstractSortingClause(ogcFactory.createSortBy(new SortByType(Arrays.asList(new SortPropertyType("NAME", SortOrderType.ASC)))));
queries.add(query);
request = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer);
sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(
FileUtilities.getFileFromResource("org.constellation.wfs.xml.namedPlacesCollection-1v2.xml"),
sresult);
}
/**
*
*
*/
@Test
@Order(order=10)
public void DescribeFeatureTest() throws Exception {
Unmarshaller unmarshaller = XSDMarshallerPool.getInstance().acquireUnmarshaller();
/**
* Test 1 : describe Feature type bridges
*/
List<QName> typeNames = new ArrayList<>();
typeNames.add(new QName("http://www.opengis.net/gml/3.2", "Bridges"));
DescribeFeatureTypeType request = new DescribeFeatureTypeType("WFS", "2.0.0", null, typeNames, "text/xml; subtype=gml/3.2.1");
Schema result = (Schema) worker.describeFeatureType(request);
Schema expResult = (Schema) unmarshaller.unmarshal(Util.getResourceAsStream("org/constellation/wfs/xsd/bridge2.xsd"));
// fix for equlity on empty list / null list
for (ComplexType type : expResult.getComplexTypes()) {
type.getAttributeOrAttributeGroup();
}
assertEquals(expResult, result);
/**
* Test 2 : describe Feature type Sampling point
*/
typeNames = new ArrayList<>();
typeNames.add(new QName("http://www.opengis.net/sampling/1.0", "SamplingPoint"));
request = new DescribeFeatureTypeType("WFS", "2.0.0", null, typeNames, "text/xml; subtype=gml/3.2.1");
result = (Schema) worker.describeFeatureType(request);
expResult = (Schema) unmarshaller.unmarshal(Util.getResourceAsStream("org/constellation/wfs/xsd/sampling2.xsd"));
// fix for equlity on empty list / null list
for (ComplexType type : expResult.getComplexTypes()) {
type.getAttributeOrAttributeGroup();
}
assertEquals(expResult, result);
/**
* Test 3 : describe Feature type System
*/
if (mdweb_active) {
typeNames = new ArrayList<>();
typeNames.add(new QName("http://www.opengis.net/sml/1.0", "System"));
request = new DescribeFeatureTypeType("WFS", "2.0.0", null, typeNames, "text/xml; subtype=gml/3.2.1");
result = (Schema) worker.describeFeatureType(request);
expResult = (Schema) unmarshaller.unmarshal(Util.getResourceAsStream("org/constellation/wfs/xsd/system2.xsd"));
assertEquals(expResult.getElements().size(), result.getElements().size());
for (int i = 0; i < expResult.getElements().size(); i++) {
TopLevelElement expElem = expResult.getElements().get(i);
TopLevelElement resElem = result.getElements().get(i);
assertEquals(expElem, resElem);
}
assertEquals(expResult.getComplexTypes().size(), result.getComplexTypes().size());
for (int i = 0; i < expResult.getComplexTypes().size(); i++) {
TopLevelComplexType expElem = expResult.getComplexTypes().get(i);
TopLevelComplexType resElem = result.getComplexTypes().get(i);
assertEquals(expElem, resElem);
}
assertEquals(expResult, result);
}
XSDMarshallerPool.getInstance().recycle(unmarshaller);
}
/**
*
*
*/
@Test
@Order(order=11)
public void TransactionTest() throws Exception {
/**
* Test 1 : transaction update for Feature type bridges with a bad inputFormat
*/
QName typeName = new QName("http://www.opengis.net/gml/3.2", "Bridges");
List<PropertyType> properties = new ArrayList<>();
UpdateType update = new UpdateType(null, properties, null, typeName, null);
update.setInputFormat("bad inputFormat");
TransactionType request = new TransactionType("WFS", "2.0.0", null, AllSomeType.ALL, update);
try {
worker.transaction(request);
fail("Should have raised an error.");
} catch (CstlServiceException ex) {
assertEquals(ex.getExceptionCode(), INVALID_PARAMETER_VALUE);
assertEquals(ex.getLocator(), "inputFormat");
}
/**
* Test 2 : transaction update for Feature type bridges with a bad property
*/
typeName = new QName("http://www.opengis.net/gml/3.2", "Bridges");
properties = new ArrayList<>();
properties.add(new PropertyType(new ValueReference("whatever", UpdateActionType.REPLACE), "someValue"));
request = new TransactionType("WFS", "2.0.0", null, AllSomeType.ALL, new UpdateType(null, properties, null, typeName, null));
try {
worker.transaction(request);
fail("Should have raised an error.");
} catch (CstlServiceException ex) {
assertEquals(ex.getExceptionCode(), INVALID_VALUE);
assertEquals(ex.getMessage(), "The feature Type {http://www.opengis.net/gml/3.2}Bridges does not has such a property: whatever");
}
/**
* Test 3 : transaction update for Feature type bridges with a bad property in filter
*/
typeName = new QName("http://www.opengis.net/gml/3.2", "Bridges");
properties = new ArrayList<>();
properties.add(new PropertyType(new ValueReference("NAME", UpdateActionType.REPLACE), "someValue"));
ComparisonOpsType pe = new PropertyIsEqualToType(new LiteralType("10972X0137-PONT"), "bad", Boolean.TRUE);
FilterType filter = new FilterType(pe);
request = new TransactionType("WFS", "2.0.0", null, AllSomeType.ALL, new UpdateType(null, properties, filter, typeName, null));
try {
worker.transaction(request);
fail("Should have raised an error.");
} catch (CstlServiceException ex) {
assertEquals(ex.getExceptionCode(), INVALID_PARAMETER_VALUE);
assertEquals(ex.getMessage(), "The feature Type {http://www.opengis.net/gml/3.2}Bridges does not has such a property: bad");
}
/**
* Test 4 : transaction update for Feature type NamedPlaces with a property in filter
*/
typeName = new QName("http://www.opengis.net/gml/3.2", "NamedPlaces");
properties = new ArrayList<>();
properties.add(new PropertyType(new ValueReference("FID", UpdateActionType.REPLACE), "999"));
pe = new PropertyIsEqualToType(new LiteralType("Ashton"), "NAME", Boolean.TRUE);
filter = new FilterType(pe);
request = new TransactionType("WFS", "2.0.0", null, AllSomeType.ALL, new UpdateType(null, properties, filter, typeName, null));
TransactionResponse result = worker.transaction(request);
TransactionSummaryType sum = new TransactionSummaryType(0, 1, 0, 0);
TransactionResponseType ExpResult = new TransactionResponseType(sum, null, null, null, "2.0.0");
assertEquals(ExpResult, result);
/**
* we verify that the feature have been updated
*/
List<QueryType> queries = new ArrayList<>();
queries.add(new QueryType(null, Arrays.asList(new QName("http://www.opengis.net/gml/3.2", "NamedPlaces")), null));
GetFeatureType requestGF = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
Object resultGF = worker.getFeature(requestGF);
assertTrue(resultGF instanceof FeatureCollectionWrapper);
FeatureCollectionWrapper wrapper = (FeatureCollectionWrapper) resultGF;
resultGF = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
StringWriter writer = new StringWriter();
featureWriter.write((FeatureCollection)resultGF,writer);
String sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(
FileUtilities.getFileFromResource("org.constellation.wfs.xml.namedPlacesCollection-3v2.xml"),
sresult);
}
@Test
@Order(order=12)
public void TransactionReplaceTest() throws Exception {
/**
* Test 1 : transaction replace for Feature type NamedPlaces
*/
final GenericName tName = NamesExt.create("http://www.opengis.net/gml/3.2", "NamedPlaces");
final FeatureType ft = ((FeatureData) DataProviders.getInstance().get(tName)).getStore().getFeatureType(tName);
final JAXPStreamFeatureReader fr = new JAXPStreamFeatureReader(ft);
fr.getProperties().put(JAXPStreamFeatureReader.BINDING_PACKAGE, "GML");
final Feature feature = (Feature) fr.read(FileUtilities.getFileFromResource("org.constellation.wfs.xml.namedPlaces.xml"));
PropertyIsEqualToType pe = new PropertyIsEqualToType(new LiteralType("Goose Island"), "NAME", Boolean.TRUE);
FilterType filter = new FilterType(pe);
TransactionType request = new TransactionType("WFS", "2.0.0", null, AllSomeType.ALL, new ReplaceType(null, filter, feature, "application/gml+xml; version=3.2", null));
TransactionResponse result = worker.transaction(request);
TransactionSummaryType sum = new TransactionSummaryType(0, 0, 0, 1);
final List<CreatedOrModifiedFeatureType> r = new ArrayList<>();
r.add(new CreatedOrModifiedFeatureType(new ResourceIdType("NamedPlaces.2"), null));
ActionResultsType replaced = new ActionResultsType(r);
TransactionResponse ExpResult = new TransactionResponseType(sum, null, null, replaced, "2.0.0");
assertEquals(ExpResult, result);
/**
* we verify that the feature have been updated
*/
List<QueryType> queries = new ArrayList<>();
queries.add(new QueryType(null, Arrays.asList(new QName("http://www.opengis.net/gml/3.2", "NamedPlaces")), null));
GetFeatureType requestGF = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
Object resultGF = worker.getFeature(requestGF);
assertTrue(resultGF instanceof FeatureCollectionWrapper);
FeatureCollectionWrapper wrapper = (FeatureCollectionWrapper) resultGF;
resultGF = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
StringWriter writer = new StringWriter();
featureWriter.write((FeatureCollection)resultGF,writer);
String sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(
FileUtilities.getFileFromResource("org.constellation.wfs.xml.namedPlacesCollection-4v2.xml"),
sresult);
}
@Test
@Order(order=13)
public void TransactionDeleteTest() throws Exception {
/**
* Test 1 : transaction delete for Feature type bridges with a bad property in filter
*/
QName typeName = new QName("http://www.opengis.net/gml/3.2", "Bridges");
PropertyIsEqualToType pe = new PropertyIsEqualToType(new LiteralType("10972X0137-PONT"), "bad", Boolean.TRUE);
FilterType filter = new FilterType(pe);
DeleteType delete = new DeleteType(filter, null, typeName);
TransactionType request = new TransactionType("WFS", "2.0.0", null, AllSomeType.ALL, delete);
try {
worker.transaction(request);
fail("Should have raised an error.");
} catch (CstlServiceException ex) {
assertEquals(ex.getExceptionCode(), INVALID_PARAMETER_VALUE);
assertEquals(ex.getMessage(), "The feature Type {http://www.opengis.net/gml/3.2}Bridges does not has such a property: bad");
}
/**
* Test 2 : transaction delete for Feature type NamedPlaces with a property in filter
*/
typeName = new QName("http://www.opengis.net/gml/3.2", "NamedPlaces");
pe = new PropertyIsEqualToType(new LiteralType("Ashton"), "NAME", Boolean.TRUE);
filter = new FilterType(pe);
delete = new DeleteType(filter, null, typeName);
request = new TransactionType("WFS", "2.0.0", null, AllSomeType.ALL, delete);
TransactionResponse result = worker.transaction(request);
TransactionSummaryType sum = new TransactionSummaryType(0, 0, 1, 0);
TransactionResponseType expresult = new TransactionResponseType(sum, null, null, null,"2.0.0");
assertEquals(expresult, result);
/**
* we verify that the feature have been deleted
*/
List<QueryType> queries = new ArrayList<>();
queries.add(new QueryType(null, Arrays.asList(new QName("http://www.opengis.net/gml/3.2", "NamedPlaces")), null));
GetFeatureType requestGF = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
Object resultGF = worker.getFeature(requestGF);
assertTrue(resultGF instanceof FeatureCollectionWrapper);
FeatureCollectionWrapper wrapper = (FeatureCollectionWrapper) resultGF;
resultGF = wrapper.getFeatureCollection();
StringWriter writer = new StringWriter();
featureWriter.write((FeatureCollection)resultGF,writer);
String sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(
FileUtilities.getFileFromResource("org.constellation.wfs.xml.namedPlacesCollection-2v2.xml"),
sresult);
}
/**
*
*
*/
@Test
@Order(order=14)
public void TransactionInsertTest() throws Exception {
/**
* Test 1 : transaction insert for Feature type bridges with a bad inputFormat
*/
final QName typeName = new QName("http://www.opengis.net/gml/3.2", "Bridges");
final InsertType insert = new InsertType();
insert.setInputFormat("bad inputFormat");
final TransactionType request = new TransactionType("WFS", "2.0.0", null, AllSomeType.ALL, insert);
try {
worker.transaction(request);
fail("Should have raised an error.");
} catch (CstlServiceException ex) {
assertEquals(ex.getExceptionCode(), INVALID_PARAMETER_VALUE);
assertEquals(ex.getLocator(), "inputFormat");
}
}
/**
*
*
*/
@Test
@Order(order=14)
public void listStoredQueriesTest() throws Exception {
final ListStoredQueriesType request = new ListStoredQueriesType("WFS", "2.0.0", null);
final ListStoredQueriesResponse resultI = worker.listStoredQueries(request);
assertTrue(resultI instanceof ListStoredQueriesResponseType);
final ListStoredQueriesResponseType result = (ListStoredQueriesResponseType) resultI;
final List<StoredQueryListItemType> items = new ArrayList<>();
items.add(new StoredQueryListItemType("nameQuery", Arrays.asList(new Title("Name query")), Arrays.asList(new QName("http://www.opengis.net/sampling/1.0", "SamplingPoint"))));
items.add(new StoredQueryListItemType("urn:ogc:def:query:OGC-WFS::GetFeatureById", Arrays.asList(new Title("Identifier query")), alltypes));
items.add(new StoredQueryListItemType("urn:ogc:def:storedQuery:OGC-WFS::GetFeatureByType", Arrays.asList(new Title("By type query")), Arrays.asList(new QName(""))));
final ListStoredQueriesResponseType expResult = new ListStoredQueriesResponseType(items);
assertEquals(3, result.getStoredQuery().size());
for (int i = 0; i < result.getStoredQuery().size(); i++) {
final StoredQueryListItemType expIt = items.get(i);
final StoredQueryListItemType resIt = result.getStoredQuery().get(i);
assertEquals(expIt.getReturnFeatureType(), resIt.getReturnFeatureType());
assertEquals(expIt, resIt);
}
assertEquals(expResult, result);
}
/**
*
*
*/
@Test
@Order(order=15)
public void describeStoredQueriesTest() throws Exception {
final DescribeStoredQueriesType request = new DescribeStoredQueriesType("WFS", "2.0.0", null, Arrays.asList("nameQuery"));
final DescribeStoredQueriesResponse resultI = worker.describeStoredQueries(request);
assertTrue(resultI instanceof DescribeStoredQueriesResponseType);
final DescribeStoredQueriesResponseType result = (DescribeStoredQueriesResponseType) resultI;
final List<StoredQueryDescriptionType> descriptions = new ArrayList<>();
final ParameterExpressionType param = new ParameterExpressionType("name", "name Parameter", "A parameter on the name of the feature", new QName("http://www.w3.org/2001/XMLSchema", "string", "xs"));
final List<QName> types = Arrays.asList(new QName("http://www.opengis.net/sampling/1.0", "SamplingPoint"));
final PropertyIsEqualToType pis = new PropertyIsEqualToType(new LiteralType("${name}"), "name", true);
final FilterType filter = new FilterType(pis);
final QueryType query = new QueryType(filter, types, "2.0.0");
final QueryExpressionTextType queryEx = new QueryExpressionTextType("urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression", null, types);
final ObjectFactory factory = new ObjectFactory();
queryEx.getContent().add(factory.createQuery(query));
final StoredQueryDescriptionType des1 = new StoredQueryDescriptionType("nameQuery", "Name query" , "filter on name for samplingPoint", param, queryEx);
descriptions.add(des1);
final DescribeStoredQueriesResponseType expResult = new DescribeStoredQueriesResponseType(descriptions);
assertEquals(1, result.getStoredQueryDescription().size());
assertEquals(expResult.getStoredQueryDescription().get(0).getQueryExpressionText(), result.getStoredQueryDescription().get(0).getQueryExpressionText());
assertEquals(expResult.getStoredQueryDescription().get(0), result.getStoredQueryDescription().get(0));
assertEquals(expResult.getStoredQueryDescription(), result.getStoredQueryDescription());
assertEquals(expResult, result);
}
/**
*
*
*/
@Test
@Order(order=16)
public void createStoredQueriesTest() throws Exception {
final List<StoredQueryDescriptionType> desc = new ArrayList<>();
final ParameterExpressionType param = new ParameterExpressionType("name2", "name Parameter 2 ", "A parameter on the geometry \"the_geom\" of the feature", new QName("http://www.opengis.net/gml/3.2", "AbstractGeometryType", "gml"));
final List<QName> types = Arrays.asList(new QName("http://www.opengis.net/gml/3.2", "Bridges"));
final PropertyIsEqualToType pis = new PropertyIsEqualToType(new LiteralType("${geom}"), "the_geom", true);
final FilterType filter = new FilterType(pis);
final QueryType query = new QueryType(filter, types, "2.0.0");
final QueryExpressionTextType queryEx = new QueryExpressionTextType("urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression", null, types);
final ObjectFactory factory = new ObjectFactory();
queryEx.getContent().add(factory.createQuery(query));
final StoredQueryDescriptionType desc1 = new StoredQueryDescriptionType("geomQuery", "Geom query" , "filter on geom for Bridge", param, queryEx);
desc.add(desc1);
final ParameterExpressionType envParam = new ParameterExpressionType("envelope", "envelope parameter", "A parameter on the geometry \"the_geom\" of the feature", new QName("http://www.opengis.net/gml/3.2", "EnvelopeType", "gml"));
final List<QName> types2 = Arrays.asList(new QName("http://www.opengis.net/sampling/1.0", "SamplingPoint"));
final SpatialOpsType bbox = new BBOXType("{http://www.opengis.net/sampling/1.0}position", "${envelope}");
final FilterType filter2 = new FilterType(bbox);
final QueryType query2 = new QueryType(filter2, types2, "2.0.0");
final QueryExpressionTextType queryEx2 = new QueryExpressionTextType("urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression", null, types2);
queryEx2.getContent().add(factory.createQuery(query2));
final StoredQueryDescriptionType desc2 = new StoredQueryDescriptionType("envelopeQuery", "Envelope query" , "BBOX filter on geom for Sampling point", envParam, queryEx2);
desc.add(desc2);
final CreateStoredQueryType request = new CreateStoredQueryType("WFS", "2.0.0", null, desc);
final CreateStoredQueryResponse resultI = worker.createStoredQuery(request);
assertTrue(resultI instanceof CreateStoredQueryResponseType);
final CreateStoredQueryResponseType result = (CreateStoredQueryResponseType) resultI;
final CreateStoredQueryResponseType expResult = new CreateStoredQueryResponseType("OK");
assertEquals(expResult, result);
/**
* verify that thes queries are well stored
*/
final ListStoredQueriesType requestlsq = new ListStoredQueriesType("WFS", "2.0.0", null);
ListStoredQueriesResponse resultlsqI = worker.listStoredQueries(requestlsq);
assertTrue(resultlsqI instanceof ListStoredQueriesResponseType);
ListStoredQueriesResponseType resultlsq = (ListStoredQueriesResponseType) resultlsqI;
final List<StoredQueryListItemType> items = new ArrayList<>();
items.add(new StoredQueryListItemType("nameQuery", Arrays.asList(new Title("Name query")), Arrays.asList(new QName("http://www.opengis.net/sampling/1.0", "SamplingPoint"))));
items.add(new StoredQueryListItemType("urn:ogc:def:query:OGC-WFS::GetFeatureById", Arrays.asList(new Title("Identifier query")), alltypes));
items.add(new StoredQueryListItemType("urn:ogc:def:storedQuery:OGC-WFS::GetFeatureByType", Arrays.asList(new Title("By type query")), Arrays.asList(new QName(""))));
items.add(new StoredQueryListItemType("geomQuery", Arrays.asList(new Title("Geom query")), Arrays.asList(new QName("http://www.opengis.net/gml/3.2", "Bridges"))));
items.add(new StoredQueryListItemType("envelopeQuery", Arrays.asList(new Title("Envelope query")), Arrays.asList(new QName("http://www.opengis.net/sampling/1.0", "SamplingPoint"))));
final ListStoredQueriesResponseType expResultlsq = new ListStoredQueriesResponseType(items);
assertEquals(5, resultlsq.getStoredQuery().size());
for (int i = 0; i < resultlsq.getStoredQuery().size(); i++) {
assertEquals(expResultlsq.getStoredQuery().get(i).getId(), resultlsq.getStoredQuery().get(i).getId());
assertEquals(expResultlsq.getStoredQuery().get(i).getReturnFeatureType(), resultlsq.getStoredQuery().get(i).getReturnFeatureType());
assertEquals(expResultlsq.getStoredQuery().get(i).getTitle(), resultlsq.getStoredQuery().get(i).getTitle());
assertEquals(expResultlsq.getStoredQuery().get(i), resultlsq.getStoredQuery().get(i));
}
assertEquals(expResultlsq.getStoredQuery(), resultlsq.getStoredQuery());
assertEquals(expResultlsq, resultlsq);
// verify the persistance by restarting the WFS
worker.destroy();
worker = new DefaultWFSWorker("test1");
worker.setLogLevel(Level.FINER);
worker.setServiceUrl("http://geomatys.com/constellation/WS/");
worker.setShiroAccessible(false);
resultlsqI = worker.listStoredQueries(requestlsq);
assertTrue(resultlsqI instanceof ListStoredQueriesResponseType);
resultlsq = (ListStoredQueriesResponseType) resultlsqI;
assertEquals(5, resultlsq.getStoredQuery().size());
assertEquals(expResultlsq.getStoredQuery(), resultlsq.getStoredQuery());
assertEquals(expResultlsq, resultlsq);
}
@Test
@Order(order=17)
public void dropStoredQueriesTest() throws Exception {
final DropStoredQueryType request = new DropStoredQueryType("WFS", "2.0.0", null, "geomQuery");
final DropStoredQueryResponse resultI = worker.dropStoredQuery(request);
assertTrue(resultI instanceof DropStoredQueryResponseType);
final DropStoredQueryResponseType result = (DropStoredQueryResponseType) resultI;
final DropStoredQueryResponseType expResult = new DropStoredQueryResponseType("OK");
assertEquals(expResult, result);
final ListStoredQueriesType requestlsq = new ListStoredQueriesType("WFS", "2.0.0", null);
ListStoredQueriesResponse resultlsqI = worker.listStoredQueries(requestlsq);
assertTrue(resultlsqI instanceof ListStoredQueriesResponseType);
ListStoredQueriesResponseType resultlsq = (ListStoredQueriesResponseType) resultlsqI;
final List<StoredQueryListItemType> items = new ArrayList<>();
items.add(new StoredQueryListItemType("nameQuery", Arrays.asList(new Title("Name query")), Arrays.asList(new QName("http://www.opengis.net/sampling/1.0", "SamplingPoint"))));
items.add(new StoredQueryListItemType("urn:ogc:def:query:OGC-WFS::GetFeatureById", Arrays.asList(new Title("Identifier query")), alltypes));
items.add(new StoredQueryListItemType("urn:ogc:def:storedQuery:OGC-WFS::GetFeatureByType", Arrays.asList(new Title("By type query")), Arrays.asList(new QName(""))));
items.add(new StoredQueryListItemType("envelopeQuery", Arrays.asList(new Title("Envelope query")), Arrays.asList(new QName("http://www.opengis.net/sampling/1.0", "SamplingPoint"))));
final ListStoredQueriesResponseType expResultlsq = new ListStoredQueriesResponseType(items);
assertEquals(4, resultlsq.getStoredQuery().size());
for (int i = 0; i < resultlsq.getStoredQuery().size(); i++) {
assertEquals(expResultlsq.getStoredQuery().get(i).getId(), resultlsq.getStoredQuery().get(i).getId());
assertEquals(expResultlsq.getStoredQuery().get(i).getReturnFeatureType(), resultlsq.getStoredQuery().get(i).getReturnFeatureType());
assertEquals(expResultlsq.getStoredQuery().get(i).getTitle(), resultlsq.getStoredQuery().get(i).getTitle());
assertEquals(expResultlsq.getStoredQuery().get(i), resultlsq.getStoredQuery().get(i));
}
assertEquals(expResultlsq.getStoredQuery(), resultlsq.getStoredQuery());
assertEquals(expResultlsq, resultlsq);
// verify the persistance by restarting the WFS
worker.destroy();
worker = new DefaultWFSWorker("test1");
worker.setLogLevel(Level.FINER);
worker.setServiceUrl("http://geomatys.com/constellation/WS/");
worker.setShiroAccessible(false);
resultlsqI = worker.listStoredQueries(requestlsq);
assertTrue(resultlsqI instanceof ListStoredQueriesResponseType);
resultlsq = (ListStoredQueriesResponseType) resultlsqI;
assertEquals(4, resultlsq.getStoredQuery().size());
assertEquals(expResultlsq.getStoredQuery(), resultlsq.getStoredQuery());
assertEquals(expResultlsq, resultlsq);
}
@Test
@Order(order=18)
public void getFeatureOMFeatureIdTest() throws Exception {
/**
* Test 1 : query on typeName samplingPoint with name parameter
*/
final FilterType filter = new org.geotoolkit.ogc.xml.v200.FilterType(new org.geotoolkit.ogc.xml.v200.ResourceIdType("station-001"));
final QueryType query = new QueryType(filter, null, "2.0.0");
GetFeatureType request = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, Arrays.asList(query), ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
Object result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
FeatureCollectionWrapper wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
StringWriter writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer);
String expectedResult = FileUtilities.getStringFromFile(FileUtilities.getFileFromResource("org.constellation.wfs.xml.samplingPointCollection-2v2.xml"));
expectedResult = expectedResult.replace("EPSG_VERSION", EPSG_VERSION);
String sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(expectedResult, sresult);
}
@Test
@Order(order=19)
public void getFeatureOMStoredQueriesTest() throws Exception {
/**
* Test 1 : query on typeName samplingPoint with name parameter
*/
Integer startIndex = null;
GetFeatureType request = new GetFeatureType("WFS", "2.0.0", null, startIndex, Integer.MAX_VALUE, null, ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
ObjectFactory factory = new ObjectFactory();
List<ParameterType> params = new ArrayList<>();
params.add(new ParameterType("name", "10972X0137-PONT"));
StoredQueryType query = new StoredQueryType("nameQuery", null, params);
request.getAbstractQueryExpression().add(factory.createStoredQuery(query));
Object result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
FeatureCollectionWrapper wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
StringWriter writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer);
String expectedResult = FileUtilities.getStringFromFile(FileUtilities.getFileFromResource("org.constellation.wfs.xml.samplingPointCollection-2v2.xml"));
expectedResult = expectedResult.replace("EPSG_VERSION", EPSG_VERSION);
String sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(expectedResult, sresult);
/**
* Test 2 : query on typeName samplingPoint with id parameter
*/
request = new GetFeatureType("WFS", "2.0.0", null, startIndex, Integer.MAX_VALUE, null, ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
params = new ArrayList<>();
params.add(new ParameterType("id", "station-001"));
query = new StoredQueryType("urn:ogc:def:query:OGC-WFS::GetFeatureById", null, params);
request.getAbstractQueryExpression().add(factory.createStoredQuery(query));
result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer);
expectedResult = FileUtilities.getStringFromFile(FileUtilities.getFileFromResource("org.constellation.wfs.xml.samplingPointCollection-2v2.xml"));
expectedResult = expectedResult.replace("EPSG_VERSION", EPSG_VERSION);
sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(expectedResult, sresult);
/**
* Test 3 : query on typeName samplingPoint with a BBOX parameter
*/
request = new GetFeatureType("WFS", "2.0.0", null, startIndex, Integer.MAX_VALUE, null, ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
params = new ArrayList<>();
DirectPositionType lower = new DirectPositionType( 65300.0, 1731360.0);
DirectPositionType upper = new DirectPositionType(65500.0, 1731400.0);
EnvelopeType env = new EnvelopeType(lower, upper, "urn:ogc:def:crs:epsg:7.6:27582");
params.add(new ParameterType("envelope", env));
query = new StoredQueryType("envelopeQuery", null, params);
request.getAbstractQueryExpression().add(factory.createStoredQuery(query));
result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer);
expectedResult = FileUtilities.getStringFromFile(FileUtilities.getFileFromResource("org.constellation.wfs.xml.samplingPointCollection-8v2.xml"));
expectedResult = expectedResult.replace("EPSG_VERSION", EPSG_VERSION);
sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(expectedResult, sresult);
/**
* Test 4 : query with typeName parameter
*/
request = new GetFeatureType("WFS", "2.0.0", null, startIndex, Integer.MAX_VALUE, null, ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
params = new ArrayList<>();
params.add(new ParameterType("typeName", new QName("http://www.opengis.net/sampling/1.0", "SamplingPoint")));
query = new StoredQueryType("urn:ogc:def:storedQuery:OGC-WFS::GetFeatureByType", null, params);
request.getAbstractQueryExpression().add(factory.createStoredQuery(query));
result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer);
expectedResult = FileUtilities.getStringFromFile(FileUtilities.getFileFromResource("org.constellation.wfs.xml.samplingPointCollection-3v2.xml"));
expectedResult = expectedResult.replace("EPSG_VERSION", EPSG_VERSION);
sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(expectedResult, sresult);
}
@Test
@Order(order=20)
public void getFeatureMixedStoredIdentifierQueryTest() throws Exception {
/**
* Test 1 : query with id parameter
*/
Integer startIndex = null;
GetFeatureType request = new GetFeatureType("WFS", "2.0.0", null, startIndex, Integer.MAX_VALUE, null, ResultTypeType.RESULTS, "text/xml; subtype=gml/3.2.1");
ObjectFactory factory = new ObjectFactory();
List<ParameterType> params = new ArrayList<>();
params.add(new ParameterType("id", "station-001"));
StoredQueryType query = new StoredQueryType("urn:ogc:def:query:OGC-WFS::GetFeatureById", null, params);
request.getAbstractQueryExpression().add(factory.createStoredQuery(query));
Object result = worker.getFeature(request);
assertTrue(result instanceof FeatureCollectionWrapper);
FeatureCollectionWrapper wrapper = (FeatureCollectionWrapper) result;
result = wrapper.getFeatureCollection();
assertEquals("3.2.1", wrapper.getGmlVersion());
StringWriter writer = new StringWriter();
featureWriter.write((FeatureCollection)result,writer);
String expectedResult = FileUtilities.getStringFromFile(FileUtilities.getFileFromResource("org.constellation.wfs.xml.samplingPointCollection-2v2.xml"));
expectedResult = expectedResult.replace("EPSG_VERSION", EPSG_VERSION);
String sresult = writer.toString();
sresult = sresult.replaceAll("timeStamp=\"[^\"]*\" ", "timeStamp=\"\" ");
domCompare(expectedResult, sresult);
}
@Test
@Order(order=21)
public void schemaLocationTest() throws Exception {
List<QueryType> queries = new ArrayList<>();
queries.add(new QueryType(null, Arrays.asList(new QName("http://www.opengis.net/gml", "NamedPlaces")), null));
GetFeatureType requestGF = new GetFeatureType("WFS", "2.0.0", null, null, Integer.MAX_VALUE, queries, ResultTypeType.RESULTS, "text/gml; subtype=gml/3.1.1");
Object resultGF = worker.getFeature(requestGF);
assertTrue(resultGF instanceof FeatureCollectionWrapper);
FeatureCollectionWrapper wrapper = (FeatureCollectionWrapper) resultGF;
final Map<String, String> expResult = new HashMap<>();
expResult.put("http://www.opengis.net/gml/3.2", "http://geomatys.com/constellation/WS/wfs/test1?request=DescribeFeatureType&version=2.0.0&service=WFS&namespace=xmlns(ns1=http://www.opengis.net/gml/3.2)&typenames=ns1:NamedPlaces");
assertEquals(wrapper.getSchemaLocations(), expResult);
}
public static void domCompare(final Object actual, final Object expected) throws Exception {
final CstlDOMComparator comparator = new CstlDOMComparator(expected, actual);
comparator.ignoredAttributes.add("http://www.w3.org/2000/xmlns:*");
comparator.ignoredAttributes.add("http://www.w3.org/2001/XMLSchema-instance:schemaLocation");
comparator.compare();
}
}