You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
154 lines
2.8 KiB
154 lines
2.8 KiB
package DokeosAppShare;
|
|
import java.net.*;
|
|
import java.io.*;
|
|
import java.util.*;
|
|
|
|
/**
|
|
* Summary description for DownloadThread.
|
|
*/
|
|
public class DownloadThread extends Thread
|
|
{
|
|
private List listeners = new LinkedList();
|
|
private URL fileURL;
|
|
private File fileDest;
|
|
|
|
private boolean canceling = false;
|
|
|
|
public DownloadThread(URL fileURL, File fileDest)
|
|
{
|
|
this.fileURL = fileURL;
|
|
this.fileDest = fileDest;
|
|
}
|
|
|
|
public void cancel()
|
|
{
|
|
canceling = true;
|
|
}
|
|
|
|
public void run()
|
|
{
|
|
try
|
|
{
|
|
fireConnecting();
|
|
URLConnection connection = fileURL.openConnection();
|
|
int max = connection.getContentLength();
|
|
InputStream in = connection.getInputStream();
|
|
OutputStream out = new FileOutputStream(fileDest);
|
|
fireStarted();
|
|
fireProgressChange(0, max);
|
|
{
|
|
int count = 0;
|
|
int b = 0;
|
|
int readCount = 0;
|
|
byte[] buffer = new byte[1024*10];
|
|
|
|
b = in.read();
|
|
while (!canceling && b >= 0)
|
|
{
|
|
out.write(b);
|
|
count += 1;
|
|
readCount = in.read(buffer, 0, buffer.length);
|
|
out.write(buffer, 0, readCount);
|
|
count += readCount;
|
|
fireProgressChange(count, max);
|
|
b = in.read();
|
|
}
|
|
}
|
|
in.close();
|
|
out.close();
|
|
if (!canceling)
|
|
{
|
|
fireDone(fileDest);
|
|
}
|
|
else
|
|
{
|
|
//fireCancel(fileDest);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
fireException(ex);
|
|
ex.printStackTrace();
|
|
}
|
|
}
|
|
|
|
public void addDownloadProgressEventListener(DownloadProgressEventListener eventListener)
|
|
{
|
|
synchronized (listeners)
|
|
{
|
|
listeners.add(eventListener);
|
|
}
|
|
}
|
|
|
|
public void removeDownloadProgressEventListener(DownloadProgressEventListener eventListener)
|
|
{
|
|
synchronized (listeners)
|
|
{
|
|
listeners.remove(eventListener);
|
|
}
|
|
}
|
|
|
|
protected void fireConnecting()
|
|
{
|
|
Object[] ls;
|
|
synchronized (listeners)
|
|
{
|
|
ls = listeners.toArray();
|
|
}
|
|
for (int i = 0; i < ls.length; i++)
|
|
{
|
|
((DownloadProgressEventListener)ls[i]).connecting();
|
|
}
|
|
}
|
|
|
|
protected void fireStarted()
|
|
{
|
|
Object[] ls;
|
|
synchronized (listeners)
|
|
{
|
|
ls = listeners.toArray();
|
|
}
|
|
for (int i = 0; i < ls.length; i++)
|
|
{
|
|
((DownloadProgressEventListener)ls[i]).started();
|
|
}
|
|
}
|
|
|
|
protected void fireProgressChange(int progress, int max)
|
|
{
|
|
Object[] ls;
|
|
synchronized (listeners)
|
|
{
|
|
ls = listeners.toArray();
|
|
}
|
|
for (int i = 0; i < ls.length; i++)
|
|
{
|
|
((DownloadProgressEventListener)ls[i]).progressChange(progress, max);
|
|
}
|
|
}
|
|
|
|
protected void fireDone(File fileDest) throws Exception
|
|
{
|
|
Object[] ls;
|
|
synchronized (listeners)
|
|
{
|
|
ls = listeners.toArray();
|
|
}
|
|
for (int i = 0; i < ls.length; i++)
|
|
{
|
|
((DownloadProgressEventListener)ls[i]).done(fileDest);
|
|
}
|
|
}
|
|
protected void fireException(Exception ex)
|
|
{
|
|
Object[] ls;
|
|
synchronized (listeners)
|
|
{
|
|
ls = listeners.toArray();
|
|
}
|
|
for (int i = 0; i < ls.length; i++)
|
|
{
|
|
((DownloadProgressEventListener)ls[i]).exception(ex);
|
|
}
|
|
}
|
|
}
|
|
|