taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/handler/OpenRelatedConceptHandler.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/operation/CreateConceptRelationOperation.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/operation/DeleteConceptRelationOperation.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptionElementDragListener.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptionElementDropAdapter.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptionElementTransfer.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptiveContentProvider.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptiveLabelProvider.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptiveViewPart.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/DeleteHandler.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/DescriptionsMenuPropertyTester.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/DynamicFeatureMenu.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/MoveDescriptionElementsHandler.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/ChangeDescriptionElementType.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/CreateDescriptionElementOperation.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/CreateTaxonDescriptionOperation.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/DeleteDescriptionElementOperation.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/DeleteTaxonDescriptionOperation.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/MoveDescriptionElementsOperation.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/detail/CdmSectionPart.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/detail/DetailsViewPart.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/detail/DetailsViewer.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/AbstractDataChangeBehaviour.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/AbstractUtility.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/AuthorHelper.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/CdmObjectTransfer.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/CdmProgressMonitorAdapter.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/CommonHelper.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/ContextListenerAdapter.java -text
name="taxeditor-editor.separator1"
visible="true">
</separator>
+ <command
+ commandId="eu.etaxonomy.taxeditor.description.commands.moveDescriptionElements"
+ label="Move Elements"
+ style="push">
+ <visibleWhen
+ checkEnabled="true">
+ <reference
+ definitionId="isDescriptionElement">
+ </reference>
+ </visibleWhen>
+ </command>
<separator
name="eu.etaxonomy.taxeditor.taxonDescriptionEditor.separator.afterNew"
visible="true">
id="eu.etaxonomy.taxeditor.description.commands.adddescription"
name="New Description">
</command>
+ <command
+ defaultHandler="eu.etaxonomy.taxeditor.editor.view.descriptive.handler.MoveDescriptionElementsHandler"
+ id="eu.etaxonomy.taxeditor.description.commands.moveDescriptionElements"
+ name="Move Description Elements">
+ </command>
</extension>
<extension
point="org.eclipse.core.expressions.definitions">
--- /dev/null
+// $Id$
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.taxeditor.editor.view.descriptive;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DragSourceAdapter;
+import org.eclipse.swt.dnd.DragSourceEvent;
+
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
+
+/**
+ * @author n.hoffmann
+ * @created Feb 8, 2011
+ * @version 1.0
+ */
+public class DescriptionElementDragListener extends DragSourceAdapter {
+
+ private DescriptiveViewPart part;
+
+ public DescriptionElementDragListener(DescriptiveViewPart part){
+ this.part = part;
+ }
+
+ /**
+ * Method declared on DragSourceListener
+ */
+ public void dragFinished(DragSourceEvent event) {
+ if (!event.doit)
+ return;
+ // FIXME what to do here?
+ if (event.detail != DND.DROP_NONE) {
+ IStructuredSelection selection = (IStructuredSelection) part.getViewer()
+ .getSelection();
+ part.changed(null);
+ }
+ }
+
+ /**
+ * Method declared on DragSourceListener
+ */
+ public void dragSetData(DragSourceEvent event) {
+ IStructuredSelection selection = (IStructuredSelection) part.getViewer()
+ .getSelection();
+ DescriptionElementBase[] descriptionElements = (DescriptionElementBase[]) selection.toList().toArray(new DescriptionElementBase[selection.size()]);
+ if (DescriptionElementTransfer.getInstance().isSupportedType(
+ event.dataType)) {
+ event.data = descriptionElements;
+ }
+ }
+
+ /**
+ * Method declared on DragSourceListener
+ */
+ public void dragStart(DragSourceEvent event) {
+ event.doit = !part.getViewer().getSelection().isEmpty();
+ }
+
+}
--- /dev/null
+// $Id$
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.taxeditor.editor.view.descriptive;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerDropAdapter;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.TransferData;
+
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
+import eu.etaxonomy.cdm.model.description.TaxonDescription;
+import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.MoveDescriptionElementsOperation;
+import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
+import eu.etaxonomy.taxeditor.store.StoreUtil;
+
+/**
+ * @author n.hoffmann
+ * @created Feb 8, 2011
+ * @version 1.0
+ */
+public class DescriptionElementDropAdapter extends ViewerDropAdapter {
+
+ /**
+ * @param viewer
+ */
+ protected DescriptionElementDropAdapter(Viewer viewer) {
+ super(viewer);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ViewerDropAdapter#performDrop(java.lang.Object)
+ */
+ @Override
+ public boolean performDrop(Object data) {
+ TaxonDescription target = (TaxonDescription) getCurrentTarget();
+ Object[] droppedElements = (Object[]) data;
+
+ Collection<DescriptionElementBase> descriptionElements = new ArrayList<DescriptionElementBase>();
+
+ boolean isCopy = getCurrentOperation() == DND.DROP_COPY ? true : false;
+
+ // cannot drop a feature node onto itself
+ for (Object droppedElement : droppedElements) {
+ if (droppedElement == null){
+ StoreUtil.warningDialog("Operation not supported yet", this, "We are currently unable to drag and drop a newly created element. Please save the editor to make this work.");
+ return false;
+ }
+ if(! (droppedElement instanceof DescriptionElementBase)){
+ return false;
+ }else{
+ DescriptionElementBase descriptionElement = (DescriptionElementBase) droppedElement;
+
+ if (descriptionElement.getInDescription().equals(target)) {
+ return false;
+ }
+
+ descriptionElements.add(descriptionElement);
+ }
+ }
+
+ AbstractPostOperation operation = new MoveDescriptionElementsOperation("Move Descriptions", EditorUtil.getUndoContext(), target, descriptionElements, isCopy, null);
+
+ EditorUtil.executeOperation(operation);
+
+ return true;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ViewerDropAdapter#validateDrop(java.lang.Object, int, org.eclipse.swt.dnd.TransferData)
+ */
+ @Override
+ public boolean validateDrop(Object target, int operation,
+ TransferData transferData) {
+ boolean transferDataIsSupported = DescriptionElementTransfer.getInstance().isSupportedType(
+ transferData);
+ return target instanceof TaxonDescription && transferDataIsSupported;
+ }
+
+}
--- /dev/null
+// $Id$
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.taxeditor.editor.view.descriptive;
+
+import java.util.UUID;
+
+import eu.etaxonomy.cdm.api.service.IDescriptionService;
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
+import eu.etaxonomy.taxeditor.model.CdmObjectTransfer;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+/**
+ * @author n.hoffmann
+ * @created Feb 8, 2011
+ * @version 1.0
+ */
+public class DescriptionElementTransfer extends CdmObjectTransfer<DescriptionElementBase> {
+
+ private static DescriptionElementTransfer instance = new DescriptionElementTransfer();
+ private static final String TYPE_NAME = "descriptionElement-transfer-format";
+ private static final int TYPEID = registerType(TYPE_NAME);
+
+ public static synchronized DescriptionElementTransfer getInstance(){
+ return instance;
+ }
+
+ private DescriptionElementTransfer(){}
+
+ /* (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[] { TYPE_NAME };
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.model.CdmObjectTransfer#loadElement(java.util.UUID)
+ */
+ @Override
+ public DescriptionElementBase loadElement(UUID uuid) {
+ return CdmStore.getService(IDescriptionService.class).loadDescriptionElement(uuid, null);
+ }
+}
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
private ToggleDescriptionAction showAllElementsAction;
private ToggleDescriptionAction hideAllElementsAction;
-
+
+ private int dndOperations = DND.DROP_COPY | DND.DROP_MOVE;
+
/** {@inheritDoc} */
@Override
public void createViewer(Composite parent) {
viewer.setSorter(new DescriptiveViewerSorter());
viewer.setAutoExpandLevel(2);
+
+
+ Transfer[] transfers = new Transfer[] { DescriptionElementTransfer.getInstance() };
+ viewer.addDragSupport(dndOperations, transfers, new DescriptionElementDragListener(
+ this));
+ viewer.addDropSupport(dndOperations, transfers,
+ new DescriptionElementDropAdapter(viewer));
// Propagate selection from viewer
getSite().setSelectionProvider(viewer);
--- /dev/null
+// $Id$
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.taxeditor.editor.view.descriptive.handler;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.common.NotDefinedException;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+import eu.etaxonomy.cdm.api.service.IDescriptionService;
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
+import eu.etaxonomy.cdm.model.description.TaxonDescription;
+import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.taxeditor.dialogs.filteredSelection.TaxonBaseSelectionDialog;
+import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptiveViewPart;
+import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.MoveDescriptionElementsOperation;
+import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
+import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+/**
+ * @author n.hoffmann
+ * @created Feb 8, 2011
+ * @version 1.0
+ */
+public class MoveDescriptionElementsHandler extends AbstractHandler {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+
+ ConversationHolder conversation = CdmStore.createConversation();
+
+ ISelection selection = HandlerUtil.getActiveMenuSelection(event);
+
+ if(selection instanceof IStructuredSelection){
+
+ IStructuredSelection structuredSelection = (IStructuredSelection) selection;
+
+ List<DescriptionElementBase> elements = new ArrayList<DescriptionElementBase>();
+
+ for(Object element : structuredSelection.toArray()){
+ if(element instanceof DescriptionElementBase){
+ UUID uuid = ((DescriptionElementBase) element).getUuid();
+
+ elements.add(CdmStore.getService(IDescriptionService.class).loadDescriptionElement(uuid, null));
+ }
+ }
+
+ Taxon targetTaxon = TaxonBaseSelectionDialog.selectTaxon(HandlerUtil.getActiveShell(event), conversation);
+
+ TaxonDescription targetDescription = TaxonDescription.NewInstance(targetTaxon);
+ targetDescription.setTitleCache(String.format("Copied from %s", EditorUtil.getActiveMultiPageTaxonEditor().getTaxon()), true);
+
+ try {
+ AbstractPostOperation operation = new MoveDescriptionElementsOperation(
+ event.getCommand().getName(), EditorUtil.getUndoContext(),
+ targetDescription, elements, false, (IPostOperationEnabled) EditorUtil.getView(DescriptiveViewPart.ID, true));
+ EditorUtil.executeOperation(operation);
+ conversation.commit(false);
+
+ } catch (NotDefinedException e) {
+ EditorUtil.error(getClass(), e);
+ }
+ }
+
+ return null;
+ }
+
+}
--- /dev/null
+// $Id$
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.taxeditor.editor.view.descriptive.operation;
+
+import java.util.Collection;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.operations.IUndoContext;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+
+import eu.etaxonomy.cdm.api.service.IDescriptionService;
+import eu.etaxonomy.cdm.model.description.DescriptionBase;
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
+import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
+import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+/**
+ * @author n.hoffmann
+ * @created Feb 8, 2011
+ * @version 1.0
+ */
+public class MoveDescriptionElementsOperation extends AbstractPostOperation {
+
+ private Collection<DescriptionElementBase> descriptionElements;
+ private DescriptionBase targetDescription;
+ private IDescriptionService service;
+ private boolean isCopy;
+
+ /**
+ *
+ * @param label
+ * @param undoContext
+ * @param targetDescription
+ * @param descriptionElements
+ * @param isCopy
+ * @param postOperationEnabled
+ */
+ public MoveDescriptionElementsOperation(String label,
+ IUndoContext undoContext, DescriptionBase targetDescription,
+ Collection<DescriptionElementBase> descriptionElements, boolean isCopy,
+ IPostOperationEnabled postOperationEnabled) {
+ super(label, undoContext, postOperationEnabled);
+ this.targetDescription = targetDescription;
+ this.descriptionElements = descriptionElements;
+ this.isCopy = isCopy;
+
+ service = CdmStore.getService(IDescriptionService.class);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
+ */
+ @Override
+ public IStatus execute(IProgressMonitor monitor, IAdaptable info)
+ throws ExecutionException {
+
+
+ service.moveDescriptionElementsToDescription(descriptionElements, targetDescription, isCopy);
+
+ return postExecute(targetDescription);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.operations.AbstractOperation#redo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
+ */
+ @Override
+ public IStatus redo(IProgressMonitor monitor, IAdaptable info)
+ throws ExecutionException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.operations.AbstractOperation#undo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
+ */
+ @Override
+ public IStatus undo(IProgressMonitor monitor, IAdaptable info)
+ throws ExecutionException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
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);
}
}
// }
IPostOperationEnabled postOperationEnabled = operation.getPostOperationEnabled();
- postOperationEnabled.onComplete();
+ if(postOperationEnabled != null){
+ postOperationEnabled.onComplete();
+ }
return Status.OK_STATUS;
}
--- /dev/null
+// $Id$
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.taxeditor.model;
+
+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.model.common.ICdmBase;
+
+/**
+ * @author n.hoffmann
+ * @created Feb 8, 2011
+ * @version 1.0
+ */
+public abstract class CdmObjectTransfer<T extends ICdmBase> extends ByteArrayTransfer {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.dnd.ByteArrayTransfer#javaToNative(java.lang.Object, org.eclipse.swt.dnd.TransferData)
+ */
+ @Override
+ protected void javaToNative(Object object, TransferData transferData) {
+ byte[] bytes = toByteArray((T[]) object);
+ if (bytes != null)
+ super.javaToNative(bytes, transferData);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.dnd.ByteArrayTransfer#nativeToJava(org.eclipse.swt.dnd.TransferData)
+ */
+ @Override
+ protected Object nativeToJava(TransferData transferData) {
+ byte[] bytes = (byte[]) super.nativeToJava(transferData);
+ return fromByteArray(bytes);
+ }
+
+ protected byte[] toByteArray(T[] elements) {
+ ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
+ DataOutputStream out = new DataOutputStream(byteOut);
+
+ byte[] bytes = null;
+
+ try {
+
+ for(T element : elements){
+ writeElementUuid(element, out);
+ }
+ out.close();
+ bytes = byteOut.toByteArray();
+ } catch (IOException e) {
+ // when in doubt send nothing
+ }
+ return bytes;
+ }
+
+ private void writeElementUuid(T element, DataOutputStream out) throws IOException {
+ out.writeUTF(element.getUuid().toString());
+ }
+
+ protected Object fromByteArray(byte[] bytes) {
+ DataInputStream in = new DataInputStream(
+ new ByteArrayInputStream(bytes));
+
+ try {
+ List<T> elements = new ArrayList<T>();
+
+ try{
+ while(true){
+ UUID uuid = readElementUuid(in);
+ elements.add(loadElement(uuid));
+ }
+ }catch(EOFException e){
+ return elements.toArray();
+ }
+ } catch (IOException e) {
+ return null;
+ }
+ }
+
+ public abstract T loadElement(UUID uuid);
+
+ /**
+ * @param in
+ * @return
+ * @throws IOException
+ */
+ public UUID readElementUuid(DataInputStream in) throws IOException{
+ return UUID.fromString(in.readUTF());
+ }
+}