ref #8475 Use feature selection dialog in feature state wizard
authorPatrick Plitzner <p.plitzner@bgbm.org>
Fri, 23 Aug 2019 16:20:27 +0000 (18:20 +0200)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Fri, 23 Aug 2019 16:20:42 +0000 (18:20 +0200)
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/AvailableFeaturesWizard.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/AvailableFeaturesWizardPage.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/FeatureStateWizard.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/FeatureStateWizardPage.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/InapplicableIfEntityCollectionSection.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/feature/OnlyApplicableIfEntityCollectionSection.java

index 64736e58869ede921eaec35d43a20773837bb605..7508c9c7ee2b6f6369e91b4161079b5747908d5b 100644 (file)
@@ -9,12 +9,17 @@
 
 package eu.etaxonomy.taxeditor.featuretree;
 
+import java.util.List;
 import java.util.Set;
 
 import org.eclipse.jface.wizard.Wizard;
 
+import eu.etaxonomy.cdm.api.service.IVocabularyService;
 import eu.etaxonomy.cdm.model.term.DefinedTermBase;
 import eu.etaxonomy.cdm.model.term.TermType;
+import eu.etaxonomy.cdm.persistence.dto.TermVocabularyDto;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
  * <p>AvailableFeaturesWizard class.</p>
@@ -29,27 +34,46 @@ public class AvailableFeaturesWizard extends Wizard {
 
        private Set<DefinedTermBase> additionalFeatures;
 
-    private TermType termType;
+    private List<TermVocabularyDto> vocabularyDtos;
+
+    private boolean singleSelection = false;
 
        public AvailableFeaturesWizard(TermType termType){
-           this.termType = termType;
+        vocabularyDtos = CdmStore.getService(IVocabularyService.class).findVocabularyDtoByTermType(termType);
+       }
+
+       public AvailableFeaturesWizard(List<TermVocabularyDto> vocabularyDtos){
+           this.vocabularyDtos = vocabularyDtos;
        }
 
        /** {@inheritDoc} */
        @Override
        public void addPages() {
-               page = new AvailableFeaturesWizardPage(termType);
+               page = new AvailableFeaturesWizardPage(vocabularyDtos,singleSelection);
                addPage(page);
        }
 
+       @Override
+       public boolean canFinish() {
+        int size = page.getSelectedFeatures().size();
+        return singleSelection?size==1:size>0;
+       }
+
        /** {@inheritDoc} */
        @Override
        public boolean performFinish() {
                additionalFeatures = page.getSelectedFeatures();
+               if(singleSelection && additionalFeatures.size()>1){
+                   MessagingUtils.warningDialog("Too many terms selected", this, "You can only select 1 term");
+               }
                return additionalFeatures.size() > 0;
        }
 
        public Set<DefinedTermBase> getAdditionalFeatures() {
                return additionalFeatures;
        }
+
+    public void setSingleSelection(boolean singleSelection) {
+        this.singleSelection = singleSelection;
+    }
 }
index 02f731a5ebf941111deb583f46d292efd07082b9..84dc238a28e2e71257ce1042510c580507bd78e7 100644 (file)
@@ -21,9 +21,7 @@ import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 
 import eu.etaxonomy.cdm.api.service.ITermService;
-import eu.etaxonomy.cdm.api.service.IVocabularyService;
 import eu.etaxonomy.cdm.model.term.DefinedTermBase;
-import eu.etaxonomy.cdm.model.term.TermType;
 import eu.etaxonomy.cdm.persistence.dto.TermDto;
 import eu.etaxonomy.cdm.persistence.dto.TermVocabularyDto;
 import eu.etaxonomy.taxeditor.editor.definedterm.DefinedTermSorter;
