package net.filebot.ui.subtitle; import static java.util.stream.Collectors.*; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.Transferable; import java.nio.ByteBuffer; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.swing.JComponent; import javax.swing.JList; import javax.swing.TransferHandler; import net.filebot.ui.transfer.ByteBufferTransferable; import net.filebot.ui.transfer.ClipboardHandler; import net.filebot.ui.transfer.TransferableExportHandler; import net.filebot.vfs.MemoryFile; class MemoryFileListExportHandler implements TransferableExportHandler, ClipboardHandler { public boolean canExport(JComponent component) { JList<?> list = (JList<?>) component; // can't export anything, if nothing is selected return !list.isSelectionEmpty(); } public List<MemoryFile> export(JComponent component) { JList<?> list = (JList<?>) component; // get selected values as list return list.getSelectedValuesList().stream().map(MemoryFile.class::cast).collect(toList()); } @Override public int getSourceActions(JComponent component) { return canExport(component) ? TransferHandler.COPY_OR_MOVE : TransferHandler.NONE; } @Override public Transferable createTransferable(JComponent component) { Map<String, ByteBuffer> vfs = new HashMap<String, ByteBuffer>(); for (MemoryFile file : export(component)) { vfs.put(file.getName(), file.getData()); } return new ByteBufferTransferable(vfs); } @Override public void exportToClipboard(JComponent component, Clipboard clip, int action) { clip.setContents(createTransferable(component), null); } @Override public void exportDone(JComponent source, Transferable data, int action) { } }