package org.eclipse.wst.sse.sieditor.ui.v2; | |
import java.nio.charset.Charset; | |
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.jface.viewers.IStructuredSelection; | |
import org.eclipse.swt.dnd.ByteArrayTransfer; | |
import org.eclipse.swt.dnd.TransferData; | |
/** | |
* Class for serializing gadgets to/from a byte array | |
*/ | |
public class SiEditorTransfer extends ByteArrayTransfer { | |
private static SiEditorTransfer instance = new SiEditorTransfer(); | |
private static final String TYPE_NAME = "sie-transfer-format"; | |
private static final int TYPEID = registerType(TYPE_NAME); | |
private IStructuredSelection selection; | |
public static SiEditorTransfer getInstance() { | |
return instance; | |
} | |
private SiEditorTransfer() { | |
} | |
protected int[] getTypeIds() { | |
return new int[] { TYPEID }; | |
} | |
/* | |
* Method declared on Transfer. | |
*/ | |
protected String[] getTypeNames() { | |
return new String[] { TYPE_NAME }; | |
} | |
@Override | |
public TransferData[] getSupportedTypes() { | |
int[] types = getTypeIds(); | |
TransferData[] data = new TransferData[types.length]; | |
for (int i = 0; i < types.length; i++) { | |
data[i] = new TransferData(); | |
data[i].type = types[i]; | |
} | |
return data; | |
} | |
@Override | |
public boolean isSupportedType(TransferData transferData) { | |
System.out.println("isSupportedType"); | |
return transferData.type == TYPEID; | |
} | |
public IStructuredSelection getSelection() { | |
return selection; | |
} | |
private boolean isInvalidNativeType(Object result) { | |
return !(result instanceof byte[]) || !TYPE_NAME.equals(new String((byte[]) result, Charset.forName("UTF-8"))); | |
} | |
public void javaToNative(Object object, TransferData transferData) { | |
byte[] check = TYPE_NAME.getBytes(Charset.forName("UTF-8")); | |
super.javaToNative(check, transferData); | |
selection = (IStructuredSelection) object; | |
} | |
public Object nativeToJava(TransferData transferData) { | |
Object result = super.nativeToJava(transferData); | |
if (isInvalidNativeType(result)) { | |
Policy.getLog().log( | |
new Status(IStatus.ERROR, Policy.JFACE, IStatus.ERROR, JFaceResources | |
.getString("LocalContextSelectionTransfer.errorMessage"), null)); //$NON-NLS-1$ | |
} | |
return selection; | |
} | |
public void setSelection(IStructuredSelection selection) { | |
this.selection = selection; | |
} | |
} |