modules/swing/src/main/java/javafx/embed/swing/DataFlavorUtils.java

Print this page




  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package javafx.embed.swing;
  27 
  28 import javafx.scene.input.DataFormat;
  29 
  30 import java.io.ByteArrayOutputStream;
  31 import java.util.Set;
  32 import java.util.Map;
  33 import java.util.List;
  34 import java.util.HashMap;
  35 import java.util.HashSet;
  36 import java.util.Collections;

  37 
  38 import java.awt.datatransfer.DataFlavor;
  39 import java.awt.datatransfer.Transferable;
  40 import java.awt.datatransfer.UnsupportedFlavorException;
  41 
  42 import java.io.ByteArrayInputStream;
  43 import java.io.File;
  44 import java.io.IOException;
  45 import java.io.InputStream;
  46 import java.io.UnsupportedEncodingException;
  47 
  48 import java.nio.ByteBuffer;
  49 
  50 
  51 final class DataFlavorUtils {
  52 
  53     static String getFxMimeType(final DataFlavor flavor) {
  54         return flavor.getPrimaryType() + "/" + flavor.getSubType();






































  55     }
  56 
  57     /**
  58      * InputStream implementation backed by a ByteBuffer.
  59      * It can handle byte buffers that are backed by arrays
  60      * as well as operating system memory.
  61      */
  62     private static class ByteBufferInputStream extends InputStream {
  63         private final ByteBuffer bb;
  64 
  65         private ByteBufferInputStream(ByteBuffer bb) { this.bb = bb; }
  66 
  67         @Override public int available() { return bb.remaining(); }
  68 
  69         @Override public int read() throws IOException {
  70             if (!bb.hasRemaining()) return -1;
  71             return bb.get() & 0xFF; // Make sure the value is in [0..255]
  72         }
  73 
  74         @Override public int read(byte[] bytes, int off, int len) throws IOException {




  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package javafx.embed.swing;
  27 
  28 import javafx.scene.input.DataFormat;
  29 
  30 import java.io.ByteArrayOutputStream;
  31 import java.util.Set;
  32 import java.util.Map;
  33 import java.util.List;
  34 import java.util.HashMap;
  35 import java.util.HashSet;
  36 import java.util.Collections;
  37 import java.util.ArrayList;
  38 
  39 import java.awt.datatransfer.DataFlavor;
  40 import java.awt.datatransfer.Transferable;
  41 import java.awt.datatransfer.UnsupportedFlavorException;
  42 
  43 import java.io.ByteArrayInputStream;
  44 import java.io.File;
  45 import java.io.IOException;
  46 import java.io.InputStream;
  47 import java.io.UnsupportedEncodingException;
  48 
  49 import java.nio.ByteBuffer;
  50 
  51 
  52 final class DataFlavorUtils {
  53 
  54     static String getFxMimeType(final DataFlavor flavor) {
  55         return flavor.getPrimaryType() + "/" + flavor.getSubType();
  56     }
  57 
  58     static DataFlavor[] getDataFlavors(String[] mimeTypes) {
  59         final ArrayList<DataFlavor> flavors =
  60             new ArrayList<DataFlavor>(mimeTypes.length);
  61         for (String mime : mimeTypes) {
  62             DataFlavor flavor = null;
  63             try {
  64                 flavor = new DataFlavor(mime);
  65             } catch (ClassNotFoundException e) {
  66                 // FIXME: what to do?
  67                 continue;
  68             }
  69             flavors.add(flavor);
  70         }
  71         return flavors.toArray(new DataFlavor[0]);
  72     }
  73 
  74     static DataFlavor getDataFlavor(final DataFormat format) {
  75         DataFlavor[] flavors = getDataFlavors(format.getIdentifiers().toArray(new String[1]));
  76 
  77         // Well, that's our best guess...
  78         return flavors.length == 0 ? null : flavors[0];
  79     }
  80 
  81     static String getMimeType(final DataFormat format) {
  82         // Well, that's our best guess...
  83         for (String id : format.getIdentifiers()) return id;
  84         return null;
  85     }
  86 
  87     static DataFormat getDataFormat(final DataFlavor flavor) {
  88         String mimeType = getFxMimeType(flavor);
  89         DataFormat dataFormat = DataFormat.lookupMimeType(mimeType);
  90         if (dataFormat == null) {
  91             dataFormat = new DataFormat(mimeType); // are we ready for this yet?
  92         }
  93         return dataFormat;
  94     }
  95 
  96     /**
  97      * InputStream implementation backed by a ByteBuffer.
  98      * It can handle byte buffers that are backed by arrays
  99      * as well as operating system memory.
 100      */
 101     private static class ByteBufferInputStream extends InputStream {
 102         private final ByteBuffer bb;
 103 
 104         private ByteBufferInputStream(ByteBuffer bb) { this.bb = bb; }
 105 
 106         @Override public int available() { return bb.remaining(); }
 107 
 108         @Override public int read() throws IOException {
 109             if (!bb.hasRemaining()) return -1;
 110             return bb.get() & 0xFF; // Make sure the value is in [0..255]
 111         }
 112 
 113         @Override public int read(byte[] bytes, int off, int len) throws IOException {