ref #6786 Show vocabularies as root element in feature selection
authorPatrick Plitzner <p.plitzner@bgbm.org>
Tue, 11 Jul 2017 11:53:54 +0000 (13:53 +0200)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Tue, 11 Jul 2017 12:29:25 +0000 (14:29 +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/featuretree/e4/FeatureTreeEditor.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/FeatureTreeEditorComposite.java

index 17151394ca01e7d8c360fb0675c508ee011835e4..bcb659649ab8b74395c498e5af31b7c3a846fbb1 100644 (file)
@@ -1,8 +1,8 @@
 /**
 * Copyright (C) 2007 EDIT
-* European Distributed Institute of Taxonomy 
+* European Distributed Institute of Taxonomy
 * http://www.e-taxonomy.eu
-* 
+*
 * The contents of this file are subject to the Mozilla Public License Version 1.1
 * See LICENSE.TXT at the top of this package for the full license terms.
 */
@@ -14,7 +14,6 @@ import java.util.Set;
 import org.eclipse.jface.wizard.Wizard;
 
 import eu.etaxonomy.cdm.model.description.Feature;
-import eu.etaxonomy.cdm.model.description.FeatureTree;
 
 /**
  * <p>AvailableFeaturesWizard class.</p>
@@ -24,29 +23,21 @@ import eu.etaxonomy.cdm.model.description.FeatureTree;
  * @version 1.0
  */
 public class AvailableFeaturesWizard extends Wizard {
-       
-       private FeatureTree featureTree;
 
        private AvailableFeaturesWizardPage page;
 
        private Set<Feature> additionalFeatures;
-       
-       /**
-        * <p>Constructor for AvailableFeaturesWizard.</p>
-        *
-        * @param featureTree a {@link eu.etaxonomy.cdm.model.description.FeatureTree} object.
-        */
-       public AvailableFeaturesWizard(FeatureTree featureTree){
-               this.featureTree = featureTree;
+
+       public AvailableFeaturesWizard(){
        }
-       
+
        /** {@inheritDoc} */
        @Override
        public void addPages() {
-               page = new AvailableFeaturesWizardPage(featureTree);
+               page = new AvailableFeaturesWizardPage();
                addPage(page);
        }
-       
+
        /** {@inheritDoc} */
        @Override
        public boolean performFinish() {
@@ -54,11 +45,6 @@ public class AvailableFeaturesWizard extends Wizard {
                return additionalFeatures.size() > 0;
        }
 
-       /**
-        * <p>Getter for the field <code>additionalFeatures</code>.</p>
-        *
-        * @return a {@link java.util.Set} object.
-        */
        public Set<Feature> getAdditionalFeatures() {
                return additionalFeatures;
        }
index d159e3b1154951c18010af3672e1ddd4afe2a2d2..a19358fef8aa62cf285109b68acecb0eff885680 100644 (file)
@@ -1,8 +1,8 @@
 /**
 * Copyright (C) 2007 EDIT
-* European Distributed Institute of Taxonomy 
+* European Distributed Institute of Taxonomy
 * http://www.e-taxonomy.eu
-* 
+*
 * The contents of this file are subject to the Mozilla Public License Version 1.1
 * See LICENSE.TXT at the top of this package for the full license terms.
 */
@@ -13,96 +13,77 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
-import org.eclipse.jface.viewers.CheckboxTableViewer;
+import org.eclipse.jface.viewers.CheckStateChangedEvent;
+import org.eclipse.jface.viewers.CheckboxTreeViewer;
+import org.eclipse.jface.viewers.ICheckStateListener;
 import org.eclipse.jface.wizard.WizardPage;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 
+import eu.etaxonomy.cdm.api.service.IVocabularyService;
+import eu.etaxonomy.cdm.model.common.DefinedTermBase;
+import eu.etaxonomy.cdm.model.common.TermType;
+import eu.etaxonomy.cdm.model.common.TermVocabulary;
 import eu.etaxonomy.cdm.model.description.Feature;
-import eu.etaxonomy.cdm.model.description.FeatureTree;
-import eu.etaxonomy.taxeditor.preference.menu.DefinedTermBaseContentProvider;
-import eu.etaxonomy.taxeditor.preference.menu.DefinedTermBaseLabelProvider;
+import eu.etaxonomy.taxeditor.editor.definedterm.TermContentProvider;
+import eu.etaxonomy.taxeditor.editor.definedterm.TermLabelProvider;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
- * <p>AvailableFeaturesWizardPage class.</p>
- *
  * @author n.hoffmann
  * @created Aug 5, 2010
  * @version 1.0
  */
 public class AvailableFeaturesWizardPage extends WizardPage {
 
-       private CheckboxTableViewer viewer;
-       private FeatureTree featureTree;
-
-       /**
-        * <p>Constructor for AvailableFeaturesWizardPage.</p>
-        *
-        * @param featureTree a {@link eu.etaxonomy.cdm.model.description.FeatureTree} object.
-        */
-       protected AvailableFeaturesWizardPage(FeatureTree featureTree) {
-               super("AvailableFeaturesWizardPage");           
-               this.featureTree = featureTree;
+       private CheckboxTreeViewer viewer;
+
+       protected AvailableFeaturesWizardPage() {
+               super("AvailableFeaturesWizardPage");
                setTitle("Available Features");
-               setDescription("Please select features you want to add to the tree. Features already in the tree do not show.");
+               setDescription("Please select features you want to add to the tree.");
        }
-       
-       /* (non-Javadoc)
-        * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
-        */
+
        /** {@inheritDoc} */
        @Override
        public void createControl(Composite parent) {
                Composite composite = new Composite(parent, SWT.NULL);
                composite.setLayout(new GridLayout());
-               
-               viewer = CheckboxTableViewer.newCheckList(composite, SWT.NULL);
-               
+
+               viewer = new CheckboxTreeViewer(composite, SWT.NULL);
+
                viewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-               
-               viewer.setContentProvider(new DefinedTermBaseContentProvider());                
-               viewer.setLabelProvider(new DefinedTermBaseLabelProvider());
-               
-               viewer.setInput(getAvailableFeatures());
-               
+
+        viewer.setContentProvider(new TermContentProvider());
+        viewer.setLabelProvider(new TermLabelProvider());
+        // When user checks a checkbox in the tree, check all its children
+        viewer.addCheckStateListener(new ICheckStateListener() {
+            @Override
+            public void checkStateChanged(CheckStateChangedEvent event) {
+                viewer.setSubtreeChecked(event.getElement(), event.getChecked());
+            }
+        });
+
+        List<TermVocabulary<DefinedTermBase>> vocs = CdmStore.getService(IVocabularyService.class).findByTermType(TermType.Feature, null);
+               viewer.setInput(vocs);
+
                setControl(composite);
        }
 
-       /**
-        * <p>getSelectedFeatures</p>
-        *
-        * @return a {@link java.util.Set} object.
-        */
        public Set<Feature> getSelectedFeatures() {
-               
+
                Object[] checkedElements = viewer.getCheckedElements();
-               
+
                Set<Feature> features = new HashSet<Feature>(checkedElements.length);
-               
+
                for(Object element : checkedElements){
-                       features.add((Feature) element);
+                   if(element instanceof Feature){
+                       features.add((Feature) element);
+                   }
                }
-               
                return features;
        }
-       
-       /**
-        * We want to show only features that are not already in the featureTree
-        * 
-        * @return
-        */
-       private List<Feature> getAvailableFeatures(){
-               
-               List<Feature> preferredFeatures = CdmStore.getTermManager().getPreferredTerms(Feature.class);
-               
-               for(Feature featureAlreadyInTree : featureTree.getDistinctFeatures()){
-                       preferredFeatures.remove(featureAlreadyInTree);
-               }
-               
-               return preferredFeatures;
-               
-       }
+
 }
index d61d4fafd5c48e9b887f72fc8058318fc785acc2..e7b7109003353a8191ece8cfe19667c1299b7d14 100644 (file)
@@ -206,15 +206,16 @@ public class FeatureTreeEditor implements ICdmEntitySessionEnabled,
        private class AddButtonListener extends SelectionAdapter {
                @Override
                public void widgetSelected(SelectionEvent e) {
-                       AvailableFeaturesWizard wizard = new AvailableFeaturesWizard(
-                               composite.getFeatureTree());
+                       AvailableFeaturesWizard wizard = new AvailableFeaturesWizard();
                        WizardDialog dialog = new WizardDialog(e.widget.getDisplay().getActiveShell(), wizard);
 
                        if (dialog.open() == IStatus.OK) {
                 FeatureNode parent = ((FeatureTree) composite.getViewer().getInput()).getRoot();
                 Collection<Feature> additionalFeatures = wizard.getAdditionalFeatures();
                 for (Feature feature : additionalFeatures) {
-                                   CdmStore.getService(IFeatureNodeService.class).addChildFeaturNode(parent, feature);
+                    if(!getSelectedFeatureTree().getDistinctFeatures().contains(feature)){
+                        CdmStore.getService(IFeatureNodeService.class).addChildFeaturNode(parent, feature);
+                    }
                                }
                                setDirty(true);
                                composite.getViewer().refresh();
index 48a55f9da4500379a7b2bc6fd39e78a0f8ea9d73..fab04023c93ef03afbe1c4d2062e913c326c4ee7 100644 (file)
@@ -101,6 +101,8 @@ public class FeatureTreeEditorComposite extends Composite{
         btnExportTree.setToolTipText("Export feature tree");
         btnExportTree.setImage(ImageResources.getImage(ImageResources.MOVE_ICON));
         btnExportTree.setVisible(TaxeditorStorePlugin.getDefault().getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_EXPERIMENTAL_FEATURES));
+
+        setButtonsEnabled(false);
     }
 
     public void init(DragSourceListener dragSourceListener,
@@ -136,6 +138,13 @@ public class FeatureTreeEditorComposite extends Composite{
         getText_title().removeModifyListener(modifyListener);
         getText_title().setText(featureTree.getTitleCache());
         getText_title().addModifyListener(modifyListener);
+        setButtonsEnabled(true);
+    }
+
+    private void setButtonsEnabled(boolean enabled){
+        btnAdd.setEnabled(enabled);
+        btnRemove.setEnabled(enabled);
+        btnExportTree.setEnabled(enabled);
     }
 
     /**