Merge branch 'release/5.22.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / newWizard / NewTaxonNodeWizard.java
index dbe283bd139a00b7d8af8f2c6accaa200a55b966..9526758c7a0822b25aae12ecfb86aa5934545fd7 100644 (file)
 /**
- *
- */
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
 package eu.etaxonomy.taxeditor.newWizard;
 
-import java.util.HashSet;
-import java.util.Set;
+import java.util.Map;
 import java.util.UUID;
 
-import org.apache.commons.lang.StringUtils;
+import javax.inject.Inject;
 
 import eu.etaxonomy.cdm.api.application.CdmApplicationState;
 import eu.etaxonomy.cdm.api.application.CdmChangeEvent;
 import eu.etaxonomy.cdm.api.application.CdmChangeEvent.Action;
-import eu.etaxonomy.cdm.api.service.IClassificationService;
 import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
 import eu.etaxonomy.cdm.api.service.UpdateResult;
-import eu.etaxonomy.cdm.model.common.CdmBase;
-import eu.etaxonomy.cdm.model.reference.Reference;
-import eu.etaxonomy.cdm.model.taxon.Classification;
+import eu.etaxonomy.cdm.api.service.dto.CreateTaxonDTO;
+import eu.etaxonomy.cdm.model.common.Language;
+import eu.etaxonomy.cdm.model.common.LanguageString;
+import eu.etaxonomy.cdm.model.reference.NamedSource;
 import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
-import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.cdm.model.taxon.TaxonNodeStatus;
+import eu.etaxonomy.cdm.persistence.dto.MergeResult;
+import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
+import eu.etaxonomy.taxeditor.l10n.Messages;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.ui.section.classification.TaxonNodeDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.classification.TaxonNodeWizardPage;
 
 /**
- * <p>NewTaxonNodeWizard class.</p>
+ * NewTaxonNodeWizard class.
  *
  * @author n.hoffmann
  * @created Sep 15, 2009
- * @version 1.0
  */
