package net.filebot.ui.transfer;
import static java.util.Arrays.*;
import static java.util.stream.Collectors.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.util.Objects;
import java.util.stream.IntStream;
import java.util.stream.Stream;
import javax.swing.JComponent;
import javax.swing.JList;
import javax.swing.JTable;
import javax.swing.JTree;
import javax.swing.tree.TreePath;
import net.filebot.util.StringUtilities;
public class DefaultClipboardHandler implements ClipboardHandler {
@Override
public void exportToClipboard(JComponent component, Clipboard clip, int action) throws IllegalStateException {
clip.setContents(new StringSelection(export(component)), null);
}
protected String export(JComponent component) {
if (component instanceof JList) {
return export((JList) component);
}
if (component instanceof JTree) {
return export((JTree) component);
}
if (component instanceof JTable) {
return export((JTable) component);
}
throw new IllegalArgumentException("JComponent not supported: " + component);
}
protected String export(Stream<?> values) {
return StringUtilities.join(values, System.lineSeparator());
}
protected String export(JList list) {
return export(list.getSelectedValuesList().stream());
}
protected String export(JTree tree) {
return export(stream(tree.getSelectionPaths()).map(TreePath::getLastPathComponent));
}
protected String export(JTable table) {
return export(stream(table.getSelectedRows()).map(row -> table.getRowSorter().convertRowIndexToModel(row)).mapToObj(row -> {
return IntStream.range(0, table.getColumnCount()).mapToObj(column -> {
return table.getModel().getValueAt(row, column);
}).map(v -> Objects.toString(v, "")).collect(joining("\t"));
}));
}
}