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.TermComboElement;
+import eu.etaxonomy.taxeditor.ui.combo.term.TermComboElement;
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
/**
* @author pplitzner
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");
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);
}
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
if(event.getSource()==comboFeature){
Feature feature = comboFeature.getSelection();
updateStateCombo(feature);
+ comboFeature.removeEmptyElement();
}
getWizard().getContainer().updateButtons();
}