changes for gbif/abcd import from webservice
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / section / classification / TaxonNodeWizardPage.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.ui.section.classification;
12
13 import org.eclipse.jface.util.PropertyChangeEvent;
14 import org.eclipse.swt.SWT;
15 import org.eclipse.swt.widgets.Event;
16 import org.eclipse.swt.widgets.Listener;
17
18 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
19 import eu.etaxonomy.cdm.model.name.NonViralName;
20 import eu.etaxonomy.cdm.model.reference.Reference;
21 import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
22 import eu.etaxonomy.cdm.model.taxon.Taxon;
23 import eu.etaxonomy.taxeditor.newWizard.IWizardPageListener;
24 import eu.etaxonomy.taxeditor.parser.ParseHandler;
25 import eu.etaxonomy.taxeditor.ui.element.AbstractCdmEntityWizardPage;
26 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
27 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
28
29 /**
30 * <p>
31 * TaxonNodeWizardPage class.
32 * </p>
33 *
34 * @author n.hoffmann
35 * @created Sep 15, 2009
36 * @version 1.0
37 */
38 public class TaxonNodeWizardPage extends AbstractCdmEntityWizardPage<ITaxonTreeNode> implements Listener{
39
40 private final IWizardPageListener wizardPageListener;
41 private final boolean isCreateNew;
42
43 /**
44 * <p>
45 * Constructor for TaxonNodeWizardPage.
46 * </p>
47 *
48 * @param formFactory
49 * a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
50 * object.
51 * @param conversation
52 * a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder}
53 * object.
54 * @param entity
55 * a {@link eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode} object.
56 * @param closeOnEnterListener
57 */
58 public TaxonNodeWizardPage(CdmFormFactory formFactory,
59 ConversationHolder conversation, ITaxonTreeNode entity, IWizardPageListener closeOnEnterListener, boolean isCreateNew) {
60 super(formFactory, conversation, entity);
61 this.wizardPageListener = closeOnEnterListener;
62 setTitle("Edit taxon node");
63 this.isCreateNew = isCreateNew;
64
65 }
66
67 /*
68 * (non-Javadoc)
69 *
70 * @see
71 * eu.etaxonomy.taxeditor.forms.AbstractCdmEntityWizardPage#createElement
72 * (eu.etaxonomy.taxeditor.forms.ICdmFormElement)
73 */
74 /** {@inheritDoc} */
75 @Override
76 public TaxonNodeDetailElement createElement(ICdmFormElement rootElement) {
77 TaxonNodeDetailElement detailElement = formFactory.createTaxonNodeDetailElement(rootElement, this.isCreateNew);
78 detailElement.setEntity(entity);
79 formFactory.addPropertyChangeListener(this);
80 if (isCreateNew){
81 detailElement.getMainControl().addListener(SWT.KeyDown, this);
82 }
83 return detailElement;
84 }
85
86 /**
87 * <p>
88 * openInEditor
89 * </p>
90 *
91 * @return a boolean.
92 */
93 public boolean openInEditor() {
94 return ((TaxonNodeDetailElement) getDetailElement()).isOpenInEditor();
95 }
96
97 /*
98 * (non-Javadoc)
99 *
100 * @see
101 * org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse
102 * .jface.util.PropertyChangeEvent)
103 */
104 /** {@inheritDoc} */
105 @Override
106 public void propertyChange(PropertyChangeEvent event) {
107 checkComplete();
108 }
109
110 @Override
111 protected void checkComplete() {
112 TaxonNodeDetailElement detailElement = (TaxonNodeDetailElement) getDetailElement();
113
114 if (detailElement.getClassification() == null) {
115 setMessage("No classification set.", WARNING);
116 }
117 else if(isCreateNew ){
118 if(detailElement.getTaxonName().isEmpty()){
119 setMessage("No taxon name set.", ERROR);
120 } else{
121 setMessage(null);
122 setPageComplete(true);
123 return;
124 }
125 }
126 else if(!detailElement.isComplete()){
127 setMessage("Not all required fields are filled.", ERROR);
128 }
129 else {
130 setMessage(null);
131 setPageComplete(true);
132 return;
133 }
134
135 setPageComplete(false);
136 }
137
138 /**
139 * <p>
140 * Getter for the field <code>parentTreeNode</code>.
141 * </p>
142 *
143 * @return a {@link eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode} object.
144 */
145 public ITaxonTreeNode getParentTreeNode() {
146 return ((TaxonNodeDetailElement) getDetailElement())
147 .getParentTreeNode();
148 }
149
150 public Taxon createTaxon() {
151 if (((TaxonNodeDetailElement) getDetailElement()).getTaxon() == null){
152 String taxonName = ((TaxonNodeDetailElement) getDetailElement()).getTaxonName();
153 Reference reference = ((TaxonNodeDetailElement) getDetailElement()).getReference();
154 NonViralName parseReferencedName = ParseHandler.parseReferencedName(taxonName, null);
155 return Taxon.NewInstance(parseReferencedName, reference);
156 } else{
157 return ((TaxonNodeDetailElement) getDetailElement()).getTaxon();
158 }
159 }
160
161 /*
162 * (non-Javadoc)
163 *
164 * @see eu.etaxonomy.taxeditor.forms.AbstractCdmEntityWizardPage#dispose()
165 */
166 /** {@inheritDoc} */
167 @Override
168 public void dispose() {
169 formFactory.removePropertyChangeListener(this);
170 super.dispose();
171 }
172
173 @Override
174 public void handleEvent(Event event) {
175 TaxonNodeDetailElement detailElement = (TaxonNodeDetailElement) getDetailElement();
176 if(event.widget == detailElement.getMainControl()
177 && event.keyCode == SWT.CR && isPageComplete()){
178 wizardPageListener.close();
179 }
180 }
181
182 }