package org.limewire.ui.swing.search.model;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.lang.ref.WeakReference;
import org.limewire.core.api.download.DownloadState;
/**
* A listener to forward DownloadItem property change events to its associated
* visual search result.
*/
class DownloadItemPropertyListener implements PropertyChangeListener {
/** Reference to visual search result. We use a WeakReference to allow
* the result to be cleared if the search is closed.
*/
private final WeakReference<VisualSearchResult> vsrReference;
/**
* Constructs a DownloadItemPropertyListener for the specified visual
* search result.
*/
public DownloadItemPropertyListener(VisualSearchResult vsr) {
this.vsrReference = new WeakReference<VisualSearchResult>(vsr);
}
/**
* Handles a property change event to update the visual search result.
*/
@Override
public void propertyChange(PropertyChangeEvent evt) {
if ("state".equals(evt.getPropertyName())) {
DownloadState state = (DownloadState) evt.getNewValue();
BasicDownloadState bstate = BasicDownloadState.fromState(state);
if(bstate != null) {
setDownloadState(bstate);
}
}
}
/**
* Sets the download state in the visual search result.
*/
private void setDownloadState(BasicDownloadState downloadState) {
VisualSearchResult vsr = vsrReference.get();
if (vsr != null) {
vsr.setDownloadState(downloadState);
}
}
}