package mil.nga.giat.geowave.adapter.vector.query.cql; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.List; import java.util.UUID; import mil.nga.giat.geowave.adapter.vector.FeatureDataAdapter; import mil.nga.giat.geowave.core.geotime.ingest.SpatialDimensionalityTypeProvider; import mil.nga.giat.geowave.core.store.filter.DistributableFilterList; import mil.nga.giat.geowave.core.store.filter.DistributableQueryFilter; import mil.nga.giat.geowave.core.store.filter.QueryFilter; import mil.nga.giat.geowave.core.store.index.PrimaryIndex; import mil.nga.giat.geowave.core.store.util.DataStoreUtils; import org.geotools.data.DataUtilities; import org.geotools.feature.SchemaException; import org.geotools.feature.simple.SimpleFeatureBuilder; import org.geotools.filter.FilterFactoryImpl; import org.geotools.filter.text.cql2.CQLException; import org.junit.Before; import org.junit.Test; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; import org.opengis.feature.type.AttributeDescriptor; import org.opengis.filter.Filter; import org.opengis.filter.expression.Expression; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.GeometryFactory; public class CQLQueryFilterTest { SimpleFeatureType type; Object[] defaults; GeometryFactory factory = new GeometryFactory(); @Before public void setup() throws SchemaException, CQLException { type = DataUtilities.createType( "geostuff", "geom:Geometry:srid=4326,pop:java.lang.Long,pid:String"); final List<AttributeDescriptor> descriptors = type.getAttributeDescriptors(); defaults = new Object[descriptors.size()]; int p = 0; for (final AttributeDescriptor descriptor : descriptors) { defaults[p++] = descriptor.getDefaultValue(); } } @Test public void test() { final FilterFactoryImpl factory = new FilterFactoryImpl(); final Expression exp1 = factory.property("pid"); final Expression exp2 = factory.literal("a89dhd-123-abc"); final Filter f = factory.equal( exp1, exp2, false); final FeatureDataAdapter adapter = new FeatureDataAdapter( type); final CQLQuery cqlQuery = new CQLQuery( null, f, adapter); final PrimaryIndex spatialIndex = new SpatialDimensionalityTypeProvider().createPrimaryIndex(); final List<QueryFilter> filters = cqlQuery.createFilters(spatialIndex.getIndexModel()); final List<DistributableQueryFilter> dFilters = new ArrayList<DistributableQueryFilter>(); for (final QueryFilter filter : filters) { dFilters.add((DistributableQueryFilter) filter); } final DistributableFilterList dFilterList = new DistributableFilterList( dFilters); assertTrue(dFilterList.accept( spatialIndex.getIndexModel(), DataStoreUtils.getEncodings( spatialIndex, adapter.encode( createFeature(), spatialIndex.getIndexModel())).get( 0))); } private SimpleFeature createFeature() { final SimpleFeature instance = SimpleFeatureBuilder.build( type, defaults, UUID.randomUUID().toString()); instance.setAttribute( "pop", Long.valueOf(100)); instance.setAttribute( "pid", "a89dhd-123-abc"); instance.setAttribute( "geom", factory.createPoint(new Coordinate( 27.25, 41.25))); return instance; } }