adapt master to develop
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / newWizard / NewTaxonNodeWizard.java
index a87752ca16ed572ac67477a3362ef639b2fd1bce..206eb8a1d9d35ea69d771c07c9b23cf4b491556f 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 javax.inject.Inject;
 
-import org.apache.commons.lang.StringUtils;
-
 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.ITaxonNodeService;
 import eu.etaxonomy.cdm.api.service.UpdateResult;
-import eu.etaxonomy.cdm.model.common.CdmBase;
-import eu.etaxonomy.cdm.model.name.TaxonNameFactory;
-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.persistence.dto.MergeResult;
+import eu.etaxonomy.cdm.model.taxon.TaxonNodeStatus;
 import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
 import eu.etaxonomy.taxeditor.l10n.Messages;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
-import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 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<TaxonNode>{
+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;
 
-    /**
-     * <p>Constructor for AbstractNewEntityWizard.</p>
-     *
-     * @param <T> a T object.
-     */
     @Inject
     public NewTaxonNodeWizard(){
         setWindowTitle(Messages.TaxonNodeWizardPage_new);
     }
 
-
     @Override
     public void addPages() {
-        taxonNodePage = new TaxonNodeWizardPage(formFactory, getConversationHolder(), getEntity(), wizardPageListener, true);
+        taxonNodePage = new TaxonNodeWizardPage(formFactory, getParentEntity(), wizardPageListener, true);
         addPage(taxonNodePage);
-
     }
 
     @Override
     protected void saveEntity() {
-        Taxon taxon = taxonNodePage.createTaxon();
-        if(taxon == null || StringUtils.isEmpty(taxon.getName().getFullTitleCache())){
+        CreateTaxonDTO taxon = taxonNodePage.createTaxon();
+        if(taxon == null ){
             openEmptyEditor = true;
         }else{
-            getConversationHolder().bind();
-            ITaxonTreeNode parent = getParentTreeNode();
-            Reference sec = taxon.getSec();
-            taxon.setSec(null);
-            try{
-               UUID parentNodeUuid;
-               if(parent instanceof Classification){
-                   parentNodeUuid = ((Classification) parent).getRootNode().getUuid();
-               }
-               else{
-                   parentNodeUuid = parent.getUuid();
-               }
-
-
-               UpdateResult result;
-
-
-               if (taxon.getId() == 0){
-                   //getEntity().setTaxon(taxon);
-                       result = CdmStore.getService(ITaxonNodeService.class).saveNewTaxonNode(getEntity());
-
-               }else{
-                       result = CdmStore.getService(ITaxonNodeService.class).createNewTaxonNode(parentNodeUuid, taxon.getUuid(), parent.getReference(), parent.getMicroReference());
-               }
-               if (result.isOk()){
-                       generatedTaxonNodeUuid = result.getCdmEntity().getUuid();
-                       TaxonNode taxonNode = CdmStore.getService(ITaxonNodeService.class).load(generatedTaxonNodeUuid);
-                       taxonNode.getTaxon().setSec(sec);
-                       taxonNode.setExcluded(((TaxonNodeDetailElement)taxonNodePage.getDetailElement()).isExcluded());
-                       taxonNode.setUnplaced(((TaxonNodeDetailElement)taxonNodePage.getDetailElement()).isUnplaced());
-
-
-                       MergeResult resultMerge =  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());
-                            }
-                               affectedObjects.add(parentNode);
-                        }
-                        if (resultMerge.getMergedEntity() instanceof TaxonNode){
-                               TaxonNode node = (TaxonNode)resultMerge.getMergedEntity();
-                               affectedObjects.remove(node);
+           try{
+               UpdateResult result;
+               TaxonNode parent = getParentEntity();
 
-                               affectedObjects.add(node);
-                            }
-                        CdmApplicationState.getCurrentDataChangeService()
-                                .fireChangeEvent(new CdmChangeEvent(Action.Create, affectedObjects, NewTaxonNodeWizard.class), true);
+               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, 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){
@@ -136,39 +102,6 @@ public class NewTaxonNodeWizard extends AbstractNewEntityWizard<TaxonNode>{
         }
     }
 
-    @Override
-    protected TaxonNode createNewEntity() {
-        if(getSelection() != null){
-            Object selectedObject = getSelection().getFirstElement();
-            if(selectedObject instanceof TaxonNodeDto){
-                TaxonNodeDto taxonNodeDto = (TaxonNodeDto) selectedObject;
-               TaxonNode node =  CdmStore.getService(ITaxonNodeService.class).load(taxonNodeDto.getUuid());
-               Reference sec = node.getTaxon() != null? node.getTaxon().getSec():null;
-               Taxon newTaxon = Taxon.NewInstance(TaxonNameFactory.NewNameInstance(PreferencesUtil.getPreferredNomenclaturalCode(), null), sec);
-               TaxonNode child = node.addChildTaxon(newTaxon, null, null);
-//             if(node.getTaxon()!=null){
-//                 //FIXME this taxon is not used. Do we need this call?
-//                 Taxon taxon = (Taxon) CdmStore.getService(ITaxonService.class).load(node.getTaxon().getUuid());
-//             }
-//             else if(node.getClassification()!=null){
-//                 return CdmStore.getService(IClassificationService.class).load(node.getClassification().getUuid());
-//             }
-                return child;
-
-            }
-        }
-
-        return null;
-    }
-
-
-    /**
-     * <p>
-     * openInEditor
-     * </p>
-     *
-     * @return a boolean.
-     */
     public boolean openInEditor() {
         return isOpenInEditor ;
     }
@@ -177,20 +110,10 @@ public class NewTaxonNodeWizard extends AbstractNewEntityWizard<TaxonNode>{
         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);
@@ -211,6 +134,22 @@ public class NewTaxonNodeWizard extends AbstractNewEntityWizard<TaxonNode>{
         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