-public class NewTaxonNodeWizard extends AbstractNewEntityWizard<ITaxonTreeNode>{
+public class NewTaxonNodeWizard extends AbstractNewEntityWizardParentChild<TaxonNode>{
 
     private TaxonNodeWizardPage taxonNodePage;
     private boolean openEmptyEditor;
     private UUID generatedTaxonNodeUuid;
     private IWizardPageListener wizardPageListener;
+    private boolean isOpenInEditor = false;
+    private boolean success = true;
+
+    @Inject
+    public NewTaxonNodeWizard(){
+        setWindowTitle(Messages.TaxonNodeWizardPage_new);
+    }
 
     @Override
     public void addPages() {
-        taxonNodePage = new TaxonNodeWizardPage(formFactory, getConversationHolder(), getEntity(), wizardPageListener);
+        taxonNodePage = new TaxonNodeWizardPage(formFactory, getConversationHolder(), getParentEntity(), wizardPageListener, true);
         addPage(taxonNodePage);
     }
 
     @Override
     protected void saveEntity() {
-        if(taxonNodePage.getTaxon() == null || StringUtils.isEmpty(taxonNodePage.getTaxon().getName().getFullTitleCache())){
+        CreateTaxonDTO taxon = taxonNodePage.createTaxon();
+        if(taxon == null ){
             openEmptyEditor = true;
         }else{
             getConversationHolder().bind();
-            ITaxonTreeNode parent = getParentTreeNode();
-            Taxon taxon = taxonNodePage.getTaxon();
-            Reference sec = taxon.getSec();
-            taxon.setSec(null);
             try{
-               UpdateResult result = CdmStore.getService(ITaxonNodeService.class).createNewTaxonNode(parent.getUuid(), taxon, parent.getReference(), parent.getMicroReference());
-                       
-                //TaxonNode taxonNode = parent.addChildTaxon(taxon, parent.getReference(), parent.getMicroReference());
-
-              /*  if(CdmStore.getCurrentSessionManager().isRemoting()) {
-                    taxonNode = CdmStore.getService(ITaxonNodeService.class).merge(taxonNode);
-                } else {
-                    taxonNode = CdmStore.getService(ITaxonNodeService.class).save(taxonNode);
-                }*/
-               generatedTaxonNodeUuid = result.getCdmEntity().getUuid();
-               TaxonNode taxonNode = CdmStore.getService(ITaxonNodeService.class).load(generatedTaxonNodeUuid);
-               taxonNode.getTaxon().setSec(sec);
-               CdmStore.getService(ITaxonNodeService.class).merge(taxonNode, true);
-                Set<CdmBase> affectedObjects = new HashSet<CdmBase>();
-                if (result.getUpdatedObjects().iterator().hasNext()){
-                       TaxonNode parentNode = (TaxonNode)result.getUpdatedObjects().iterator().next();
-                       if(parentNode.getParent() == null) {
-                        affectedObjects.add(taxonNode.getClassification());
-                    }
-                       if(parentNode instanceof TaxonNode) {
-                        affectedObjects.add(parentNode);
-                    }
-                }
-                
-
-                
-
-                if(CdmStore.getCurrentSessionManager().isRemoting()) {
+               UpdateResult result;
+               TaxonNode parent = getParentEntity();
+
+               Map<Language, LanguageString> notes = ((TaxonNodeDetailElement)taxonNodePage.getDetailElement()).getMultiLanguageTextExcludedNotes();
+               NamedSource source = parent.getSource().checkEmpty()? null: parent.getSource();
+
+               TaxonNodeStatus status = ((TaxonNodeDetailElement)taxonNodePage.getDetailElement()).getTaxonNodeStatus();
+               if (status == null){
+                   notes = null;
+               }
+
+               result = CdmStore.getService(ITaxonNodeService.class).createNewTaxonNode(parent.getUuid(),
+                       taxon, source, parent.getMicroReference(), status, notes);
+
+
+               if (result.isOk()){
+                   this.setEntity((TaxonNode)result.getCdmEntity());
                     CdmApplicationState.getCurrentDataChangeService()
-                        .fireChangeEvent(new CdmChangeEvent(Action.Create, affectedObjects, NewTaxonNodeWizard.class), true);
-                }
-            }catch(IllegalArgumentException e){
+                             .fireChangeEvent(new CdmChangeEvent(Action.Create, result.getUpdatedObjects(), NewTaxonNodeWizard.class), true);
+
+                    }else{
+                        setSuccess(false);
+                        if (!result.isOk()){
+                            if (!result.getExceptions().isEmpty()){
+                                MessagingUtils.error(getClass(), "Taxon could not be created", result.getExceptions().iterator().next());
+                            }else{
+                                MessagingUtils.warn(getClass(), "Taxon could not be created");
+                            }
+
+                        }
+                    }
+          }catch(IllegalArgumentException e){
                 MessagingUtils.warningDialog("Taxon already exists in classfication", getClass(), e.getMessage());
             }
         }
     }
 
-    @Override
-    protected ITaxonTreeNode createNewEntity() {
-        if(getSelection() != null){
-            Object selectedObject = getSelection().getFirstElement();
-            if(selectedObject instanceof ITaxonTreeNode){
-                ITaxonTreeNode treeNode = (ITaxonTreeNode) selectedObject;
-
-                if(treeNode instanceof Classification){
-                    return CdmStore.getService(IClassificationService.class).load(treeNode.getUuid());
-                }
-                else if(treeNode instanceof TaxonNode){
-                    return CdmStore.getService(ITaxonNodeService.class).load(treeNode.getUuid());
-                }
-            }
-        }
-
-        return null;
+    public boolean openInEditor() {
+        return isOpenInEditor ;
     }
 
-    /**
-     * <p>openInEditor</p>
-     *
-     * @return a boolean.
-     */
-    public boolean openInEditor(){
-        return taxonNodePage.openInEditor();
+    public void setOpenInEditor(boolean isOpenInEditor) {
+        this.isOpenInEditor = isOpenInEditor;
     }
 
-    /**
-     * <p>openEmpty</p>
-     *
-     * @return a boolean.
-     */
     public boolean openEmpty(){
         return openInEditor() && openEmptyEditor;
     }
 
-    /**
-     * <p>getTaxonNode</p>
-     *
-     * @return a {@link eu.etaxonomy.cdm.model.taxon.TaxonNode} object.
-     */
     public TaxonNode getTaxonNode(){
         if(generatedTaxonNodeUuid != null){
             return CdmStore.getService(ITaxonNodeService.class).load(generatedTaxonNodeUuid);
@@ -155,4 +136,22 @@ public class NewTaxonNodeWizard extends AbstractNewEntityWizard<ITaxonTreeNode>{
         this.wizardPageListener = wizardPageListener;
     }
 
+    public boolean isSuccess() {
+        return success;
+    }
+
+    public void setSuccess(boolean success) {
+        this.success = success;
+    }
+
+    @Override
+    public void createParentEntity() {
+        Object selectedObject = getSelection().getFirstElement();
+        if(selectedObject instanceof TaxonNodeDto){
+            if(selectedObject instanceof TaxonNodeDto){
+                TaxonNodeDto taxonNodeDto = (TaxonNodeDto) selectedObject;
+                setParentEntity(CdmStore.getService(ITaxonNodeService.class).load(taxonNodeDto.getUuid()));
+            }
+        }
+    }
 }
\ No newline at end of file