package org.mapfish.print.map.geotools.grid; import jsr166y.ForkJoinPool; import org.geotools.data.FeatureSource; import org.geotools.styling.Style; import org.mapfish.print.config.Template; import org.mapfish.print.http.MfClientHttpRequestFactory; import org.mapfish.print.map.geotools.AbstractFeatureSourceLayerPlugin; import org.mapfish.print.map.geotools.FeatureSourceSupplier; import org.mapfish.print.map.geotools.StyleSupplier; import org.springframework.beans.factory.annotation.Autowired; import javax.annotation.Nonnull; /** * <p>A layer which is a spatial grid of lines on the map.</p> * <p>Type: <code>grid</code></p> * [[examples=crosses_point_grid]] */ public final class GridLayerPlugin extends AbstractFeatureSourceLayerPlugin<GridParam> { private static final String TYPE = "grid"; @Autowired private ForkJoinPool pool; /** * Constructor. */ public GridLayerPlugin() { super(TYPE); } @Override public GridParam createParameter() { return new GridParam(); } @Nonnull @Override public GridLayer parse( @Nonnull final Template template, @Nonnull final GridParam layerData) { LabelPositionCollector labels = new LabelPositionCollector(); FeatureSourceSupplier featureSource = createFeatureSourceFunction(template, layerData, labels); final StyleSupplier<FeatureSource> styleFunction = createStyleSupplier(template, layerData); return new GridLayer(this.pool, featureSource, styleFunction, template.getConfiguration().renderAsSvg(layerData.renderAsSvg), layerData, labels); } private StyleSupplier<FeatureSource> createStyleSupplier( final Template template, final GridParam layerData) { return new StyleSupplier<FeatureSource>() { @Override public Style load(final MfClientHttpRequestFactory requestFactory, final FeatureSource featureSource) { String styleRef = layerData.style; return template.getStyle(styleRef) .or(GridLayerPlugin.super.parser.loadStyle( template.getConfiguration(), requestFactory, styleRef)) .or(layerData.gridType.strategy.defaultStyle(template, layerData)); } }; } private FeatureSourceSupplier createFeatureSourceFunction( final Template template, final GridParam layerData, final LabelPositionCollector labels) { return layerData.gridType.strategy.createFeatureSource(template, layerData, labels); } }