package org.limewire.ui.swing.library.navigator;
import java.awt.Point;
import java.io.File;
import java.util.Collections;
import java.util.List;
import org.apache.commons.logging.Log;
import org.limewire.core.api.library.LocalFileList;
import org.limewire.logging.LogFactory;
import org.limewire.ui.swing.dnd.LocalFileListTransferHandler;
import org.limewire.ui.swing.warnings.LibraryWarningController;
import com.google.inject.Inject;
class LibraryNavTransferHandler extends LocalFileListTransferHandler {
private static final Log LOG = LogFactory.getLog(LibraryNavTransferHandler.class);
private LocalFileList localFileList = null;
@Inject
public LibraryNavTransferHandler(LibraryWarningController librarySupport) {
super(librarySupport);
}
@Override
public boolean canImport(TransferSupport info) {
try {
if (info.getComponent() instanceof LibraryNavigatorTable) {
LibraryNavigatorTable libraryNavigatorTable = (LibraryNavigatorTable) info
.getComponent();
DropLocation dropLocation = info.getDropLocation();
Point point = dropLocation.getDropPoint();
int column = libraryNavigatorTable.columnAtPoint(point);
int row = libraryNavigatorTable.rowAtPoint(point);
if (column < 0 || row < 0) {
return false;
}
LibraryNavItem libraryNavItem = (LibraryNavItem) libraryNavigatorTable.getValueAt(
row, column);
if (libraryNavItem != null) {
this.localFileList = libraryNavItem.getLocalFileList();
return super.canImport(info);
}
}
return false;
} catch (RuntimeException e) {
// catching and logging since internal sun code will just eat the
// exception, its better that we can at least turn on logging to
// find out what is going on.
LOG.error("Error importing drop data.", e);
throw e;
} catch (Error e) {
LOG.error("Error importing drop data.", e);
throw e;
}
}
@Override
public boolean importData(TransferSupport info) {
try {
if (info.getComponent() instanceof LibraryNavigatorTable && info.isDrop()) {
LibraryNavigatorTable libraryNavigatorTable = (LibraryNavigatorTable) info
.getComponent();
DropLocation dropLocation = info.getDropLocation();
Point point = dropLocation.getDropPoint();
int column = libraryNavigatorTable.columnAtPoint(point);
int row = libraryNavigatorTable.rowAtPoint(point);
if (column < 0 || row < 0) {
return false;
}
LibraryNavItem libraryNavItem = (LibraryNavItem) libraryNavigatorTable.getValueAt(
row, column);
if (libraryNavItem != null) {
this.localFileList = libraryNavItem.getLocalFileList();
return super.importData(info);
}
}
return false;
} catch (RuntimeException e) {
// catching and logging since internal sun code will just eat the
// exception, its better that we can at least turn on logging to
// find out what is going on.
LOG.error("Error importing drop data.", e);
throw e;
} catch (Error e) {
LOG.error("Error importing drop data.", e);
throw e;
}
}
@Override
public LocalFileList getLocalFileList() {
return localFileList;
}
@Override
protected List<File> getSelectedFiles() {
return Collections.emptyList();
}
}