public static void main(String[] args) { Comparator<DataFlavor> comparator = DataFlavorUtil.getDataFlavorComparator(); DataFlavor flavor1 = DataFlavor.imageFlavor; DataFlavor flavor2 = DataFlavor.selectionHtmlFlavor; if (comparator.compare(flavor1, flavor2) == 0) { throw new RuntimeException( flavor1.getMimeType() + " and " + flavor2.getMimeType() + " should not be equal"); } }
private boolean testFlavor(DataFlavor inFlavor, Transferable t) { if (inFlavor != null) { if (t.isDataFlavorSupported(inFlavor)) { JConfig.log().logVerboseDebug("Accepting(2): " + inFlavor.getMimeType()); return true; } } return false; }
private boolean testFlavor(DataFlavor inFlavor, DropTargetDragEvent t) { if (inFlavor != null) { if (t.isDataFlavorSupported(inFlavor)) { /* * I think this has been debugged enough. This gets annoying. */ JConfig.log().logVerboseDebug("Accepting(1): " + inFlavor.getMimeType()); return true; } } return false; }
@Override public boolean isDataFlavorSupported(DataFlavor flavor) { return flavor.getMimeType().equalsIgnoreCase(mimeType); }
@Override protected Transferable createTransferable(JComponent c) { assert c == table; return new DataHandler(new Integer(table.getSelectedRow()), localObjectFlavor.getMimeType()); }
/** * Encodes a <code>DataFlavor</code> for use as a <code>String</code> native. The format of an * encoded <code>DataFlavor</code> is implementation-dependent. The only restrictions are: * * <ul> * <li>The encoded representation is <code>null</code> if and only if the specified <code> * DataFlavor</code> is <code>null</code> or its MIME type <code>String</code> is <code>null * </code>. * <li>The encoded representations for two non-<code>null</code> <code>DataFlavor</code>s with * non-<code>null</code> MIME type <code>String</code>s are equal if and only if the MIME * type <code>String</code>s of these <code>DataFlavor</code>s are equal according to <code> * String.equals(Object)</code>. * </ul> * * <p>Sun's reference implementation of this method returns the MIME type <code>String</code> of * the specified <code>DataFlavor</code> prefixed with <code>JAVA_DATAFLAVOR:</code>. * * @param flav the <code>DataFlavor</code> to encode * @return the encoded <code>String</code>, or <code>null</code> if flav is <code>null</code> or * has a <code>null</code> MIME type */ public static String encodeDataFlavor(DataFlavor flav) { return (flav != null) ? SystemFlavorMap.encodeJavaMIMEType(flav.getMimeType()) : null; }
@SuppressWarnings("unchecked") public void drop(DropTargetDropEvent dtde) { Logger.debug("Drop detected..."); Transferable t = dtde.getTransferable(); boolean isAccepted = false; if (t.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { while (true) { Object o = null; try { dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); o = t.getTransferData(DataFlavor.javaFileListFlavor); isAccepted = true; } catch (Exception e) { Logger.error("transfer failed"); } // if o is still null we had an exception if (o instanceof List) { List<File> fileList = (List<File>) o; final int length = fileList.size(); if (length == 1) { String fileName = fileList.get(0).getAbsolutePath().trim(); if (fileName.endsWith(".bmp")) break; // try another flavor -- Mozilla bug dtde.getDropTargetContext().dropComplete(true); loadFile(fileName); return; } dtde.getDropTargetContext().dropComplete(true); loadFiles(fileList); return; } break; } } Logger.debug("browsing supported flavours to find something useful..."); DataFlavor[] df = t.getTransferDataFlavors(); if (df == null || df.length == 0) return; for (int i = 0; i < df.length; ++i) { DataFlavor flavor = df[i]; Object o = null; if (true) { Logger.info("df " + i + " flavor " + flavor); Logger.info(" class: " + flavor.getRepresentationClass().getName()); Logger.info(" mime : " + flavor.getMimeType()); } if (flavor.getMimeType().startsWith("text/uri-list") && flavor.getRepresentationClass().getName().equals("java.lang.String")) { /* * This is one of the (many) flavors that KDE provides: df 2 flavour * java.awt.datatransfer.DataFlavor[mimetype=text/uri-list; * representationclass=java.lang.String] java.lang.String String: file * :/home/egonw/data/Projects/SourceForge/Jmol/Jmol-HEAD/samples/ * cml/methanol2.cml * * A later KDE version gave me the following. Note the mime!! hence the * startsWith above * * df 3 flavor java.awt.datatransfer.DataFlavor[mimetype=text/uri-list * ;representationclass=java.lang.String] class: java.lang.String mime : * text/uri-list; class=java.lang.String; charset=Unicode */ try { o = null; if (!isAccepted) dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); isAccepted = true; o = t.getTransferData(flavor); } catch (Exception e) { Logger.error(null, e); } if (o instanceof String) { if (Logger.debugging) { Logger.debug(" String: " + o.toString()); } loadFile(o.toString()); dtde.getDropTargetContext().dropComplete(true); return; } } else if (flavor .getMimeType() .equals("application/x-java-serialized-object; class=java.lang.String")) { /* * This is one of the flavors that jEdit provides: * * df 0 flavor java.awt.datatransfer.DataFlavor[mimetype=application/ * x-java-serialized-object;representationclass=java.lang.String] class: * java.lang.String mime : application/x-java-serialized-object; * class=java.lang.String String: <molecule title="benzene.mol" * xmlns="http://www.xml-cml.org/schema/cml2/core" * * But KDE also provides: * * df 24 flavor java.awt.datatransfer.DataFlavor[mimetype=application * /x-java-serialized-object;representationclass=java.lang.String] * class: java.lang.String mime : application/x-java-serialized-object; * class=java.lang.String String: file:/home/egonw/Desktop/1PN8.pdb */ try { o = null; if (!isAccepted) dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); isAccepted = true; o = t.getTransferData(df[i]); } catch (Exception e) { Logger.error(null, e); } if (o instanceof String) { String content = (String) o; if (Logger.debugging) { Logger.debug(" String: " + content); } if (content.startsWith("file:/")) { loadFile(content); } else { PropertyChangeEvent pce = new PropertyChangeEvent(this, FD_PROPERTY_INLINE, fd_oldFileName, content); fd_propSupport.firePropertyChange(pce); } dtde.getDropTargetContext().dropComplete(true); return; } } } if (!isAccepted) dtde.rejectDrop(); }
@Override public boolean isDataFlavorSupported(DataFlavor flavor) { return "text/html".equals(flavor.getMimeType()); }