Make editor compatible with latest cdmlib service layer updates
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / dataimport / SaveImportedSpecimenAction.java
index 0a2b8503ba5e20d50673423af31056a42bce42cc..79784077cc0d36604f4a752102fb31b30f7ec655 100644 (file)
@@ -8,8 +8,13 @@ import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PlatformUI;
 
+import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.service.IOccurrenceService;
+import eu.etaxonomy.cdm.api.service.ITermService;
 import eu.etaxonomy.cdm.ext.occurrence.gbif.GbifResponse;
+import eu.etaxonomy.cdm.model.common.DefinedTermBase;
+import eu.etaxonomy.cdm.model.common.ICdmBase;
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 
@@ -35,8 +40,19 @@ public class SaveImportedSpecimenAction extends Action {
                         data = ((GbifResponse) item.getData()).getDerivedUnitFacade().innerFieldUnit();
                     }
                     if(data instanceof SpecimenOrObservationBase){
-                        dataImportView.getConversationHolder().bind();
-                        CdmStore.getService(IOccurrenceService.class).saveOrUpdate((SpecimenOrObservationBase<?>) data);
+                        ConversationHolder conversation = dataImportView.getConversationHolder();
+                        SpecimenOrObservationBase<?> specimen = (SpecimenOrObservationBase<?>) data;
+                        conversation.bind();
+                        IOccurrenceService occurrenceService = CdmStore.getService(IOccurrenceService.class);
+                        for(ICdmBase cdmEntity:occurrenceService.getNonCascadedAssociatedElements(specimen)){
+                            if(cdmEntity instanceof DefinedTermBase){
+                                persistTerm((DefinedTermBase<?>) cdmEntity, CdmStore.getService(ITermService.class), conversation);
+                            }
+                            else if(cdmEntity instanceof TaxonNameBase){
+                                //user interaction
+                            }
+                        }
+                        occurrenceService.saveOrUpdate(specimen);
                         dataImportView.getConversationHolder().commit(true);
                     }
                 }
@@ -44,6 +60,16 @@ public class SaveImportedSpecimenAction extends Action {
         }
     }
 
+    private void persistTerm(DefinedTermBase<?> term, ITermService termService, ConversationHolder conversation){
+        if(term!=null){
+            //if the term does not exist in the DB save it
+            if(termService.find(term.getUuid())==null){
+                termService.saveOrUpdate(term);
+            }
+        }
+    }
+
+
     /* (non-Javadoc)
      * @see org.eclipse.jface.action.Action#getText()
      */