| /* | |
| @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); | |
| } | |
| } |