Package se.runa.clipboard

Source Code of se.runa.clipboard.ClipboardManager$FileContent

package se.runa.clipboard;

import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.ClipboardOwner;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.File;
import java.io.IOException;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;

public class ClipboardManager implements ClipboardOwner {

    private Logger logger = Logger.getLogger(getClass().getName());

    private DataFlavor strategyDataFlavor = new DataFlavor(
      ClipboardStrategy.class, "Strategy");

    private static ClipboardManager instance = new ClipboardManager();

    private ClipboardManager() {

    }

    public static ClipboardManager instance() {
  return instance;
    }

    private void modifyFile(List<File> files, ClipboardStrategy strategy) {
  Transferable contents = new FileContent(files, strategy);
  Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
  clipboard.setContents(contents, this);
    }

    public void copy(List<File> files) {
  modifyFile(files, ClipboardStrategy.COPY);
    }

    public void cut(List<File> files) {
  modifyFile(files, ClipboardStrategy.MOVE);
    }

    private Object getContent(DataFlavor dataFlavor)
      throws UnsupportedFlavorException, IOException {
  Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
  Transferable contents = clipboard.getContents(this);
  if (contents != null && contents.isDataFlavorSupported(dataFlavor)) {
      return contents.getTransferData(dataFlavor);
  } else {
      return null;
  }
    }

    @SuppressWarnings("unchecked")
    public List<File> getFileContent() throws IOException,
      UnsupportedFlavorException {
  return (List<File>) getContent(DataFlavor.javaFileListFlavor);
    }

    public ClipboardStrategy getStrategyContent()
      throws UnsupportedFlavorException, IOException {
  ClipboardStrategy strategy = (ClipboardStrategy) getContent(strategyDataFlavor);
  return strategy == null ? ClipboardStrategy.COPY : strategy;
    }

    @Override
    public void lostOwnership(Clipboard clipboard, Transferable contents) {
  logger.info(String.valueOf(contents));
  clipboard.setContents(contents, this);
    }

    private static class FileContent implements Transferable, Serializable {

  private static final long serialVersionUID = -8248783625881260945L;

  private Map<DataFlavor, Object> map;

  public FileContent(List<File> files, ClipboardStrategy strategy) {
      map = new HashMap<DataFlavor, Object>();
      map.put(DataFlavor.javaFileListFlavor, files);
      map.put(new DataFlavor(ClipboardStrategy.class, "Strategy"),
        strategy);
  }

  @Override
  public Object getTransferData(DataFlavor flavor)
    throws UnsupportedFlavorException, IOException {
      if (map.containsKey(flavor)) {
    return map.get(flavor);
      } else {
    throw new UnsupportedFlavorException(flavor);
      }
  }

  @Override
  public DataFlavor[] getTransferDataFlavors() {
      return map.keySet().toArray(new DataFlavor[] {});
  }

  @Override
  public boolean isDataFlavorSupported(DataFlavor flavor) {
      return map.containsKey(flavor);
  }

    }

}
TOP

Related Classes of se.runa.clipboard.ClipboardManager$FileContent

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.