*/
package eu.etaxonomy.taxeditor.editor.name.e4.dnd;
+import java.util.UUID;
+
import org.eclipse.core.runtime.Assert;
import org.eclipse.e4.ui.di.UISynchronize;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.DropTargetEvent;
import eu.etaxonomy.cdm.model.common.ICdmBase;
+import eu.etaxonomy.cdm.model.metadata.SecReferenceHandlingEnum;
import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
+import eu.etaxonomy.cdm.model.reference.Reference;
import eu.etaxonomy.cdm.model.taxon.Synonym;
import eu.etaxonomy.cdm.model.taxon.Taxon;
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
import eu.etaxonomy.taxeditor.model.AbstractUtility;
import eu.etaxonomy.taxeditor.model.MessagingUtils;
import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
+import eu.etaxonomy.taxeditor.ui.dialog.selection.ReferenceSelectionDialog;
/**
* @author pplitzner
} else{
getEditor().getConversationHolder().commit();
((TaxonNameEditorE4) target).getConversationHolder().commit();
-
- return new MoveSynonymToAnotherAcceptedTaxonOperationE4(Messages.NameEditorDropTargetListener_CHANGE_ACC_TAXON, getEditor().getUndoContext(), synonym.getUuid(), ((TaxonNameEditorE4) target).getTaxon(), (TaxonNameEditorE4) target, (TaxonNameEditorE4) target);
+ UUID newSecUuid = null;
+ try{
+ newSecUuid = getNewSecRef(synonym);
+ }catch (Exception e){
+ return null;
+ }
+ return new MoveSynonymToAnotherAcceptedTaxonOperationE4(Messages.NameEditorDropTargetListener_CHANGE_ACC_TAXON, getEditor().getUndoContext(), synonym.getUuid(), ((TaxonNameEditorE4) target).getTaxon(), newSecUuid, (TaxonNameEditorE4) target, (TaxonNameEditorE4) target);
}
} else{
getEditor().getConversationHolder().commit();
((TaxonNameEditorE4) target).getConversationHolder().commit();
-
- return new MoveSynonymToAnotherAcceptedTaxonOperationE4(Messages.NameEditorDropTargetListener_CHANGE_ACC_TAXON, getEditor().getUndoContext(), synonym.getUuid(), ((TaxonNameEditorE4) target).getTaxon(), (TaxonNameEditorE4) target, (TaxonNameEditorE4) target);
+ UUID newSecUuid = null;
+ try{
+ newSecUuid = getNewSecRef(synonym);
+ }catch (Exception e){
+ return null;
+ }
+ return new MoveSynonymToAnotherAcceptedTaxonOperationE4(Messages.NameEditorDropTargetListener_CHANGE_ACC_TAXON, getEditor().getUndoContext(), synonym.getUuid(), ((TaxonNameEditorE4) target).getTaxon(), newSecUuid, (TaxonNameEditorE4) target, (TaxonNameEditorE4) target);
}
}
return null;
}
+ public UUID getNewSecRef(Synonym synonym) throws Exception{
+ Reference synSecRef = synonym.getSec();
+ UUID newSecUuid = null;
+ SecReferenceHandlingEnum secHandling = PreferencesUtil.getSecReferenceHandlingPreference();
+ Reference parentSecRef = ((AbstractHomotypicalGroupContainerE4) target).getEditor().getTaxon() != null? ((AbstractHomotypicalGroupContainerE4) target).getEditor().getTaxon().getSec():null;
+ if ((synSecRef != parentSecRef && secHandling.equals(SecReferenceHandlingEnum.KeepWhenSame) )|| secHandling.equals(SecReferenceHandlingEnum.WarningSelect)){
+
+ if ((parentSecRef != synSecRef && secHandling.equals(SecReferenceHandlingEnum.KeepWhenSame) )|| secHandling.equals(SecReferenceHandlingEnum.WarningSelect)){
+ int result = MessagingUtils.confirmDialog(Messages.ChangeSynonymToAcceptedHandler_Select_Sec_Reference_Handling_title, Messages.MoveSynonymToAcceptedHandler_Select_Sec_Reference_Handling_message,
+ new String[]{Messages.ChangeSynonymToAcceptedHandler_Select_Sec_Reference_Keep, Messages.ChangeSynonymToAcceptedHandler_Select_Sec_Reference_Parent, Messages.ChangeSynonymToAcceptedHandler_Select_Sec_Reference_Select});
+ if (result == 2){
+ Reference sec = ReferenceSelectionDialog.select(null, null);
+ newSecUuid = sec != null? sec.getUuid(): null;
+ }else if (result == 1){
+ newSecUuid = parentSecRef != null? parentSecRef.getUuid(): null;
+ }else if (result == 0){
+ newSecUuid = synSecRef != null? synSecRef.getUuid(): null;
+ }else{
+ return null;
+ }
+
+ }
+
+ }
+ return newSecUuid;
+ }
+
@Override
public void dropAccept(DropTargetEvent event) {
// pass
*/
private final Synonym synonym;
private IConversationEnabled conversationEnabled;
+ private UUID newSecUuid;
public MoveSynonymToAnotherAcceptedTaxonOperationE4(String label, IUndoContext undoContext, UUID synonymUUID,
- Taxon taxon, IPostOperationEnabled postOperationEnabled, IConversationEnabled conversationEnabled) {
+ Taxon taxon, UUID newSecRefUuid, IPostOperationEnabled postOperationEnabled, IConversationEnabled conversationEnabled) {
super(label, undoContext, taxon, postOperationEnabled);
List<String> propertyPaths = new ArrayList<String>();
this.conversationEnabled = conversationEnabled;
this.element = (Taxon) CdmStore.getService(ITaxonService.class).load(taxon.getUuid(),propertyPaths);
this.synonym = (Synonym) CdmStore.getService(ITaxonService.class).load(synonymUUID);
+ this.newSecUuid = newSecRefUuid;
if(synonym == null){
throw new IllegalArgumentException(
"A null synonym was provided."); //$NON-NLS-1$
// Switch groups
monitor.beginTask("Move synonym to another taxon", 40);
Taxon oldAccepted = synonym.getAcceptedTaxon();
-
+// Reference secRef = CdmStore.getService(IReferenceService.class).load(newSecUuid);
conversationEnabled.getConversationHolder().commit();
+
UpdateResult result = null;
try {
result = CdmStore.getService(ITaxonService.class).moveSynonymToAnotherTaxon(synonym,
this.element.getUuid(),
true,
synonym.getType(),
- null,
+ newSecUuid,
null,
true);
} catch (HomotypicalGroupChangeException e) {