ref #6805 Fix term dragging into feature tree editor
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / descriptiveDataSet / DescriptiveDataSetEditor.java
index ea1567ec14a4b53c6aa0570a48b77dddc1b7668b..40cb2d2558d6d9b17fb1827451cd9642a9985535 100644 (file)
@@ -17,6 +17,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
+import java.util.stream.Collectors;
 
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
@@ -36,6 +37,7 @@ import org.eclipse.jface.util.LocalSelectionTransfer;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.window.Window;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.dnd.DND;
 import org.eclipse.swt.dnd.Transfer;
@@ -63,6 +65,7 @@ import eu.etaxonomy.cdm.model.name.Rank;
 import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
 import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
+import eu.etaxonomy.cdm.persistence.dto.TermDto;
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
 import eu.etaxonomy.taxeditor.editor.l10n.Messages;
 import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
@@ -72,7 +75,6 @@ import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
 import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
 import eu.etaxonomy.taxeditor.store.CdmStore;
-import eu.etaxonomy.taxeditor.ui.dialog.selection.NamedAreaSelectionDialog;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 import eu.etaxonomy.taxeditor.workbench.part.IE4SavablePart;
 
@@ -152,19 +154,14 @@ IPartContentHasDetails, IPartContentHasSupplementalData, IDirtyMarkable {
 
             @Override
             public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
-                NamedArea area = NamedAreaSelectionDialog.select(shell, null, null);
-                if(area!=null){
-                    composite.setArea(area);
+                AreasSelectionDialog areasSelectionDialog = new AreasSelectionDialog(composite.getShell(), composite.getAreas());
+                if(areasSelectionDialog.open()==Window.OK){
+                    List<TermDto> selectedAreas = areasSelectionDialog.getSelectedAreas();
+                    if(selectedAreas!=null){
+                        composite.setAreas(selectedAreas);
+                        dirty.setDirty(true);
+                    }
                 }
-                dirty.setDirty(true);
-            }
-        });
-        composite.getBtnRemoveArea().addSelectionListener(new SelectionAdapter() {
-
-            @Override
-            public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
-                composite.removeArea();
-                dirty.setDirty(true);
             }
         });
 
@@ -207,7 +204,8 @@ IPartContentHasDetails, IPartContentHasSupplementalData, IDirtyMarkable {
         }
         Set<NamedArea> geoFilter = descriptiveDataSet.getGeoFilter();
         if(geoFilter!=null && !geoFilter.isEmpty()){
-            composite.setArea(geoFilter.iterator().next());
+            Set<TermDto> terms = geoFilter.stream().map(filter->TermDto.fromTerm(filter, true)).collect(Collectors.toSet());
+            composite.setAreas(new ArrayList<>(terms));
         }
         Set<TaxonNode> taxonSubtreeFilter = descriptiveDataSet.getTaxonSubtreeFilter();
         if(taxonSubtreeFilter!=null){
@@ -271,11 +269,7 @@ IPartContentHasDetails, IPartContentHasSupplementalData, IDirtyMarkable {
     @Persist
     @Override
     public void save(IProgressMonitor monitor) {
-        NamedArea area = composite.getArea();
-        Set<NamedArea> areas = new HashSet<>();
-        if(area!=null){
-            areas.add(area);
-        }
+        Collection<TermDto> areas = composite.getAreas();
         Object input = composite.getTaxonNodeTree().getInput();
         if(input!=null){
             descriptiveDataSet.setTaxonSubtreeFilter(new HashSet<>());//clear existing filter
@@ -308,7 +302,11 @@ IPartContentHasDetails, IPartContentHasSupplementalData, IDirtyMarkable {
         descriptiveDataSet.setMaxRank(rankMax);
         descriptiveDataSet.setMinRank(rankMin);
         descriptiveDataSet.setDescriptiveSystem(characters);
-        descriptiveDataSet.setGeoFilter(areas);
+        List<DefinedTermBase> terms = CdmStore.getService(ITermService.class)
+                .load(areas.stream().map(area -> area.getUuid()).collect(Collectors.toList()), null);
+        Set<NamedArea> areaTerms = new HashSet<>();
+        terms.forEach(term->areaTerms.add((NamedArea) term));
+        descriptiveDataSet.setGeoFilter(areaTerms);
 
         conversation.commit();
         CdmStore.getService(IDescriptiveDataSetService.class).merge(descriptiveDataSet, true);
@@ -316,6 +314,11 @@ IPartContentHasDetails, IPartContentHasSupplementalData, IDirtyMarkable {
         dirty.setDirty(false);
     }
 
+    @Override
+    public boolean isDirty() {
+        return dirty.isDirty();
+    }
+
     @PreDestroy
     public void dispose() {
         if (conversation != null) {