package org.limewire.core.impl.upload;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.List;
import org.limewire.collection.glazedlists.GlazedListsFactory;
import org.limewire.core.api.Category;
import org.limewire.core.api.upload.UploadItem;
import org.limewire.core.api.upload.UploadListManager;
import org.limewire.core.api.upload.UploadState;
import ca.odell.glazedlists.BasicEventList;
import ca.odell.glazedlists.EventList;
import ca.odell.glazedlists.GlazedLists;
import ca.odell.glazedlists.ObservableElementList.Connector;
import ca.odell.glazedlists.impl.ThreadSafeList;
public class MockUploadListManager implements UploadListManager {
private EventList<UploadItem> uploadItems;
private ThreadSafeList<UploadItem> threadSafeUploadItems;
public MockUploadListManager() {
threadSafeUploadItems = GlazedListsFactory.threadSafeList(new BasicEventList<UploadItem>());
Connector<UploadItem> uploadConnector = GlazedLists.beanConnector(UploadItem.class);
uploadItems = GlazedListsFactory.swingThreadProxyEventList(GlazedListsFactory
.observableElementList(threadSafeUploadItems, uploadConnector));
addUpload(UploadState.DONE, "File.mp3", 30000, 15000, Category.AUDIO);
addUpload(UploadState.QUEUED, "File.avi", 3000, 150, Category.VIDEO);
addUpload(UploadState.UPLOADING, "File2mp3", 30000, 25544, Category.AUDIO);
addUpload(UploadState.DONE, "File3.exe", 300, 150, Category.PROGRAM);
addUpload(UploadState.UNABLE_TO_UPLOAD, "File3.doc", 300, 15, Category.DOCUMENT);
addUpload(UploadState.BROWSE_HOST, "string", 300, 15, Category.DOCUMENT);
}
private void addUpload(UploadState state, String fileName, long fileSize, long amtUploaded, Category category) {
UploadItem item = new MockUploadItem(state, fileName, fileSize, amtUploaded, category);
uploadItems.add(item);
item.addPropertyChangeListener(new UploadPropertyListener(item));
}
@Override
public EventList<UploadItem> getSwingThreadSafeUploads() {
return uploadItems;
}
@Override
public List<UploadItem> getUploadItems() {
return uploadItems;
}
@Override
public void addPropertyChangeListener(PropertyChangeListener listener) {
}
@Override
public void removePropertyChangeListener(PropertyChangeListener listener) {
}
@Override
public void updateUploadsCompleted() {
}
private class UploadPropertyListener implements PropertyChangeListener {
private UploadItem item;
public UploadPropertyListener(UploadItem item){
this.item = item;
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
if (item.getState() == UploadState.CANCELED) {
uploadItems.remove(item);
}
}
}
@Override
public void clearFinished() {
List<UploadItem> finishedItems = new ArrayList<UploadItem>();
threadSafeUploadItems.getReadWriteLock().writeLock().lock();
try {
for(UploadItem item : threadSafeUploadItems){
if(item.getState() == UploadState.DONE || item.getState() == UploadState.UNABLE_TO_UPLOAD || item.getState() == UploadState.BROWSE_HOST_DONE){
finishedItems.add(item);
}
}
threadSafeUploadItems.removeAll(finishedItems);
} finally {
threadSafeUploadItems.getReadWriteLock().writeLock().unlock();
}
}
@Override
public void remove(UploadItem item) {
threadSafeUploadItems.remove(item);
}
}