package net.filebot.ui.transfer;
import static net.filebot.Logging.*;
import static net.filebot.UserFiles.*;
import java.awt.event.ActionEvent;
import java.io.File;
import java.util.List;
import java.util.function.Supplier;
import java.util.logging.Level;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.Icon;
import net.filebot.ResourceManager;
import net.filebot.ui.transfer.TransferablePolicy.TransferAction;
import net.filebot.util.FileUtilities.ExtensionFileFilter;
public class LoadAction extends AbstractAction {
public final Supplier<TransferablePolicy> handler;
public LoadAction(Supplier<TransferablePolicy> handler) {
this("Load", ResourceManager.getIcon("action.load"), handler);
}
public LoadAction(String name, Icon icon, Supplier<TransferablePolicy> handler) {
super(name, icon);
this.handler = handler;
}
public TransferAction getTransferAction(ActionEvent evt) {
// if CTRL was pressed when the button was clicked, assume ADD action (same as with dnd)
return ((evt.getModifiers() & ActionEvent.CTRL_MASK) != 0) ? TransferAction.ADD : TransferAction.PUT;
}
protected File getDefaultFile() {
return null;
}
@Override
public void actionPerformed(ActionEvent evt) {
try {
// get transferable policy from action properties
TransferablePolicy transferablePolicy = handler.get();
if (transferablePolicy == null) {
return;
}
List<File> files = showLoadDialogSelectFiles(true, true, getDefaultFile(), getFileFilter(transferablePolicy), (String) getValue(Action.NAME), evt);
if (files.isEmpty()) {
return;
}
FileTransferable transferable = new FileTransferable(files);
if (transferablePolicy.accept(transferable)) {
transferablePolicy.handleTransferable(transferable, getTransferAction(evt));
}
} catch (Exception e) {
log.log(Level.WARNING, e.toString(), e);
}
}
protected ExtensionFileFilter getFileFilter(TransferablePolicy transferablePolicy) {
if (transferablePolicy instanceof FileTransferablePolicy) {
final FileTransferablePolicy ftp = ((FileTransferablePolicy) transferablePolicy);
if (ftp.getFileFilterDescription() != null && ftp.getFileFilterExtensions() != null) {
return new ExtensionFileFilter(ftp.getFileFilterExtensions()) {
@Override
public String toString() {
return ftp.getFileFilterDescription();
};
};
}
}
return null;
}
}