package org.limewire.ui.swing.downloads.table;
import java.awt.datatransfer.Transferable;
import java.io.File;
import java.util.List;
import javax.swing.JComponent;
import javax.swing.TransferHandler;
import org.limewire.core.api.download.DownloadAction;
import org.limewire.core.api.download.DownloadListManager;
import org.limewire.core.api.download.DownloadException;
import org.limewire.core.api.search.Search;
import org.limewire.core.api.search.SearchResult;
import org.limewire.ui.swing.dnd.LocalFileTransferable;
import org.limewire.ui.swing.util.BackgroundExecutorService;
import org.limewire.ui.swing.util.DownloadExceptionHandler;
import com.google.inject.Inject;
import com.google.inject.Provider;
class DownloadableTransferHandler extends TransferHandler {
private final DownloadListManager downloadListManager;
private final Provider<DownloadExceptionHandler> downloadExceptionHandler;
private final Provider<List<File>> selectedFiles;
@Inject
public DownloadableTransferHandler(DownloadListManager downloadListManager,
Provider<DownloadExceptionHandler> downloadExceptionHandler,
@FinishedDownloadSelected Provider<List<File>> selectedFiles) {
this.downloadListManager = downloadListManager;
this.downloadExceptionHandler = downloadExceptionHandler;
this.selectedFiles = selectedFiles;
}
@Override
public boolean canImport(TransferHandler.TransferSupport info) {
return false;
}
@Override
public int getSourceActions(JComponent c) {
return COPY;
}
@Override
protected Transferable createTransferable(JComponent c) {
return new LocalFileTransferable(selectedFiles.get().toArray(new File[0]));
}
@Override
public boolean importData(TransferHandler.TransferSupport info) {
if (!info.isDrop()) {
return false;
}
Transferable t = info.getTransferable();
final List<SearchResultTransferable> searchResultTransferableList;
searchResultTransferableList = getTransferData(t);
BackgroundExecutorService.execute(new Runnable() {
public void run() {
for (final SearchResultTransferable searchResultTransferable : searchResultTransferableList) {
try {
downloadListManager.addDownload(searchResultTransferable.getSearch(),
searchResultTransferable.getSearchResults());
} catch (DownloadException e) {
downloadExceptionHandler.get().handleDownloadException(
new DownloadAction() {
@Override
public void download(File saveFile, boolean overwrite)
throws DownloadException {
downloadListManager.addDownload(searchResultTransferable
.getSearch(), searchResultTransferable
.getSearchResults(), saveFile, overwrite);
}
@Override
public void downloadCanceled(DownloadException ignored) {
// do nothing
}
}, e, true);
}
}
}
});
return true;
}
private List<SearchResultTransferable> getTransferData(Transferable t) {
return null;
}
private static class SearchResultTransferable {
public List<? extends SearchResult> getSearchResults() {
return null;
}
public Search getSearch() {
return null;
}
}
}