2 * Copyright (C) 2007 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.
10 package eu
.etaxonomy
.taxeditor
.propertysheet
.namerelationswizard
;
12 import java
.beans
.PropertyChangeEvent
;
13 import java
.beans
.PropertyChangeListener
;
14 import java
.util
.ArrayList
;
15 import java
.util
.List
;
17 import org
.apache
.log4j
.Logger
;
18 import org
.eclipse
.jface
.wizard
.WizardPage
;
19 import org
.eclipse
.swt
.SWT
;
20 import org
.eclipse
.swt
.custom
.CCombo
;
21 import org
.eclipse
.swt
.events
.SelectionAdapter
;
22 import org
.eclipse
.swt
.events
.SelectionEvent
;
23 import org
.eclipse
.swt
.events
.SelectionListener
;
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
.Group
;
29 import org
.eclipse
.swt
.widgets
.Label
;
31 import eu
.etaxonomy
.cdm
.model
.name
.NameRelationshipType
;
32 import eu
.etaxonomy
.taxeditor
.TaxEditorPlugin
;
33 import eu
.etaxonomy
.taxeditor
.model
.CdmUtil
;
36 * An all-in-one relation wizard page where the user chooses a related name, a
37 * relationship type, and the relation\"s directionality.
39 * Note: does not yet return relation to wizard.
45 public class ChooseRelationTypeWizardPage
extends WizardPage
{
46 private static final Logger logger
= Logger
47 .getLogger(ChooseRelationTypeWizardPage
.class);
49 private List
<NameRelationshipType
> relationTypes
;
52 private Label lblDirection
;
53 private Button btnFromRelatedToBase
;
54 private Button btnFromBaseToRelated
;
56 private boolean typeSelected
= false;
57 private boolean directionSelected
= false;
59 private SelectionListener radioSelectionListener
= new SelectionAdapter() {
60 public void widgetSelected(SelectionEvent e
) {
61 directionSelected
= true;
64 if (e
.widget
.equals(btnFromRelatedToBase
)) {
65 relationModel
.setFromName(relationModel
.getRelatedName());
66 relationModel
.setToName(relationModel
.getBaseName());
69 if (e
.widget
.equals(btnFromBaseToRelated
)) {
70 relationModel
.setFromName(relationModel
.getBaseName());
71 relationModel
.setToName(relationModel
.getRelatedName());
76 private NameRelationWizardModel relationModel
;
78 public ChooseRelationTypeWizardPage(final NameRelationWizardModel relationModel
) {
80 setTitle("Choose relationship type and direction.");
82 this.relationModel
= relationModel
;
86 relationModel
.addPropertyChangeListener(new PropertyChangeListener() {
88 public void propertyChange(PropertyChangeEvent evt
) {
89 if (evt
.getPropertyName().equals(NameRelationWizardModel
.RELATEDNAME
)) {
93 if (evt
.getPropertyName().equals(NameRelationWizardModel
.RELATIONTYPE
)) {
94 if (relationModel
.getType() != null) {
108 public void createControl(Composite parent
) {
109 Composite container
= new Composite(parent
, SWT
.NULL
);
110 container
.setLayout(new GridLayout());
112 setControl(container
);
114 relationTypes
= new ArrayList
<NameRelationshipType
>();
116 final Label lblType
= new Label(container
, SWT
.NONE
);
117 lblType
.setText("Choose relationship type:");
119 combo
= new CCombo(container
, SWT
.BORDER
);
120 combo
.setLayoutData(new GridData(SWT
.FILL
, SWT
.CENTER
, true, false));
121 for (NameRelationshipType relationType
: TaxEditorPlugin
.getDefault()
122 .getSortedNameRelationshipTypes()) {
123 relationTypes
.add(relationType
);
124 combo
.add(relationType
.getLabel());
126 combo
.setVisibleItemCount(relationTypes
.size());
128 combo
.addSelectionListener(new SelectionAdapter() {
130 public void widgetSelected(SelectionEvent e
) {
131 int typeIndex
= combo
.getSelectionIndex();
132 relationModel
.setType(relationTypes
.get(typeIndex
));
136 final Group group
= new Group(container
, SWT
.NONE
);
137 group
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
138 final GridLayout gridLayout
= new GridLayout();
139 group
.setLayout(gridLayout
);
141 lblDirection
= new Label(group
, SWT
.NONE
);
142 final GridData gd_lblDirection
= new GridData(SWT
.FILL
, SWT
.CENTER
, true, false);
143 gd_lblDirection
.heightHint
= 32;
144 gd_lblDirection
.minimumHeight
= 40;
146 .setLayoutData(gd_lblDirection
);
147 lblDirection
.setEnabled(false);
148 lblDirection
.setText("Choose relationship direction:");
150 btnFromRelatedToBase
= new Button(group
, SWT
.RADIO
);
152 .setLayoutData(new GridData(SWT
.FILL
, SWT
.CENTER
, true, false));
153 btnFromRelatedToBase
.setVisible(false);
154 btnFromRelatedToBase
.addSelectionListener(radioSelectionListener
);
156 btnFromBaseToRelated
= new Button(group
, SWT
.RADIO
);
158 .setLayoutData(new GridData(SWT
.FILL
, SWT
.CENTER
, true, false));
159 btnFromBaseToRelated
.setVisible(false);
160 btnFromBaseToRelated
.addSelectionListener(radioSelectionListener
);
161 new Label(group
, SWT
.NONE
);
165 private void setDescription() {
166 setDescription("Choose relationship type and direction for the name relation between \""
167 + CdmUtil
.getDisplayName(relationModel
.getBaseName()) + "\" and \""
168 + CdmUtil
.getDisplayName(relationModel
.getRelatedName()) + "\".");
171 private void setDirectionLabels() {
172 String strDirection1
= "\"" + CdmUtil
.getDisplayName(relationModel
.getRelatedName()) + "\" "
173 + "is \"" + combo
.getText() + "\" of " + "\""
174 + CdmUtil
.getDisplayName(relationModel
.getBaseName()) + "\"";
175 String strDirection2
= "\"" + CdmUtil
.getDisplayName(relationModel
.getBaseName()) + "\" "
176 + "is \"" + combo
.getText() + "\" of " + "\""
177 + CdmUtil
.getDisplayName(relationModel
.getRelatedName()) + "\"";
179 btnFromRelatedToBase
.setText(strDirection1
);
180 btnFromBaseToRelated
.setText(strDirection2
);
184 public boolean canFlipToNextPage() {
189 public boolean isPageComplete() {
190 return (typeSelected
&& directionSelected
);
193 private void updatePage() {
195 if (!directionSelected
) {
201 getWizard().getContainer().updateButtons();
204 private void enableDirection() {
205 setDirectionLabels();
207 lblDirection
.setEnabled(true);
208 btnFromRelatedToBase
.setEnabled(true);
209 btnFromBaseToRelated
.setEnabled(true);
211 btnFromRelatedToBase
.setVisible(true);
212 btnFromBaseToRelated
.setVisible(true);
215 private void disableDirection() {
216 lblDirection
.setEnabled(false);
217 btnFromRelatedToBase
.setEnabled(false);
218 btnFromBaseToRelated
.setEnabled(false);
220 btnFromRelatedToBase
.setSelection(false);
221 btnFromBaseToRelated
.setSelection(false);