i18n
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / section / classification / TaxonNodeWizardPage.java
index df7fedf8ecf7da38d124b6c32509edc9b4d42ec4..dc90c3109cb9b4b3f291164db3cf098cda48f44b 100644 (file)
 package eu.etaxonomy.taxeditor.ui.section.classification;
 
 import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
-import eu.etaxonomy.cdm.model.taxon.ITreeNode;
+import eu.etaxonomy.cdm.model.name.NonViralName;
+import eu.etaxonomy.cdm.model.reference.Reference;
+import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.taxeditor.newWizard.IWizardPageListener;
+import eu.etaxonomy.taxeditor.parser.ParseHandler;
 import eu.etaxonomy.taxeditor.ui.element.AbstractCdmEntityWizardPage;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
-import eu.etaxonomy.taxeditor.ui.section.campanula.compatibility.ICdmFormElement;
+import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
 
 /**
  * <p>
@@ -28,9 +35,12 @@ import eu.etaxonomy.taxeditor.ui.section.campanula.compatibility.ICdmFormElement
  * @created Sep 15, 2009
  * @version 1.0
  */
-public class TaxonNodeWizardPage extends AbstractCdmEntityWizardPage<ITreeNode> {
+public class TaxonNodeWizardPage extends AbstractCdmEntityWizardPage<ITaxonTreeNode> implements Listener{
 
-       /**
+    private final IWizardPageListener wizardPageListener;
+    private final boolean isCreateNew;
+
+    /**
         * <p>
         * Constructor for TaxonNodeWizardPage.
         * </p>
@@ -42,12 +52,16 @@ public class TaxonNodeWizardPage extends AbstractCdmEntityWizardPage<ITreeNode>
         *            a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder}
         *            object.
         * @param entity
-        *            a {@link eu.etaxonomy.cdm.model.taxon.ITreeNode} object.
+        *            a {@link eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode} object.
+     * @param closeOnEnterListener
         */
        public TaxonNodeWizardPage(CdmFormFactory formFactory,
-                       ConversationHolder conversation, ITreeNode entity) {
+                       ConversationHolder conversation, ITaxonTreeNode entity, IWizardPageListener closeOnEnterListener, boolean isCreateNew) {
                super(formFactory, conversation, entity);
-               setTitle("Create a new Taxon");
+               this.wizardPageListener = closeOnEnterListener;
+               setTitle("Edit taxon node");
+               this.isCreateNew = isCreateNew;
+
        }
 
        /*
@@ -60,10 +74,12 @@ public class TaxonNodeWizardPage extends AbstractCdmEntityWizardPage<ITreeNode>
        /** {@inheritDoc} */
        @Override
        public TaxonNodeDetailElement createElement(ICdmFormElement rootElement) {
-
-        TaxonNodeDetailElement detailElement = formFactory.createTaxonNodeDetailElement(rootElement);
+           TaxonNodeDetailElement detailElement = formFactory.createTaxonNodeDetailElement(rootElement, this.isCreateNew);
                detailElement.setEntity(entity);
                formFactory.addPropertyChangeListener(this);
+               if (isCreateNew){
+                   detailElement.getMainControl().addListener(SWT.KeyDown, this);
+               }
                return detailElement;
        }
 
@@ -88,21 +104,29 @@ public class TaxonNodeWizardPage extends AbstractCdmEntityWizardPage<ITreeNode>
        /** {@inheritDoc} */
        @Override
        public void propertyChange(PropertyChangeEvent event) {
-               if (event.getSource() == getDetailElement()) {
-                       checkComplete();
-               }
+               checkComplete();
        }
 
-       /**
-        *
-        */
        @Override
        protected void checkComplete() {
                TaxonNodeDetailElement detailElement = (TaxonNodeDetailElement) getDetailElement();
 
                if (detailElement.getClassification() == null) {
-                       setMessage("No classification", WARNING);
-               } else {
+                       setMessage("No classification set.", WARNING);
+               }
+               else if(isCreateNew ){
+                   if(detailElement.getTaxonName().isEmpty()){
+                       setMessage("No taxon name set.", ERROR);
+                   } else{
+                       setMessage(null);
+                   setPageComplete(true);
+                   return;
+                   }
+               }
+               else if(!detailElement.isComplete()){
+                   setMessage("Not all required fields are filled.", ERROR);
+               }
+               else {
                        setMessage(null);
                        setPageComplete(true);
                        return;
@@ -116,15 +140,18 @@ public class TaxonNodeWizardPage extends AbstractCdmEntityWizardPage<ITreeNode>
         * Getter for the field <code>parentTreeNode</code>.
         * </p>
         *
-        * @return a {@link eu.etaxonomy.cdm.model.taxon.ITreeNode} object.
+        * @return a {@link eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode} object.
         */
-       public ITreeNode getParentTreeNode() {
+       public ITaxonTreeNode getParentTreeNode() {
                return ((TaxonNodeDetailElement) getDetailElement())
                                .getParentTreeNode();
        }
 
-       public Taxon getTaxon() {
-               return ((TaxonNodeDetailElement) getDetailElement()).getTaxon();
+       public Taxon createTaxon() {
+               String taxonName = ((TaxonNodeDetailElement) getDetailElement()).getTaxonName();
+               Reference reference = ((TaxonNodeDetailElement) getDetailElement()).getReference();
+               NonViralName parseReferencedName = ParseHandler.parseReferencedName(taxonName, null);
+               return Taxon.NewInstance(parseReferencedName, reference);
        }
 
        /*
@@ -138,4 +165,14 @@ public class TaxonNodeWizardPage extends AbstractCdmEntityWizardPage<ITreeNode>
                formFactory.removePropertyChangeListener(this);
                super.dispose();
        }
+
+    @Override
+    public void handleEvent(Event event) {
+        TaxonNodeDetailElement detailElement = (TaxonNodeDetailElement) getDetailElement();
+        if(event.widget == detailElement.getMainControl()
+                && event.keyCode == SWT.CR && isPageComplete()){
+            wizardPageListener.close();
+        }
+    }
+
 }