Search in sources :

Example 1 with SpatialOpsType

use of org.geotoolkit.ogc.xml.v100.SpatialOpsType in project ddf by codice.

the class TestWfsSource method testIntersectQuery.

@Test
public void testIntersectQuery() throws UnsupportedQueryException, WfsException, SecurityServiceException {
    setUp(ONE_GML_PROPERTY_SCHEMA, Arrays.asList(new Intersect(), new BBOX()), SRS_NAME, ONE_FEATURE, null);
    Filter intersectFilter = builder.attribute(Metacard.ANY_GEO).is().intersecting().wkt(POLYGON_WKT);
    QueryImpl intersectQuery = new QueryImpl(intersectFilter);
    intersectQuery.setPageSize(MAX_FEATURES);
    ArgumentCaptor<GetFeatureType> captor = ArgumentCaptor.forClass(GetFeatureType.class);
    source.query(new QueryRequestImpl(intersectQuery));
    verify(mockWfs).getFeature(captor.capture());
    GetFeatureType getFeatureType = captor.getValue();
    assertMaxFeatures(getFeatureType, intersectQuery);
    assertTrue(getFeatureType.getQuery().size() == ONE_FEATURE);
    QueryType query = getFeatureType.getQuery().get(0);
    assertTrue(query.getTypeName().equals(sampleFeatures.get(0)));
    assertTrue(query.getFilter().isSetSpatialOps());
    assertTrue(query.getFilter().getSpatialOps().getValue() instanceof SpatialOpsType);
}
Also used : Intersect(ogc.schema.opengis.filter_capabilities.v_1_0_0.Intersect) QueryImpl(ddf.catalog.operation.impl.QueryImpl) Filter(org.opengis.filter.Filter) BBOX(ogc.schema.opengis.filter_capabilities.v_1_0_0.BBOX) QueryRequestImpl(ddf.catalog.operation.impl.QueryRequestImpl) SpatialOpsType(ogc.schema.opengis.filter.v_1_0_0.SpatialOpsType) QueryType(ogc.schema.opengis.wfs.v_1_0_0.QueryType) GetFeatureType(ogc.schema.opengis.wfs.v_1_0_0.GetFeatureType) Test(org.junit.Test)

Example 2 with SpatialOpsType

use of org.geotoolkit.ogc.xml.v100.SpatialOpsType in project geotoolkit by Geomatys.

the class FilterToOGC100Converter method apply.

@Override
public FilterType apply(final Filter filter) {
    if (filter == null) {
        return null;
    }
    JAXBElement<?> sf = visit(filter);
    if (sf == null) {
        return null;
    }
    final FilterType ft = ogc_factory.createFilterType();
    if (sf.getValue() instanceof ComparisonOpsType) {
        ft.setComparisonOps((JAXBElement<? extends ComparisonOpsType>) sf);
    } else if (sf.getValue() instanceof LogicOpsType) {
        ft.setLogicOps((JAXBElement<? extends LogicOpsType>) sf);
    } else if (sf.getValue() instanceof SpatialOpsType) {
        ft.setSpatialOps((JAXBElement<? extends SpatialOpsType>) sf);
    } else {
        // should not happen
        throw new IllegalArgumentException("invalide filter element : " + sf);
    }
    return ft;
}
Also used : FilterType(org.geotoolkit.ogc.xml.v100.FilterType) SpatialOpsType(org.geotoolkit.ogc.xml.v100.SpatialOpsType) ComparisonOpsType(org.geotoolkit.ogc.xml.v100.ComparisonOpsType) JAXBElement(javax.xml.bind.JAXBElement) LogicOpsType(org.geotoolkit.ogc.xml.v100.LogicOpsType)

Example 3 with SpatialOpsType

use of org.geotoolkit.ogc.xml.v100.SpatialOpsType in project geotoolkit by Geomatys.

the class OGC110toGTTransformer method visitLogicOp.

/**
 * Transform a SLD logic Filter v1.1 in GT filter.
 */
