X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/blobdiff_plain/971fcc6dccef0497f4c20da32aea54f92f3324ff..1c557afcd24e3cbff51728a21c8008801ac78cb3:/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/DescriptiveDataSetEditor.java diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/DescriptiveDataSetEditor.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/DescriptiveDataSetEditor.java index 636dd8b2a..40cb2d255 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/DescriptiveDataSetEditor.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/DescriptiveDataSetEditor.java @@ -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; @@ -34,10 +35,14 @@ import org.eclipse.e4.ui.services.IServiceConstants; import org.eclipse.e4.ui.workbench.modeling.ESelectionService; 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; +import org.eclipse.swt.events.FocusAdapter; +import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.ModifyEvent; @@ -60,15 +65,16 @@ 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; import eu.etaxonomy.taxeditor.model.IPartContentHasDetails; +import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData; 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; @@ -79,7 +85,7 @@ import eu.etaxonomy.taxeditor.workbench.part.IE4SavablePart; * */ public class DescriptiveDataSetEditor implements IE4SavablePart, IConversationEnabled, ICdmEntitySessionEnabled, -IPartContentHasDetails, IDirtyMarkable { +IPartContentHasDetails, IPartContentHasSupplementalData, IDirtyMarkable { private DescriptiveDataSetComposite composite; @@ -148,23 +154,18 @@ IPartContentHasDetails, 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 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); } }); - composite.getFeatureTreeEditorComposite().init(null, null, e->selectionService.setSelection(e.getSelection()), this, null); + composite.getFeatureTreeEditorComposite().init("Character Tree", null, null, e->selectionService.setSelection(e.getSelection()), this, null); //add drag'n'drop support Transfer[] transfers = new Transfer[] {LocalSelectionTransfer.getTransfer()}; @@ -203,14 +204,22 @@ IPartContentHasDetails, IDirtyMarkable { } Set geoFilter = descriptiveDataSet.getGeoFilter(); if(geoFilter!=null && !geoFilter.isEmpty()){ - composite.setArea(geoFilter.iterator().next()); + Set terms = geoFilter.stream().map(filter->TermDto.fromTerm(filter, true)).collect(Collectors.toSet()); + composite.setAreas(new ArrayList<>(terms)); } Set taxonSubtreeFilter = descriptiveDataSet.getTaxonSubtreeFilter(); if(taxonSubtreeFilter!=null){ composite.getTaxonNodeTree().setInput(taxonSubtreeFilter); } - composite.getTxt_label().addModifyListener(labelModifyListener); + composite.getTxt_label().addFocusListener(new FocusAdapter() { + @Override + public void focusGained(FocusEvent e) { + super.focusGained(e); + selectionService.setSelection(new StructuredSelection(descriptiveDataSet)); + } + }); + selectionService.setSelection(new StructuredSelection(descriptiveDataSet)); } public void addTaxonNode(TaxonNodeDto taxonNodeDto){ @@ -260,11 +269,7 @@ IPartContentHasDetails, IDirtyMarkable { @Persist @Override public void save(IProgressMonitor monitor) { - NamedArea area = composite.getArea(); - Set areas = new HashSet<>(); - if(area!=null){ - areas.add(area); - } + Collection areas = composite.getAreas(); Object input = composite.getTaxonNodeTree().getInput(); if(input!=null){ descriptiveDataSet.setTaxonSubtreeFilter(new HashSet<>());//clear existing filter @@ -297,7 +302,11 @@ IPartContentHasDetails, IDirtyMarkable { descriptiveDataSet.setMaxRank(rankMax); descriptiveDataSet.setMinRank(rankMin); descriptiveDataSet.setDescriptiveSystem(characters); - descriptiveDataSet.setGeoFilter(areas); + List terms = CdmStore.getService(ITermService.class) + .load(areas.stream().map(area -> area.getUuid()).collect(Collectors.toList()), null); + Set areaTerms = new HashSet<>(); + terms.forEach(term->areaTerms.add((NamedArea) term)); + descriptiveDataSet.setGeoFilter(areaTerms); conversation.commit(); CdmStore.getService(IDescriptiveDataSetService.class).merge(descriptiveDataSet, true); @@ -305,6 +314,11 @@ IPartContentHasDetails, IDirtyMarkable { dirty.setDirty(false); } + @Override + public boolean isDirty() { + return dirty.isDirty(); + } + @PreDestroy public void dispose() { if (conversation != null) {