X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/dnd/LocalSelectionTransfer.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/dnd/LocalSelectionTransfer.java new file mode 100644 index 0000000..6a870fd --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/dnd/LocalSelectionTransfer.java @@ -0,0 +1,104 @@ +/******************************************************************************* + * 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 + // LocalSelectionTransfer + 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; + } + +}