package net.filebot.ui.episodelist; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; import java.util.List; import javax.swing.JComponent; import net.filebot.ui.FileBotList; import net.filebot.ui.FileBotListExportHandler; import net.filebot.ui.transfer.ArrayTransferable; import net.filebot.ui.transfer.ClipboardHandler; import net.filebot.ui.transfer.CompositeTranserable; import net.filebot.util.StringUtilities; import net.filebot.web.Episode; class EpisodeListExportHandler extends FileBotListExportHandler<Episode> implements ClipboardHandler { public EpisodeListExportHandler(FileBotList<Episode> list) { super(list); } @Override public Transferable createTransferable(JComponent c) { Transferable episodeArray = export(list, true); Transferable textFile = super.createTransferable(c); return new CompositeTranserable(episodeArray, textFile); } @Override public void exportToClipboard(JComponent c, Clipboard clipboard, int action) throws IllegalStateException { ArrayTransferable<Episode> episodeData = export(list, false); StringSelection stringSelection = new StringSelection(StringUtilities.join(episodeData.getArray(), System.lineSeparator())); clipboard.setContents(new CompositeTranserable(episodeData, stringSelection), null); } public ArrayTransferable<Episode> export(FileBotList<?> list, boolean forceAll) { Episode[] selection = ((List<?>) list.getListComponent().getSelectedValuesList()).stream().map(Episode.class::cast).toArray(Episode[]::new); if (forceAll || selection.length == 0) { selection = list.getModel().stream().map(Episode.class::cast).toArray(Episode[]::new); } return new ArrayTransferable<Episode>(selection); } }