source: josm/trunk/src/org/openstreetmap/josm/io/imagery/Grabber.java@ 6310

Last change on this file since 6310 was 6310, checked in by Don-vip, 11 years ago

Sonar/FindBugs - Nested blocks of code should not be left empty

  • Property svn:eol-style set to native
File size: 2.7 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.io.imagery;
3
4import org.openstreetmap.josm.Main;
5import org.openstreetmap.josm.data.ProjectionBounds;
6import org.openstreetmap.josm.data.imagery.GeorefImage.State;
7import org.openstreetmap.josm.gui.MapView;
8import org.openstreetmap.josm.gui.layer.WMSLayer;
9
10abstract public class Grabber implements Runnable {
11 protected final MapView mv;
12 protected final WMSLayer layer;
13 private final boolean localOnly;
14
15 protected ProjectionBounds b;
16 protected volatile boolean canceled;
17
18 Grabber(MapView mv, WMSLayer layer, boolean localOnly) {
19 this.mv = mv;
20 this.layer = layer;
21 this.localOnly = localOnly;
22 }
23
24 abstract void fetch(WMSRequest request, int attempt) throws Exception; // the image fetch code
25
26 int width(){
27 return layer.getBaseImageWidth();
28 }
29 int height(){
30 return layer.getBaseImageHeight();
31 }
32
33 @Override
34 public void run() {
35 while (true) {
36 if (canceled)
37 return;
38 WMSRequest request = layer.getRequest(localOnly);
39 if (request == null)
40 return;
41 this.b = layer.getBounds(request);
42 if (request.isPrecacheOnly()) {
43 if (!layer.cache.hasExactMatch(Main.getProjection(), request.getPixelPerDegree(), b.minEast, b.minNorth)) {
44 attempt(request);
45 }
46 } else {
47 if(!loadFromCache(request)){
48 attempt(request);
49 }
50 }
51 layer.finishRequest(request);
52 }
53 }
54
55 protected void attempt(WMSRequest request){ // try to fetch the image
56 int maxTries = 5; // n tries for every image
57 for (int i = 1; i <= maxTries; i++) {
58 if (canceled)
59 return;
60 try {
61 if (!request.isPrecacheOnly() && !layer.requestIsVisible(request))
62 return;
63 fetch(request, i);
64 break; // break out of the retry loop
65 } catch (Exception e) {
66 try { // sleep some time and then ask the server again
67 Thread.sleep(random(1000, 2000));
68 } catch (InterruptedException e1) {
69 Main.debug(e1.getMessage());
70 }
71 if(i == maxTries) {
72 e.printStackTrace();
73 request.finish(State.FAILED, null);
74 }
75 }
76 }
77 }
78
79 public static int random(int min, int max) {
80 return (int)(Math.random() * ((max+1)-min) ) + min;
81 }
82
83 abstract public boolean loadFromCache(WMSRequest request);
84
85 public void cancel() {
86 canceled = true;
87 }
88
89}
Note: See TracBrowser for help on using the repository browser.