Project

General

Profile

Download (11 KB) Statistics
| Branch: | Tag: | Revision:
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.wizard;
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(), null);
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(), null);
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, 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
}
(5-5/5)