ref #7854: continue session handling in distribution editor
authorKatja Luther <k.luther@bgbm.org>
Wed, 19 Dec 2018 12:31:25 +0000 (13:31 +0100)
committerKatja Luther <k.luther@bgbm.org>
Wed, 19 Dec 2018 12:32:09 +0000 (13:32 +0100)
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/checklist/e4/DistributionColumnAccessor.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/checklist/e4/DistributionEditor.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/checklist/e4/DistributionEditorPart.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/checklist/e4/StatusDataCellEditor.java

index 6462ad3944e372ecddf55cbb6edeabab53365e48..d813b90bb5983253a77db43c1580fe160231b2a0 100755 (executable)
@@ -8,8 +8,10 @@
 */
 package eu.etaxonomy.taxeditor.editor.view.checklist.e4;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -67,7 +69,9 @@ public class DistributionColumnAccessor implements IColumnPropertyAccessor<Taxon
                 return distributionsForArea.iterator().next();
             }
             if (distributionsForArea.size() > 1){
-                return distributionsForArea;
+                List<String> labels = new ArrayList();
+                distributionsForArea.forEach(desc -> labels.add(((Distribution)desc).getStatus().getLabel()));
+                return labels;
             }
         }
         return null;
@@ -134,7 +138,7 @@ public class DistributionColumnAccessor implements IColumnPropertyAccessor<Taxon
                     if (descs.size() >= 1){
                         desc = descs.iterator().next();
                     }else {
-                        desc = TaxonDescription.NewInstance(taxonWrapper.getTaxon());
+                        desc = TaxonDescription.NewInstance();
                         taxonWrapper.getDescriptionsWrapper().getDescriptions().add(desc);
                     }
                     desc.addElement(dist);
index c714d3ae99a97a4863acdb899b314cac126d9fe4..f2218f13cff8a9945f43f81f5cc989c1378222b5 100755 (executable)
@@ -81,7 +81,6 @@ import eu.etaxonomy.cdm.model.common.OrderedTermComparator;
 import eu.etaxonomy.cdm.model.common.TermIdInVocabularyComparator;
 import eu.etaxonomy.cdm.model.common.TermLanguageComparator;
 import eu.etaxonomy.cdm.model.common.TermVocabulary;
-import eu.etaxonomy.cdm.model.description.DescriptionBase;
 import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
 import eu.etaxonomy.cdm.model.description.Distribution;
 import eu.etaxonomy.cdm.model.description.TaxonDescription;
