p2izing the editor
[taxeditor.git] / eclipseprojects / eu.etaxonomy.taxeditor / src / eu / etaxonomy / taxeditor / propertysheet / namerelations / wizard / ChooseRelationTypeWizardPage.java
1 /**
2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
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.
8 */
9
10 package eu.etaxonomy.taxeditor.propertysheet.namerelations.wizard;
11
12 import java.beans.PropertyChangeEvent;
13 import java.beans.PropertyChangeListener;
14 import java.util.ArrayList;
15 import java.util.List;
16
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;
30
31 import eu.etaxonomy.cdm.model.name.NameRelationshipType;
32 import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;
33 import eu.etaxonomy.taxeditor.model.CdmUtil;
34
35 /**
36 * An all-in-one relation wizard page where the user chooses a related name, a
37 * relationship type, and the relation\"s directionality.
38 *
39 * Note: does not yet return relation to wizard.
40 *
41 * @author p.ciardelli
42 * @created 04.06.2008
43 * @version 1.0
44 */
45 public class ChooseRelationTypeWizardPage extends WizardPage {
46 private static final Logger logger = Logger
47 .getLogger(ChooseRelationTypeWizardPage.class);
48
49 private List<NameRelationshipType> relationTypes;
50
51 private CCombo combo;
52 private Label lblDirection;
53 private Button btnFromRelatedToBase;
54 private Button btnFromBaseToRelated;
55
56 private boolean typeSelected = false;
57 private boolean directionSelected = false;
58
59 private SelectionListener radioSelectionListener = new SelectionAdapter() {
60 public void widgetSelected(SelectionEvent e) {
61 directionSelected = true;
62 updatePage();
63
64 if (e.widget.equals(btnFromRelatedToBase)) {
65 relationModel.setFromName(relationModel.getRelatedName());
66 relationModel.setToName(relationModel.getBaseName());
67 }
68
69 if (e.widget.equals(btnFromBaseToRelated)) {
70 relationModel.setFromName(relationModel.getBaseName());
71 relationModel.setToName(relationModel.getRelatedName());
72 }
73 }
74 };
75
76 private NameRelationWizardModel relationModel;
77
78 public ChooseRelationTypeWizardPage(final NameRelationWizardModel relationModel) {
79 super("");
80 setTitle("Choose relationship type and direction.");
81
82 this.relationModel = relationModel;
83
84 setDescription();
85
86 relationModel.addPropertyChangeListener(new PropertyChangeListener() {
87 public void propertyChange(PropertyChangeEvent evt) {
88 if (evt.getPropertyName().equals(NameRelationWizardModel.RELATEDNAME)) {
89 setDescription();
90 setDirectionLabels();
91 }
92 if (evt.getPropertyName().equals(NameRelationWizardModel.RELATIONTYPE)) {
93 if (relationModel.getType() != null) {
94 typeSelected = true;
95 enableDirection();
96 } else {
97 typeSelected = false;
98 disableDirection();
99 }
100 updatePage();
101 }
102 }
103 });
104 }
105
106 public void createControl(Composite parent) {
107 Composite container = new Composite(parent, SWT.NULL);
108 container.setLayout(new GridLayout());
109
110 setControl(container);
111
112 // Init relation type array
113 relationTypes = new ArrayList<NameRelationshipType>();
114
115 //
116 final Label lblType = new Label(container, SWT.NONE);
117 lblType.setText("Choose relationship type:");
118
119 // Create relation type dropdown
120 combo = new CCombo(container, SWT.BORDER);
121 combo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
122 for (NameRelationshipType relationType :
123 CdmSessionDataRepository.getDefault().getNameRelationshipTypes()) {
124
125 relationTypes.add(relationType);
126
127 String label = relationType.getLabel();
128 if (relationModel.isZoological() &&
129 relationType.equals(NameRelationshipType.BASIONYM())) {
130 label = "original combination for";
131 }
132 // label += " - " + relationType.getInverseLabel();
133 combo.add(label);
134 }
135 combo.setVisibleItemCount(relationTypes.size());
136
137 combo.addSelectionListener(new SelectionAdapter() {
138 @Override
139 public void widgetSelected(SelectionEvent e) {
140 int typeIndex = combo.getSelectionIndex();
141 relationModel.setType(relationTypes.get(typeIndex));
142 }
143 });
144
145 final Group group = new Group(container, SWT.NONE);
146 group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
147 final GridLayout gridLayout = new GridLayout();
148 group.setLayout(gridLayout);
149
150 lblDirection = new Label(group, SWT.NONE);
151 final GridData gd_lblDirection = new GridData(SWT.FILL, SWT.CENTER, true, false);
152 gd_lblDirection.heightHint = 32;
153 gd_lblDirection.minimumHeight = 40;
154 lblDirection
155 .setLayoutData(gd_lblDirection);
156 lblDirection.setEnabled(false);
157 lblDirection.setText("Choose relationship direction:");
158
159 btnFromRelatedToBase = new Button(group, SWT.RADIO);
160 btnFromRelatedToBase
161 .setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
162 btnFromRelatedToBase.setVisible(false);
163 btnFromRelatedToBase.addSelectionListener(radioSelectionListener);
164
165 btnFromBaseToRelated = new Button(group, SWT.RADIO);
166 btnFromBaseToRelated
167 .setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
168 btnFromBaseToRelated.setVisible(false);
169 btnFromBaseToRelated.addSelectionListener(radioSelectionListener);
170 new Label(group, SWT.NONE);
171
172 }
173
174 private void setDescription() {
175 setDescription("Choose relationship type and direction for the name relation between \""
176 + CdmUtil.getDisplayName(relationModel.getBaseName()) + "\" and \""
177 + CdmUtil.getDisplayName(relationModel.getRelatedName()) + "\".");
178 }
179
180 private void setDirectionLabels() {
181 String strDirection1 = "\"" + CdmUtil.getDisplayName(relationModel.getRelatedName()) + "\" "
182 + "is " + combo.getText() + " " + "\""
183 + CdmUtil.getDisplayName(relationModel.getBaseName()) + "\"";
184 String strDirection2 = "\"" + CdmUtil.getDisplayName(relationModel.getBaseName()) + "\" "
185 + "is " + combo.getText() + " " + "\""
186 + CdmUtil.getDisplayName(relationModel.getRelatedName()) + "\"";
187
188 btnFromRelatedToBase.setText(strDirection1);
189 btnFromBaseToRelated.setText(strDirection2);
190 }
191
192 @Override
193 public boolean canFlipToNextPage() {
194 // Last page
195 return false;
196 }
197
198 public boolean isPageComplete() {
199 return (typeSelected && directionSelected);
200 }
201
202 private void updatePage() {
203 if (typeSelected) {
204 if (!directionSelected) {
205 enableDirection();
206 }
207 } else {
208 disableDirection();
209 }
210 getWizard().getContainer().updateButtons();
211 }
212
213 private void enableDirection() {
214 setDirectionLabels();
215
216 lblDirection.setEnabled(true);
217 btnFromRelatedToBase.setEnabled(true);
218 btnFromBaseToRelated.setEnabled(true);
219
220 btnFromRelatedToBase.setVisible(true);
221 btnFromBaseToRelated.setVisible(true);
222 }
223
224 private void disableDirection() {
225 lblDirection.setEnabled(false);
226 btnFromRelatedToBase.setEnabled(false);
227 btnFromBaseToRelated.setEnabled(false);
228
229 btnFromRelatedToBase.setSelection(false);
230 btnFromBaseToRelated.setSelection(false);
231 }
232 }