| /* |
| @test |
| @key headful |
| @bug 4932376 |
| @summary verifies that data transfer within one JVM works correctly if |
| the transfer data was created with a custom class loader. |
| @author das@sparc.spb.su area=datatransfer |
| @library ../../regtesthelpers |
| @build TransferableList AnotherInterface CopyClassFile CustomClassLoaderTransferTest |
| @run main CopyClassFile -r ListInterface subdir/ |
| @run main CopyClassFile -r TransferableList subdir/ |
| @run main CustomClassLoaderTransferTest |
| */ |
| |
| import java.awt.*; |
| import java.awt.datatransfer.*; |
| import java.io.*; |
| import java.net.URL; |
| import java.net.URLClassLoader; |
| |
| public class CustomClassLoaderTransferTest { |
| public static class DFTransferable implements Transferable { |
| private final DataFlavor df; |
| private final Object obj; |
| public DFTransferable(DataFlavor df, Object obj) { |
| this.df = df; |
| this.obj = obj; |
| } |
| |
| @Override |
| public Object getTransferData(DataFlavor flavor) |
| throws UnsupportedFlavorException, IOException { |
| if (df.equals(flavor)) { |
| return obj; |
| } else { |
| throw new UnsupportedFlavorException(flavor); |
| } |
| } |
| |
| @Override |
| public DataFlavor[] getTransferDataFlavors(){ |
| return new DataFlavor[] { df }; |
| } |
| |
| @Override |
| public boolean isDataFlavorSupported(DataFlavor flavor) { |
| return df.equals(flavor); |
| } |
| } |
| |
| public static void main(String[] args) throws Exception { |
| Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard(); |
| URL url = new File("./subdir/").toURL(); |
| ClassLoader classLoader = new URLClassLoader(new URL[] { url }, |
| CustomClassLoaderTransferTest.class.getClassLoader()); |
| Class clazz = Class.forName("TransferableList", true, classLoader); |
| DataFlavor df = new DataFlavor(clazz, "Transferable List"); |
| Object obj = clazz.newInstance(); |
| Transferable t = new DFTransferable(df, obj); |
| c.setContents(t, null); |
| Transferable ct = c.getContents(null); |
| ct.getTransferData(df); |
| } |
| } |