/** * Copyright (C) 2014 Cohesive Integrations, LLC (info@cohesiveintegrations.com) * * 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 net.di2e.ecdr.querylanguage.basic; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import java.util.Collections; import javax.ws.rs.core.MultivaluedMap; import net.di2e.ecdr.api.config.SortTypeConfiguration; import net.di2e.ecdr.commons.constants.SearchConstants; import net.di2e.ecdr.commons.util.DateTypeMap; import net.di2e.ecdr.querylanguage.basic.GeospatialCriteria.SpatialOperator; import org.apache.cxf.jaxrs.impl.MetadataMap; import org.junit.Test; import org.mockito.Mockito; import ddf.catalog.filter.FilterBuilder; /** * Unit tests for BasicQueryParser class */ public class CDRKeywordQueryLanguageTest { @Test public void testGeospatialBasicQueryParser() throws Exception { FilterBuilder filterBuilder = mock( FilterBuilder.class ); CDRKeywordQueryLanguage lang = new CDRKeywordQueryLanguage( filterBuilder, Collections.<SortTypeConfiguration> emptyList(), new DateTypeMap( null ) ); // point radius GeospatialCriteria geospatialCriteria = lang.createGeospatialCriteria( "5", "10", "15", null, null, null, SpatialOperator.Contains.toString(), 10.0 ); assertTrue( geospatialCriteria.isPointRadius() ); assertFalse( geospatialCriteria.isBBox() ); assertEquals( new Double( 5.0 ), geospatialCriteria.getRadius() ); assertEquals( new Double(10.0), geospatialCriteria.getLatitude()); assertEquals( new Double( 15.0 ), geospatialCriteria.getLongitude() ); assertEquals( SpatialOperator.Contains, geospatialCriteria.getSpatialOperator() ); // bbox geospatialCriteria = lang.createGeospatialCriteria( null, null, null, "-1 -2 3 4", null, null, SpatialOperator.Overlaps.toString(), 10.0 ); assertTrue( geospatialCriteria.isBBox() ); assertFalse( geospatialCriteria.isPointRadius() ); assertEquals( "POLYGON((-1.0 -2.0,-1.0 4.0,3.0 4.0,3.0 -2.0,-1.0 -2.0))", geospatialCriteria.getGeometryWKT() ); assertEquals( SpatialOperator.Overlaps, geospatialCriteria.getSpatialOperator() ); // geometry geospatialCriteria = lang.createGeospatialCriteria( null, null, null, null, "POLYGON((-5.0 -6.0,-5.0 4.0,3.0 4.0,3.0 -6.0,-5.0 -6.0))", null, SpatialOperator.Within.toString(), 10.0 ); assertEquals( "POLYGON((-5.0 -6.0,-5.0 4.0,3.0 4.0,3.0 -6.0,-5.0 -6.0))", geospatialCriteria.getGeometryWKT() ); assertFalse( geospatialCriteria.isBBox() ); assertFalse( geospatialCriteria.isPointRadius() ); assertEquals( SpatialOperator.Within, geospatialCriteria.getSpatialOperator() ); // polygon geospatialCriteria = lang.createGeospatialCriteria( null, null, null, null, null, "-5.0, -166.0,-5.0, 4.0,3.0, 4.0,3.0, -166.0,-5.0, -166.0", null, 10.0 ); assertEquals( "POLYGON((-166.0 -5.0,-166.0 3.0,4.0 3.0,4.0 -5.0,-166.0 -5.0))", geospatialCriteria.getGeometryWKT() ); assertFalse( geospatialCriteria.isBBox() ); assertFalse( geospatialCriteria.isPointRadius() ); assertEquals( SpatialOperator.Overlaps, geospatialCriteria.getSpatialOperator() ); geospatialCriteria = lang.createGeospatialCriteria( null, null, null, null, "POLYGON((-5.0 -6.0,-5.0 4.0,3.0 4.0,3.0 -6.0,-5.0 -6.0))", null, SpatialOperator.Disjoint.toString(), 10.0 ); assertEquals( "POLYGON((-5.0 -6.0,-5.0 4.0,3.0 4.0,3.0 -6.0,-5.0 -6.0))", geospatialCriteria.getGeometryWKT() ); assertFalse( geospatialCriteria.isBBox() ); assertFalse( geospatialCriteria.isPointRadius() ); assertEquals( SpatialOperator.Disjoint, geospatialCriteria.getSpatialOperator() ); } @Test public void testTemporalBasicQueryParser() throws Exception { DateTypeMap dateType = mock( DateTypeMap.class ); Mockito.when( dateType.containsKey( "created" ) ).thenReturn( true ); Mockito.when( dateType.containsKey( "" ) ).thenReturn( false ); Mockito.when( dateType.getMappedValue( "created" ) ).thenReturn( "created" ); FilterBuilder filterBuilder = mock( FilterBuilder.class ); CDRKeywordQueryLanguage lang = new CDRKeywordQueryLanguage( filterBuilder, Collections.<SortTypeConfiguration> emptyList(), dateType ); lang.createTemporalCriteria( "2014-05-05T00:00:00Z", "2014-05-05T00:00:00Z", "created", new StringBuilder(), "default" ); lang.createTemporalCriteria( "2014-05-05T00:00:00Z", "2014-05-05T00:00:00Z", "", new StringBuilder(), "created" ); } @Test public void testKeywordFuzzyBasicQueryParser() throws Exception { FilterBuilder filterBuilder = mock( FilterBuilder.class ); CDRKeywordQueryLanguage lang = new CDRKeywordQueryLanguage( filterBuilder, Collections.<SortTypeConfiguration> emptyList(), new DateTypeMap( null ) ); MultivaluedMap<String, String> props = new MetadataMap<String, String>(); props.putSingle( SearchConstants.KEYWORD_PARAMETER, "test" ); TextualCriteria criteria = lang.getTextualCriteria( props, false ); assertTrue( !criteria.isFuzzy() ); criteria = lang.getTextualCriteria( props, true ); assertTrue( criteria.isFuzzy() ); props.putSingle( SearchConstants.FUZZY_PARAMETER, "1" ); criteria = lang.getTextualCriteria( props, false ); assertTrue( criteria.isFuzzy() ); props.remove( SearchConstants.FUZZY_PARAMETER ); props.putSingle( SearchConstants.FUZZY_PARAMETER, "0" ); criteria = lang.getTextualCriteria( props, true ); assertTrue( !criteria.isFuzzy() ); } }