public Object execute(GetLegendGraphicRequest request, Map<String, Object> map, String colorMap) {
GridCoverage2D coverage = null;
try {
ColorMap cmap = null;
// Setting up filter functions
FilterFunction_svgColorMap colorMapFilterFunction = new FilterFunction_svgColorMap();
FilterFunction_gridCoverageStats statsFilterFunction = new FilterFunction_gridCoverageStats();
// Only parsing the first layer.
String layerID = "";
int digits = DEFAULT_DIGITS;
Set<String> params = map.keySet();
for (String param: params) {
if (param.equalsIgnoreCase("LAYER")) {
layerID = (String) map.get("LAYER");
} else if (param.equalsIgnoreCase("DIGITS")) {
digits = Integer.parseInt((String) map.get("DIGITS"));
}
}
final int indexOf = layerID.indexOf(":");
final CoverageInfo coverageInfo = geoserverCatalog.getCoverageByName(new NameImpl(
layerID.substring(0, indexOf), layerID.substring(indexOf + 1)));
List<CoverageDimensionInfo> dimensions = coverageInfo.getDimensions();
String unit = "";
if (dimensions != null && !dimensions.isEmpty()) {
CoverageDimensionInfo dimensionInfo = dimensions.get(0);
unit = dimensionInfo.getUnit();
}
// Getting coverage to parse statistics
final CoverageStoreInfo storeInfo = coverageInfo.getStore();
final GridCoverage2DReader reader = (GridCoverage2DReader) geoserverCatalog
.getResourcePool().getGridCoverageReader(storeInfo, null);
GeneralParameterValue[] parameters = parseReadParameters(coverageInfo, map, reader);
coverage = (GridCoverage2D) reader.read(parameters);
final double min = (Double) statsFilterFunction.evaluate(coverage, "minimum");
final double max = (Double) statsFilterFunction.evaluate(coverage, "maximum");
// Getting a colorMap on top of that
cmap = (ColorMap) colorMapFilterFunction.evaluate(colorMap, min, max);
final Builder cmapLegendBuilder = new ColorMapLegendCreator.Builder();
if (cmap != null && cmap.getColorMapEntries() != null
&& cmap.getColorMapEntries().length > 0) {
// setting type of colormap
cmapLegendBuilder.setColorMapType(cmap.getType());
// is this colormap using extended colors
cmapLegendBuilder.setExtended(cmap.getExtendedColors());
// setting the requested colormap entries
cmapLegendBuilder.setRequestedDimension(new Dimension(request.getWidth(), request
.getHeight()));
// // setting transparency and background bkgColor
// cmapLegendBuilder.setTransparent(transparent);
// cmapLegendBuilder.setBackgroundColor(bgColor);
// setting band
// Setting label font and font bkgColor
cmapLegendBuilder.setLabelFont(LegendUtils.getLabelFont(request));
cmapLegendBuilder.setLabelFontColor(LegendUtils.getLabelFontColor(request));
cmapLegendBuilder.setUnit(unit);
cmapLegendBuilder.setDigits(digits);
cmapLegendBuilder.setAlternativeColorMapEntryBuilder(true);
// set band
// final ChannelSelection channelSelection = rasterSymbolizer.getChannelSelection();
// cmapLegendBuilder.setBand(channelSelection != null ? channelSelection.getGrayChannel()
// : null);
// adding the colormap entries
final ColorMapEntry[] colorMapEntries = cmap.getColorMapEntries();
for (ColorMapEntry ce : colorMapEntries)
if (ce != null)
cmapLegendBuilder.addColorMapEntry(ce);
// check the additional options before proceeding