/*
* Copyright (c) 2004-2011 Marco Maccaferri and others.
* 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:
* Marco Maccaferri - initial API and implementation
*/
package org.eclipsetrader.ui.charts;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import org.eclipse.swt.dnd.ByteArrayTransfer;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.TransferData;
public class ChartObjectFactoryTransfer extends ByteArrayTransfer {
private static ChartObjectFactoryTransfer instance = new ChartObjectFactoryTransfer();
private static final String TYPENAME = ChartObjectFactoryTransfer.class.getName();
private static final int TYPEID = registerType(TYPENAME);
public ChartObjectFactoryTransfer() {
}
public static ChartObjectFactoryTransfer getInstance() {
return instance;
}
/* (non-Javadoc)
* @see org.eclipse.swt.dnd.Transfer#getTypeIds()
*/
@Override
protected int[] getTypeIds() {
return new int[] {
TYPEID
};
}
/* (non-Javadoc)
* @see org.eclipse.swt.dnd.Transfer#getTypeNames()
*/
@Override
protected String[] getTypeNames() {
return new String[] {
TYPENAME
};
}
@Override
protected void javaToNative(Object object, TransferData transferData) {
if (!checkMyType(object) || !isSupportedType(transferData)) {
DND.error(DND.ERROR_INVALID_DATA);
}
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
ObjectOutputStream writeOut = new ObjectOutputStream(out);
if (object instanceof String) {
object = new String[] {
(String) object
};
}
if (object instanceof String[]) {
writeOut.writeObject(object);
}
byte[] buffer = out.toByteArray();
writeOut.close();
super.javaToNative(buffer, transferData);
} catch (Exception e) {
// TODO
}
}
@Override
protected Object nativeToJava(TransferData transferData) {
if (isSupportedType(transferData)) {
byte[] buffer = (byte[]) super.nativeToJava(transferData);
if (buffer == null) {
return null;
}
try {
ByteArrayInputStream in = new ByteArrayInputStream(buffer);
ObjectInputStream readIn = new ObjectInputStream(in);
String[] s = (String[]) readIn.readObject();
return s;
} catch (Exception e) {
// TODO
}
}
return new String[0];
}
public static boolean checkMyType(Object object) {
// TODO
return true;
}
}