--- /dev/null
+/*******************************************************************************
+ * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.internal.ui.dnd;
+
+import net.sourceforge.phpdt.internal.ui.PHPUIMessages;
+import net.sourceforge.phpeclipse.PHPeclipsePlugin;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.swt.dnd.ByteArrayTransfer;
+import org.eclipse.swt.dnd.TransferData;
+
+public class LocalSelectionTransfer 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>
+ private static final String TYPE_NAME = "local-selection-transfer-format" + (new Long(System.currentTimeMillis())).toString(); //$NON-NLS-1$;
+
+ private static final int TYPEID = registerType(TYPE_NAME);
+
+ private static final LocalSelectionTransfer INSTANCE = new LocalSelectionTransfer();
+
+ private ISelection fSelection;
+
+ private int fSelectionSetTime;
+
+ private LocalSelectionTransfer() {
+ }
+
+ /**
+ * Returns the singleton.
+ */
+ public static LocalSelectionTransfer getInstance() {
+ return INSTANCE;
+ }
+
+ /**
+ * Sets the transfer data for local use.
+ */
+ public void setSelection(ISelection s) {
+ fSelection = s;
+ }
+
+ /**
+ * Returns the local transfer data.
+ */
+ public ISelection getSelection() {
+ return fSelection;
+ }
+
+ public void javaToNative(Object object, TransferData transferData) {
+ // No encoding needed since this is a hardcoded string read and written
+ // in the same process.
+ // See nativeToJava below
+ byte[] check = TYPE_NAME.getBytes();
+ super.javaToNative(check, transferData);
+ }
+
+ public Object nativeToJava(TransferData transferData) {
+ Object result = super.nativeToJava(transferData);
+ if (isInvalidNativeType(result)) {
+ PHPeclipsePlugin.log(IStatus.ERROR, PHPUIMessages
+ .getString("LocalSelectionTransfer.errorMessage")); //$NON-NLS-1$
+ }
+ return fSelection;
+ }
+
+ private boolean isInvalidNativeType(Object result) {
+ // No encoding needed since this is a hardcoded string read and written
+ // in the same process.
+ // See javaToNative above
+ return !(result instanceof byte[])
+ || !TYPE_NAME.equals(new String((byte[]) result));
+ }
+
+ /**
+ * The type id used to identify this transfer.
+ */
+ protected int[] getTypeIds() {
+ return new int[] { TYPEID };
+ }
+
+ protected String[] getTypeNames() {
+ return new String[] { TYPE_NAME };
+ }
+
+ public int getSelectionSetTime() {
+ return fSelectionSetTime;
+ }
+
+ public void setSelectionSetTime(int time) {
+ fSelectionSetTime = time;
+ }
+
+}