001package arcommon; 002 003import java.awt.Image; 004import java.awt.Toolkit; 005import java.awt.datatransfer.Clipboard; 006import java.awt.datatransfer.DataFlavor; 007import java.awt.datatransfer.StringSelection; 008import java.awt.datatransfer.Transferable; 009import java.awt.datatransfer.UnsupportedFlavorException; 010import java.awt.image.BufferedImage; 011import java.io.File; 012import java.io.IOException; 013import java.util.List; 014 015public class ClipboardUtil { 016 public static boolean isTextAvailable() { 017 return isFlavorAvailable(DataFlavor.stringFlavor); 018 } 019 020 public static boolean isHtmlAvailable() { 021 return isFlavorAvailable(DataFlavor.allHtmlFlavor); 022 } 023 024 public static boolean isImageAvailable() { 025 return isFlavorAvailable(DataFlavor.imageFlavor); 026 } 027 028 public static boolean isFilesAvailable() { 029 return isFlavorAvailable(DataFlavor.javaFileListFlavor); 030 } 031 032 public static String readTextFromClipboard() { 033 Object transferData = readTransferDataFromClipboard(DataFlavor.stringFlavor); 034 if (!(transferData instanceof String)) { 035 return null; 036 } 037 return (String)transferData; 038 } 039 040 public static void writeTextToClipboard(String text) { 041 if (text == null) { 042 throw new NullPointerException("text == null"); 043 } 044 text = text.replace((char)0, ' '); 045 writeTransferDataToClipboard(new StringSelection(text)); 046 } 047 048 public static String readHtmlFromClipboard() { 049 Object transferData = readTransferDataFromClipboard(DataFlavor.allHtmlFlavor); 050 if (!(transferData instanceof String)) { 051 return null; 052 } 053 return (String)transferData; 054 } 055 056 @SuppressWarnings("unchecked") 057 public static List<File> readFilesFromClipboard() { 058 Object transferData = readTransferDataFromClipboard(DataFlavor.javaFileListFlavor); 059 if (!(transferData instanceof List)) { 060 return null; 061 } 062 return (List<File>)transferData; 063 } 064 065 public static BufferedImage readImageFromClipboard() { 066 Object transferData = readTransferDataFromClipboard(DataFlavor.imageFlavor); 067 if (!(transferData instanceof BufferedImage)) { 068 return null; 069 } 070 return (BufferedImage)transferData; 071 } 072 073 // Code copied from http://www.exampledepot.com/egs/java.awt.datatransfer/ToClipImg.html 074 private static class ImageSelection implements Transferable { 075 private Image image; 076 077 public ImageSelection(Image pimage) { 078 this.image = pimage; 079 } 080 081 // Returns supported flavors 082 public DataFlavor[] getTransferDataFlavors() { 083 return new DataFlavor[] {DataFlavor.imageFlavor}; 084 } 085 086 // Returns true if flavor is supported 087 public boolean isDataFlavorSupported(DataFlavor flavor) { 088 return DataFlavor.imageFlavor.equals(flavor); 089 } 090 091 // Returns image 092 public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { 093 if (!DataFlavor.imageFlavor.equals(flavor)) { 094 throw new UnsupportedFlavorException(flavor); 095 } 096 return image; 097 } 098 }; 099 100 public static void writeImageToClipboard(BufferedImage bufferedImage) { 101 writeTransferDataToClipboard(new ImageSelection(bufferedImage)); 102 } 103 104 private static boolean isFlavorAvailable(DataFlavor dataFlavor) { 105 Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); 106 try { 107 return clipboard.isDataFlavorAvailable(dataFlavor); 108 } catch (IllegalStateException e) { 109 if (e.getMessage().equals("cannot open system clipboard")) { 110 return false; 111 } 112 throw e; 113 } 114 } 115 116 private static Object readTransferDataFromClipboard(DataFlavor dataFlavor) { 117 Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); 118 try { 119 Transferable transferable = clipboard.getContents(null); 120 Object transferData = transferable.getTransferData(dataFlavor); 121 return transferData; 122 } catch (IllegalStateException e) { 123 if (e.getMessage().equals("cannot open system clipboard")) { 124 return null; 125 } 126 throw e; 127 } catch (UnsupportedFlavorException e) { 128 return null; 129 } catch (IOException e) { 130 return null; 131 } 132 } 133 134 private static void writeTransferDataToClipboard(Transferable transferable) { 135 Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); 136 clipboard.setContents(transferable, null); 137 } 138}