public Filter visitLogicOp(final JAXBElement<? extends org.geotoolkit.ogc.xml.v110.LogicOpsType> jax) throws NoSuchAuthorityCodeException, FactoryException {
    final org.geotoolkit.ogc.xml.v110.LogicOpsType ops = jax.getValue();
    final String OpName = jax.getName().getLocalPart();
    if (ops instanceof org.geotoolkit.ogc.xml.v110.UnaryLogicOpType) {
        final org.geotoolkit.ogc.xml.v110.UnaryLogicOpType unary = (org.geotoolkit.ogc.xml.v110.UnaryLogicOpType) ops;
        if (OGCJAXBStatics.FILTER_LOGIC_NOT.equalsIgnoreCase(OpName)) {
            Filter filter = null;
            if (unary.getComparisonOps() != null) {
                filter = visitComparisonOp(unary.getComparisonOps());
            } else if (unary.getLogicOps() != null) {
                filter = visitLogicOp(unary.getLogicOps());
            } else if (unary.getSpatialOps() != null) {
                filter = visitSpatialOp(unary.getSpatialOps());
            }
            if (filter == null) {
                throw new IllegalArgumentException("Invalide filter element" + unary);
            }
            return filterFactory.not(filter);
        }
    } else if (ops instanceof org.geotoolkit.ogc.xml.v110.BinaryLogicOpType) {
        final org.geotoolkit.ogc.xml.v110.BinaryLogicOpType binary = (org.geotoolkit.ogc.xml.v110.BinaryLogicOpType) ops;
        if (OGCJAXBStatics.FILTER_LOGIC_AND.equalsIgnoreCase(OpName)) {
            final List<Filter> filters = new ArrayList<Filter>();
            for (final JAXBElement<? extends ComparisonOpsType> ele : binary.getComparisonOps()) {
                if (ele.getValue() instanceof ComparisonOpsType) {
                    filters.add(visitComparisonOp(ele));
                }
            }
            for (final JAXBElement<? extends LogicOpsType> ele : binary.getLogicOps()) {
                if (ele.getValue() instanceof LogicOpsType) {
                    filters.add(visitLogicOp(ele));
                }
            }
            for (final JAXBElement<? extends SpatialOpsType> ele : binary.getSpatialOps()) {
                if (ele.getValue() instanceof SpatialOpsType) {
                    filters.add(visitSpatialOp(ele));
                }
            }
            if (filters.isEmpty()) {
                return Filter.include();
            } else if (filters.size() == 1) {
                return filters.get(0);
            } else {
                return filterFactory.and((List) filters);
            }
        } else if (OGCJAXBStatics.FILTER_LOGIC_OR.equalsIgnoreCase(OpName)) {
            final List<Filter> filters = new ArrayList<Filter>();
            for (final JAXBElement<? extends ComparisonOpsType> ele : binary.getComparisonOps()) {
                if (ele.getValue() instanceof ComparisonOpsType) {
                    filters.add(visitComparisonOp(ele));
                }
            }
            for (final JAXBElement<? extends LogicOpsType> ele : binary.getLogicOps()) {
                if (ele.getValue() instanceof LogicOpsType) {
                    filters.add(visitLogicOp(ele));
                }
            }
            for (final JAXBElement<? extends SpatialOpsType> ele : binary.getSpatialOps()) {
                if (ele.getValue() instanceof SpatialOpsType) {
                    filters.add(visitSpatialOp(ele));
                }
            }
            if (filters.isEmpty()) {
                return Filter.include();
            } else if (filters.size() == 1) {
                return filters.get(0);
            } else {
                return filterFactory.or((List) filters);
            }
        }
    }
    throw new IllegalArgumentException("Unknowed filter element" + jax);
}
Also used : ArrayList(java.util.ArrayList) LogicOpsType(org.geotoolkit.ogc.xml.v110.LogicOpsType) ComparisonOpsType(org.geotoolkit.ogc.xml.v110.ComparisonOpsType) JAXBElement(javax.xml.bind.JAXBElement) LogicOpsType(org.geotoolkit.ogc.xml.v110.LogicOpsType) Filter(org.opengis.filter.Filter) SpatialOpsType(org.geotoolkit.ogc.xml.v110.SpatialOpsType) ArrayList(java.util.ArrayList) List(java.util.List)

Example 4 with SpatialOpsType

use of org.geotoolkit.ogc.xml.v100.SpatialOpsType in project ddf by codice.

the class TestWfsSource method testBboxQuery.

@Test
public void testBboxQuery() throws UnsupportedQueryException, WfsException, SecurityServiceException {
    List<Object> bbox = new ArrayList<Object>();
    bbox.add(new BBOX());
    setUp(ONE_GML_PROPERTY_SCHEMA, bbox, SRS_NAME, ONE_FEATURE, null);
    Filter intersectFilter = builder.attribute(Metacard.ANY_GEO).is().intersecting().wkt(POLYGON_WKT);
    QueryImpl intersectQuery = new QueryImpl(intersectFilter);
    intersectQuery.setPageSize(MAX_FEATURES);
    ArgumentCaptor<GetFeatureType> captor = ArgumentCaptor.forClass(GetFeatureType.class);
    source.query(new QueryRequestImpl(intersectQuery));
    verify(mockWfs).getFeature(captor.capture());
    GetFeatureType getFeatureType = captor.getValue();
    assertMaxFeatures(getFeatureType, intersectQuery);
    assertTrue(getFeatureType.getQuery().size() == ONE_FEATURE);
    QueryType query = getFeatureType.getQuery().get(0);
    assertTrue(query.getTypeName().equals(sampleFeatures.get(0)));
    assertTrue(query.getFilter().isSetSpatialOps());
    assertTrue(query.getFilter().getSpatialOps().getValue() instanceof SpatialOpsType);
}
Also used : QueryImpl(ddf.catalog.operation.impl.QueryImpl) Filter(org.opengis.filter.Filter) BBOX(ogc.schema.opengis.filter_capabilities.v_1_0_0.BBOX) QueryRequestImpl(ddf.catalog.operation.impl.QueryRequestImpl) SpatialOpsType(ogc.schema.opengis.filter.v_1_0_0.SpatialOpsType) ArrayList(java.util.ArrayList) QueryType(ogc.schema.opengis.wfs.v_1_0_0.QueryType) GetFeatureType(ogc.schema.opengis.wfs.v_1_0_0.GetFeatureType) Test(org.junit.Test)

