51893dcecb29d5a97c62b6c954bfec245a84f1ca
[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 TaxonomicTree taxonomicTree;
53
54 private ParseHandler parseHandler;
55
56 private TaxonNode parentTaxonNode;
57
58 private TaxonBase taxonBase;
59
60 private boolean reuseExistingTaxon = false;
61
62 private TaxonNameBase taxonName;
63
64 private boolean openInEditor = true;
65
66 private Button button_openInEditor;
67
68 private Text text_parentTaxonNode;
69
70 private Text text_reuseTaxon;
71
72 private Text text_taxonName;
73
74 private Text text_taxonomicTree;
75
76 private Button button_taxonName;
77
78 private Button button_reuseTaxon;
79
80 private Button button_toggleReuseTaxon;
81
82 /**
83 * @param pageName
84 */
85 protected NewTaxonNodeWizardPage(IStructuredSelection selection) {
86 super("New Taxon Node");
87
88 if(selection != null && selection.size() == 1){
89 if(selection.getFirstElement() instanceof ITreeNode){
90 ITreeNode parentNode = (ITreeNode) selection.getFirstElement();
91
92 if(parentNode instanceof TaxonNode){
93 parentTaxonNode = (TaxonNode) parentNode;
94 taxonomicTree = parentTaxonNode.getTaxonomicTree();
95 }else{
96 taxonomicTree = (TaxonomicTree) parentNode;
97 }
98 }
99 }else{
100 setPageComplete(false);
101 }
102
103 }
104
105 /* (non-Javadoc)
106 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
107 */
108 public void createControl(Composite parent) {
109 Composite composite = new Composite(parent, SWT.NULL);
110
111 GridLayout layout = new GridLayout(3, false);
112 composite.setLayout(layout);
113
114 // taxonomic tree
115 Label label_taxonomicTree = new Label(composite, SWT.NULL);
116 label_taxonomicTree.setText("Taxonomic Tree");
117
118 text_taxonomicTree = new Text(composite, SWT.BORDER | SWT.SINGLE);
119 text_taxonomicTree.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
120 text_taxonomicTree.setEnabled(false);
121 text_taxonomicTree.addModifyListener(this);
122 text_taxonomicTree.setText(taxonomicTree != null ? taxonomicTree.getTitleCache() : "");
123
124 Button button_taxonomicTree = new Button(composite, SWT.PUSH);
125 button_taxonomicTree.setText(BUTTON_TEXT_BROWSE);
126 button_taxonomicTree.addSelectionListener(new TaxonomicTreeSelector());
127
128
129 // parental node
130 Label label_parentTaxonNode = new Label(composite, SWT.NULL);
131 label_parentTaxonNode.setText("Parent Taxon Node");
132
133 text_parentTaxonNode = new Text(composite, SWT.BORDER | SWT.SINGLE);
134 text_parentTaxonNode.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
135 text_parentTaxonNode.setEnabled(false);
136 text_parentTaxonNode.setText(parentTaxonNode != null ? parentTaxonNode.getTaxon().getName().getTitleCache() : "");
137
138 Button button_parentTaxonNode = new Button(composite, SWT.PUSH);
139 button_parentTaxonNode.setText(BUTTON_TEXT_BROWSE);
140 button_parentTaxonNode.addSelectionListener(new TaxonNodeSelector());
141
142 // existing taxon
143 Composite container_label_reuseTaxon = new Composite(composite, SWT.NULL);
144 container_label_reuseTaxon.setLayout(new GridLayout(2, false));
145
146 button_toggleReuseTaxon = new Button(container_label_reuseTaxon, SWT.CHECK);
147 button_toggleReuseTaxon.addSelectionListener(new ToggleReuseTaxonSelector());
148 button_toggleReuseTaxon.setSelection(reuseExistingTaxon);
149
150 Label label_reuseTaxon = new Label(container_label_reuseTaxon, SWT.NULL);
151 label_reuseTaxon.setText("Reuse Existing Taxon");
152 label_reuseTaxon.setEnabled(false);
153
154 text_reuseTaxon = new Text(composite, SWT.BORDER | SWT.SINGLE);
155 text_reuseTaxon.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
156 text_reuseTaxon.setEnabled(false);
157
158
159 button_reuseTaxon = new Button(composite, SWT.PUSH);
160 button_reuseTaxon.setText(BUTTON_TEXT_BROWSE);
161 button_reuseTaxon.addSelectionListener(new TaxonSelector());
162 button_reuseTaxon.setEnabled(false);
163
164 // name
165 Label label_taxonName = new Label(composite, SWT.NULL);
166 label_taxonName.setText("Taxon Name");
167
168 text_taxonName = new Text(composite, SWT.BORDER | SWT.SINGLE);
169 text_taxonName.addModifyListener(this);
170 text_taxonName.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
171
172 button_taxonName = new Button(composite, SWT.PUSH);
173 button_taxonName.setText(BUTTON_TEXT_BROWSE);
174 button_taxonName.addSelectionListener(new TaxonNameSelector());
175
176 // open in editor
177 Composite container_openInEditor = new Composite(composite, SWT.NULL);
178 container_openInEditor.setLayout(new GridLayout(2, false));
179 button_openInEditor = new Button(container_openInEditor, SWT.CHECK);
180 button_openInEditor.addSelectionListener(new OpenInEditorSelector());
181 button_openInEditor.setSelection(openInEditor);
182
183 Label label_openInEditor = new Label(container_openInEditor, SWT.NULL);
184 label_openInEditor.setText("Open Taxon in Editor");
185
186 // initialize the parse handler
187 parseHandler = ParseHandler.NewInstance(text_taxonName, taxonName);
188
189 // set focus to name field
190 text_taxonName.setFocus();
191
192 setControl(composite);
193 }
194
195 /**
196 * @return the taxon
197 */
198 public TaxonBase getTaxon() {
199 return taxonBase;
200 }
201
202 /**
203 * @return the name
204 */
205 public TaxonNameBase getTaxonName() {
206 return taxonName;
207 }
208
209 /**
210 * @return
211 */
212 public ITreeNode getParentNode() {
213 return parentTaxonNode != null ? parentTaxonNode : taxonomicTree;
214 }
215
216 public boolean openInEditor(){
217 return openInEditor;
218 }
219
220 private void updatePage() {
221 getWizard().getContainer().updateButtons();
222 }
223
224 /*
225 * SELECTION ADAPTERS
226 */
227
228 private class TaxonomicTreeSelector extends SelectionAdapter{
229 /* (non-Javadoc)
230 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
231 */
232 @Override
233 public void widgetSelected(SelectionEvent e) {
234 super.widgetSelected(e);
235 taxonomicTree = FilteredTaxonomicTreeSelectionDialog.selectTaxonomicTree(NavigationUtil.getShell());
236 if (taxonomicTree != null) {
237 text_taxonomicTree.setText(taxonomicTree.getTitleCache());
238 text_parentTaxonNode.setText("");
239 parentTaxonNode = null;
240 }
241 setPageComplete(true);
242 }
243 }
244
245 private class TaxonNodeSelector extends SelectionAdapter{
246 /* (non-Javadoc)
247 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
248 */
249 @Override
250 public void widgetSelected(SelectionEvent e) {
251 super.widgetSelected(e);
252 parentTaxonNode = FilteredTaxonNodeSelectionDialog.selectTaxonNode(NavigationUtil.getShell(), "Select parent", null, null);
253 if (parentTaxonNode != null) {
254 text_parentTaxonNode.setText(parentTaxonNode.getTaxon().getTitleCache());
255 text_taxonomicTree.setText(parentTaxonNode.getTaxonomicTree().getTitleCache());
256 }
257 text_taxonomicTree.setText(parentTaxonNode.getTaxonomicTree().getTitleCache());
258 setPageComplete(true);
259 }
260
261 }
262
263 private class TaxonSelector extends SelectionAdapter{
264 /* (non-Javadoc)
265 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
266 */
267 @Override
268 public void widgetSelected(SelectionEvent e) {
269 super.widgetSelected(e);
270 taxonBase = FilteredTaxonSelectionDialog.selectTaxon(NavigationUtil.getShell());
271 if (taxonBase != null) {
272 text_reuseTaxon.setText(taxonBase.getTitleCache());
273 }
274 }
275 }
276
277 private class TaxonNameSelector extends SelectionAdapter{
278 /* (non-Javadoc)
279 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
280 */
281 @Override
282 public void widgetSelected(SelectionEvent e) {
283 super.widgetSelected(e);
284 taxonName = FilteredNameSelectionDialog.selectName(NavigationUtil.getShell(), null);
285 if (taxonName != null) {
286 text_taxonName.setText(taxonName.getTitleCache());
287 }
288 }
289 }
290
291 private class OpenInEditorSelector extends SelectionAdapter{
292 /* (non-Javadoc)
293 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
294 */
295 @Override
296 public void widgetSelected(SelectionEvent e) {
297 super.widgetSelected(e);
298 openInEditor = button_openInEditor.getSelection();
299 }
300 }
301
302 private class ToggleReuseTaxonSelector extends SelectionAdapter{
303 /* (non-Javadoc)
304 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
305 */
306 @Override
307 public void widgetSelected(SelectionEvent e) {
308 super.widgetSelected(e);
309
310 if(button_toggleReuseTaxon.getSelection()){
311 // enable reuse Taxon
312 text_reuseTaxon.setEnabled(true);
313 button_reuseTaxon.setEnabled(true);
314 // disable name
315 text_taxonName.setEnabled(false);
316 button_taxonName.setEnabled(false);
317 }else{
318 // disable reuse Taxon
319 text_reuseTaxon.setEnabled(false);
320 button_reuseTaxon.setEnabled(false);
321 // enable name
322 text_taxonName.setEnabled(true);
323 button_taxonName.setEnabled(true);
324 }
325
326 }
327 }
328
329 /* (non-Javadoc)
330 * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
331 */
332 public void modifyText(ModifyEvent e) {
333 if (e.getSource().equals(text_taxonName)) {
334 taxonName = parseHandler.parse();
335 }
336 updatePage();
337 }
338 }