Revision 5245 branches/MULTITHREADING_DEVELOPMENT/libraries/libRemoteServices/src/org/gvsig/remoteClient/taskplanning/retrieving/RequestManager.java
RequestManager.java | ||
---|---|---|
5 | 5 |
|
6 | 6 |
import java.io.File; |
7 | 7 |
import java.net.MalformedURLException; |
8 |
import java.util.Hashtable;
|
|
8 |
import java.util.ArrayList;
|
|
9 | 9 |
import java.util.TreeMap; |
10 |
import java.util.Vector; |
|
10 | 11 |
|
11 | 12 |
import org.gvsig.remoteClient.taskplanning.IQueue; |
12 |
import org.gvsig.remoteClient.taskplanning.IRunnableTask; |
|
13 | 13 |
|
14 | 14 |
/** |
15 | 15 |
* pa administrar les tasques (la hist?ria aquella |
... | ... | |
33 | 33 |
public URLRetrieveTask addURLRequest(URLRequest request, RetrieveListener listener) { |
34 | 34 |
try { |
35 | 35 |
|
36 |
// TODO canviar per a quetorne el Request antic, que la request guarde el |
|
37 |
// seu estat aix? com la llista de listeners |
|
38 |
File f = getPreviousDownloadedURLRequest(request); |
|
39 | 36 |
|
40 |
if (f!=null) { |
|
41 |
// The file was already requested and it is in the cache or |
|
42 |
// the download is in process |
|
37 |
if (downloadedFiles.contains(request)) { |
|
38 |
for (int i = 0; i < downloadedFiles.size(); i++) { |
|
39 |
URLRequest r = (URLRequest) downloadedFiles.get(i); |
|
40 |
if (r.equals(request)) { |
|
41 |
request = r; |
|
42 |
break; |
|
43 |
} |
|
44 |
} |
|
43 | 45 |
|
44 |
// Overwrite the file name with the file in the cache's one. |
|
45 |
request.setFileName(f.getAbsolutePath()); |
|
46 |
System.out.println(request.getUrl()+" is cached at '"+f.getAbsolutePath()+"'"); |
|
46 |
System.out.println(request.getUrl()+" is cached at '"+request.getFileName()+"'"); |
|
47 | 47 |
|
48 |
|
|
49 |
// get this server's task queue |
|
50 |
RetrieveQueue serverQueue = (RetrieveQueue) getQueue(request.getHost()); |
|
51 |
|
|
52 |
// Look up the previous cached jobs |
|
53 |
|
|
54 |
URLRetrieveTask workingTask = serverQueue.getURLPreviousRequest(request); |
|
55 |
if (workingTask == null) { |
|
56 |
// Task already done. Notify listener |
|
57 |
if (debug) |
|
58 |
System.err.println("done job found: "+request.getUrl()); |
|
59 |
RetrieveEvent event = new RetrieveEvent(); |
|
60 |
event.setType(RetrieveEvent.REQUEST_FINISHED); |
|
61 |
listener.transferEventReceived(event); |
|
48 |
synchronized (this) { |
|
49 |
if (request.getStatus() == RetrieveEvent.REQUEST_FINISHED) { |
|
50 |
if (debug) |
|
51 |
System.err.println("done job found: "+request.getUrl()); |
|
52 |
RetrieveEvent event = new RetrieveEvent(); |
|
53 |
event.setType(RetrieveEvent.REQUEST_FINISHED); |
|
54 |
listener.transferEventReceived(event); |
|
55 |
} else if (request.getStatus() == RetrieveEvent.REQUEST_CANCELLED) { |
|
56 |
removeURLRequest(request); |
|
57 |
return addURLRequest(request, listener); |
|
58 |
} else { |
|
59 |
if (debug) |
|
60 |
System.err.println("working job found: "+request.getUrl()); |
|
61 |
request.lock(); |
|
62 |
request.addRetrieveListener(listener); |
|
63 |
request.unlock(); |
|
64 |
} |
|
62 | 65 |
|
63 |
} else { |
|
64 |
// The task is working yet, will register the listener |
|
65 |
|
|
66 |
// TODO no va b?... perqu? la cola va buidant-se molt r?pidament |
|
67 |
// per a fer que vaja tamb? hi hauria que registrar en cache |
|
68 |
// lo que s'est? baixant al principi de l'execute(); |
|
69 |
if (debug) |
|
70 |
System.err.println("working job found: "+request.getUrl()); |
|
71 |
workingTask.addRetrieveListener(listener); |
|
72 |
|
|
73 | 66 |
} |
74 | 67 |
} else { |
75 | 68 |
// Pick an unrepeatable fileName |
... | ... | |
84 | 77 |
if (fileName.startsWith(fileNamePrefix)) |
85 | 78 |
fileName = fileName.substring(fileNamePrefix.length(), fileName.length()); |
86 | 79 |
|
80 |
|
|
81 |
|
|
82 |
|
|
87 | 83 |
// get this server's task queue |
88 | 84 |
RetrieveQueue serverQueue = (RetrieveQueue) getQueue(request.getHost()); |
89 | 85 |
|
... | ... | |
91 | 87 |
fileName = fileNamePrefix + fileName; |
92 | 88 |
|
93 | 89 |
request.setFileName(fileName); |
94 |
|
|
90 |
synchronized (this) { |
|
91 |
addDownloadedURLRequest(request); |
|
92 |
} |
|
95 | 93 |
// TODO |
96 | 94 |
// jo ac? comprovaria quin protocol, m?tode, host, etc... i crearia un |
97 | 95 |
// objecte que tractara la desc?rrega segons el m?tode que li toca. |
... | ... | |
112 | 110 |
// serverQueue.put(new SMBRetrieveTask(request, listener)); |
113 | 111 |
|
114 | 112 |
// Enqueue the request and the listener will be notified when done. |
115 |
URLRetrieveTask task = new URLRetrieveTask(request, listener); |
|
113 |
request.addRetrieveListener(listener); |
|
114 |
URLRetrieveTask task = new URLRetrieveTask(request); |
|
116 | 115 |
return (URLRetrieveTask) serverQueue.put(task); |
117 | 116 |
} |
117 |
|
|
118 |
// // TODO canviar per a quetorne el Request antic, que la request guarde el |
|
119 |
// // seu estat aix? com la llista de listeners |
|
120 |
// File f = getPreviousDownloadedURLRequest(request); |
|
121 |
// |
|
122 |
// if (f!=null) { |
|
123 |
// // The file was already requested and it is in the cache or |
|
124 |
// // the download is in process |
|
125 |
// |
|
126 |
// // Overwrite the file name with the file in the cache's one. |
|
127 |
// request.setFileName(f.getAbsolutePath()); |
|
128 |
// System.out.println(request.getUrl()+" is cached at '"+f.getAbsolutePath()+"'"); |
|
129 |
// |
|
130 |
// |
|
131 |
// // get this server's task queue |
|
132 |
// RetrieveQueue serverQueue = (RetrieveQueue) getQueue(request.getHost()); |
|
133 |
// |
|
134 |
// // Look up the previous cached jobs |
|
135 |
// |
|
136 |
// URLRetrieveTask workingTask = serverQueue.getURLPreviousRequest(request); |
|
137 |
// if (workingTask == null) { |
|
138 |
// // Task already done. Notify listener |
|
139 |
// if (debug) |
|
140 |
// System.err.println("done job found: "+request.getUrl()); |
|
141 |
// RetrieveEvent event = new RetrieveEvent(); |
|
142 |
// event.setType(RetrieveEvent.REQUEST_FINISHED); |
|
143 |
// listener.transferEventReceived(event); |
|
144 |
// |
|
145 |
// } else { |
|
146 |
// // The task is working yet, will register the listener |
|
147 |
// |
|
148 |
// // TODO no va b?... perqu? la cola va buidant-se molt r?pidament |
|
149 |
// // per a fer que vaja tamb? hi hauria que registrar en cache |
|
150 |
// // lo que s'est? baixant al principi de l'execute(); |
|
151 |
// if (debug) |
|
152 |
// System.err.println("working job found: "+request.getUrl()); |
|
153 |
// workingTask.addRetrieveListener(listener); |
|
154 |
// |
|
155 |
// } |
|
156 |
// } else { |
|
157 |
// // Pick an unrepeatable fileName |
|
158 |
// String host = request.getHost(); |
|
159 |
// String fileName = request.getFileName(); |
|
160 |
// File tempDir = new File(tempDirectoryPath); |
|
161 |
// if (!tempDir.exists()) |
|
162 |
// tempDir.mkdir(); |
|
163 |
// String fileNamePrefix = tempDirectoryPath + |
|
164 |
// File.separator + host + |
|
165 |
// "-" ; |
|
166 |
// if (fileName.startsWith(fileNamePrefix)) |
|
167 |
// fileName = fileName.substring(fileNamePrefix.length(), fileName.length()); |
|
168 |
// |
|
169 |
// // get this server's task queue |
|
170 |
// RetrieveQueue serverQueue = (RetrieveQueue) getQueue(request.getHost()); |
|
171 |
// |
|
172 |
// |
|
173 |
// fileName = fileNamePrefix + fileName; |
|
174 |
// |
|
175 |
// request.setFileName(fileName); |
|
176 |
// |
|
177 |
// // TODO |
|
178 |
// // jo ac? comprovaria quin protocol, m?tode, host, etc... i crearia un |
|
179 |
// // objecte que tractara la desc?rrega segons el m?tode que li toca. |
|
180 |
// // algo en plan Strategy's |
|
181 |
// // |
|
182 |
// // per exemple si fem URLRetrieveTask una abstracta i tenim |
|
183 |
// // |
|
184 |
// // GET de tota la vida |
|
185 |
// // serverQueue.put(new HTTPGetRetrieveTask(request, listener)); |
|
186 |
// // |
|
187 |
// // POST |
|
188 |
// // serverQueue.put(new HTTPPostRetrieveTask(request, listener)); |
|
189 |
// // |
|
190 |
// // FTP |
|
191 |
// // serverQueue.put(new FTPRetrieveTask(request, listener)); |
|
192 |
// // |
|
193 |
// // ????Xarxa local????? |
|
194 |
// // serverQueue.put(new SMBRetrieveTask(request, listener)); |
|
195 |
// |
|
196 |
// // Enqueue the request and the listener will be notified when done. |
|
197 |
// URLRetrieveTask task = new URLRetrieveTask(request, listener); |
|
198 |
// return (URLRetrieveTask) serverQueue.put(task); |
|
199 |
// } |
|
118 | 200 |
} catch (MalformedURLException e) { |
119 | 201 |
e.printStackTrace(); |
120 | 202 |
} |
... | ... | |
134 | 216 |
} |
135 | 217 |
|
136 | 218 |
|
137 |
private Hashtable downloadedFiles;
|
|
219 |
private Vector downloadedFiles = new Vector();
|
|
138 | 220 |
private final String tempDirectoryPath = System.getProperty("java.io.tmpdir")+"tmp-andami"; |
139 | 221 |
/** |
140 | 222 |
* Remove an URL from the system cache. The file will remain in the file |
... | ... | |
142 | 224 |
* @param request |
143 | 225 |
*/ |
144 | 226 |
public void removeURLRequest(URLRequest request) { |
145 |
if (downloadedFiles != null && downloadedFiles.containsKey(request))
|
|
227 |
if (downloadedFiles != null && downloadedFiles.contains(request)) |
|
146 | 228 |
downloadedFiles.remove(request); |
147 | 229 |
} |
148 | 230 |
/** |
... | ... | |
153 | 235 |
* @param url |
154 | 236 |
* @param filePath |
155 | 237 |
*/ |
156 |
protected void addDownloadedURLRequest(URLRequest request, String filePath){ |
|
157 |
if (downloadedFiles==null) |
|
158 |
downloadedFiles = new Hashtable(); |
|
159 |
String fileName = (String) downloadedFiles.put(request, filePath); |
|
160 |
if (fileName!=null){ |
|
161 |
File f = new File(fileName); |
|
162 |
if (f.exists()) |
|
163 |
f.delete(); |
|
238 |
protected void addDownloadedURLRequest(URLRequest request){ |
|
239 |
if (!downloadedFiles.contains(request)) { |
|
240 |
downloadedFiles.add(request); |
|
241 |
} else { |
|
242 |
System.out.println("NOT ADDED"); |
|
164 | 243 |
} |
244 |
|
|
245 |
|
|
246 |
// |
|
247 |
// String fileName = request.getFileName(); |
|
248 |
// if (fileName!=null){ |
|
249 |
// File f = new File(fileName); |
|
250 |
// if (f.exists()) |
|
251 |
// f.delete(); |
|
252 |
// } |
|
165 | 253 |
} |
166 |
/** |
|
167 |
* Returns the content of this URL as a file from the file system.<br> |
|
168 |
* <p> |
|
169 |
* If the URL has been already downloaded in this session and notified |
|
170 |
* to the system using the static <b>Utilities.addDownloadedURL(URL)</b> |
|
171 |
* method, it can be restored faster from the file system avoiding to |
|
172 |
* download it again. |
|
173 |
* </p> |
|
174 |
* @param url |
|
175 |
* @return File containing this URL's content or null if no file was found. |
|
176 |
*/ |
|
177 |
private File getPreviousDownloadedURLRequest(URLRequest request){ |
|
178 |
File f = null; |
|
179 |
if (downloadedFiles!=null && downloadedFiles.containsKey(request)){ |
|
180 |
String filePath = (String) downloadedFiles.get(request); |
|
181 |
f = new File(filePath); |
|
182 |
} |
|
183 |
return f; |
|
184 |
} |
|
185 |
|
|
254 |
|
|
186 | 255 |
} |
Also available in: Unified diff