package com.limegroup.gnutella.gui.download;
import com.limegroup.gnutella.Downloader;
import com.limegroup.gnutella.gui.tables.BasicDataLineModel;
import com.limegroup.gnutella.gui.tables.DataLine;
/**
* This class provides access to the <tt>ArrayList</tt> that stores all of the
* downloads displayed in the download window.
*/
final class DownloadModel extends BasicDataLineModel {
/**
* Initialize the model by setting the class of its DataLines.
*/
DownloadModel() {
super(DownloadDataLine.class);
}
/**
* Creates a new DownloadDataLine
*/
public DataLine createDataLine() {
return new DownloadDataLine();
}
/**
* Returns a count of the active downloads.
*
* @return the number of active downloads
*/
int countActiveDownloads() {
int size = getRowCount();
int count = 0;
for (int i=0; i<size; i++) {
DownloadDataLine ud = (DownloadDataLine)get(i);
if(!ud.isInactive()) count++;
}
return count;
}
/**
* Returns the currently connected downloads.
*
* @return the number of current downloads
*/
int getCurrentDownloads() {
int size = getRowCount();
int count = 0;
for (int i=0; i<size; i++) {
DownloadDataLine dd = (DownloadDataLine)get(i);
if(dd.isDownloading()) count++;
}
return count;
}
/**
* Over-ride the default refresh so that we can
* set the CLEAR_BUTTON as appropriate.
*/
public Object refresh() {
int size = getRowCount();
boolean inactiveDownloadPresent = false;
for(int i=0; i<size; i++) {
DownloadDataLine ud = (DownloadDataLine)get(i);
ud.update();
inactiveDownloadPresent |= ud.isInactive();
}
fireTableRowsUpdated(0, size);
return inactiveDownloadPresent ? Boolean.TRUE : Boolean.FALSE;
}
/**
* Clears all completed downloads from the download list.
*/
void clearCompleted() {
for(int i=getRowCount()-1; i>=0; i--) {
DownloadDataLine line = (DownloadDataLine)get(i);
if(line.isInactive()) {
remove(i);
// we also will 'kill' GAVE_UP downloaders for the user....
if (line.getState()==Downloader.GAVE_UP)
line.cleanup();
}
}
}
}