-/*******************************************************************************\r
- * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
- * in Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- * VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.ui.dnd;\r
-\r
-import java.awt.datatransfer.DataFlavor;\r
-import java.awt.datatransfer.FlavorTable;\r
-import java.awt.datatransfer.SystemFlavorMap;\r
-import java.util.Map;\r
-\r
-import org.eclipse.core.runtime.IStatus;\r
-import org.eclipse.core.runtime.Status;\r
-import org.eclipse.jface.resource.JFaceResources;\r
-import org.eclipse.jface.util.Policy;\r
-import org.eclipse.swt.dnd.ByteArrayTransfer;\r
-import org.eclipse.swt.dnd.TransferData;\r
-\r
-import sun.awt.datatransfer.DataTransferer;\r
-\r
-public class LocalObjectTransfer extends ByteArrayTransfer {\r
-\r
- // First attempt to create a UUID for the type name to make sure that\r
- // different Eclipse applications use different "types" of\r
- // <code>LocalSelectionTransfer</code>\r
- public static final String TYPE_NAME = SystemFlavorMap.encodeJavaMIMEType(LocalObjectTransferable.TYPE_NAME);\r
- \r
- private static int getMapping() {\r
-\r
- for(Map.Entry<DataFlavor, String> entry : SystemFlavorMap.getDefaultFlavorMap().getNativesForFlavors(new DataFlavor[] { LocalObjectTransferable.FLAVOR }).entrySet()) {\r
- for(long l : DataTransferer.getInstance().getFormatsForFlavorAsArray(entry.getKey(), (FlavorTable)SystemFlavorMap.getDefaultFlavorMap())) {\r
- return (int)l;\r
- }\r
- }\r
- \r
- throw new Error("No mapping.");\r
- \r
- }\r
- // In Linux (Ubuntu 14.04) using SystemFlavorMap to get the type id gives different result than what is received with drop data (TransferData.type) \r
- private static final int TYPEID = registerType(TYPE_NAME);//getMapping();\r
- \r
- private static final LocalObjectTransfer INSTANCE = new LocalObjectTransfer();\r
-\r
- Object transferredObject;\r
-\r
- /**\r
- * Only the singleton instance of this class may be used. \r
- */\r
- protected LocalObjectTransfer() {\r
- // do nothing\r
- }\r
-\r
- /**\r
- * Returns the singleton.\r
- * \r
- * @return the singleton\r
- */\r
- public static LocalObjectTransfer getTransfer() {\r
- return INSTANCE;\r
- }\r
-\r
- /**\r
- * Tests whether native drop data matches this transfer type.\r
- * \r
- * @param result result of converting the native drop data to Java\r
- * @return true if the native drop data does not match this transfer type.\r
- * false otherwise.\r
- */\r
- private boolean isInvalidNativeType(Object result) {\r
- return !(result instanceof byte[])\r
- || !TYPE_NAME.equals(new String((byte[]) result));\r
- }\r
-\r
- /**\r
- * Returns the type id used to identify this transfer.\r
- * \r
- * @return the type id used to identify this transfer.\r
- */\r
- protected int[] getTypeIds() {\r
- return new int[] { TYPEID };\r
- }\r
-\r
- /**\r
- * Returns the type name used to identify this transfer.\r
- * \r
- * @return the type name used to identify this transfer.\r
- */\r
- protected String[] getTypeNames() {\r
- return new String[] { TYPE_NAME };\r
- }\r
-\r
- /**\r
- * Overrides org.eclipse.swt.dnd.ByteArrayTransfer#javaToNative(Object,\r
- * TransferData).\r
- * Only encode the transfer type name since the selection is read and\r
- * written in the same process.\r
- * \r
- * @see org.eclipse.swt.dnd.ByteArrayTransfer#javaToNative(java.lang.Object, org.eclipse.swt.dnd.TransferData)\r
- */\r
- public void javaToNative(Object object, TransferData transferData) {\r
- //System.out.println("javaToNative " + object);\r
- transferredObject = object;\r
- byte[] check = TYPE_NAME.getBytes();\r
- super.javaToNative(check, transferData);\r
- }\r
-\r
- /**\r
- * Overrides org.eclipse.swt.dnd.ByteArrayTransfer#nativeToJava(TransferData).\r
- * Test if the native drop data matches this transfer type.\r
- * \r
- * @see org.eclipse.swt.dnd.ByteArrayTransfer#nativeToJava(TransferData)\r
- */\r
- public Object nativeToJava(TransferData transferData) {\r
- //System.out.println("nativeToJava " + transferredObject);\r
- Object result = super.nativeToJava(transferData);\r
- if (isInvalidNativeType(result)) {\r
- Policy.getLog().log(new Status(\r
- IStatus.ERROR,\r
- Policy.JFACE,\r
- IStatus.ERROR,\r
- JFaceResources.getString("LocalObjectTransfer.errorMessage"), null)); //$NON-NLS-1$\r
- }\r
- return transferredObject;\r
- }\r
- \r
- public void clear() {\r
- //System.out.println("LocalObjectTransfer clear");\r
- transferredObject = null;\r
- }\r
- \r
- public Object getObject() {\r
- //System.out.println("LocalObjectTransfer get " + transferredObject);\r
- return transferredObject;\r
- }\r
- \r
- public void setObject(Object object) {\r
- //System.out.println("LocalObjectTransfer set " + object);\r
- transferredObject = object;\r
- }\r
- \r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.ui.dnd;
+
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.FlavorTable;
+import java.awt.datatransfer.SystemFlavorMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.util.Policy;
+import org.eclipse.swt.dnd.ByteArrayTransfer;
+import org.eclipse.swt.dnd.TransferData;
+
+import sun.awt.datatransfer.DataTransferer;
+
+public class LocalObjectTransfer extends ByteArrayTransfer {
+
+ // First attempt to create a UUID for the type name to make sure that
+ // different Eclipse applications use different "types" of
+ // <code>LocalSelectionTransfer</code>
+ public static final String TYPE_NAME = SystemFlavorMap.encodeJavaMIMEType(LocalObjectTransferable.TYPE_NAME);
+
+ private static int getMapping() {
+
+ for(Map.Entry<DataFlavor, String> entry : SystemFlavorMap.getDefaultFlavorMap().getNativesForFlavors(new DataFlavor[] { LocalObjectTransferable.FLAVOR }).entrySet()) {
+ for(long l : DataTransferer.getInstance().getFormatsForFlavorAsArray(entry.getKey(), (FlavorTable)SystemFlavorMap.getDefaultFlavorMap())) {
+ return (int)l;
+ }
+ }
+
+ throw new Error("No mapping.");
+
+ }
+ // In Linux (Ubuntu 14.04) using SystemFlavorMap to get the type id gives different result than what is received with drop data (TransferData.type)
+ private static final int TYPEID = registerType(TYPE_NAME);//getMapping();
+
+ private static final LocalObjectTransfer INSTANCE = new LocalObjectTransfer();
+
+ Object transferredObject;
+
+ /**
+ * Only the singleton instance of this class may be used.
+ */
+ protected LocalObjectTransfer() {
+ // do nothing
+ }
+
+ /**
+ * Returns the singleton.
+ *
+ * @return the singleton
+ */
+ public static LocalObjectTransfer getTransfer() {
+ return INSTANCE;
+ }
+
+ /**
+ * Tests whether native drop data matches this transfer type.
+ *
+ * @param result result of converting the native drop data to Java
+ * @return true if the native drop data does not match this transfer type.
+ * false otherwise.
+ */
+ private boolean isInvalidNativeType(Object result) {
+ return !(result instanceof byte[])
+ || !TYPE_NAME.equals(new String((byte[]) result));
+ }
+
+ /**
+ * Returns the type id used to identify this transfer.
+ *
+ * @return the type id used to identify this transfer.
+ */
+ protected int[] getTypeIds() {
+ return new int[] { TYPEID };
+ }
+
+ /**
+ * Returns the type name used to identify this transfer.
+ *
+ * @return the type name used to identify this transfer.
+ */
+ protected String[] getTypeNames() {
+ return new String[] { TYPE_NAME };
+ }
+
+ /**
+ * Overrides org.eclipse.swt.dnd.ByteArrayTransfer#javaToNative(Object,
+ * TransferData).
+ * Only encode the transfer type name since the selection is read and
+ * written in the same process.
+ *
+ * @see org.eclipse.swt.dnd.ByteArrayTransfer#javaToNative(java.lang.Object, org.eclipse.swt.dnd.TransferData)
+ */
+ public void javaToNative(Object object, TransferData transferData) {
+ //System.out.println("javaToNative " + object);
+ transferredObject = object;
+ byte[] check = TYPE_NAME.getBytes();
+ super.javaToNative(check, transferData);
+ }
+
+ /**
+ * Overrides org.eclipse.swt.dnd.ByteArrayTransfer#nativeToJava(TransferData).
+ * Test if the native drop data matches this transfer type.
+ *
+ * @see org.eclipse.swt.dnd.ByteArrayTransfer#nativeToJava(TransferData)
+ */
+ public Object nativeToJava(TransferData transferData) {
+ //System.out.println("nativeToJava " + transferredObject);
+ Object result = super.nativeToJava(transferData);
+ if (isInvalidNativeType(result)) {
+ Policy.getLog().log(new Status(
+ IStatus.ERROR,
+ Policy.JFACE,
+ IStatus.ERROR,
+ JFaceResources.getString("LocalObjectTransfer.errorMessage"), null)); //$NON-NLS-1$
+ }
+ return transferredObject;
+ }
+
+ public void clear() {
+ //System.out.println("LocalObjectTransfer clear");
+ transferredObject = null;
+ }
+
+ public Object getObject() {
+ //System.out.println("LocalObjectTransfer get " + transferredObject);
+ return transferredObject;
+ }
+
+ public void setObject(Object object) {
+ //System.out.println("LocalObjectTransfer set " + object);
+ transferredObject = object;
+ }
+
+}