public void saveNewCache() { if (CacheControl.cacheEnabled) { getCacheControl().deleteCacheFile(); wmsLayer.imagesLock.lock(); for (GeorefImage image : wmsLayer.getImages()) { getCacheControl().saveCache(image); } wmsLayer.imagesLock.unlock(); } }
@Override public void run() { for (; ; ) { while (getImagesToGrabSize() > 0) { lockImagesToGrag.lock(); lockCurrentGrabImage.lock(); currentGrabImage = imagesToGrab.get(0); lockCurrentGrabImage.unlock(); imagesToGrab.remove(0); lockImagesToGrag.unlock(); if (canceled) { break; } else { GeorefImage newImage; try { Main.map.repaint(); // paint the current grab box newImage = grabber.grab(wmsLayer, currentGrabImage.min, currentGrabImage.max); } catch (IOException e) { Main.warn("Download action canceled by user or server did not respond"); setCanceled(true); break; } catch (OsmTransferException e) { Main.error("OSM transfer failed"); setCanceled(true); break; } if (grabber.getWmsInterface().downloadCanceled) { Main.info("Download action canceled by user"); setCanceled(true); break; } try { if (CadastrePlugin.backgroundTransparent) { wmsLayer.imagesLock.lock(); for (GeorefImage img : wmsLayer.getImages()) { if (img.overlap(newImage)) // mask overlapping zone in already grabbed image img.withdraw(newImage); else // mask overlapping zone in new image only when new image covers completely the // existing image newImage.withdraw(img); } wmsLayer.imagesLock.unlock(); } wmsLayer.addImage(newImage); Main.map.mapView.repaint(); saveToCache(newImage); } catch (NullPointerException e) { Main.info("Layer destroyed. Cancel grab thread"); setCanceled(true); } } } Main.info("grab thread list empty"); lockCurrentGrabImage.lock(); currentGrabImage = null; lockCurrentGrabImage.unlock(); if (canceled) { clearImagesToGrab(); canceled = false; } if (wmsLayer.isRaster()) { notifyWaiter(); } waitNotification(); } }