Revision 5230 trunk/libraries/libRemoteServices/src/org/gvsig/remoteClient/taskplanning/retrieving/URLRetrieveTask.java
URLRetrieveTask.java | ||
---|---|---|
11 | 11 |
import java.io.InputStream; |
12 | 12 |
import java.net.MalformedURLException; |
13 | 13 |
import java.net.URL; |
14 |
import java.util.Iterator; |
|
15 |
import java.util.Vector; |
|
14 | 16 |
|
15 | 17 |
import org.gvsig.remoteClient.taskplanning.IRunnableTask; |
16 | 18 |
|
... | ... | |
21 | 23 |
* @see http://today.java.net/lpt/a/212 |
22 | 24 |
*/ |
23 | 25 |
public class URLRetrieveTask implements IRunnableTask { |
24 |
public class Status |
|
25 |
{ |
|
26 |
public static final int NOT_STARTED = 0; |
|
27 |
public static final int CONNECTING = 1; |
|
28 |
public static final int RETRIEVING = 2; |
|
29 |
public static final int POSTPROCESSING = 3; |
|
30 |
public static final int DONE = 4; |
|
31 |
public static final int INTERRUPTED = 10; |
|
32 |
public static final int ERROR = 11; |
|
33 |
} |
|
34 |
|
|
26 |
|
|
35 | 27 |
private boolean running, cancelled; |
36 | 28 |
private URLRequest request; |
37 |
private RetrieveListener listener;
|
|
29 |
private Vector listeners = new Vector();
|
|
38 | 30 |
private RetrieveEvent event = new RetrieveEvent(); |
39 |
InputStream is; |
|
31 |
private InputStream is;
|
|
40 | 32 |
|
41 | 33 |
/** |
42 | 34 |
* |
43 | 35 |
*/ |
44 | 36 |
public URLRetrieveTask(URLRequest request, RetrieveListener listener) { |
45 | 37 |
this.request = request; |
46 |
this.listener = listener;
|
|
38 |
addRetrieveListener(listener);
|
|
47 | 39 |
running = cancelled = false; |
48 | 40 |
} |
49 | 41 |
|
50 | 42 |
|
51 | 43 |
public void execute() { |
52 |
running = true; |
|
44 |
event.setType(RetrieveEvent.NOT_STARTED); |
|
45 |
fireEvent(); |
|
46 |
cancelled = false; |
|
47 |
running= true; |
|
48 |
|
|
53 | 49 |
long t = System.currentTimeMillis(); |
54 | 50 |
File f = new File(request.getFileName()+System.currentTimeMillis()); |
55 | 51 |
while (f.exists()) { |
... | ... | |
58 | 54 |
} |
59 | 55 |
URL url; |
60 | 56 |
try { |
57 |
event.setType(RetrieveEvent.CONNECTING); |
|
58 |
fireEvent(); |
|
61 | 59 |
url = request.getUrl(); |
60 |
request.setFileName(f.getAbsolutePath()); |
|
62 | 61 |
System.out.println("downloading '"+url+"' to: "+f.getAbsolutePath()); |
63 | 62 |
|
64 | 63 |
DataOutputStream dos = new DataOutputStream( new BufferedOutputStream(new FileOutputStream(f))); |
65 | 64 |
byte[] buffer = new byte[1024*256]; |
65 |
fireEvent(); |
|
66 | 66 |
is = url.openStream(); |
67 |
event.setType(RetrieveEvent.TRANSFERRING); |
|
68 |
fireEvent(); |
|
67 | 69 |
if (!cancelled) { |
68 | 70 |
long readed = 0; |
69 | 71 |
for (int i = is.read(buffer); !cancelled && i>0; i = is.read(buffer)){ |
... | ... | |
79 | 81 |
System.out.println("download cancelled ("+url+")"); |
80 | 82 |
f.delete(); |
81 | 83 |
} else { |
82 |
// Transfer complete, register it in the cache |
|
84 |
// register job in the cache |
|
85 |
// TODO aix? deuria d'estar al principi per a poder capturar |
|
86 |
// treballs que s'estan fent per? que encara no s'han acabat |
|
83 | 87 |
synchronized (this) { |
84 | 88 |
RequestManager.getInstance().addDownloadedURLRequest(request, f.getAbsolutePath()); |
85 | 89 |
} |
86 |
|
|
87 |
|
|
88 | 90 |
} |
91 |
|
|
92 |
running = false; |
|
93 |
if (cancelled) |
|
94 |
event.setType(RetrieveEvent.REQUEST_CANCELLED); |
|
95 |
else |
|
96 |
event.setType(RetrieveEvent.REQUEST_FINISHED); |
|
97 |
|
|
89 | 98 |
} catch (MalformedURLException e) { |
90 | 99 |
e.printStackTrace(); |
100 |
event.setType(RetrieveEvent.REQUEST_FAILED); |
|
91 | 101 |
} catch (IOException e) { |
92 | 102 |
e.printStackTrace(); |
103 |
event.setType(RetrieveEvent.REQUEST_FAILED); |
|
93 | 104 |
} |
94 |
running = false; |
|
95 |
if (cancelled) |
|
96 |
event.setType(RetrieveEvent.REQUEST_CANCELLED); |
|
97 |
else |
|
98 |
event.setType(RetrieveEvent.REQUEST_CONCLUDED); |
|
99 |
listener.retrievePerformed(event); |
|
105 |
fireEvent(); |
|
100 | 106 |
} |
101 | 107 |
|
108 |
private void fireEvent() { |
|
109 |
Iterator it = listeners.iterator(); |
|
110 |
while (it.hasNext()) { |
|
111 |
RetrieveListener listener = (RetrieveListener) it.next(); |
|
112 |
listener.transferEventReceived(event); |
|
113 |
} |
|
114 |
} |
|
115 |
|
|
116 |
public void addRetrieveListener(RetrieveListener l) { |
|
117 |
if (l!=null) |
|
118 |
listeners.add(l); |
|
119 |
} |
|
120 |
|
|
102 | 121 |
public void cancel() { |
103 | 122 |
cancelled = true; |
104 | 123 |
try { |
... | ... | |
114 | 133 |
public boolean isRunning() { |
115 | 134 |
return running && !cancelled; |
116 | 135 |
} |
136 |
|
|
137 |
|
|
138 |
public URLRequest getRequest() { |
|
139 |
return request; |
|
140 |
} |
|
141 |
|
|
142 |
|
|
143 |
public Vector getListeners() { |
|
144 |
return listeners; |
|
145 |
} |
|
117 | 146 |
} |
118 | 147 |
|
119 | 148 |
|
Also available in: Unified diff