Cleaning up SVN mess from package re-org
[taxeditor.git] / eclipseprojects / eu.etaxonomy.taxeditor / src / eu / etaxonomy / taxeditor / propertysheet / namerelationswizard / 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.namerelationswizard;
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.TaxEditorPlugin;
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 @Override
88 public void propertyChange(PropertyChangeEvent evt) {
89 if (evt.getPropertyName().equals(NameRelationWizardModel.RELATEDNAME)) {
90 setDescription();
91 setDirectionLabels();
92 }
93 if (evt.getPropertyName().equals(NameRelationWizardModel.RELATIONTYPE)) {
94 if (relationModel.getType() != null) {
95 typeSelected = true;
96 enableDirection();
97 } else {
98 typeSelected = false;
99 disableDirection();
100 }
101 updatePage();
102 }
103 }
104 });
105 }
106
107 @Override
108 public void createControl(Composite parent) {
109 Composite container = new Composite(parent, SWT.NULL);
110 container.setLayout(new GridLayout());
111
112 setControl(container);
113
114 relationTypes = new ArrayList<NameRelationshipType>();
115
116 final Label lblType = new Label(container, SWT.NONE);
117 lblType.setText("Choose relationship type:");
118
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());
125 }
126 combo.setVisibleItemCount(relationTypes.size());
127
128 combo.addSelectionListener(new SelectionAdapter() {
129 @Override
130 public void widgetSelected(SelectionEvent e) {
131 int typeIndex = combo.getSelectionIndex();
132 relationModel.setType(relationTypes.get(typeIndex));
133 }
134 });
135
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);
140
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;
145 lblDirection
146 .setLayoutData(gd_lblDirection);
147 lblDirection.setEnabled(false);
148 lblDirection.setText("Choose relationship direction:");
149
150 btnFromRelatedToBase = new Button(group, SWT.RADIO);
151 btnFromRelatedToBase
152 .setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
153 btnFromRelatedToBase.setVisible(false);
154 btnFromRelatedToBase.addSelectionListener(radioSelectionListener);
155
156 btnFromBaseToRelated = new Button(group, SWT.RADIO);
157 btnFromBaseToRelated
158 .setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
159 btnFromBaseToRelated.setVisible(false);
160 btnFromBaseToRelated.addSelectionListener(radioSelectionListener);
161 new Label(group, SWT.NONE);
162
163 }
164
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()) + "\".");
169 }
170
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()) + "\"";
178
179 btnFromRelatedToBase.setText(strDirection1);
180 btnFromBaseToRelated.setText(strDirection2);
181 }
182
183 @Override
184 public boolean canFlipToNextPage() {
185 // Last page
186 return false;
187 }
188
189 public boolean isPageComplete() {
190 return (typeSelected && directionSelected);
191 }
192
193 private void updatePage() {
194 if (typeSelected) {
195 if (!directionSelected) {
196 enableDirection();
197 }
198 } else {
199 disableDirection();
200 }
201 getWizard().getContainer().updateButtons();
202 }
203
204 private void enableDirection() {
205 setDirectionLabels();
206
207 lblDirection.setEnabled(true);
208 btnFromRelatedToBase.setEnabled(true);
209 btnFromBaseToRelated.setEnabled(true);
210
211 btnFromRelatedToBase.setVisible(true);
212 btnFromBaseToRelated.setVisible(true);
213 }
214
215 private void disableDirection() {
216 lblDirection.setEnabled(false);
217 btnFromRelatedToBase.setEnabled(false);
218 btnFromBaseToRelated.setEnabled(false);
219
220 btnFromRelatedToBase.setSelection(false);
221 btnFromBaseToRelated.setSelection(false);
222 }
223 }