/**
*
*/
package org.limewire.core.impl.library;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.File;
import java.util.List;
import org.limewire.core.api.library.FileProcessingEvent;
import org.limewire.core.api.library.LibraryFileList;
import org.limewire.core.api.library.LibraryState;
import org.limewire.core.api.library.LocalFileItem;
import org.limewire.listener.EventListener;
import org.limewire.listener.SwingSafePropertyChangeSupport;
import ca.odell.glazedlists.BasicEventList;
import com.limegroup.gnutella.library.FileCollection;
import com.limegroup.gnutella.library.FileDesc;
import com.limegroup.gnutella.library.IncompleteFileDesc;
import com.limegroup.gnutella.library.Library;
class LibraryFileListImpl extends LocalFileListImpl implements LibraryFileList {
private final Library managedList;
private final PropertyChangeSupport changeSupport = new SwingSafePropertyChangeSupport(this);
private volatile LibraryState libraryState = LibraryState.LOADING;
LibraryFileListImpl(Library managedList, CoreLocalFileItemFactory coreLocalFileItemFactory) {
super(new BasicEventList<LocalFileItem>(), coreLocalFileItemFactory);
this.managedList = managedList;
this.managedList.addListener(newEventListener());
this.managedList.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
LibraryState oldState = libraryState;
if(evt.getPropertyName().equals("hasPending")) {
if(Boolean.TRUE.equals(evt.getNewValue())) {
libraryState = LibraryState.LOADING;
} else {
libraryState = LibraryState.LOADED;
}
}
changeSupport.firePropertyChange("state", oldState, libraryState);
}
});
}
@Override
protected FileCollection getCoreCollection() {
return managedList;
}
@Override
public void fileRenamed(File oldFile, File newFile) {
managedList.fileRenamed(oldFile, newFile);
}
@Override
protected boolean containsCoreUrn(com.limegroup.gnutella.URN urn) {
List<FileDesc> fds = managedList.getFileDescsMatching(urn);
for(FileDesc fd : fds) {
if(!(fd instanceof IncompleteFileDesc)) {
return true;
}
}
return false;
}
@Override
public void addPropertyChangeListener(PropertyChangeListener listener) {
changeSupport.addPropertyChangeListener(listener);
}
@Override
public LibraryState getState() {
return libraryState;
}
@Override
public void removePropertyChangeListener(PropertyChangeListener listener) {
changeSupport.removePropertyChangeListener(listener);
}
@Override
public void addFileProcessingListener(EventListener<FileProcessingEvent> listener) {
managedList.addFileProcessingListener(listener);
}
@Override
public void removeFileProcessingListener(EventListener<FileProcessingEvent> listener) {
managedList.removeFileProcessingListener(listener);
}
@Override
public void cancelPendingTasks() {
managedList.cancelPendingTasks();
}
}