/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.catalog; import static org.geoserver.catalog.Predicates.contains; import static org.geoserver.catalog.Predicates.equal; import static org.junit.Assert.*; import java.net.URI; import java.util.Arrays; import java.util.HashSet; import java.util.Set; import junit.framework.TestCase; import org.geoserver.catalog.impl.AuthorityURL; import org.geoserver.catalog.impl.CoverageInfoImpl; import org.geoserver.catalog.impl.CoverageStoreInfoImpl; import org.geoserver.catalog.impl.DataStoreInfoImpl; import org.geoserver.catalog.impl.FeatureTypeInfoImpl; import org.geoserver.catalog.impl.LayerInfoImpl; import org.geoserver.catalog.impl.NamespaceInfoImpl; import org.geoserver.catalog.impl.StyleInfoImpl; import org.geoserver.catalog.impl.WorkspaceInfoImpl; import org.junit.Before; import org.junit.Test; import org.opengis.filter.MultiValuedFilter.MatchAction; public class PredicatesTest { private WorkspaceInfoImpl ws; private NamespaceInfoImpl ns; private DataStoreInfoImpl dataStore; private FeatureTypeInfoImpl featureType; private CoverageStoreInfoImpl coverageStore; private CoverageInfoImpl coverage; private LayerInfoImpl vectorLayer, rasterLayer; private StyleInfoImpl defaultStyle; private StyleInfoImpl style1; private StyleInfoImpl style2; @Before public void setUp() throws Exception { ns = new NamespaceInfoImpl(); ns.setId("nsid"); ns.setPrefix("test"); ns.setURI("http://example.com"); ws = new WorkspaceInfoImpl(); ws.setId("wsid"); ws.setName("ws1"); dataStore = new DataStoreInfoImpl(null); dataStore.getConnectionParameters().put("boolParam", Boolean.TRUE); dataStore.getConnectionParameters().put("intParam", Integer.valueOf(1001)); dataStore.getConnectionParameters().put("uriParam", new URI("http://some.place.net")); dataStore.setDescription("dataStore description"); dataStore.setWorkspace(ws); dataStore.setName("dataStore"); dataStore.setEnabled(true); dataStore.setId("dataStoreId"); dataStore.setType("TestType"); featureType = new FeatureTypeInfoImpl(null); featureType.setId("featureTypeId"); featureType.setName("featureType"); featureType.setNamespace(ns); featureType.setAbstract("featureType abstract"); featureType.setEnabled(true); featureType.setMaxFeatures(5000); featureType.setStore(dataStore); featureType.setTitle("featureType title"); vectorLayer = new LayerInfoImpl(); vectorLayer.setResource(featureType); featureType.setAbstract("vectorLayer abstract"); vectorLayer.setAdvertised(true); vectorLayer.setEnabled(true); vectorLayer.setName("vectorLayer"); vectorLayer.setId("vectorLayerId"); vectorLayer.setType(PublishedType.VECTOR); defaultStyle = new StyleInfoImpl(null); defaultStyle.setName("default"); defaultStyle.setId("defaultStyle_id"); vectorLayer.setDefaultStyle(defaultStyle); style1 = new StyleInfoImpl(null); style1.setName("style1"); style1.setId("style1_id"); style2 = new StyleInfoImpl(null); style2.setName("style2"); style2.setId("style2_id"); vectorLayer.getStyles().add(style1); vectorLayer.getStyles().add(style2); } @Test public void testPropertyEqualsSimple() { assertTrue(equal("prefix", ns.getPrefix()).evaluate(ns)); assertTrue(equal("id", ws.getId()).evaluate(ws)); assertFalse(equal("id", "somethingElse").evaluate(ws)); Set<StyleInfo> styles = new HashSet<StyleInfo>(); styles.add(style1); assertFalse(equal("styles", styles, MatchAction.ALL).evaluate(vectorLayer)); assertTrue(equal("styles", styles, MatchAction.ANY).evaluate(vectorLayer)); styles.add(style2); assertTrue(equal("styles", styles).evaluate(vectorLayer)); } @Test public void testPropertyNotEqualsSimple() { assertTrue(Predicates.notEqual("id", "somethingElse").evaluate(ws)); } @Test public void testPropertyEqualsCompound() { assertTrue(equal("resource.id", featureType.getId()).evaluate(vectorLayer)); assertTrue(equal("resource.maxFeatures", featureType.getMaxFeatures()) .evaluate(vectorLayer)); assertTrue(equal("resource.store.type", dataStore.getType()).evaluate(vectorLayer)); assertTrue(equal("resource.store.connectionParameters.boolParam", true).evaluate( vectorLayer)); assertFalse(equal("resource.store.connectionParameters.boolParam", false).evaluate( vectorLayer)); ws.getMetadata().put("checkMe", new java.util.Date(1000)); assertTrue(equal("metadata.checkMe", new java.util.Date(1000)).evaluate(ws)); assertFalse(equal("resource.store.someNonExistentProperty", "someValue").evaluate( vectorLayer)); } @Test public void testPropertyEqualsConverters() { Object expected; expected = featureType.getMaxFeatures(); assertTrue(equal("resource.maxFeatures", expected).evaluate(vectorLayer)); expected = String.valueOf(featureType.getMaxFeatures()); assertTrue(equal("resource.maxFeatures", expected).evaluate(vectorLayer)); expected = new Double(featureType.getMaxFeatures()); assertTrue(equal("resource.maxFeatures", expected).evaluate(vectorLayer)); expected = "true"; assertTrue(equal("resource.store.connectionParameters.boolParam", expected).evaluate( vectorLayer)); expected = "false"; assertFalse(equal("resource.store.connectionParameters.boolParam", false).evaluate( vectorLayer)); ws.getMetadata().put("checkMe", new java.util.Date(1000)); expected = new java.sql.Timestamp(1000); assertTrue(equal("resource.store.workspace.metadata.checkMe", expected).evaluate( vectorLayer)); assertFalse(equal("resource.store.someNonExistentProperty", "someValue").evaluate( vectorLayer)); } @Test public void testPropertyEqualsIndexed() { AuthorityURLInfo aurl1 = new AuthorityURL(); aurl1.setName("url1"); AuthorityURLInfo aurl2 = new AuthorityURL(); aurl2.setName("url2"); AuthorityURLInfo aurl3 = new AuthorityURL(); aurl3.setName("url3"); vectorLayer.setAuthorityURLs(Arrays.asList(aurl1, aurl2, aurl3)); assertTrue(equal("authorityURLs[1]", aurl1).evaluate(vectorLayer)); assertTrue(equal("authorityURLs[1].name", aurl1.getName()).evaluate(vectorLayer)); assertTrue(equal("authorityURLs[2]", aurl2).evaluate(vectorLayer)); assertTrue(equal("authorityURLs[2].name", aurl2.getName()).evaluate(vectorLayer)); assertTrue(equal("authorityURLs[3]", aurl3).evaluate(vectorLayer)); assertTrue(equal("authorityURLs[3].name", aurl3.getName()).evaluate(vectorLayer)); } @Test public void testPropertyEqualsAny() { assertTrue(equal("styles.id", style1.getId()).evaluate(vectorLayer)); assertTrue(equal("styles.name", style2.getName()).evaluate(vectorLayer)); assertFalse(equal("styles.id", "nonExistent").evaluate(vectorLayer)); } @Test public void testContains() { assertTrue(contains("URI", "example").evaluate(ns)); assertFalse(contains("resource.ns.URI", "example").evaluate(vectorLayer)); assertTrue(contains("resource.namespace.URI", "example").evaluate(vectorLayer)); assertTrue(contains("id", "vectorLayerId").evaluate(vectorLayer)); assertTrue(contains("id", "vectorLayerID").evaluate(vectorLayer)); assertTrue(contains("id", "torLAY").evaluate(vectorLayer)); assertTrue(contains("styles.name", "style2").evaluate(vectorLayer)); assertTrue(contains("styles.name", "Style2").evaluate(vectorLayer)); assertTrue(contains("styles.name", "YL").evaluate(vectorLayer)); assertFalse(contains("styles.name", "style3").evaluate(vectorLayer)); String name = featureType.getName(); assertTrue(contains("resource.name", name).evaluate(vectorLayer)); assertFalse(contains("resource.name", "?").evaluate(vectorLayer)); featureType.setName("name?.*$[]&()"); assertTrue(contains("resource.name", "?").evaluate(vectorLayer)); assertTrue(contains("resource.name", ".").evaluate(vectorLayer)); assertTrue(contains("resource.name", "*").evaluate(vectorLayer)); featureType.setName(null); assertFalse(contains("resource.name", name).evaluate(vectorLayer)); } }