Set taxonomic scope for generated polytomous key
authorpplitzner <p.plitzner@posteo.de>
Sun, 15 Sep 2019 13:58:21 +0000 (15:58 +0200)
committerpplitzner <p.plitzner@posteo.de>
Mon, 16 Sep 2019 04:46:24 +0000 (06:46 +0200)
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/CharacterMatrixBottomToolbar.java

index eb16cf4d79e428c679b5d789df3ec772a0d1c0e7..ce2e74db44943399ed5643887b38bc085bbaad17 100644 (file)
@@ -12,6 +12,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.UUID;
 import java.util.stream.Collectors;
 
@@ -35,6 +36,8 @@ import org.eclipse.swt.widgets.Composite;
 import eu.etaxonomy.cdm.api.application.CdmApplicationState;
 import eu.etaxonomy.cdm.api.service.IDescriptiveDataSetService;
 import eu.etaxonomy.cdm.api.service.IPolytomousKeyService;
+import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
+import eu.etaxonomy.cdm.api.service.ITaxonService;
 import eu.etaxonomy.cdm.api.service.UpdateResult;
 import eu.etaxonomy.cdm.api.service.config.DescriptionAggregationConfiguration;
 import eu.etaxonomy.cdm.api.service.config.IdentifiableServiceConfiguratorImpl;
@@ -46,7 +49,9 @@ import eu.etaxonomy.cdm.model.description.DescriptiveDataSet;
 import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.description.PolytomousKey;
 import eu.etaxonomy.cdm.model.description.QuantitativeData;
+import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.persistence.dto.SpecimenNodeWrapper;
+import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
 import eu.etaxonomy.cdm.strategy.generate.PolytomousKeyGenerator;
 import eu.etaxonomy.cdm.strategy.generate.PolytomousKeyGeneratorConfigurator;
 import eu.etaxonomy.taxeditor.editor.internal.TaxeditorEditorPlugin;
@@ -57,6 +62,7 @@ import eu.etaxonomy.taxeditor.preference.IPreferenceKeys;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.store.StoreUtil;
+import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonSelectionDialog;
 
 /**
  * @author pplitzner
@@ -175,7 +181,31 @@ public class CharacterMatrixBottomToolbar extends Composite{
                         System.out.println("Key with same name found for this data set found");
                     }
                     key.setTitleCache(descriptiveDataSet.getTitleCache(), true);
-                    keyService.save(key);
+
+                    Set<TaxonNodeDto> nodeDtos = matrix.getDescriptiveDataSet().getTaxonSubtreeFilter().stream()
+                    .map(node->new TaxonNodeDto(node))
+                    .collect(Collectors.toSet());
+                    TaxonNodeDto parentDto = CdmStore.getService(ITaxonNodeService.class).findCommonParentDto(nodeDtos);
+                    UUID taxonUuid = parentDto.getTaxonUuid();
+                    int response = MessagingUtils.confirmDialog(
+                            "Choose taxonomic scope",
+                            String.format("The common parent taxon of this data set is :\n%s\n\n"
+                                    + "Do you want to use this as the taxonomic scope for the polytomous key?"
+                                    , parentDto.getTaxonTitleCache()), "Yes", "Choose different taxon", "Cancel");
+                    if(response==2){
+                        return;
+                    }
+                    else if(response==1){
+                        Taxon taxon = TaxonSelectionDialog.selectTaxon(getShell(), null);
+                        if(taxon==null){
+                            return;
+                        }
+                        taxonUuid = taxon.getUuid();
+                    }
+
+                    key.addTaxonomicScope((Taxon) CdmStore.getService(ITaxonService.class).load(taxonUuid));
+
+                    keyService.saveOrUpdate(key);
                     key.print(System.out);
                 }
             });