@@ -40,23 +38,28 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
 public class AvailableFeaturesWizardPage extends WizardPage {
 
     private CheckBoxTreeComposite treeComposite;
-    private TermType termType;
+    private List<TermVocabularyDto> vocabularies;
 
-       protected AvailableFeaturesWizardPage(TermType termType) {
+       protected AvailableFeaturesWizardPage(List<TermVocabularyDto> vocabularies, boolean singleSelection) {
                super("Available Terms Wizard Page");
-               this.termType = termType;
+               this.vocabularies = vocabularies;
                setTitle("Available Terms");
-               setDescription("Please select terms you want to add to the tree.");
+               if(singleSelection){
+                   setDescription("Please select one single term");
+               }
+               else{
+                   setDescription("Please select terms.");
+               }
        }
 
        /** {@inheritDoc} */
        @Override
        public void createControl(Composite parent) {
         treeComposite = new CheckBoxTreeComposite(parent, new TermDtoContentProvider(), new TermDtoLabelProvider(), SWT.NONE);
-        List<TermVocabularyDto> vocabularyDtos = CdmStore.getService(IVocabularyService.class).findVocabularyDtoByTermType(termType);
         treeComposite.getViewer().setComparator(new DefinedTermSorter());
-        treeComposite.getViewer().setInput(vocabularyDtos);
+        treeComposite.getViewer().setInput(vocabularies);
         treeComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+        treeComposite.getViewer().addSelectionChangedListener(e->getWizard().getContainer().updateButtons());
 
                setControl(treeComposite);
        }
index 047831607920cbf12d44efc79481685fa0da9081..68013d79a4eaa9e87d0017f9e7a317a6e4a11092 100644 (file)
@@ -25,20 +25,18 @@ public class FeatureStateWizard extends Wizard {
     private static final String CREATE_FEATURE_STATE = "Create Feature State";
     private FeatureStateWizardPage page;
     private CdmFormFactory formFactory;
-    private String comboLabel;
     private TermNode<? extends Feature> termNode;
 
-    public FeatureStateWizard(String comboLabel, TermNode<? extends Feature> termNode, CdmFormFactory formFactory) {
+    public FeatureStateWizard(TermNode<? extends Feature> termNode, CdmFormFactory formFactory) {
         super();
         this.formFactory = formFactory;
         this.termNode = termNode;
-        this.comboLabel = comboLabel;
         setWindowTitle(CREATE_FEATURE_STATE);
     }
 
     @Override
     public void addPages() {
-        page = new FeatureStateWizardPage(CREATE_FEATURE_STATE, comboLabel, termNode, formFactory);
+        page = new FeatureStateWizardPage(CREATE_FEATURE_STATE, termNode, formFactory);
         addPage(page);
     }
 
index dff53b7b79a969f17194ca26889eb5977fafe53a..44e9cd2d46d7a93847f8a18bc0a9b786039b1420 100644 (file)
@@ -9,22 +9,37 @@
 package eu.etaxonomy.taxeditor.ui.section.feature;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
 
 import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.description.FeatureState;
 import eu.etaxonomy.cdm.model.description.State;
+import eu.etaxonomy.cdm.model.term.DefinedTermBase;
 import eu.etaxonomy.cdm.model.term.TermNode;
 import eu.etaxonomy.cdm.model.term.TermVocabulary;
+import eu.etaxonomy.cdm.persistence.dto.TermVocabularyDto;
+import eu.etaxonomy.taxeditor.featuretree.AvailableFeaturesWizard;
+import eu.etaxonomy.taxeditor.model.ImageResources;
 import eu.etaxonomy.taxeditor.ui.AbstractEntityCollectionElementWizardPage;
 import eu.etaxonomy.taxeditor.ui.combo.term.TermComboElement;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
 
 /**
  * @author pplitzner
@@ -34,13 +49,15 @@ import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 public class FeatureStateWizardPage extends AbstractEntityCollectionElementWizardPage {
 
     private TermComboElement<Feature> comboFeature;
-    private TermComboElement<State> comboState;
-    private String comboLabel;
+    private Button btnSelectState;
+
     private TermNode<? extends Feature> termNode;
+    private State selectedState = null;
+    private List<TermVocabularyDto> stateVocabulariesDtos = new ArrayList<>();
+    private Text text;
 
-    protected FeatureStateWizardPage(String pageName, String comboLabel, TermNode<? extends Feature> termNode, CdmFormFactory formFactory) {
+    protected FeatureStateWizardPage(String pageName, TermNode<? extends Feature> termNode, CdmFormFactory formFactory) {
         super(pageName, formFactory);
-        this.comboLabel = comboLabel;
         this.termNode = termNode;
         setTitle("Create Feature State");
         setDescription("Select Feature and State");
@@ -52,8 +69,33 @@ public class FeatureStateWizardPage extends AbstractEntityCollectionElementWizar
 
         comboFeature = formFactory.createDefinedTermComboElement(Collections.EMPTY_LIST, rootElement, "Parent Feature", null, SWT.NONE);
 
-        comboState = formFactory.createDefinedTermComboElement(Collections.EMPTY_LIST, rootElement, comboLabel, null, SWT.NONE);
-        comboState.setEnabled(false);
+        Label label = new Label(rootElement.getLayoutComposite(), SWT.NONE);
+        label.setText("State");
+        Composite buttonTextComposite = new Composite(rootElement.getLayoutComposite(), SWT.NONE);
+        buttonTextComposite.setLayoutData(LayoutConstants.FILL(1, 1));
+        buttonTextComposite.setLayout(new GridLayout(2, false));
+        text = new Text(buttonTextComposite, SWT.NONE);
+        text.setEditable(false);
+        text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+        btnSelectState = new Button(buttonTextComposite, SWT.PUSH);
+        btnSelectState.setImage(ImageResources.getImage(ImageResources.BROWSE_ICON));
+        btnSelectState.addSelectionListener(new SelectionAdapter() {
+
+            @Override
+            public void widgetSelected(SelectionEvent e) {
+                AvailableFeaturesWizard wizard = new AvailableFeaturesWizard(stateVocabulariesDtos);
+                wizard.setSingleSelection(true);
+                WizardDialog dialog = new WizardDialog(getShell(), wizard);
+
+                if (dialog.open() == IStatus.OK) {
+                    Collection<DefinedTermBase> additionalTerms = wizard.getAdditionalFeatures();
+                    if(additionalTerms.size()==1){
+                        selectedState = (State) additionalTerms.iterator().next();
+                        text.setText(selectedState.getLabel());
+                    }
+                }
+            }
+        });
 
         formFactory.addPropertyChangeListener(this);
 
@@ -61,7 +103,7 @@ public class FeatureStateWizardPage extends AbstractEntityCollectionElementWizar
     }
 
     FeatureState getFeatureState(){
-        return FeatureState.NewInstance(comboFeature.getSelection(), comboState.getSelection());
+        return FeatureState.NewInstance(comboFeature.getSelection(), selectedState);
     }
 
     private void updateFeatureCombo(){
@@ -85,18 +127,20 @@ public class FeatureStateWizardPage extends AbstractEntityCollectionElementWizar
     }
 
     private void updateStateCombo(Feature feature){
-        comboState.setEnabled(true);
-        List<State> stateTerms = new ArrayList<>();
-        Set<TermVocabulary<State>> stateVocabularies = feature.getSupportedCategoricalEnumerations();
-        for (TermVocabulary<State> termVocabulary : stateVocabularies) {
-            stateTerms.addAll(termVocabulary.getTerms());
+        stateVocabulariesDtos.clear();
+        text.setText("");
+        selectedState = null;
+        if(feature!=null){
+            Set<TermVocabulary<State>> stateVocabularies = feature.getSupportedCategoricalEnumerations();
+            for (TermVocabulary<State> termVocabulary : stateVocabularies) {
+                stateVocabulariesDtos.add(new TermVocabularyDto(termVocabulary.getUuid(), termVocabulary.getRepresentations(), termVocabulary.getTermType()));
+            }
         }
-        comboState.setTerms(stateTerms);
     }
 
     @Override
     public boolean isPageComplete() {
-        return comboFeature.getSelection()!=null && comboState.getSelection()!=null;
+        return comboFeature.getSelection()!=null && selectedState!=null;
     }
 
     @Override
index b21eca30c36be37c1e3d972be7699ba1b78ea00a..8f8af1048adf3de80a4cd784aaeeb4d660c1cfef 100644 (file)
@@ -58,7 +58,7 @@ public class InapplicableIfEntityCollectionSection extends AbstractEntityCollect
      */
     @Override
     public FeatureState createNewElement() {
-        FeatureStateWizard wizard = new FeatureStateWizard("Inapplicable If", getEntity(), formFactory);
+        FeatureStateWizard wizard = new FeatureStateWizard(getEntity(), formFactory);
         WizardDialog dialog = new WizardDialog(getLayoutComposite().getShell(), wizard);
         int status = dialog.open();
         if(status == IStatus.OK) {
index a1b2b02c0bdb188bc4c0b506bcb3f1329b236725..63851efd747e0e3f99606b3cccad022ccabe2c97 100644 (file)
@@ -57,7 +57,7 @@ public class OnlyApplicableIfEntityCollectionSection extends AbstractEntityColle
      */
     @Override
     public FeatureState createNewElement() {
-        FeatureStateWizard wizard = new FeatureStateWizard("Only applicable if", getEntity(), formFactory);
+        FeatureStateWizard wizard = new FeatureStateWizard(getEntity(), formFactory);
         WizardDialog dialog = new WizardDialog(getLayoutComposite().getShell(), wizard);
         int status = dialog.open();
         if(status == IStatus.OK) {