BufferedImage getLegend( GetLegendGraphic req ) {
Legends renderer = new Legends( req.getLegendOptions() );
Style style = findLegendStyle( req.getLayer(), req.getStyle() );
Pair<Integer, Integer> size;
if ( renderer.getLegendOptions().isDefault() ) {
size = getLegendSize( style );
} else {
size = renderer.getLegendSize( style );
}
if ( req.getWidth() == -1 ) {
req.setWidth( size.first );
}
if ( req.getHeight() == -1 ) {
req.setHeight( size.second );
}
boolean originalSize = req.getWidth() == size.first && req.getHeight() == size.second
&& renderer.getLegendOptions().isDefault();
HashMap<String, BufferedImage> legendMap = legends.get( style );
if ( originalSize && legendMap != null && legendMap.get( req.getFormat() ) != null ) {
return legendMap.get( req.getFormat() );
}
if ( legendMap == null ) {
legendMap = new HashMap<String, BufferedImage>();
legends.put( style, legendMap );
}
return buildLegend( req, renderer, style, originalSize, legendMap );
}