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>
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;
+ }
}
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;
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);
}
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
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");
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);
}
FeatureState getFeatureState(){
- return FeatureState.NewInstance(comboFeature.getSelection(), comboState.getSelection());
+ return FeatureState.NewInstance(comboFeature.getSelection(), selectedState);
}
private void updateFeatureCombo(){
}
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