ref #9114 adapt some classes with URI to wrapper in taxeditor (cont.)
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / section / feature / FeatureStateWizardPage.java
index dff53b7b79a969f17194ca26889eb5977fafe53a..68182ac1cf00689ecc3951ebf83b28fea7a29673 100644 (file)
@@ -9,22 +9,41 @@
 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 java.util.UUID;
 
+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.api.service.ITermNodeService;
 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.TermNodeDto;
+import eu.etaxonomy.cdm.persistence.dto.TermVocabularyDto;
+import eu.etaxonomy.taxeditor.featuretree.AvailableTermsWizard;
+import eu.etaxonomy.taxeditor.model.ImageResources;
+import eu.etaxonomy.taxeditor.store.CdmStore;
 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 +53,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 TermNode<? extends Feature> termNode;
+    private Button btnSelectState;
 
-    protected FeatureStateWizardPage(String pageName, String comboLabel, TermNode<? extends Feature> termNode, CdmFormFactory formFactory) {
+    private TermNodeDto termNode;
+    private State selectedState = null;
+    private List<TermVocabularyDto> stateVocabulariesDtos = new ArrayList<>();
+    private Text text;
+
+    protected FeatureStateWizardPage(String pageName, TermNodeDto termNode, CdmFormFactory formFactory) {
         super(pageName, formFactory);
-        this.comboLabel = comboLabel;
         this.termNode = termNode;
         setTitle("Create Feature State");
         setDescription("Select Feature and State");
@@ -52,8 +73,34 @@ 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) {
+                AvailableTermsWizard wizard = new AvailableTermsWizard(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());
+                        FeatureStateWizardPage.this.getWizard().getContainer().updateButtons();
+                    }
+                }
+            }
+        });
 
         formFactory.addPropertyChangeListener(this);
 
@@ -61,42 +108,48 @@ public class FeatureStateWizardPage extends AbstractEntityCollectionElementWizar
     }
 
     FeatureState getFeatureState(){
-        return FeatureState.NewInstance(comboFeature.getSelection(), comboState.getSelection());
+        return FeatureState.NewInstance(comboFeature.getSelection(), selectedState);
     }
 
     private void updateFeatureCombo(){
         List<Feature> features = new ArrayList<>();
-        TermNode<? extends Feature> parent = termNode.getParent();
-        while(parent!=null){
-            Feature parentTerm = parent.getTerm();
-            if(parentTerm!=null
-                    && parentTerm.isSupportsCategoricalData()
-                    && !parentTerm.getSupportedCategoricalEnumerations().isEmpty()){
-                features.add(parentTerm);
+        UUID parentUuid = termNode.getParentUuid();
+        if (parentUuid != null){
+            TermNode<? extends Feature> parent = CdmStore.getService(ITermNodeService.class).load(parentUuid);
+            while(parent!=null){
+                Feature parentTerm = parent.getTerm();
+                if(parentTerm!=null
+                        && parentTerm.isSupportsCategoricalData()
+                        && !parentTerm.getSupportedCategoricalEnumerations().isEmpty()){
+                    features.add(parentTerm);
+                }
+                parent = parent.getParent();
             }
-            parent = parent.getParent();
         }
         comboFeature.setTerms(features);
         if(features.size()==1){
             Feature feature = features.get(0);
             comboFeature.setSelection(feature);
             updateStateCombo(feature);
+            comboFeature.removeEmptyElement();
         }
     }
 
     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(), termVocabulary.getTitleCache(), termVocabulary.isAllowDuplicates(), termVocabulary.isOrderRelevant(), termVocabulary.isFlat()));
+            }
         }
-        comboState.setTerms(stateTerms);
     }
 
     @Override
     public boolean isPageComplete() {
-        return comboFeature.getSelection()!=null && comboState.getSelection()!=null;
+        return comboFeature.getSelection()!=null && selectedState!=null;
     }
 
     @Override
@@ -104,6 +157,7 @@ public class FeatureStateWizardPage extends AbstractEntityCollectionElementWizar
         if(event.getSource()==comboFeature){
             Feature feature = comboFeature.getSelection();
             updateStateCombo(feature);
+            comboFeature.removeEmptyElement();
         }
         getWizard().getContainer().updateButtons();
     }