Merge branch 'release/5.26.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / newWizard / NewTaxonWizard.java
index a088a0e1987cb45cf4c7d02ca37d9e4b7191c1b0..a3aa31281a13aaccd197d5e0641e48db09065f87 100644 (file)
@@ -9,7 +9,13 @@
 
 package eu.etaxonomy.taxeditor.newWizard;
 
 
 package eu.etaxonomy.taxeditor.newWizard;
 
+import java.util.HashSet;
+import java.util.Set;
+
+import eu.etaxonomy.cdm.api.service.INameService;
 import eu.etaxonomy.cdm.api.service.ITaxonService;
 import eu.etaxonomy.cdm.api.service.ITaxonService;
+import eu.etaxonomy.cdm.model.name.HybridRelationship;
+import eu.etaxonomy.cdm.model.name.TaxonName;
 import eu.etaxonomy.cdm.model.name.TaxonNameFactory;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.cdm.model.name.TaxonNameFactory;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.taxeditor.store.CdmStore;
@@ -40,7 +46,38 @@ public class NewTaxonWizard extends AbstractNewEntityWizard<Taxon> {
        /** {@inheritDoc} */
        @Override
        protected void saveEntity() {
        /** {@inheritDoc} */
        @Override
        protected void saveEntity() {
-           CdmStore.getService(ITaxonService.class).save(getEntity());
+// TODO: if new entity is an hybrid, the hybrid names should be saved first.. see newTaxonnodeWizard
+           Taxon taxon = getEntity();
+           if (!taxon.getName().getHybridChildRelations().isEmpty() || !taxon.getName().getHybridParentRelations().isEmpty()){
+            Set<TaxonName> namesToSave = new HashSet<>();
+            for (HybridRelationship hybridRelationship: taxon.getName().getHybridChildRelations()){
+                if (hybridRelationship.getParentName() != taxon.getName()){
+                    if (!hybridRelationship.getParentName().isPersited()){
+                        namesToSave.add(hybridRelationship.getParentName());
+                    }
+               }else if (hybridRelationship.getHybridName() != taxon.getName()){
+                   if (!hybridRelationship.getHybridName().isPersited()){
+                       namesToSave.add(hybridRelationship.getHybridName());
+                   }
+                }
+
+            }
+
+            for (HybridRelationship hybridRelationship: taxon.getName().getHybridParentRelations()){
+                if (hybridRelationship.getParentName() != taxon.getName()){
+                    if (!hybridRelationship.getParentName().isPersited()){
+                        namesToSave.add(hybridRelationship.getParentName());
+                    }
+               }else if (hybridRelationship.getHybridName() != taxon.getName()){
+                   if (!hybridRelationship.getHybridName().isPersited()){
+                       namesToSave.add(hybridRelationship.getHybridName());
+                   }
+                }
+
+            }
+            CdmStore.getService(INameService.class).save(namesToSave);
+        }
+           CdmStore.getService(ITaxonService.class).save(taxon);
        }
 
        /** {@inheritDoc} */
        }
 
        /** {@inheritDoc} */