Revision 5245 branches/MULTITHREADING_DEVELOPMENT/libraries/libRemoteServices/src/org/gvsig/remoteClient/taskplanning/retrieving/RequestManager.java

View differences:

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