@Test public void testTextSymbolizerArraySingleValue() throws Exception { TextSymbolizer ts = sb.createTextSymbolizer(Color.BLACK, (Font) null, "label"); ts.getOptions().put(TextSymbolizer.GRAPHIC_MARGIN_KEY, "10"); ts.accept(visitor); TextSymbolizer clone = (TextSymbolizer) visitor.getCopy(); assertEquals("20", clone.getOptions().get(TextSymbolizer.GRAPHIC_MARGIN_KEY)); }
@Test public void testTextSymbolizer() throws Exception { TextSymbolizer ts = sb.createTextSymbolizer(Color.BLACK, (Font) null, "label"); ts.getOptions().put(TextSymbolizer.MAX_DISPLACEMENT_KEY, "10"); ts.getOptions().put(TextSymbolizer.GRAPHIC_MARGIN_KEY, "10 20"); ts.accept(visitor); TextSymbolizer clone = (TextSymbolizer) visitor.getCopy(); assertEquals("20", clone.getOptions().get(TextSymbolizer.MAX_DISPLACEMENT_KEY)); assertEquals("20 40", clone.getOptions().get(TextSymbolizer.GRAPHIC_MARGIN_KEY)); }
@Test public void testDynamicStroke() throws Exception { Stroke original = sb.createStroke(Color.RED, 2); original.setDashArray(Arrays.asList((Expression) ff.literal("5 10"))); original.accept(visitor); Stroke clone = (Stroke) visitor.getCopy(); assertEquals(4.0d, Double.valueOf((String) clone.getWidth().evaluate(null)), 0.001); assertNotNull(original.dashArray()); assertEquals(1, original.dashArray().size()); assertEquals("10.0 20.0", ((Expression) clone.dashArray().get(0)).evaluate(null)); }
@Test public void testStyleDuplication() throws IllegalFilterException { // create a style Style oldStyle = sb.createStyle("FTSName", sf.createPolygonSymbolizer()); oldStyle.getFeatureTypeStyles()[0].setSemanticTypeIdentifiers( new String[] {"simple", "generic:geometry"}); // duplicate it oldStyle.accept(visitor); Style newStyle = (Style) visitor.getCopy(); // compare it assertNotNull(newStyle); }
@Test public void testRescaleLocalUOM() throws Exception { Stroke original = sb.createStroke(Color.RED, 2, new float[] {5, 10}); original.setWidth(ff.literal("2m")); original.accept(visitor); Stroke clone = (Stroke) visitor.getCopy(); assertEquals("4m", clone.getWidth().evaluate(null, String.class)); }
@Test public void testRescalePerpendicularOffset() throws Exception { Stroke stroke = sb.createStroke(Color.RED, 2, new float[] {5, 10}); LineSymbolizer ls = sb.createLineSymbolizer(stroke); ls.setPerpendicularOffset(ff.literal(2)); ls.accept(visitor); LineSymbolizer clone = (LineSymbolizer) visitor.getCopy(); assertEquals("4", clone.getPerpendicularOffset().evaluate(null, String.class)); }
@Test public void testStroke() throws Exception { Stroke original = sb.createStroke(Color.RED, 2, new float[] {5, 10}); original.accept(visitor); Stroke clone = (Stroke) visitor.getCopy(); assertEquals(4.0d, clone.getWidth().evaluate(null, Double.class), 0d); assertEquals(10.0f, clone.getDashArray()[0], 0d); assertEquals(20.0f, clone.getDashArray()[1], 0d); }
@Test public void testRescaleLocalPixelInPixelSymbolizer() throws Exception { Stroke stroke = sb.createStroke(Color.RED, 2, new float[] {5, 10}); stroke.setWidth(ff.literal("2px")); LineSymbolizer ls = sb.createLineSymbolizer(stroke); ls.accept(visitor); LineSymbolizer clone = (LineSymbolizer) visitor.getCopy(); assertEquals("4", clone.getStroke().getWidth().evaluate(null, String.class)); }
@Test public void testRescaleLocalPixelInMetersSymbolizer() throws Exception { Stroke stroke = sb.createStroke(Color.RED, 2, new float[] {5, 10}); stroke.setWidth(ff.literal("2px")); LineSymbolizer ls = sb.createLineSymbolizer(stroke); ls.setUnitOfMeasure(SI.METRE); ls.accept(visitor); LineSymbolizer clone = (LineSymbolizer) visitor.getCopy(); assertEquals("4px", clone.getStroke().getWidth().evaluate(null, String.class)); }
@Test public void testRule() throws Exception { Symbolizer symb1 = sf.createLineSymbolizer(sf.getDefaultStroke(), "geometry"); Symbolizer symb2 = sf.createPolygonSymbolizer(sf.getDefaultStroke(), sf.getDefaultFill(), "shape"); RasterSymbolizer symb3 = sf.createRasterSymbolizer(); Rule rule = sf.createRule(); rule.setSymbolizers(new Symbolizer[] {symb1, symb2, symb3}); rule.accept(visitor); Rule clone = (Rule) visitor.getCopy(); assertNotNull(clone); }
@Test public void testRescalePolygonMargin() throws Exception { // create a graphic that needs rescaling StyleBuilder sb = new StyleBuilder(); // a graphic fill Fill fill = sb.createFill(); fill.setColor(null); fill.setGraphicFill( sb.createGraphic(null, sb.createMark("square", null, sb.createStroke(2)), null)); // a polygon and line symbolizer using them PolygonSymbolizer polygonSymbolizer = sb.createPolygonSymbolizer(sb.createStroke(), fill); polygonSymbolizer.getOptions().put(PolygonSymbolizer.GRAPHIC_MARGIN_KEY, "1 2 3 4"); // rescale it polygonSymbolizer.accept(visitor); PolygonSymbolizer rps = (PolygonSymbolizer) visitor.getCopy(); Mark rm = (Mark) rps.getFill().getGraphicFill().graphicalSymbols().get(0); assertEquals(4.0, rm.getStroke().getWidth().evaluate(null, Double.class), 0d); assertEquals("2 4 6 8", rps.getOptions().get(PolygonSymbolizer.GRAPHIC_MARGIN_KEY)); } }
@Test public void testStyle() throws Exception { FeatureTypeStyle fts = sf.createFeatureTypeStyle(); fts.setFeatureTypeName("feature-type-1"); FeatureTypeStyle fts2 = fts2(); Style style = sf.getDefaultStyle(); style.addFeatureTypeStyle(fts); style.addFeatureTypeStyle(fts2); style.accept(visitor); Style copy = (Style) visitor.getCopy(); Style notEq = sf.getDefaultStyle(); fts2 = fts2(); notEq.addFeatureTypeStyle(fts2); }
public Symbolizer rescaleSymbolizer(Symbolizer symbolizer, double size, double newSize) { // perform a unit-less rescale double scaleFactor = newSize / size; RescaleStyleVisitor rescaleVisitor = new RescaleStyleVisitor(scaleFactor) { @Override protected Expression rescale(Expression expr) { if (expr == null) { return null; } else if (expr instanceof Literal) { Double value = expr.evaluate(null, Double.class); return ff.literal(value * scaleFactor); } else { return ff.multiply(expr, ff.literal(scaleFactor)); } } }; symbolizer.accept(rescaleVisitor); symbolizer = (Symbolizer) rescaleVisitor.getCopy(); return symbolizer; }
/** * Tests size calculation of dynamically sized feature, using real-world units combined with * DPI-based resizing. */ @Test public void testCombinedResizingDpiUom() { // given: Point with dynamic size in real-world units int sizeNum = 10; double scaleDpi = 2; double scaleUom = 3; PointSymbolizer symbolizer = sb.createPointSymbolizer(); Graphic graphic = sb.createGraphic(); graphic.setSize(ff.function("strConcat", ff.property("size"), ff.literal("m"))); symbolizer.setGraphic(graphic); // when: DPI based resizing is applied RescaleStyleVisitor dpiVisitor = new GraphicsAwareDpiRescaleStyleVisitor(scaleDpi); symbolizer.accept(dpiVisitor); symbolizer = (PointSymbolizer) dpiVisitor.getCopy(); // and: UOM resizing is applied UomRescaleStyleVisitor uomVisitor = new UomRescaleStyleVisitor(scaleUom); uomVisitor.visit(symbolizer); symbolizer = (PointSymbolizer) uomVisitor.getCopy(); SimpleFeature feature = createFeatureSized(sizeNum); // then: only the UOM resizing must have an effect Double size = symbolizer.getGraphic().getSize().evaluate(feature, Double.class); assertEquals(sizeNum * scaleUom, size.doubleValue(), 0d); }
PolygonSymbolizer rps = (PolygonSymbolizer) visitor.getCopy(); Mark rm = (Mark) rps.getStroke().getGraphicStroke().graphicalSymbols().get(0); assertEquals(2.0, rm.getStroke().getWidth().evaluate(null, Double.class), 0d); LineSymbolizer lps = (LineSymbolizer) visitor.getCopy(); rm = (Mark) lps.getStroke().getGraphicStroke().graphicalSymbols().get(0); assertEquals(2.0, rm.getStroke().getWidth().evaluate(null, Double.class), 0d);