package com.coding.download.api;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import com.coding.download.DownloadThread;
import com.coding.download.impl.ConnectionManagerImpl;
public class Resource {
private int index;
private int size;
private String url;
private List<Thread> threads;
private File file;
private boolean flag;
public Resource(String url,File file){
index = 0;
size = 1024*2;
threads = new ArrayList<Thread>();
flag = false;
this.url = url;
this.file = file;
}
public synchronized int increace(){
//System.out.println(threads.size());
while(threads.size()>=5){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
int startPos = index*size;
try {
Connection conn = new ConnectionManagerImpl().open(url);
DownloadThread down = new DownloadThread(conn, startPos, startPos+size-1,file);
down.start();
index ++;
threads.add(down);
this.notify();
} catch (ConnectionException e) {
e.printStackTrace();
}
return index*size;
}
public synchronized void decreace(){
//System.out.println("decreace:"+threads.size());
while(threads.size()==0){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
/*try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}*/
for (int i = 0; i < threads.size();i++) {
if(!threads.get(i).isAlive()){
threads.remove(i);
this.notify();
break;
}
}
}
public List<Thread> getThreads() {
return threads;
}
public void setThreads(List<Thread> threads) {
this.threads = threads;
}
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
}