Merge branch 'develop' into remoting-4.0
authorCherian Mathew <c.mathew@bgbm.org>
Thu, 10 Sep 2015 15:42:26 +0000 (17:42 +0200)
committerCherian Mathew <c.mathew@bgbm.org>
Thu, 10 Sep 2015 15:42:26 +0000 (17:42 +0200)
Conflicts:
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientTaxonService.java

1  2 
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientTaxonService.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/CreateDerivateContextMenu.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/operation/DeleteDerivateOperation.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/operation/MoveDerivateOperation.java

index 4c4683c29b1c6bfa7effc1fc2a076631f2b87ab1,fac79adfb19e9ea1e0875118ee202a6ebcba5980..fd4154909e3c7574bbba44f2a807e57ac601d21a
@@@ -1498,21 -1498,21 +1498,22 @@@ public class TransientTaxonService impl
      }
  
      /* (non-Javadoc)
 -     * @see eu.etaxonomy.cdm.api.service.ITaxonService#changeRelatedTaxonToSynonym(java.util.UUID, java.util.UUID, eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType, eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType)
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#changeSynonymToRelatedTaxon(java.util.UUID, java.util.UUID, eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType, eu.etaxonomy.cdm.model.reference.Reference, java.lang.String)
       */
      @Override
 -    public UpdateResult changeRelatedTaxonToSynonym(UUID arg0, UUID arg1, TaxonRelationshipType arg2,
 -            SynonymRelationshipType arg3) throws DataChangeNoRollbackException {
 -        return defaultService.changeRelatedTaxonToSynonym(arg0, arg1, arg2, arg3);
 +    public UpdateResult changeSynonymToRelatedTaxon(UUID arg0, UUID arg1, TaxonRelationshipType arg2, Reference arg3,
 +            String arg4) {
 +        return defaultService.changeSynonymToRelatedTaxon(arg0, arg1, arg2, arg3, arg4);
      }
  
      /* (non-Javadoc)
 -     * @see eu.etaxonomy.cdm.api.service.ITaxonService#changeSynonymToRelatedTaxon(java.util.UUID, java.util.UUID, eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType, eu.etaxonomy.cdm.model.reference.Reference, java.lang.String)
 +     * @see eu.etaxonomy.cdm.api.service.ITaxonService#changeRelatedTaxonToSynonym(java.util.UUID, java.util.UUID, eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType, eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType)
       */
      @Override
 -    public UpdateResult changeSynonymToRelatedTaxon(UUID arg0, UUID arg1, TaxonRelationshipType arg2, Reference arg3,
 -            String arg4) {
 -        return defaultService.changeSynonymToRelatedTaxon(arg0, arg1, arg2, arg3, arg4);
 +    public UpdateResult changeRelatedTaxonToSynonym(UUID arg0, UUID arg1, TaxonRelationshipType arg2,
 +            SynonymRelationshipType arg3) throws DataChangeNoRollbackException {
 +        return defaultService.changeRelatedTaxonToSynonym(arg0, arg1, arg2, arg3);
++
      }
  
      /* (non-Javadoc)
              Reference arg5, String arg6) throws HomotypicalGroupChangeException {
          return defaultService.changeSynonymToAcceptedTaxon(arg0, arg1, arg2, arg3, arg4, arg5, arg6);
      }
 +
  }
index efa20054873e05268870de677b0b7ae37413aa85,d7fcc56f8d710cd59e31b4c7d2f0a926a006b217..8029f92937e9dd9b7637b86508d05fc917243c80
@@@ -2,8 -2,6 +2,8 @@@ package eu.etaxonomy.taxeditor.editor.v
  
  import java.util.Collection;
  import java.util.HashSet;
 +import java.util.List;
 +import java.util.Map;
  import java.util.Map.Entry;
  import java.util.Set;
  import java.util.UUID;
@@@ -41,14 -39,13 +41,15 @@@ import eu.etaxonomy.cdm.model.molecular
  import eu.etaxonomy.cdm.model.molecular.SingleRead;
  import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
  import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
+ import eu.etaxonomy.taxeditor.editor.Messages;
  import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
  import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
  import eu.etaxonomy.taxeditor.model.IPartContentHasFactualData;
  import eu.etaxonomy.taxeditor.model.IPartContentHasMedia;
  import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
  import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
 +import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
 +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
  import eu.etaxonomy.taxeditor.store.CdmStore;
  import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateContentProvider;
  import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateLabelProvider;
   */
  public class DerivateView extends EditorPart implements IPartContentHasFactualData, IDirtyMarkable,
          IConversationEnabled, IPartContentHasDetails, IPartContentHasSupplementalData, IPartContentHasMedia,
 -        ISelectionChangedListener, IPostOperationEnabled {
 +        ISelectionChangedListener, IPostOperationEnabled , ICdmEntitySessionEnabled {
  
-     public static final String ID = "eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView";
+     public static final String ID = "eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView"; //$NON-NLS-1$
+     public static final String YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION = Messages.DerivateView_YOU_NEED_TO_SAVE;
+     public static final String VIEW_HAS_UNSAVED_CHANGES = Messages.DerivateView_UNSAVED_CHANGES;
  
        private ConversationHolder conversation;
  
  
      private ISelection selection = null;
  
 +    private final ICdmEntitySession cdmEntitySession;
 +
 +    private DerivateContentProvider contentProvider;
 +
      /**
       * Default constructor
       */
      public DerivateView() {
 +        cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
      }
  
      @Override
      public void createPartControl(Composite parent) {
          viewer = new TreeViewer(new Tree(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION));
 -        viewer.setContentProvider(new DerivateContentProvider());
 +        contentProvider = new DerivateContentProvider();
 +        viewer.setContentProvider(contentProvider);
          labelProvider = new DerivateLabelProvider();
          labelProvider.setConversation(conversation);
          viewer.setLabelProvider(labelProvider);
  
      @Override
      public void doSave(IProgressMonitor monitor) {
-         String taskName = "Saving hierarchy";
+         String taskName = Messages.DerivateView_SAVING_HIERARCHY;
          if(getEditorInput() instanceof DerivateViewEditorInput){
              DerivateViewEditorInput derivateViewEditorInput = (DerivateViewEditorInput) getEditorInput();
-             taskName += " "+derivateViewEditorInput.getName();
+             taskName += " "+derivateViewEditorInput.getName(); //$NON-NLS-1$
          }
          monitor.beginTask(taskName, 3);
          if (!conversation.isBound()) {
  
          // commit the conversation and start a new transaction immediately
          conversation.commit(true);
 +        CdmStore.getService(IOccurrenceService.class).merge(getRootEntities());
          monitor.worked(1);
  
          this.setDirty(false);
              DerivateViewEditorInput derivateViewEditorInput = (DerivateViewEditorInput) getEditorInput();
              return derivateViewEditorInput.getName();
          }
-         return "Derivative Editor";
+         return Messages.DerivateView_DERIVATIVE_EDITOR;
      }
  
      @Override
          if(!conversation.isBound()){
              conversation.bind();
          }
 +        cdmEntitySession.bind();
      }
  
      @Override
          return true;
      }
  
 +    @Override
 +    public void dispose() {
 +        cdmEntitySession.dispose();
 +        super.dispose();
 +    }
 +
 +    /* (non-Javadoc)
 +     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getCdmEntitySession()
 +     */
 +    @Override
 +    public ICdmEntitySession getCdmEntitySession() {
 +       return cdmEntitySession;
 +    }
 +
 +    /* (non-Javadoc)
 +     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getRootEntities()
 +     */
 +    @Override
 +    public List<SpecimenOrObservationBase>  getRootEntities() {
 +        return contentProvider.getRootElements();
 +    }
 +
 +    /* (non-Javadoc)
 +     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getPropertyPathsMap()
 +     */
 +    @Override
 +    public Map<Object, List<String>> getPropertyPathsMap() {
 +        // TODO Auto-generated method stub
 +        return null;
 +    }
 +
      @Override
      public boolean canAttachMedia() {
          return true;
      }
 -
  }
index 296a0902adb751da4fc67a80e066917d8e7bd8d9,2438c4325c2bdc03cf9896fc5efd4c08d2d6d8e8..a491a7abfcbab933ae08c9684d0719cbfe129526
@@@ -13,9 -13,7 +13,9 @@@ import org.eclipse.ui.IWorkbenchWindow
  import org.eclipse.ui.PlatformUI;
  import org.eclipse.ui.actions.CompoundContributionItem;
  
 +import eu.etaxonomy.cdm.api.application.CdmApplicationState;
  import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeCacheStrategy;
 +import eu.etaxonomy.cdm.api.service.IOccurrenceService;
  import eu.etaxonomy.cdm.model.media.Media;
  import eu.etaxonomy.cdm.model.molecular.DnaSample;
  import eu.etaxonomy.cdm.model.molecular.Sequence;
@@@ -28,10 -26,10 +28,11 @@@ import eu.etaxonomy.cdm.model.occurrenc
  import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
  import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
  import eu.etaxonomy.taxeditor.editor.EditorUtil;
+ import eu.etaxonomy.taxeditor.editor.Messages;
  import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView;
  import eu.etaxonomy.taxeditor.model.AbstractUtility;
  import eu.etaxonomy.taxeditor.model.MessagingUtils;
 +import eu.etaxonomy.taxeditor.store.CdmStore;
  import eu.etaxonomy.taxeditor.ui.dialog.selection.MediaSelectionDialog;
  
  /**
   */
  public class CreateDerivateContextMenu extends CompoundContributionItem {
  
+     private static final String SINGLE_READ = Messages.CreateDerivateContextMenu_SINGLE_READ;
+     private static final String CONSENSUS_SEQUENCE = Messages.CreateDerivateContextMenu_SEQUENCE;
+     private static final String MEDIA_SPECIMEN = Messages.CreateDerivateContextMenu_MEDIA_SPECIMEN;
+     private static final String DNA_SAMPLE = Messages.CreateDerivateContextMenu_DNA_SAMPLE;
+     private static final String TISSUE_SAMPLE = Messages.CreateDerivateContextMenu_TISSUE_SAMPLE;
+     private static final String SPECIMEN = Messages.CreateDerivateContextMenu_SPECIMEN;
      @Override
      protected IContributionItem[] getContributionItems() {
          IContributionItem[] contributionItems = new IContributionItem[] {
@@@ -47,7 -52,7 +55,7 @@@
                      @Override
                      public void fill(Menu menu, int index) {
                          MenuItem addItem = new MenuItem(menu, SWT.CASCADE);
-                         addItem.setText("Add...");
+                         addItem.setText(Messages.CreateDerivateContextMenu_ADD);
                          Menu addMenu = new Menu(menu);
                          addItem.setMenu(addMenu);
                          final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
                          if(selectedTreeNode!=null){
                              //context menu for FieldUnit
                              if(selectedTreeNode.getValue() instanceof FieldUnit){
-                                 createMenuItem(addMenu, "Specimen", selectedTreeNode, DerivedUnit.class, SpecimenOrObservationType.PreservedSpecimen, DerivationEventType.GATHERING_IN_SITU());
+                                 createMenuItem(addMenu, SPECIMEN, selectedTreeNode, DerivedUnit.class, SpecimenOrObservationType.PreservedSpecimen, DerivationEventType.GATHERING_IN_SITU());
                                  new MenuItem(addMenu, SWT.SEPARATOR);
-                                 createMenuItem(addMenu, "Tissue Sample", selectedTreeNode, DnaSample.class, SpecimenOrObservationType.TissueSample, DerivationEventType.PREPARATION());
-                                 createMenuItem(addMenu, "DNA Sample", selectedTreeNode, DnaSample.class, SpecimenOrObservationType.DnaSample, DerivationEventType.DNA_EXTRACTION());
-                                 createMenuItem(addMenu, "Media Specimen", selectedTreeNode, MediaSpecimen.class, SpecimenOrObservationType.Media, DerivationEventType.ACCESSIONING());
+                                 createMenuItem(addMenu, TISSUE_SAMPLE, selectedTreeNode, DnaSample.class, SpecimenOrObservationType.TissueSample, DerivationEventType.PREPARATION());
+                                 createMenuItem(addMenu, DNA_SAMPLE, selectedTreeNode, DnaSample.class, SpecimenOrObservationType.DnaSample, DerivationEventType.DNA_EXTRACTION());
+                                 createMenuItem(addMenu, MEDIA_SPECIMEN, selectedTreeNode, MediaSpecimen.class, SpecimenOrObservationType.Media, DerivationEventType.ACCESSIONING());
                              }
                              //context menu for Specimen
                              else if(selectedTreeNode.getValue() instanceof DerivedUnit && ((DerivedUnit)selectedTreeNode.getValue()).getRecordBasis()==SpecimenOrObservationType.PreservedSpecimen){
  
-                                 createMenuItem(addMenu, "Tissue Sample", selectedTreeNode, DnaSample.class, SpecimenOrObservationType.TissueSample, DerivationEventType.PREPARATION());
-                                 createMenuItem(addMenu, "DNA Sample", selectedTreeNode, DnaSample.class, SpecimenOrObservationType.DnaSample, DerivationEventType.DNA_EXTRACTION());
-                                 createMenuItem(addMenu, "Media Specimen", selectedTreeNode, MediaSpecimen.class, SpecimenOrObservationType.Media, DerivationEventType.ACCESSIONING());
+                                 createMenuItem(addMenu, TISSUE_SAMPLE, selectedTreeNode, DnaSample.class, SpecimenOrObservationType.TissueSample, DerivationEventType.PREPARATION());
+                                 createMenuItem(addMenu, DNA_SAMPLE, selectedTreeNode, DnaSample.class, SpecimenOrObservationType.DnaSample, DerivationEventType.DNA_EXTRACTION());
+                                 createMenuItem(addMenu, MEDIA_SPECIMEN, selectedTreeNode, MediaSpecimen.class, SpecimenOrObservationType.Media, DerivationEventType.ACCESSIONING());
                              }
                              //context menu for TissueSample
                              else if(selectedTreeNode.getValue() instanceof DnaSample && ((DnaSample)selectedTreeNode.getValue()).getRecordBasis()==SpecimenOrObservationType.TissueSample){
-                               createMenuItem(addMenu, "DnaSample", selectedTreeNode, DnaSample.class, SpecimenOrObservationType.DnaSample, DerivationEventType.DNA_EXTRACTION());
-                               createMenuItem(addMenu, "Media Specimen", selectedTreeNode, MediaSpecimen.class, SpecimenOrObservationType.Media, DerivationEventType.ACCESSIONING());
+                               createMenuItem(addMenu, DNA_SAMPLE, selectedTreeNode, DnaSample.class, SpecimenOrObservationType.DnaSample, DerivationEventType.DNA_EXTRACTION());
+                               createMenuItem(addMenu, MEDIA_SPECIMEN, selectedTreeNode, MediaSpecimen.class, SpecimenOrObservationType.Media, DerivationEventType.ACCESSIONING());
                              }
                              //context menu for DnaSample
                              else if(selectedTreeNode.getValue() instanceof DnaSample && ((DnaSample)selectedTreeNode.getValue()).getRecordBasis()==SpecimenOrObservationType.DnaSample){
-                                 createMenuItem(addMenu, "Consensus Sequence", selectedTreeNode, Sequence.class, null, null);
-                                 createMenuItem(addMenu, "Media Specimen", selectedTreeNode, MediaSpecimen.class, SpecimenOrObservationType.Media, DerivationEventType.ACCESSIONING());
+                                 createMenuItem(addMenu, CONSENSUS_SEQUENCE, selectedTreeNode, Sequence.class, null, null);
+                                 createMenuItem(addMenu, MEDIA_SPECIMEN, selectedTreeNode, MediaSpecimen.class, SpecimenOrObservationType.Media, DerivationEventType.ACCESSIONING());
                              }
                              //context menu for Sequence
                              else if(selectedTreeNode.getValue() instanceof Sequence){
-                                 createMenuItem(addMenu, "Single Read", selectedTreeNode, SingleRead.class, null, null);
+                                 createMenuItem(addMenu, SINGLE_READ, selectedTreeNode, SingleRead.class, null, null);
                              }
                              //default
                              else{
                                  MenuItem menuItem = new MenuItem(addMenu, SWT.NONE);
-                                 menuItem.setText("No child derivates");
+                                 menuItem.setText(Messages.CreateDerivateContextMenu_NO_CHILD_DERIVATE);
                                  menuItem.setEnabled(false);
                              }
                          }
          if(specimenType!=null && specimenType.equals(SpecimenOrObservationType.Media)){
              //media submenu
              MenuItem mediaItem = new MenuItem(menu, SWT.CASCADE);
-             mediaItem.setText("Media...");
+             mediaItem.setText(Messages.CreateDerivateContextMenu_MEDIA);
              Menu mediaMenu = new Menu(menu);
              mediaItem.setMenu(mediaMenu);
  
  
              //existing media menu
              MenuItem existingMediaItem = new MenuItem(mediaMenu, SWT.NONE);
-             existingMediaItem.setText("Media Specimen with existing media");
+             existingMediaItem.setText(Messages.CreateDerivateContextMenu_MEDIA_EXISTING);
              existingMediaItem.addSelectionListener(new SelectionAdapter() {
                  @Override
                  public void widgetSelected(SelectionEvent e) {
                          specimenOrObservationBase.addDerivationEvent(DerivationEvent.NewSimpleInstance(specimenOrObservationBase, mediaSpecimen, derivationEventType));
                          mediaSpecimen.setCacheStrategy(new DerivedUnitFacadeCacheStrategy());
                          mediaSpecimen.getTitleCache(); //update title cache
 +                        CdmStore.getService(IOccurrenceService.class).merge(specimenOrObservationBase);
                      }
  
                      //refresh view
                          derivateView = (DerivateView) AbstractUtility.getActivePart();
                      }
                      if(derivateView!=null){
 +
                          derivateView.getConversationHolder().commit();
                          derivateView.refreshTree(mediaSpecimen);
                      }
              if(derivateView!=null){
                  if(derivateView.isDirty()){
                      e.doit = false;
-                     MessagingUtils.warningDialog("View has unsaved changes", this, "You need to save before performing this action");
+                     MessagingUtils.warningDialog(DerivateView.VIEW_HAS_UNSAVED_CHANGES, this, DerivateView.YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION);
                      return;
                  }
              }
              if(selectedDerivate instanceof DnaSample && ((DnaSample) selectedDerivate).getRecordBasis()==SpecimenOrObservationType.DnaSample){
                  DnaSample dnaSample = (DnaSample)selectedDerivate;
                  if(childClass.equals(Sequence.class)){
-                     Sequence newInstance = Sequence.NewInstance(dnaSample, "", 0);
+                     Sequence newInstance = Sequence.NewInstance(dnaSample, "", 0); //$NON-NLS-1$
                      createdElement = newInstance;
                  }
 +                CdmStore.getService(IOccurrenceService.class).merge((SpecimenOrObservationBase) selectedDerivate);
              }
              else if(selectedDerivate instanceof Sequence){
                  SingleRead newInstance = SingleRead.NewInstance();
                  ((Sequence) selectedDerivate).addSingleRead(newInstance);
                  createdElement = newInstance;
 +                CdmApplicationState.getCurrentAppConfig().getSequenceService().merge((Sequence)selectedDerivate);
              }
              else if(selectedDerivate instanceof SpecimenOrObservationBase && DerivedUnit.class.isAssignableFrom(childClass)){
                  SpecimenOrObservationBase<?> specimenOrObservationBase = (SpecimenOrObservationBase<?>)selectedDerivate;
                  derivedUnit.setCacheStrategy(new DerivedUnitFacadeCacheStrategy());
                  derivedUnit.getTitleCache(); //update title cache
                  createdElement = derivedUnit;
 +                CdmStore.getService(IOccurrenceService.class).merge((SpecimenOrObservationBase) selectedDerivate);
              }
  
              //refresh view
              if(derivateView!=null){
 +                //CdmStore.getService(IOccurrenceService.class).merge((SpecimenOrObservationBase) selectedDerivate);
                  derivateView.getConversationHolder().commit();
                  derivateView.refreshTree(createdElement);
              }
index c43cd7c04805809430de9b265e9432b00b141eeb,839beb546d070ffa28c4062b2b2678a1a412566e..4948aaacccd1e7546e118acbcb2a0532767c5740
@@@ -21,10 -21,10 +21,11 @@@ import org.eclipse.ui.ISaveablePart
  import eu.etaxonomy.cdm.api.service.DeleteResult;
  import eu.etaxonomy.cdm.api.service.IOccurrenceService;
  import eu.etaxonomy.cdm.api.service.config.SpecimenDeleteConfigurator;
 +import eu.etaxonomy.cdm.api.service.molecular.ISequenceService;
  import eu.etaxonomy.cdm.model.common.CdmBase;
  import eu.etaxonomy.cdm.model.molecular.Sequence;
  import eu.etaxonomy.cdm.model.molecular.SingleRead;
+ import eu.etaxonomy.taxeditor.editor.Messages;
  import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView;
  import eu.etaxonomy.taxeditor.model.AbstractUtility;
  import eu.etaxonomy.taxeditor.model.MessagingUtils;
@@@ -61,16 -61,16 +62,16 @@@ public class DeleteDerivateOperation ex
      @Override
      public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
          if(getPostOperationEnabled() instanceof ISaveablePart){
-             String confirmationQuestion = "Do you really want to delete the selected element";
+             String confirmationQuestion = Messages.DeleteDerivateOperation_REALLY_DELETE;
              if(deleteConfigurator.isDeleteChildren()){
-                 confirmationQuestion += " and its children";
+                 confirmationQuestion += Messages.DeleteDerivateOperation_AND_CHILDREN;
              }
-             confirmationQuestion += "?";
-             if(!DeleteConfiguratorDialog.openConfirmWithConfigurator(deleteConfigurator, null, "Confirm Deletion", confirmationQuestion)){
+             confirmationQuestion += "?"; //$NON-NLS-1$
+             if(!DeleteConfiguratorDialog.openConfirmWithConfigurator(deleteConfigurator, null, Messages.DeleteDerivateOperation_CONFIRM, confirmationQuestion)){
                  return Status.CANCEL_STATUS;
              }
              if(((ISaveablePart) getPostOperationEnabled()).isDirty()){
-                 MessagingUtils.warningDialog("View has unsaved changes", this, "You need to save before performing this action");
+                 MessagingUtils.warningDialog(DerivateView.VIEW_HAS_UNSAVED_CHANGES, this, DerivateView.YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION);
                  return Status.CANCEL_STATUS;
              }
          }
                  && treeNode.getValue().equals(element)
                  && treeNode.getParent()!=null
                  && treeNode.getParent().getValue() instanceof Sequence){
 -            deleteResult = CdmStore.getService(IOccurrenceService.class).deleteSingleRead((SingleRead)element, (Sequence) treeNode.getParent().getValue());
 -        }
 -        else{
 -            deleteResult = CdmStore.getService(IOccurrenceService.class).deleteDerivateHierarchy(element, deleteConfigurator);
 +            deleteResult = CdmStore.getService(IOccurrenceService.class).deleteSingleRead(((SingleRead)element).getUuid(),
 +                    ((Sequence) treeNode.getParent().getValue()).getUuid());
 +        } else if(element instanceof Sequence){
 +            deleteResult = CdmStore.getService(ISequenceService.class).delete(element.getUuid(), deleteConfigurator);
 +        } else {
 +            deleteResult = CdmStore.getService(IOccurrenceService.class).deleteDerivateHierarchy(element.getUuid(), deleteConfigurator);
          }
          if(deleteResult.isOk()){
              if(getPostOperationEnabled() instanceof DerivateView){
              }
          }
          else{
-             MessagingUtils.warningDialog("Deletion failed", this, deleteResult.toString());
+             MessagingUtils.warningDialog(Messages.DeleteDerivateOperation_DELETE_FAILED, this, deleteResult.toString());
              return Status.CANCEL_STATUS;
          }
          return Status.OK_STATUS;
index 9e8f30b5c955a056a3a97fe56a0d1a8a5bfdcb08,5a1756b9c04ae433f1d157d4947f8c195861d4f0..93107ebfe0781ea3402d489115f7d4ef7a5410e4
@@@ -28,6 -28,7 +28,7 @@@ import eu.etaxonomy.cdm.model.molecular
  import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
  import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
  import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
+ import eu.etaxonomy.taxeditor.editor.Messages;
  import eu.etaxonomy.taxeditor.editor.internal.TaxeditorEditorPlugin;
  import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView;
  import eu.etaxonomy.taxeditor.model.MessagingUtils;
@@@ -53,9 -54,6 +54,6 @@@ public class MoveDerivateOperation exte
          this.targetNode = targetNode;
      }
  
-     /* (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 {
          DerivateView derivateView = null;
              derivateView = (DerivateView) getPostOperationEnabled();
          }
          if(derivateView==null){
-             MessagingUtils.operationDialog(this, new NullPointerException("Derivative Editor was null"), TaxeditorEditorPlugin.PLUGIN_ID, this.getLabel(), getLabel());
+             MessagingUtils.operationDialog(this, new NullPointerException("Derivative Editor was null"), TaxeditorEditorPlugin.PLUGIN_ID, this.getLabel(), getLabel()); //$NON-NLS-1$
              return Status.CANCEL_STATUS;
          }
          if(derivateView.isDirty()){
-             MessagingUtils.warningDialog("View has unsaved changes", this, "You need to save before performing this action");
+             MessagingUtils.warningDialog(DerivateView.VIEW_HAS_UNSAVED_CHANGES, this, DerivateView.YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION);
              return Status.CANCEL_STATUS;
          }
  
@@@ -79,7 -77,7 +77,7 @@@
              return postExecute(null);
          }
          else{
-             MessagingUtils.warningDialog("Moving derivatives not possible!", derivateView, "Moving \""+derivateView.getLabelProvider().getDerivateText(draggedNode)+"\" to \""+derivateView.getLabelProvider().getDerivateText(targetNode)+"\" is not possible!");
+             MessagingUtils.warningDialog(Messages.MoveDerivateOperation_MOVE_NOT_POSSIBLE, derivateView, String.format(Messages.MoveDerivateOperation_MOVE_TO_NOT_POSSIBLE, derivateView.getLabelProvider().getDerivateText(draggedNode), derivateView.getLabelProvider().getDerivateText(targetNode)));
          }
          return Status.CANCEL_STATUS;
      }
              if(fromParentSpecimen instanceof SpecimenOrObservationBase<?>
              && fromNode!=null
              && !fromNode.equals(targetNode)){//don't drag on direct parent node)
 -                return occurrenceService.moveDerivate((SpecimenOrObservationBase<?>)fromParentSpecimen, targetSpecimen, draggedSpecimen);
 +                return occurrenceService.moveDerivate(((SpecimenOrObservationBase<?>)fromParentSpecimen).getUuid(),
 +                        targetSpecimen.getUuid(),
 +                        draggedSpecimen.getUuid()).isOk();
              }
          }
  
          else if(draggedNodeValue instanceof SingleRead && targetNodeValue instanceof Sequence){
              SingleRead singleRead = (SingleRead) draggedNodeValue;
              if(fromParentSpecimen instanceof Sequence){
 -                return CdmStore.getService(ISequenceService.class).moveSingleRead((Sequence)fromParentSpecimen, (Sequence)targetNodeValue, singleRead).isOk();
 +                return CdmStore.getService(ISequenceService.class).moveSingleRead(((Sequence)fromParentSpecimen).getUuid(),
 +                        ((Sequence)targetNodeValue).getUuid(),
 +                        singleRead.getUuid()).isOk();
 +
              }
          }
  
          else if(draggedNodeValue instanceof Sequence && targetNodeValue instanceof DnaSample && ((SpecimenOrObservationBase<?>) targetNodeValue).getRecordBasis()==SpecimenOrObservationType.DnaSample){
              Sequence sequence = (Sequence)draggedNodeValue;
              if(fromParentSpecimen instanceof DnaSample && ((SpecimenOrObservationBase<?>) targetNodeValue).getRecordBasis()==SpecimenOrObservationType.DnaSample){
 -                return occurrenceService.moveSequence((DnaSample)fromParentSpecimen, (DnaSample)targetNodeValue, sequence).isOk();
 +                return occurrenceService.moveSequence(((DnaSample)fromParentSpecimen).getUuid(),
 +                        ((DnaSample)targetNodeValue).getUuid(),
 +                        sequence.getUuid()).isOk();
 +
              }
          }
          return false;
      }
  
-     /* (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 {
          //swap fromNode and targetNode
          return execute(new NullProgressMonitor(), 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 {
          //swap fromNode and targetNode