/******************************************************************************* * Copyright (c) 2012 Olivier Moises * * 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: * Olivier Moises- initial API and implementation *******************************************************************************/ package org.eclipse.wazaabi.ide.ui.editors.viewer; import java.io.*; import org.eclipse.swt.dnd.ByteArrayTransfer; import org.eclipse.swt.dnd.TransferData; public class ModelDescriptorTransfert extends ByteArrayTransfer { private static ModelDescriptorTransfert instance = new ModelDescriptorTransfert(); private static final String TYPE_NAME = "wazaabi-model-descriptor-format"; private static final int TYPEID = registerType(TYPE_NAME); public static ModelDescriptorTransfert getInstance() { return instance; } private ModelDescriptorTransfert() { } public ModelDescriptor[] fromByteArray(byte[] bytes) { try { ObjectInputStream in = new ObjectInputStream( new ByteArrayInputStream(bytes)); // read number of modelDescriptors int n = in.readInt(); // read modelDescriptors ModelDescriptor[] modelDescriptors = new ModelDescriptor[n]; for (int i = 0; i < n; i++) { ModelDescriptor modelDescriptor = (ModelDescriptor) in .readObject(); if (modelDescriptor == null) return null; modelDescriptors[i] = modelDescriptor; } return modelDescriptors; } catch (IOException e) { return null; } catch (ClassNotFoundException e) { return null; } } protected int[] getTypeIds() { return new int[] { TYPEID }; } protected String[] getTypeNames() { return new String[] { TYPE_NAME }; } protected void javaToNative(Object object, TransferData transferData) { byte[] bytes = toByteArray((ModelDescriptor[]) object); if (bytes != null) super.javaToNative(bytes, transferData); } protected Object nativeToJava(TransferData transferData) { byte[] bytes = (byte[]) super.nativeToJava(transferData); return fromByteArray(bytes); } public byte[] toByteArray(ModelDescriptor[] modelDescriptors) { ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); byte[] bytes = null; try { ObjectOutputStream out = new ObjectOutputStream(byteOut); out.writeInt(modelDescriptors.length); for (ModelDescriptor modelDescriptor : modelDescriptors) out.writeObject(modelDescriptor); out.close(); bytes = byteOut.toByteArray(); } catch (IOException e) { // when in doubt send nothing } return bytes; } }