(no commit message)
[taxeditor.git] / taxeditor-navigation / src / main / java / eu / etaxonomy / taxeditor / newWizards / NewTaxonNodeWizardPage.java
1 // $Id$
2 /**
3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
9 */
10
11 package eu.etaxonomy.taxeditor.newWizards;
12
13 import org.apache.log4j.Logger;
14 import org.eclipse.jface.viewers.IStructuredSelection;
15 import org.eclipse.jface.wizard.WizardPage;
16 import org.eclipse.swt.SWT;
17 import org.eclipse.swt.events.ModifyEvent;
18 import org.eclipse.swt.events.ModifyListener;
19 import org.eclipse.swt.events.SelectionAdapter;
20 import org.eclipse.swt.events.SelectionEvent;
21 import org.eclipse.swt.layout.GridData;
22 import org.eclipse.swt.layout.GridLayout;
23 import org.eclipse.swt.widgets.Button;
24 import org.eclipse.swt.widgets.Composite;
25 import org.eclipse.swt.widgets.Label;
26 import org.eclipse.swt.widgets.Text;
27
28 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
29 import eu.etaxonomy.cdm.model.taxon.ITreeNode;
30 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
31 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
32 import eu.etaxonomy.cdm.model.taxon.TaxonomicTree;
33 import eu.etaxonomy.taxeditor.dialogs.filteredSelection.FilteredNameSelectionDialog;
34 import eu.etaxonomy.taxeditor.dialogs.filteredSelection.FilteredTaxonNodeSelectionDialog;
35 import eu.etaxonomy.taxeditor.dialogs.filteredSelection.FilteredTaxonSelectionDialog;
36 import eu.etaxonomy.taxeditor.dialogs.filteredSelection.FilteredTaxonomicTreeSelectionDialog;
37 import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
38 import eu.etaxonomy.taxeditor.parser.ParseHandler;
39
40 /**
41 * @author n.hoffmann
42 * @created Sep 15, 2009
43 * @version 1.0
44 */
45 public class NewTaxonNodeWizardPage extends WizardPage implements ModifyListener {
46
47 private static final Logger logger = Logger
48 .getLogger(NewTaxonNodeWizardPage.class);
49
50 private static final String BUTTON_TEXT_BROWSE = "Browse";
51
52 private static final String ERROR_MESSAGE_TAXONOMIC_TREE_EMPTY = "Taxonomic Tree must not be empty";
53
54 private TaxonomicTree taxonomicTree;
55
56 private ParseHandler parseHandler;
57
58 private TaxonNode parentTaxonNode;
59
60 private TaxonBase taxonBase;
61
62 private boolean reuseExistingTaxon = false;
63
64 private TaxonNameBase taxonName;
65
66 private boolean openInEditor = true;
67
68 private Button button_openInEditor;
69
70 private Text text_parentTaxonNode;
71
72 private Text text_reuseTaxon;
73
74 private Text text_taxonName;
75
76 private Text text_taxonomicTree;
77
78 private Button button_taxonName;
79
80 private Button button_reuseTaxon;
81
82 private Button button_toggleReuseTaxon;
83
84 /**
85 * @param pageName
86 */
87 protected NewTaxonNodeWizardPage(IStructuredSelection selection) {
88 super("New Taxon");
89
90 if(selection != null && selection.size() == 1){
91 if(selection.getFirstElement() instanceof ITreeNode){
92 ITreeNode parentNode = (ITreeNode) selection.getFirstElement();
93
94 if(parentNode instanceof TaxonNode){
95 parentTaxonNode = (TaxonNode) parentNode;
96 taxonomicTree = parentTaxonNode.getTaxonomicTree();
97 }else{
98 taxonomicTree = (TaxonomicTree) parentNode;
99 }
100 }
101 }else{
102 setPageComplete(false);
103 }
104
105 }
106
107 /* (non-Javadoc)
108 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
109 */
110 public void createControl(Composite parent) {
111 Composite composite = new Composite(parent, SWT.NULL);
112
113 GridLayout layout = new GridLayout(3, false);
114 composite.setLayout(layout);
115
116 // taxonomic tree
117 Label label_taxonomicTree = new Label(composite, SWT.NULL);
118 label_taxonomicTree.setText("Taxonomic Tree");
119
120 text_taxonomicTree = new Text(composite, SWT.BORDER | SWT.SINGLE);
121 text_taxonomicTree.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
122 text_taxonomicTree.setEnabled(false);
123 text_taxonomicTree.addModifyListener(this);
124 text_taxonomicTree.setText(taxonomicTree != null ? taxonomicTree.getTitleCache() : "");
125
126 Button button_taxonomicTree = new Button(composite, SWT.PUSH);
127 button_taxonomicTree.setText(BUTTON_TEXT_BROWSE);
128 button_taxonomicTree.addSelectionListener(new TaxonomicTreeSelector());
129
130
131 // parental node
132 Label label_parentTaxonNode = new Label(composite, SWT.NULL);
133 label_parentTaxonNode.setText("Parent Taxon Node");
134
135 text_parentTaxonNode = new Text(composite, SWT.BORDER | SWT.SINGLE);
136 text_parentTaxonNode.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
137 text_parentTaxonNode.setEnabled(false);
138 text_parentTaxonNode.setText(parentTaxonNode != null ? parentTaxonNode.getTaxon().getName().getTitleCache() : "");
139
140 Button button_parentTaxonNode = new Button(composite, SWT.PUSH);
141 button_parentTaxonNode.setText(BUTTON_TEXT_BROWSE);
142 button_parentTaxonNode.addSelectionListener(new TaxonNodeSelector());
143
144 // existing taxon
145 Composite container_label_reuseTaxon = new Composite(composite, SWT.NULL);
146 container_label_reuseTaxon.setLayout(new GridLayout(2, false));
147
148 button_toggleReuseTaxon = new Button(container_label_reuseTaxon, SWT.CHECK);
149 button_toggleReuseTaxon.addSelectionListener(new ToggleReuseTaxonSelector());
150 button_toggleReuseTaxon.setSelection(reuseExistingTaxon);
151
152 Label label_reuseTaxon = new Label(container_label_reuseTaxon, SWT.NULL);
153 label_reuseTaxon.setText("Reuse Existing Taxon");
154 label_reuseTaxon.setEnabled(false);
155
156 text_reuseTaxon = new Text(composite, SWT.BORDER | SWT.SINGLE);
157 text_reuseTaxon.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
158 text_reuseTaxon.setEnabled(false);
159
160
161 button_reuseTaxon = new Button(composite, SWT.PUSH);
162 button_reuseTaxon.setText(BUTTON_TEXT_BROWSE);
163 button_reuseTaxon.addSelectionListener(new TaxonSelector());
164 button_reuseTaxon.setEnabled(false);
165
166 // name
167 Label label_taxonName = new Label(composite, SWT.NULL);
168 label_taxonName.setText("Taxon Name");
169
170 text_taxonName = new Text(composite, SWT.BORDER | SWT.SINGLE);
171 text_taxonName.addModifyListener(this);
172 text_taxonName.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
173
174 button_taxonName = new Button(composite, SWT.PUSH);
175 button_taxonName.setText(BUTTON_TEXT_BROWSE);
176 button_taxonName.addSelectionListener(new TaxonNameSelector());
177
178 // open in editor
179 Composite container_openInEditor = new Composite(composite, SWT.NULL);
180 container_openInEditor.setLayout(new GridLayout(2, false));
181 button_openInEditor = new Button(container_openInEditor, SWT.CHECK);
182 button_openInEditor.addSelectionListener(new OpenInEditorSelector());
183 button_openInEditor.setSelection(openInEditor);
184
185 Label label_openInEditor = new Label(container_openInEditor, SWT.NULL);
186 label_openInEditor.setText("Open Taxon in Editor");
187
188 // initialize the parse handler
189 parseHandler = ParseHandler.NewInstance(text_taxonName, taxonName);
190
191 // set focus to name field
192 text_taxonName.setFocus();
193
194 setControl(composite);
195 }
196
197 /**
198 * @return the taxon
199 */
200 public TaxonBase getTaxon() {
201 return taxonBase;
202 }
203
204 /**
205 * @return the name
206 */
207 public TaxonNameBase getTaxonName() {
208 return taxonName;
209 }
210
211 /**
212 * @return
213 */
214 public ITreeNode getParentNode() {
215 return parentTaxonNode != null ? parentTaxonNode : taxonomicTree;
216 }
217
218 public boolean openInEditor(){
219 return openInEditor;
220 }
221
222 private void updatePage() {
223 getWizard().getContainer().updateButtons();
224 }
225
226 /*
227 * SELECTION ADAPTERS
228 */
229
230 private class TaxonomicTreeSelector extends SelectionAdapter{
231 /* (non-Javadoc)
232 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
233 */
234 @Override
235 public void widgetSelected(SelectionEvent e) {
236 super.widgetSelected(e);
237 taxonomicTree = FilteredTaxonomicTreeSelectionDialog.selectTaxonomicTree(NavigationUtil.getShell());
238 if (taxonomicTree != null) {
239 text_taxonomicTree.setText(taxonomicTree.getTitleCache());
240 text_parentTaxonNode.setText("");
241 parentTaxonNode = null;
242 }
243 setPageComplete(true);
244 }
245 }
246
247 private class TaxonNodeSelector extends SelectionAdapter{
248 /* (non-Javadoc)
249 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
250 */
251 @Override
252 public void widgetSelected(SelectionEvent e) {
253 super.widgetSelected(e);
254 parentTaxonNode = FilteredTaxonNodeSelectionDialog.selectTaxonNode(NavigationUtil.getShell(), "Select parent", null, null);
255 if (parentTaxonNode != null) {
256 text_parentTaxonNode.setText(parentTaxonNode.getTaxon().getTitleCache());
257 text_taxonomicTree.setText(parentTaxonNode.getTaxonomicTree().getTitleCache());
258
259
260 }
261 setPageComplete(true);
262 }
263
264 }
265
266 private class TaxonSelector extends SelectionAdapter{
267 /* (non-Javadoc)
268 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
269 */
270 @Override
271 public void widgetSelected(SelectionEvent e) {
272 super.widgetSelected(e);
273 taxonBase = FilteredTaxonSelectionDialog.selectTaxon(NavigationUtil.getShell());
274 if (taxonBase != null) {
275 text_reuseTaxon.setText(taxonBase.getTitleCache());
276 }
277 }
278 }
279
280 private class TaxonNameSelector extends SelectionAdapter{
281 /* (non-Javadoc)
282 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
283 */
284 @Override
285 public void widgetSelected(SelectionEvent e) {
286 super.widgetSelected(e);
287 taxonName = FilteredNameSelectionDialog.selectName(NavigationUtil.getShell(), null);
288 if (taxonName != null) {
289 text_taxonName.setText(taxonName.getTitleCache());
290 }
291 }
292 }
293
294 private class OpenInEditorSelector extends SelectionAdapter{
295 /* (non-Javadoc)
296 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
297 */
298 @Override
299 public void widgetSelected(SelectionEvent e) {
300 super.widgetSelected(e);
301 openInEditor = button_openInEditor.getSelection();
302 }
303 }
304
305 private class ToggleReuseTaxonSelector extends SelectionAdapter{
306 /* (non-Javadoc)
307 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
308 */
309 @Override
310 public void widgetSelected(SelectionEvent e) {
311 super.widgetSelected(e);
312
313 if(button_toggleReuseTaxon.getSelection()){
314 // enable reuse Taxon
315 text_reuseTaxon.setEnabled(true);
316 button_reuseTaxon.setEnabled(true);
317 // disable name
318 text_taxonName.setEnabled(false);
319 button_taxonName.setEnabled(false);
320 }else{
321 // disable reuse Taxon
322 text_reuseTaxon.setEnabled(false);
323 button_reuseTaxon.setEnabled(false);
324 // enable name
325 text_taxonName.setEnabled(true);
326 button_taxonName.setEnabled(true);
327 }
328
329 }
330 }
331
332 /* (non-Javadoc)
333 * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
334 */
335 public void modifyText(ModifyEvent e) {
336 if (e.getSource().equals(text_taxonomicTree)) {
337 if (! "".equals(text_taxonomicTree.getText())) {
338 setErrorMessage(null);
339 }
340 }
341
342 if (e.getSource().equals(text_taxonName)) {
343 // Set error message if taxonomic tree was not chosen
344 if ("".equals(text_taxonomicTree.getText())) {
345 setErrorMessage(ERROR_MESSAGE_TAXONOMIC_TREE_EMPTY);
346 }
347
348 taxonName = parseHandler.parse();
349 }
350
351 updatePage();
352 }
353 }