private void paintImage(final WmsRequest request, Graphics2D g) { log.info("painting layers " + request.getLayers()); if (DRAW_IN_PARALLEL) { paintImageParallel(request, g); } else { // using only a single g2d seems to help with IE8 png transparency // bug (fixed in IE9). for (final String layerName : request.getLayers()) { paintLayer(g, layerName, layers, request); } } }
Map<String, String> getInfos(Date time, WmsRequest request, Point point, String mimeType) { Map<String, String> map = new HashMap<String, String>(); for (String layerName : request.getLayers()) { Layer layer = layers.getLayer(layerName); if (layer != null) { String info = layer.getInfo(time, request, point, mimeType); if (info != null) map.put(layerName, info); } else log.warn("no getInfo implementation for layer: " + layerName); } return map; }
private void paintImageParallel(WmsRequest request, Graphics2D g) { // create future for each worker (layer) List<Future<BufferedImage>> futures = new ArrayList<Future<BufferedImage>>(); for (final String layerName : request.getLayers()) { // create a worker for layer Callable<BufferedImage> worker = createWorker(layers, layerName, request); // start the worker Future<BufferedImage> submit = executor.submit(worker); // record the worker in a list so we can paint the images in // order later futures.add(submit); } // wait for each image to complete in turn then draw it to the // everything graphics object for (Future<BufferedImage> future : futures) { drawImage(g, future); } }