Revision 5230 trunk/libraries/libRemoteServices/src/org/gvsig/remoteClient/taskplanning/retrieving/URLRetrieveTask.java

View differences:

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