ref #8450: descriptive data set title as label for descr. dataset editor
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / descriptiveDataSet / DescriptiveDataSetEditor.java
index d4b4a9dab8ee97b742b90f5d4f18b419cf5feea7..eba318cb437a9753f8d414b8158d6b55431c8c81 100644 (file)
@@ -30,6 +30,7 @@ import org.eclipse.e4.core.contexts.IEclipseContext;
 import org.eclipse.e4.ui.di.Focus;
 import org.eclipse.e4.ui.di.Persist;
 import org.eclipse.e4.ui.model.application.ui.MDirtyable;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
 import org.eclipse.e4.ui.services.EMenuService;
 import org.eclipse.e4.ui.services.IServiceConstants;
 import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
@@ -57,17 +58,22 @@ 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.IDescriptiveDataSetEditor;
 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;
@@ -85,7 +91,7 @@ import eu.etaxonomy.taxeditor.workbench.part.IE4SavablePart;
  *
  */
 public class DescriptiveDataSetEditor implements IE4SavablePart, IConversationEnabled, ICdmEntitySessionEnabled,
-IPartContentHasDetails, IPartContentHasSupplementalData, IDirtyMarkable {
+IPartContentHasDetails, IPartContentHasSupplementalData, IDirtyMarkable, IDescriptiveDataSetEditor {
 
     private DescriptiveDataSetComposite composite;
 
@@ -100,6 +106,9 @@ IPartContentHasDetails, IPartContentHasSupplementalData, IDirtyMarkable {
     @Inject
     private MDirtyable dirty;
 
+    @Inject
+    private MPart thisPart;
+
     @Inject
     private ESelectionService selectionService;
 
@@ -128,13 +137,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 +166,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 +175,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 +220,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){
@@ -225,6 +236,7 @@ IPartContentHasDetails, IPartContentHasSupplementalData, IDirtyMarkable {
             }
         });
         selectionService.setSelection(new StructuredSelection(descriptiveDataSet));
+        thisPart.setLabel(descriptiveDataSet.getLabel());
     }
 
     public void addTaxonNode(TaxonNodeDto taxonNodeDto){
@@ -274,7 +286,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 +298,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));
         }
 
 
@@ -315,10 +327,16 @@ IPartContentHasDetails, IPartContentHasSupplementalData, IDirtyMarkable {
 
         conversation.commit();
         CdmStore.getService(IDescriptiveDataSetService.class).merge(descriptiveDataSet, true);
-
+        //event for updatin matrix
+        EventUtility.postEvent(WorkbenchEventConstants.REFRESH_DESCRIPTIVE_DATASET, descriptiveDataSet.getUuid());
         dirty.setDirty(false);
     }
 
+    @Override
+    public boolean isDirty() {
+        return dirty.isDirty();
+    }
+
     @PreDestroy
     public void dispose() {
         if (conversation != null) {
@@ -330,6 +348,7 @@ IPartContentHasDetails, IPartContentHasSupplementalData, IDirtyMarkable {
             cdmEntitySession = null;
         }
         dirty.setDirty(false);
+        selectionService.setSelection(null);
     }
 
     @Focus