package org.geopublishing.atlasStyler; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertTrue; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Random; import java.util.TreeSet; import javax.xml.transform.TransformerException; import org.geopublishing.atlasStyler.rulesLists.AbstractRulesList; import org.geopublishing.atlasStyler.rulesLists.AbstractRulesList.RulesListType; import org.geopublishing.atlasStyler.rulesLists.GraduatedColorRuleList; import org.geopublishing.atlasStyler.rulesLists.SinglePointSymbolRuleList; import org.geopublishing.atlasStyler.rulesLists.SinglePolygonSymbolRuleList; import org.geopublishing.atlasStyler.rulesLists.SingleRuleList; import org.geopublishing.atlasStyler.rulesLists.TextRuleList; import org.geopublishing.atlasStyler.rulesLists.UniqueValuesRuleList; import org.geopublishing.atlasStyler.swing.AsTestingUtil; import org.geotools.data.FeatureSource; import org.geotools.styling.PointSymbolizer; import org.geotools.styling.PolygonSymbolizer; import org.geotools.styling.Style; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; import org.opengis.filter.Filter; import org.opengis.filter.PropertyIsEqualTo; import com.vividsolutions.jts.geom.Point; import com.vividsolutions.jts.geom.Polygon; import de.schmitzm.geotools.FilterUtil; import de.schmitzm.geotools.feature.FeatureUtil; import de.schmitzm.geotools.feature.FeatureUtil.GeometryForm; import de.schmitzm.geotools.styling.StylingUtil; import de.schmitzm.geotools.testing.GTTestingUtil; import de.schmitzm.geotools.testing.GTTestingUtil.TestDatasetsVector; import de.schmitzm.testing.TestingClass; public class AbstractRulesListTest extends TestingClass { PropertyIsEqualTo f1 = FilterUtil.FILTER_FAC2.equals( FilterUtil.FILTER_FAC2.literal(3), FilterUtil.FILTER_FAC2.literal(3)); PropertyIsEqualTo f2 = FilterUtil.FILTER_FAC2.equals( FilterUtil.FILTER_FAC2.literal(3), FilterUtil.FILTER_FAC2.literal(3)); PropertyIsEqualTo f3 = FilterUtil.FILTER_FAC2.equals( FilterUtil.FILTER_FAC2.literal(3), FilterUtil.FILTER_FAC2.literal(3)); Random rand = new Random(); @Before public void setUp() throws Exception { } @After public void tearDown() throws Exception { } @Test public void testEnabledDisabledFilterViaSaveAndLoad() throws IOException { AtlasStylerVector as = AsTestingUtil .getAtlasStyler(TestDatasetsVector.polygonSnow); testRuleLists(as, false, "S", f1, false, "U", f1, false, "G", f3, false, "T", f1); testRuleLists(as, true, "single", f1, true, "unique", f3, true, "gradcolors", f3, true, "textLabeling", f1); testRuleLists(as, true, "S", null, true, "U", null, true, "G", null, false, "T", null); testRuleLists(as, false, "S", null, false, "U", null, false, "G", f2, true, "T", f3); } private void testRuleLists(AtlasStylerVector as, boolean sEnabled, String sTitle, Filter sFilter, boolean uEnabled, String uTitle, Filter uFilter, boolean gEnabled, String gTitle, Filter gFilter, boolean tEnabled, String tTitle, Filter tFilter) throws IOException, FileNotFoundException { // Create random min/max values to apply and test double sMin = 5000; double sMax = 10000; double gMin = 10000; double gMax = 15000; double uMin = 16000; double uMax = 16000 + 5000; double tMin = 0; double tMax = 33333333.; as.reset(); assertEquals(0, as.getRuleLists().size()); { SingleRuleList<?> singleRulesList = as.getRlf() .createSingleRulesList( AtlasStylerVector.getRuleTitleFor(as .getStyledFeatures()), true); singleRulesList.setMinScaleDenominator(sMin); singleRulesList.setMaxScaleDenominator(sMax); // RL_FILTER_APPLIED_STR UniqueValuesRuleList uniqueRulesList = as.getRlf() .createUniqueValuesRulesList(true); // GraduatedColorRuleList needs al least one rule to store the // enabled/disabled information assertEquals(-1, uniqueRulesList.getAllOthersRuleIdx()); uniqueRulesList.addDefaultRule(); uniqueRulesList.setMinScaleDenominator(uMin); uniqueRulesList.setMaxScaleDenominator(uMax); assertEquals(0, uniqueRulesList.getAllOthersRuleIdx()); GraduatedColorRuleList gradColorsRulesList = as.getRlf() .createGraduatedColorRuleList(true); // GraduatedColorRuleList needs al least one rule to store the // enabled/disabled information TreeSet<Double> classLimits = new TreeSet<Double>(); classLimits.add(1.); classLimits.add(2.); gradColorsRulesList.setClassLimits(classLimits); gradColorsRulesList.setMinScaleDenominator(gMin); gradColorsRulesList.setMaxScaleDenominator(gMax); TextRuleList textRulesList = as.getRlf().createTextRulesList(true); textRulesList.setMinScaleDenominator(tMin); textRulesList.setMaxScaleDenominator(tMax); // Enabled/Disabled setzen singleRulesList.setEnabled(sEnabled); uniqueRulesList.setEnabled(uEnabled); gradColorsRulesList.setEnabled(gEnabled); textRulesList.setEnabled(tEnabled); // Set title singleRulesList.setTitle(sTitle); uniqueRulesList.setTitle(uTitle); gradColorsRulesList.setTitle(gTitle); textRulesList.setTitle(tTitle); // Set filters singleRulesList.setRlFilter(sFilter); uniqueRulesList.setRlFilter(uFilter); gradColorsRulesList.setRlFilter(gFilter); textRulesList.setRlFilter(tFilter); // Ruleliste add to AS as.addRulesList(singleRulesList); as.addRulesList(uniqueRulesList); as.addRulesList(gradColorsRulesList); as.addRulesList(textRulesList); assertEquals(4, as.getRuleLists().size()); } File tf = File.createTempFile("junit", ".sld"); boolean saveStyleToSld = StylingUtil.saveStyleToSld(as.getStyle(), tf); assertTrue(saveStyleToSld); StylingUtil.validates(as.getStyle()); // New AtlasStyler, load the Styles as = new AtlasStylerVector( TestDatasetsVector.polygonSnow.getFeatureSource()); Style[] importStyle = StylingUtil.loadSLD(tf); as.importStyle(importStyle[0]); SingleRuleList singleRulesList = (SingleRuleList) as.getRuleLists() .get(3); UniqueValuesRuleList uniqueRulesList = (UniqueValuesRuleList) as .getRuleLists().get(2); GraduatedColorRuleList gradColorsRulesList = (GraduatedColorRuleList) as .getRuleLists().get(1); TextRuleList textRulesList = (TextRuleList) as.getRuleLists().get(0); // Compare on/off assertEquals(sEnabled, singleRulesList.isEnabled()); assertEquals(tEnabled, textRulesList.isEnabled()); assertEquals(gEnabled, gradColorsRulesList.isEnabled()); assertEquals(uEnabled, uniqueRulesList.isEnabled()); // Compare Titles assertEquals(sTitle, singleRulesList.getTitle()); assertEquals(tTitle, textRulesList.getTitle()); assertEquals(uTitle, uniqueRulesList.getTitle()); assertEquals(gTitle, gradColorsRulesList.getTitle()); // Filters assertEquals(sFilter, singleRulesList.getRlFilter()); assertEquals(gFilter, gradColorsRulesList.getRlFilter()); assertEquals(uFilter, uniqueRulesList.getRlFilter()); assertEquals(tFilter, textRulesList.getRlFilter()); // Min/Max scales assertEquals(sMin, singleRulesList.getMinScaleDenominator(), 0.00001); assertEquals(sMax, singleRulesList.getMaxScaleDenominator(), 0.00001); assertEquals(gMin, gradColorsRulesList.getMinScaleDenominator(), 0.00001); assertEquals(gMax, gradColorsRulesList.getMaxScaleDenominator(), 0.00001); // assertEquals(gMin, // gradColorsRulesList.getTemplate().getMinScaleDenominator(), // 0.00001); // assertEquals(gMax, // gradColorsRulesList.getTemplate().getMaxScaleDenominator(), // 0.00001); assertEquals(uMin, uniqueRulesList.getMinScaleDenominator(), 0.00001); assertEquals(uMax, uniqueRulesList.getMaxScaleDenominator(), 0.00001); // assertEquals(uMin, // uniqueRulesList.getTemplate().getMinScaleDenominator(), 0.00001); // assertEquals(uMax, // uniqueRulesList.getTemplate().getMaxScaleDenominator(), 0.00001); assertEquals(tMin, textRulesList.getMinScaleDenominator(), 0.00001); assertEquals(tMax, textRulesList.getMaxScaleDenominator(), 0.00001); } @Test public void testValuesFor() throws IOException { FeatureSource<SimpleFeatureType, SimpleFeature> fs = GTTestingUtil.TestDatasetsVector.lineBrokenQuix .getFeatureSource(); final SimpleFeatureType schema = fs.getSchema(); final Collection<String> numAttrs = FeatureUtil.getNumericalFieldNames( schema, false); final Collection<String> valueAttrs = FeatureUtil .getValueFieldNames(schema); assertEquals(0, numAttrs.size() - valueAttrs.size()); assertEquals(GeometryForm.LINE, FeatureUtil.getGeometryForm(schema)); List<RulesListType> rlts = Arrays .asList(AbstractRulesList.RulesListType.valuesFor( FeatureUtil.getGeometryForm(schema), schema)); assertTrue(rlts.contains(RulesListType.SINGLE_SYMBOL_LINE)); assertTrue(rlts.contains(RulesListType.QUANTITIES_COLORIZED_LINE)); assertTrue(rlts.contains(RulesListType.UNIQUE_VALUE_LINE)); } @Test public void testClone_SinglePointSymbolRuleList() throws IOException, TransformerException, CloneNotSupportedException { // Create Symbolizer Style style = FeatureUtil.createDefaultStyle(FeatureUtil .createFeatureType(Point.class).getGeometryDescriptor()); PointSymbolizer symb = (PointSymbolizer) style.featureTypeStyles() .get(0).rules().get(0).symbolizers().get(0); assertNotNull(symb); // Add it to RuleList SinglePointSymbolRuleList list = new SinglePointSymbolRuleList(""); list.addSymbolizer(symb); // Clone SinglePointSymbolRuleList clonedList = list.clone(false); PointSymbolizer psCloned = clonedList.getSymbolizers().get(0); assertNotNull(psCloned); PointSymbolizer ps = list.getSymbolizers().get(0); assertNotNull(ps); assertNotSame(ps, psCloned); } @Test public void testClone_SinglePolygonSymbolRuleList() throws IOException, TransformerException, CloneNotSupportedException { // Create Symbolizer Style style = FeatureUtil.createDefaultStyle(FeatureUtil .createFeatureType(Polygon.class).getGeometryDescriptor()); PolygonSymbolizer symb = (PolygonSymbolizer) style.featureTypeStyles() .get(0).rules().get(0).getSymbolizers()[0]; assertNotNull(symb); // Add it to RuleList SinglePolygonSymbolRuleList list = new SinglePolygonSymbolRuleList(""); list.addSymbolizer(symb); // Clone SinglePolygonSymbolRuleList clonedList = list.clone(false); PolygonSymbolizer psCloned = clonedList.getSymbolizers().get(0); assertNotNull(psCloned); PolygonSymbolizer ps = list.getSymbolizers().get(0); assertNotNull(ps); assertNotSame(ps, psCloned); } @Test public void testSaveToStyle() throws IOException, TransformerException { Style style = FeatureUtil.createDefaultStyle(FeatureUtil .createFeatureType(Point.class).getGeometryDescriptor()); File tempF = File.createTempFile("sld", "junit"); System.out.println(tempF); StylingUtil.saveStyleToSld(style, tempF); } }