2 * Copyright (C) 2019 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
9 package eu
.etaxonomy
.taxeditor
.ui
.section
.feature
;
11 import java
.util
.ArrayList
;
12 import java
.util
.Collection
;
13 import java
.util
.Collections
;
14 import java
.util
.List
;
16 import java
.util
.UUID
;
18 import org
.eclipse
.core
.runtime
.IStatus
;
19 import org
.eclipse
.jface
.util
.PropertyChangeEvent
;
20 import org
.eclipse
.jface
.wizard
.WizardDialog
;
21 import org
.eclipse
.swt
.SWT
;
22 import org
.eclipse
.swt
.events
.SelectionAdapter
;
23 import org
.eclipse
.swt
.events
.SelectionEvent
;
24 import org
.eclipse
.swt
.layout
.GridData
;
25 import org
.eclipse
.swt
.layout
.GridLayout
;
26 import org
.eclipse
.swt
.widgets
.Button
;
27 import org
.eclipse
.swt
.widgets
.Composite
;
28 import org
.eclipse
.swt
.widgets
.Label
;
29 import org
.eclipse
.swt
.widgets
.Text
;
31 import eu
.etaxonomy
.cdm
.api
.service
.ITermNodeService
;
32 import eu
.etaxonomy
.cdm
.model
.description
.Feature
;
33 import eu
.etaxonomy
.cdm
.model
.description
.FeatureState
;
34 import eu
.etaxonomy
.cdm
.model
.description
.State
;
35 import eu
.etaxonomy
.cdm
.model
.term
.DefinedTermBase
;
36 import eu
.etaxonomy
.cdm
.model
.term
.TermNode
;
37 import eu
.etaxonomy
.cdm
.model
.term
.TermVocabulary
;
38 import eu
.etaxonomy
.cdm
.persistence
.dto
.TermNodeDto
;
39 import eu
.etaxonomy
.cdm
.persistence
.dto
.TermVocabularyDto
;
40 import eu
.etaxonomy
.taxeditor
.featuretree
.AvailableFeaturesWizard
;
41 import eu
.etaxonomy
.taxeditor
.model
.ImageResources
;
42 import eu
.etaxonomy
.taxeditor
.store
.CdmStore
;
43 import eu
.etaxonomy
.taxeditor
.ui
.AbstractEntityCollectionElementWizardPage
;
44 import eu
.etaxonomy
.taxeditor
.ui
.combo
.term
.TermComboElement
;
45 import eu
.etaxonomy
.taxeditor
.ui
.element
.CdmFormFactory
;
46 import eu
.etaxonomy
.taxeditor
.ui
.element
.LayoutConstants
;
53 public class FeatureStateWizardPage
extends AbstractEntityCollectionElementWizardPage
{
55 private TermComboElement
<Feature
> comboFeature
;
56 private Button btnSelectState
;
58 private TermNodeDto
<?
extends Feature
> termNode
;
59 private State selectedState
= null;
60 private List
<TermVocabularyDto
> stateVocabulariesDtos
= new ArrayList
<>();
63 protected FeatureStateWizardPage(String pageName
, TermNodeDto
<?
extends Feature
> termNode
, CdmFormFactory formFactory
) {
64 super(pageName
, formFactory
);
65 this.termNode
= termNode
;
66 setTitle("Create Feature State");
67 setDescription("Select Feature and State");
71 public void createControl(Composite parent
) {
72 super.createControl(parent
);
74 comboFeature
= formFactory
.createDefinedTermComboElement(Collections
.EMPTY_LIST
, rootElement
, "Parent Feature", null, SWT
.NONE
);
76 Label label
= new Label(rootElement
.getLayoutComposite(), SWT
.NONE
);
77 label
.setText("State");
78 Composite buttonTextComposite
= new Composite(rootElement
.getLayoutComposite(), SWT
.NONE
);
79 buttonTextComposite
.setLayoutData(LayoutConstants
.FILL(1, 1));
80 buttonTextComposite
.setLayout(new GridLayout(2, false));
81 text
= new Text(buttonTextComposite
, SWT
.NONE
);
82 text
.setEditable(false);
83 text
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, false));
84 btnSelectState
= new Button(buttonTextComposite
, SWT
.PUSH
);
85 btnSelectState
.setImage(ImageResources
.getImage(ImageResources
.BROWSE_ICON
));
86 btnSelectState
.addSelectionListener(new SelectionAdapter() {
89 public void widgetSelected(SelectionEvent e
) {
90 AvailableFeaturesWizard wizard
= new AvailableFeaturesWizard(stateVocabulariesDtos
);
91 wizard
.setSingleSelection(true);
92 WizardDialog dialog
= new WizardDialog(getShell(), wizard
);
94 if (dialog
.open() == IStatus
.OK
) {
95 Collection
<DefinedTermBase
> additionalTerms
= wizard
.getAdditionalFeatures();
96 if(additionalTerms
.size()==1){
97 selectedState
= (State
) additionalTerms
.iterator().next();
98 text
.setText(selectedState
.getLabel());
99 FeatureStateWizardPage
.this.getWizard().getContainer().updateButtons();
105 formFactory
.addPropertyChangeListener(this);
107 updateFeatureCombo();
110 FeatureState
getFeatureState(){
111 return FeatureState
.NewInstance(comboFeature
.getSelection(), selectedState
);
114 private void updateFeatureCombo(){
115 List
<Feature
> features
= new ArrayList
<>();
116 UUID parentUuid
= termNode
.getParentUuid();
117 if (parentUuid
!= null){
118 TermNode
<?
extends Feature
> parent
= CdmStore
.getService(ITermNodeService
.class).load(parentUuid
);
120 Feature parentTerm
= parent
.getTerm();
122 && parentTerm
.isSupportsCategoricalData()
123 && !parentTerm
.getSupportedCategoricalEnumerations().isEmpty()){
124 features
.add(parentTerm
);
126 parent
= parent
.getParent();
129 comboFeature
.setTerms(features
);
130 if(features
.size()==1){
131 Feature feature
= features
.get(0);
132 comboFeature
.setSelection(feature
);
133 updateStateCombo(feature
);
134 comboFeature
.removeEmptyElement();
138 private void updateStateCombo(Feature feature
){
139 stateVocabulariesDtos
.clear();
141 selectedState
= null;
143 Set
<TermVocabulary
<State
>> stateVocabularies
= feature
.getSupportedCategoricalEnumerations();
144 for (TermVocabulary
<State
> termVocabulary
: stateVocabularies
) {
145 stateVocabulariesDtos
.add(new TermVocabularyDto(termVocabulary
.getUuid(), termVocabulary
.getRepresentations(), termVocabulary
.getTermType(), termVocabulary
.getTitleCache(), termVocabulary
.isAllowDuplicates(), termVocabulary
.isOrderRelevant(), termVocabulary
.isFlat()));
151 public boolean isPageComplete() {
152 return comboFeature
.getSelection()!=null && selectedState
!=null;
156 public void propertyChange(PropertyChangeEvent event
) {
157 if(event
.getSource()==comboFeature
){
158 Feature feature
= comboFeature
.getSelection();
159 updateStateCombo(feature
);
160 comboFeature
.removeEmptyElement();
162 getWizard().getContainer().updateButtons();