Example 5 with SpatialOpsType

use of org.geotoolkit.ogc.xml.v100.SpatialOpsType in project ddf by codice.

the class TestWfsSource method testGmlImport.

@Test
public void testGmlImport() throws UnsupportedQueryException, WfsException, SecurityServiceException {
    List<Object> bbox = new ArrayList<Object>();
    bbox.add(new BBOX());
    setUp(GML_IMPORT_SCHEMA, bbox, SRS_NAME, ONE_FEATURE, null);
    Filter intersectFilter = builder.attribute(Metacard.ANY_GEO).is().intersecting().wkt(POLYGON_WKT);
    QueryImpl intersectQuery = new QueryImpl(intersectFilter);
    intersectQuery.setPageSize(MAX_FEATURES);
    ArgumentCaptor<GetFeatureType> captor = ArgumentCaptor.forClass(GetFeatureType.class);
    source.query(new QueryRequestImpl(intersectQuery));
    verify(mockWfs).getFeature(captor.capture());
    GetFeatureType getFeatureType = captor.getValue();
    assertMaxFeatures(getFeatureType, intersectQuery);
    assertTrue(getFeatureType.getQuery().size() == ONE_FEATURE);
    QueryType query = getFeatureType.getQuery().get(0);
    assertTrue(query.getTypeName().equals(sampleFeatures.get(0)));
    assertTrue(query.getFilter().isSetSpatialOps());
    assertTrue(query.getFilter().getSpatialOps().getValue() instanceof SpatialOpsType);
}
Also used : QueryImpl(ddf.catalog.operation.impl.QueryImpl) Filter(org.opengis.filter.Filter) BBOX(ogc.schema.opengis.filter_capabilities.v_1_0_0.BBOX) QueryRequestImpl(ddf.catalog.operation.impl.QueryRequestImpl) SpatialOpsType(ogc.schema.opengis.filter.v_1_0_0.SpatialOpsType) ArrayList(java.util.ArrayList) QueryType(ogc.schema.opengis.wfs.v_1_0_0.QueryType) GetFeatureType(ogc.schema.opengis.wfs.v_1_0_0.GetFeatureType) Test(org.junit.Test)

Aggregations

JAXBElement (javax.xml.bind.JAXBElement)5 Filter (org.opengis.filter.Filter)5 QueryImpl (ddf.catalog.operation.impl.QueryImpl)3 QueryRequestImpl (ddf.catalog.operation.impl.QueryRequestImpl)3 ArrayList (java.util.ArrayList)3 SpatialOpsType (ogc.schema.opengis.filter.v_1_0_0.SpatialOpsType)3 BBOX (ogc.schema.opengis.filter_capabilities.v_1_0_0.BBOX)3 GetFeatureType (ogc.schema.opengis.wfs.v_1_0_0.GetFeatureType)3 QueryType (ogc.schema.opengis.wfs.v_1_0_0.QueryType)3 Test (org.junit.Test)3 Expression (org.opengis.filter.Expression)3 List (java.util.List)2 ComparisonOpsType (org.geotoolkit.ogc.xml.v100.ComparisonOpsType)2 LogicOpsType (org.geotoolkit.ogc.xml.v100.LogicOpsType)2 PropertyNameType (org.geotoolkit.ogc.xml.v100.PropertyNameType)2 SpatialOpsType (org.geotoolkit.ogc.xml.v100.SpatialOpsType)2 SpatialOpsType (org.geotoolkit.ogc.xml.v110.SpatialOpsType)2 Intersect (ogc.schema.opengis.filter_capabilities.v_1_0_0.Intersect)1 BoxType (org.geotoolkit.gml.xml.v212.BoxType)1 AbstractGeometryType (org.geotoolkit.gml.xml.v311.AbstractGeometryType)1