--- old/modules/swing/src/main/java/javafx/embed/swing/DataFlavorUtils.java 2014-07-18 18:28:53.282460700 +0400 +++ new/modules/swing/src/main/java/javafx/embed/swing/DataFlavorUtils.java 2014-07-18 18:28:52.202399000 +0400 @@ -34,6 +34,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Collections; +import java.util.ArrayList; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; @@ -54,6 +55,44 @@ return flavor.getPrimaryType() + "/" + flavor.getSubType(); } + static DataFlavor[] getDataFlavors(String[] mimeTypes) { + final ArrayList flavors = + new ArrayList(mimeTypes.length); + for (String mime : mimeTypes) { + DataFlavor flavor = null; + try { + flavor = new DataFlavor(mime); + } catch (ClassNotFoundException e) { + // FIXME: what to do? + continue; + } + flavors.add(flavor); + } + return flavors.toArray(new DataFlavor[0]); + } + + static DataFlavor getDataFlavor(final DataFormat format) { + DataFlavor[] flavors = getDataFlavors(format.getIdentifiers().toArray(new String[1])); + + // Well, that's our best guess... + return flavors.length == 0 ? null : flavors[0]; + } + + static String getMimeType(final DataFormat format) { + // Well, that's our best guess... + for (String id : format.getIdentifiers()) return id; + return null; + } + + static DataFormat getDataFormat(final DataFlavor flavor) { + String mimeType = getFxMimeType(flavor); + DataFormat dataFormat = DataFormat.lookupMimeType(mimeType); + if (dataFormat == null) { + dataFormat = new DataFormat(mimeType); // are we ready for this yet? + } + return dataFormat; + } + /** * InputStream implementation backed by a ByteBuffer. * It can handle byte buffers that are backed by arrays