package eu.etaxonomy.taxeditor.featuretree;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.EOFException;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
import java.util.UUID;
-import org.eclipse.swt.dnd.ByteArrayTransfer;
-import org.eclipse.swt.dnd.TransferData;
-
import eu.etaxonomy.cdm.api.service.IFeatureNodeService;
import eu.etaxonomy.cdm.model.description.FeatureNode;
+import eu.etaxonomy.taxeditor.model.CdmObjectTransfer;
import eu.etaxonomy.taxeditor.store.CdmStore;
/**
* @created Aug 5, 2010
* @version 1.0
*/
-public class FeatureNodeTransfer extends ByteArrayTransfer {
+public class FeatureNodeTransfer extends CdmObjectTransfer<FeatureNode> {
private static FeatureNodeTransfer instance = new FeatureNodeTransfer();
private static final String TYPE_NAME = "featureNode-transfer-format";
return instance;
}
- private FeatureNodeTransfer() {
-
- }
+ private FeatureNodeTransfer() {}
/** {@inheritDoc} */
@Override
return new String[] { TYPE_NAME };
}
- /*
- * Method declared on Transfer.
- */
- /** {@inheritDoc} */
- protected void javaToNative(Object object, TransferData transferData) {
- byte[] bytes = toByteArray((FeatureNode[]) object);
- if (bytes != null)
- super.javaToNative(bytes, transferData);
- }
-
- /*
- * Method declared on Transfer.
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.model.CdmObjectTransfer#loadElement(java.util.UUID)
*/
- /** {@inheritDoc} */
- protected Object nativeToJava(TransferData transferData) {
- byte[] bytes = (byte[]) super.nativeToJava(transferData);
- return fromByteArray(bytes);
- }
-
- /**
- * <p>toByteArray</p>
- *
- * @param featureNodes an array of {@link eu.etaxonomy.cdm.model.description.FeatureNode} objects.
- * @return an array of byte.
- */
- protected byte[] toByteArray(FeatureNode[] featureNodes) {
- /**
- * Transfer data is an array of gadgets. Serialized version is: (int)
- * number of gadgets (Gadget) gadget 1 (Gadget) gadget 2 ... repeat for
- * each subsequent gadget see writeGadget for the (Gadget) format.
- */
- ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
- DataOutputStream out = new DataOutputStream(byteOut);
-
- byte[] bytes = null;
-
- try {
-
- for(FeatureNode featureNode : featureNodes){
- writeFeatureNode(featureNode, out);
- }
- out.close();
- bytes = byteOut.toByteArray();
- } catch (IOException e) {
- // when in doubt send nothing
- }
- return bytes;
- }
-
- /**
- * <p>fromByteArray</p>
- *
- * @param bytes an array of byte.
- * @return an array of {@link eu.etaxonomy.cdm.model.description.FeatureNode} objects.
- */
- protected FeatureNode[] fromByteArray(byte[] bytes) {
- DataInputStream in = new DataInputStream(
- new ByteArrayInputStream(bytes));
-
- try {
- List<FeatureNode> featureNodes = new ArrayList<FeatureNode>();
-
- try{
- while(true){
- featureNodes.add(readFeatureNode(in));
- }
- }catch(EOFException e){
- return featureNodes.toArray(new FeatureNode[]{});
- }
- } catch (IOException e) {
- return null;
- }
- }
-
- /**
- * Reads and returns a single featureNode from the given stream.
- */
- private FeatureNode readFeatureNode(DataInputStream dataIn) throws IOException {
-
- UUID uuid = UUID.fromString(dataIn.readUTF());
-
- FeatureNode featureNode = CdmStore.getService(IFeatureNodeService.class).load(uuid);
-
- return featureNode;
- }
-
- /**
- * Writes the given featureNode to the stream.
- */
- private void writeFeatureNode(FeatureNode featureNode,
- DataOutputStream dataOut) throws IOException {
- dataOut.writeUTF(featureNode.getUuid().toString());
+ @Override
+ public FeatureNode loadElement(UUID uuid) {
+ return CdmStore.getService(IFeatureNodeService.class).load(uuid);
}
}