fix #8756: add refresh button to structure and property tree viewer
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / descriptiveDataSet / DescriptiveDataSetEditor.java
index d4b4a9dab8ee97b742b90f5d4f18b419cf5feea7..4a44112649960933678a6050e0e5b83f236a6355 100644 (file)
@@ -57,17 +57,21 @@ import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
 import eu.etaxonomy.cdm.api.service.IDescriptiveDataSetService;
 import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
 import eu.etaxonomy.cdm.api.service.ITermService;
-import eu.etaxonomy.cdm.model.common.DefinedTermBase;
 import eu.etaxonomy.cdm.model.description.DescriptiveDataSet;
-import eu.etaxonomy.cdm.model.description.FeatureTree;
+import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.location.NamedArea;
 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.model.term.DefinedTermBase;
+import eu.etaxonomy.cdm.model.term.TermTree;
+import eu.etaxonomy.cdm.model.term.TermType;
 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.event.EventUtility;
+import eu.etaxonomy.taxeditor.event.WorkbenchEventConstants;
 import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
 import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
 import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
@@ -128,13 +132,14 @@ IPartContentHasDetails, IPartContentHasSupplementalData, IDirtyMarkable {
             @Override
             public void modifyText(ModifyEvent e) {
                 descriptiveDataSet.setLabel(composite.getTxt_label().getText());
+                EventUtility.postSyncEvent(WorkbenchEventConstants.REFRESH_DATASET_NAVIGATOR, descriptiveDataSet);
                 dirty.setDirty(true);
             }
         };
         composite.getRankMin().addSelectionChangedListener(event->dirty.setDirty(true));
         composite.getRankMin().setText("Select min rank...");
         composite.getRankMax().addSelectionChangedListener(event->dirty.setDirty(true));
-        composite.getRankMin().setText("Select max rank...");
+        composite.getRankMax().setText("Select max rank...");
         composite.getBtnRemoveRankMin().addSelectionListener(new SelectionAdapter() {
             @Override
             public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
@@ -156,7 +161,7 @@ IPartContentHasDetails, IPartContentHasSupplementalData, IDirtyMarkable {
             public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
                 AreasSelectionDialog areasSelectionDialog = new AreasSelectionDialog(composite.getShell(), composite.getAreas());
                 if(areasSelectionDialog.open()==Window.OK){
-                    Set<TermDto> selectedAreas = areasSelectionDialog.getSelectedAreas();
+                    List<TermDto> selectedAreas = areasSelectionDialog.getSelectedAreas();
                     if(selectedAreas!=null){
                         composite.setAreas(selectedAreas);
                         dirty.setDirty(true);
@@ -165,7 +170,13 @@ IPartContentHasDetails, IPartContentHasSupplementalData, IDirtyMarkable {
             }
         });
 
-        composite.getFeatureTreeEditorComposite().init("Character Tree", null, null, e->selectionService.setSelection(e.getSelection()), this, null);
+        composite.getFeatureTreeEditorComposite().init("Character Tree",
+                TermType.Character,
+                null,
+                null,
+                e->selectionService.setSelection(e.getSelection()),
+                this,
+                null);
 
         //add drag'n'drop support
         Transfer[] transfers = new Transfer[] {LocalSelectionTransfer.getTransfer()};
@@ -204,13 +215,8 @@ IPartContentHasDetails, IPartContentHasSupplementalData, IDirtyMarkable {
         }
         Set<NamedArea> geoFilter = descriptiveDataSet.getGeoFilter();
         if(geoFilter!=null && !geoFilter.isEmpty()){
-            Set<TermDto> terms = geoFilter.stream().map(filter->new TermDto(
-                    filter.getUuid(),
-                    filter.getRepresentations(),
-                    filter.getPartOf()!=null?filter.getPartOf().getUuid():null,
-                    filter.getVocabulary().getUuid(),
-                    filter.getOrderIndex())).collect(Collectors.toSet());
-            composite.setAreas(terms);
+            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){
@@ -274,7 +280,7 @@ IPartContentHasDetails, IPartContentHasSupplementalData, IDirtyMarkable {
     @Persist
     @Override
     public void save(IProgressMonitor monitor) {
-        Set<TermDto> areas = composite.getAreas();
+        Collection<TermDto> areas = composite.getAreas();
         Object input = composite.getTaxonNodeTree().getInput();
         if(input!=null){
             descriptiveDataSet.setTaxonSubtreeFilter(new HashSet<>());//clear existing filter
@@ -286,10 +292,10 @@ IPartContentHasDetails, IPartContentHasSupplementalData, IDirtyMarkable {
                 }
             }
         }
-        FeatureTree characters = composite.getCharacters();
+        TermTree<Feature> characters = composite.getCharacters();
         if(characters!=null){
             //save characters because they can be modified in this editor
-            characters.getDistinctFeatures().forEach(character->CdmStore.getService(ITermService.class).merge(character,true));
+            characters.getDistinctTerms().forEach(character->CdmStore.getService(ITermService.class).merge(character,true));
         }
 
 
@@ -319,6 +325,11 @@ IPartContentHasDetails, IPartContentHasSupplementalData, IDirtyMarkable {
         dirty.setDirty(false);
     }
 
+    @Override
+    public boolean isDirty() {
+        return dirty.isDirty();
+    }
+
     @PreDestroy
     public void dispose() {
         if (conversation != null) {