3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
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.
11 package eu
.etaxonomy
.taxeditor
.newWizards
;
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
;
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
;
42 * @created Sep 15, 2009
45 public class NewTaxonNodeWizardPage
extends WizardPage
implements ModifyListener
{
47 private static final Logger logger
= Logger
48 .getLogger(NewTaxonNodeWizardPage
.class);
50 private static final String BUTTON_TEXT_BROWSE
= "Browse";
52 private static final String ERROR_MESSAGE_TAXONOMIC_TREE_EMPTY
= "Taxonomic Tree must not be empty";
54 private TaxonomicTree taxonomicTree
;
56 private ParseHandler parseHandler
;
58 private TaxonNode parentTaxonNode
;
60 private TaxonBase taxonBase
;
62 private boolean reuseExistingTaxon
= false;
64 private TaxonNameBase taxonName
;
66 private boolean openInEditor
= true;
68 private Button button_openInEditor
;
70 private Text text_parentTaxonNode
;
72 private Text text_reuseTaxon
;
74 private Text text_taxonName
;
76 private Text text_taxonomicTree
;
78 private Button button_taxonName
;
80 private Button button_reuseTaxon
;
82 private Button button_toggleReuseTaxon
;
87 protected NewTaxonNodeWizardPage(IStructuredSelection selection
) {
90 if(selection
!= null && selection
.size() == 1){
91 if(selection
.getFirstElement() instanceof ITreeNode
){
92 ITreeNode parentNode
= (ITreeNode
) selection
.getFirstElement();
94 if(parentNode
instanceof TaxonNode
){
95 parentTaxonNode
= (TaxonNode
) parentNode
;
96 taxonomicTree
= parentTaxonNode
.getTaxonomicTree();
98 taxonomicTree
= (TaxonomicTree
) parentNode
;
102 setPageComplete(false);
108 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
110 public void createControl(Composite parent
) {
111 Composite composite
= new Composite(parent
, SWT
.NULL
);
113 GridLayout layout
= new GridLayout(3, false);
114 composite
.setLayout(layout
);
117 Label label_taxonomicTree
= new Label(composite
, SWT
.NULL
);
118 label_taxonomicTree
.setText("Taxonomic Tree");
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() : "");
126 Button button_taxonomicTree
= new Button(composite
, SWT
.PUSH
);
127 button_taxonomicTree
.setText(BUTTON_TEXT_BROWSE
);
128 button_taxonomicTree
.addSelectionListener(new TaxonomicTreeSelector());
132 Label label_parentTaxonNode
= new Label(composite
, SWT
.NULL
);
133 label_parentTaxonNode
.setText("Parent Taxon Node");
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() : "");
140 Button button_parentTaxonNode
= new Button(composite
, SWT
.PUSH
);
141 button_parentTaxonNode
.setText(BUTTON_TEXT_BROWSE
);
142 button_parentTaxonNode
.addSelectionListener(new TaxonNodeSelector());
145 Composite container_label_reuseTaxon
= new Composite(composite
, SWT
.NULL
);
146 container_label_reuseTaxon
.setLayout(new GridLayout(2, false));
148 button_toggleReuseTaxon
= new Button(container_label_reuseTaxon
, SWT
.CHECK
);
149 button_toggleReuseTaxon
.addSelectionListener(new ToggleReuseTaxonSelector());
150 button_toggleReuseTaxon
.setSelection(reuseExistingTaxon
);
152 Label label_reuseTaxon
= new Label(container_label_reuseTaxon
, SWT
.NULL
);
153 label_reuseTaxon
.setText("Reuse Existing Taxon");
154 label_reuseTaxon
.setEnabled(false);
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);
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);
167 Label label_taxonName
= new Label(composite
, SWT
.NULL
);
168 label_taxonName
.setText("Taxon Name");
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));
174 button_taxonName
= new Button(composite
, SWT
.PUSH
);
175 button_taxonName
.setText(BUTTON_TEXT_BROWSE
);
176 button_taxonName
.addSelectionListener(new TaxonNameSelector());
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
);
185 Label label_openInEditor
= new Label(container_openInEditor
, SWT
.NULL
);
186 label_openInEditor
.setText("Open Taxon in Editor");
188 // initialize the parse handler
189 parseHandler
= ParseHandler
.NewInstance(text_taxonName
, taxonName
);
191 // set focus to name field
192 text_taxonName
.setFocus();
194 setControl(composite
);
200 public TaxonBase
getTaxon() {
207 public TaxonNameBase
getTaxonName() {
214 public ITreeNode
getParentNode() {
215 return parentTaxonNode
!= null ? parentTaxonNode
: taxonomicTree
;
218 public boolean openInEditor(){
222 private void updatePage() {
223 getWizard().getContainer().updateButtons();
230 private class TaxonomicTreeSelector
extends SelectionAdapter
{
232 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
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;
243 setPageComplete(true);
247 private class TaxonNodeSelector
extends SelectionAdapter
{
249 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
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());
261 setPageComplete(true);
266 private class TaxonSelector
extends SelectionAdapter
{
268 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
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());
280 private class TaxonNameSelector
extends SelectionAdapter
{
282 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
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());
294 private class OpenInEditorSelector
extends SelectionAdapter
{
296 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
299 public void widgetSelected(SelectionEvent e
) {
300 super.widgetSelected(e
);
301 openInEditor
= button_openInEditor
.getSelection();
305 private class ToggleReuseTaxonSelector
extends SelectionAdapter
{
307 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
310 public void widgetSelected(SelectionEvent e
) {
311 super.widgetSelected(e
);
313 if(button_toggleReuseTaxon
.getSelection()){
314 // enable reuse Taxon
315 text_reuseTaxon
.setEnabled(true);
316 button_reuseTaxon
.setEnabled(true);
318 text_taxonName
.setEnabled(false);
319 button_taxonName
.setEnabled(false);
321 // disable reuse Taxon
322 text_reuseTaxon
.setEnabled(false);
323 button_reuseTaxon
.setEnabled(false);
325 text_taxonName
.setEnabled(true);
326 button_taxonName
.setEnabled(true);
333 * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
335 public void modifyText(ModifyEvent e
) {
336 if (e
.getSource().equals(text_taxonomicTree
)) {
337 if (! "".equals(text_taxonomicTree
.getText())) {
338 setErrorMessage(null);
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
);
348 taxonName
= parseHandler
.parse();