@@ -136,7 +135,7 @@ public class DistributionEditor extends Composite {
     EventList<TaxonDistributionDTO> taxonList;
     Map<UUID,Map<NamedArea,Set<DescriptionElementBase>>> taxonDistributionMap = new HashMap();
 
-    Set<TaxonDescription> descriptionsToSave;
+    List<TaxonDistributionDTO> descriptionsToSave = new ArrayList();
 
 
     SortedSet<DefinedTermBase> areas;
@@ -213,11 +212,11 @@ public class DistributionEditor extends Composite {
     }
 
 
-    public Set<TaxonDescription> getDescriptionsToSave() {
+    public List<TaxonDistributionDTO> getDescriptionsToSave() {
         return descriptionsToSave;
     }
 
-    public void setDescriptionsToSave(Set<TaxonDescription> descriptionsToSave) {
+    public void setDescriptionsToSave(List<TaxonDistributionDTO> descriptionsToSave) {
         this.descriptionsToSave = descriptionsToSave;
     }
 
@@ -437,7 +436,7 @@ public class DistributionEditor extends Composite {
 
             @Override
             public void widgetSelected(SelectionEvent event) {
-                defaultSource = ReferenceSelectionDialog.select(AbstractUtility.getShell(), null);
+                defaultSource = part.getCdmEntitySession().load(ReferenceSelectionDialog.select(AbstractUtility.getShell(), null), true);
 
                 String defaultSourceStr = (defaultSource == null) ? "" : "Default Source Reference: " + defaultSource.getTitleCache();
                 if (defaultSourceStr.length()> 100){
@@ -487,59 +486,42 @@ public class DistributionEditor extends Composite {
         }
        taxonList.stream().forEach(wrapper->DistributionEditor.this.taxonList.add(wrapper));
        statusLabel.setText(ELEMENT_COUNT + (taxonList != null ? taxonList.size() : UNKNOWN));
-       Iterator<TaxonDistributionDTO> iterator = this.taxonList.iterator();
-       while (iterator.hasNext()){
-           TaxonDistributionDTO dto = iterator.next();
-           TaxonDescriptionDTO descriptionDto = dto.getDescriptionsWrapper();
-           for (TaxonDescription desc: descriptionDto.getDescriptions()){
-               for (DescriptionElementBase descElement: desc.getElements()){
-                   if (descElement instanceof Distribution){
-                       Map<NamedArea, Set<DescriptionElementBase>> distributionsMap = taxonDistributionMap.get(dto.getTaxonUuid());
-
-                       if (distributionsMap == null){
-                           distributionsMap = new HashMap();
-                           taxonDistributionMap.put(dto.getTaxonUuid(), distributionsMap);
-                       }
-                       Set<DescriptionElementBase> distributions = distributionsMap.get(((Distribution) descElement).getArea());
-                       if (distributions == null){
-                           distributions = new HashSet();
-                           distributionsMap.put(((Distribution)descElement).getArea(), distributions);
-                       }
-                       distributions.add(descElement);
-
-                   }
-               }
-           }
-       }
+       createTaxonDistributionMap();
     }
 
+    protected void createTaxonDistributionMap() {
+        Iterator<TaxonDistributionDTO> iterator = this.taxonList.iterator();
+           while (iterator.hasNext()){
+               TaxonDistributionDTO dto = iterator.next();
+               TaxonDescriptionDTO descriptionDto = dto.getDescriptionsWrapper();
+               for (TaxonDescription desc: descriptionDto.getDescriptions()){
+                   if(this.part.getCdmEntitySession()!=null){
+                       this.part.getCdmEntitySession().load(desc, true);
+                   }
+                   for (DescriptionElementBase descElement: desc.getElements()){
+                       if (descElement instanceof Distribution){
+                           Map<NamedArea, Set<DescriptionElementBase>> distributionsMap = taxonDistributionMap.get(dto.getTaxonUuid());
+
+                           if (distributionsMap == null){
+                               distributionsMap = new HashMap();
+                               taxonDistributionMap.put(dto.getTaxonUuid(), distributionsMap);
+                           }
+                           Set<DescriptionElementBase> distributions = distributionsMap.get(((Distribution) descElement).getArea());
+                           if (distributions == null){
+                               distributions = new HashSet();
+                               distributionsMap.put(((Distribution)descElement).getArea(), distributions);
+                           }
+                           distributions.add(descElement);
 
-
-    public List<DescriptionBase> getDistributions() {
-        List<DescriptionBase> descriptions = new ArrayList();
-
-        taxonList.forEach(taxonDto -> taxonDto.getDescriptionsWrapper().getDescriptions().forEach(taxDesc -> descriptions.add(taxDesc)));
-
-        for (DescriptionBase description: descriptions){
-            List<DescriptionElementBase> toDelete = new ArrayList();
-           for (Object desc: description.getElements()){
-               if (desc instanceof Distribution){
-                   Distribution distribution = (Distribution) desc;
-                   if (distribution.getStatus() == null || !distribution.getStatus().isPersited()){
-                       toDelete.add(distribution);
+                       }
                    }
                }
            }
-           for (DescriptionElementBase element: toDelete){
-               description.removeElement(element);
-           }
+    }
 
-        }
 
 
-        return descriptions;
 
-    }
 
     private void initLabels() {
 
@@ -678,6 +660,14 @@ public class DistributionEditor extends Composite {
         return defaultSource;
     }
 
+    /**
+     * @param result
+     */
+    public void reloadDistributions() {
+       loadDistributions(taxonList);
+
+    }
+
 
 
 }
index 55cdfae25d24af91deada57d9f571fe84b728514..7c69eac40e54a267a9a7736035bae14d0f6ce36a 100755 (executable)
@@ -8,10 +8,13 @@
 */
 package eu.etaxonomy.taxeditor.editor.view.checklist.e4;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.UUID;
 
 import javax.annotation.PostConstruct;
@@ -172,7 +175,9 @@ ICdmEntitySessionEnabled, IPartContentHasSupplementalData, IPartContentHasDetail
 
     @Override
     public List<DescriptionBase> getRootEntities() {
-        return editor.getDistributions();
+        List<DescriptionBase> rootEntities = new ArrayList();
+        editor.taxonList.forEach(dto -> rootEntities.addAll(dto.getDescriptionsWrapper().getDescriptions()));
+        return rootEntities;
     }
 
     /**
@@ -213,17 +218,25 @@ ICdmEntitySessionEnabled, IPartContentHasSupplementalData, IPartContentHasDetail
         return conversation;
     }
 
+
     @Persist
     @Override
     public void save(IProgressMonitor monitor) {
-      List<MergeResult<DescriptionBase>> result =CdmStore.getService(IDescriptionService.class).merge(editor.getDistributions(), true);
-//      for (MergeResult mergeRes: result){
-//          mergeRes.getNewEntities()
-//      }
-      conversation.commit();
-      //editor.getDescriptionsToSave().clear();
-
-      dirty.setDirty(false);
+        saveDistributions();
+        dirty.setDirty(false);
+    }
+
+    protected void saveDistributions() {
+        Set<TaxonDistributionDTO> coll = new HashSet();
+        editor.taxonList.forEach(dto->coll.add(dto));
+        List<MergeResult<DescriptionBase>> result = CdmStore.getService(IDescriptionService.class).mergeDescriptionElements(coll, true);
+        for (MergeResult<DescriptionBase> mergeRes: result ){
+            cdmEntitySession.load(mergeRes, true);
+        }
+       // editor.createTaxonDistributionMap();
+        conversation.commit();
+        this.dirty.setDirty(false);
+        editor.getDescriptionsToSave().clear();
     }
 
     /**
index 89b1cd43d16e8ce5c415bd6ea9777139341088c1..9b3529490920c9b62288626a76aeafe79144a963 100755 (executable)
@@ -27,7 +27,6 @@ import eu.etaxonomy.cdm.model.description.DescriptionElementSource;
 import eu.etaxonomy.cdm.model.description.Distribution;
 import eu.etaxonomy.cdm.model.description.TaxonDescription;
 import eu.etaxonomy.cdm.model.location.NamedArea;
-import eu.etaxonomy.cdm.model.taxon.Taxon;
 
 /**
  * @author k.luther
@@ -64,11 +63,13 @@ public class StatusDataCellEditor extends ComboBoxCellEditor {
                 }else if (elements.size() == 1){
                     DescriptionElementBase base = elements.iterator().next();
                     Distribution distr = (Distribution) base;
+                    editor.descriptionsToSave.add( (TaxonDistributionDTO) rowWrapper);
                     //TODO set value corresponding to preference
                     if (distr.getStatus() != null){
                         if (distr.getStatus().getLabel() == ""){
                             distr.setStatus(null);
                             super.setCanonicalValue("");
+
                         }else{
                             super.setCanonicalValue(distr.getStatus().getLabel());
                         }
@@ -96,16 +97,18 @@ public class StatusDataCellEditor extends ComboBoxCellEditor {
                 distributionMap.put(area, elements);
             }
             elements.add(newDistribution);
-          //  ((TaxonDistributionDTO) rowWrapper).getDistributionMap().put(area, elements);
             Set<TaxonDescription> descriptionSet = ((TaxonDistributionDTO) rowWrapper).getDescriptionsWrapper().getDescriptions();
             Iterator<TaxonDescription> iterator = descriptionSet.iterator();
             if (iterator.hasNext()){
-                iterator.next().addElement(newDistribution);
+                TaxonDescription desc = iterator.next();
+                desc.addElement(newDistribution);
+                editor.descriptionsToSave.add((TaxonDistributionDTO) rowWrapper);
             }else{
-                Taxon taxon = ((TaxonDistributionDTO) rowWrapper).getTaxon();
-                TaxonDescription desc = TaxonDescription.NewInstance(taxon);
+
+                TaxonDescription desc = TaxonDescription.NewInstance();
                 desc.addElement(newDistribution);
                 ((TaxonDistributionDTO) rowWrapper).getDescriptionsWrapper().getDescriptions().add(desc);
+                editor.descriptionsToSave.add((TaxonDistributionDTO) rowWrapper);
              }
         }
     }