Merge branch 'release/5.19.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / newWizard / NewTaxonNodeWizard.java
1 /**
2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9 package eu.etaxonomy.taxeditor.newWizard;
10
11 import java.util.Map;
12 import java.util.UUID;
13
14 import javax.inject.Inject;
15
16 import eu.etaxonomy.cdm.api.application.CdmApplicationState;
17 import eu.etaxonomy.cdm.api.application.CdmChangeEvent;
18 import eu.etaxonomy.cdm.api.application.CdmChangeEvent.Action;
19 import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
20 import eu.etaxonomy.cdm.api.service.UpdateResult;
21 import eu.etaxonomy.cdm.api.service.dto.CreateTaxonDTO;
22 import eu.etaxonomy.cdm.model.common.Language;
23 import eu.etaxonomy.cdm.model.common.LanguageString;
24 import eu.etaxonomy.cdm.model.description.DescriptionElementSource;
25 import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
26 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
27 import eu.etaxonomy.cdm.model.taxon.TaxonNodeStatus;
28 import eu.etaxonomy.cdm.persistence.dto.MergeResult;
29 import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
30 import eu.etaxonomy.taxeditor.l10n.Messages;
31 import eu.etaxonomy.taxeditor.model.MessagingUtils;
32 import eu.etaxonomy.taxeditor.store.CdmStore;
33 import eu.etaxonomy.taxeditor.ui.section.classification.TaxonNodeDetailElement;
34 import eu.etaxonomy.taxeditor.ui.section.classification.TaxonNodeWizardPage;
35
36 /**
37 * NewTaxonNodeWizard class.
38 *
39 * @author n.hoffmann
40 * @created Sep 15, 2009
41 */
42 public class NewTaxonNodeWizard extends AbstractNewEntityWizardParentChild<TaxonNode>{
43
44 private TaxonNodeWizardPage taxonNodePage;
45 private boolean openEmptyEditor;
46 private UUID generatedTaxonNodeUuid;
47 private IWizardPageListener wizardPageListener;
48 private boolean isOpenInEditor = false;
49 private boolean success = true;
50
51 @Inject
52 public NewTaxonNodeWizard(){
53 setWindowTitle(Messages.TaxonNodeWizardPage_new);
54 }
55
56 @Override
57 public void addPages() {
58 taxonNodePage = new TaxonNodeWizardPage(formFactory, getConversationHolder(), getParentEntity(), wizardPageListener, true);
59 addPage(taxonNodePage);
60 }
61
62 @Override
63 protected void saveEntity() {
64 CreateTaxonDTO taxon = taxonNodePage.createTaxon();
65 if(taxon == null ){
66 openEmptyEditor = true;
67 }else{
68 getConversationHolder().bind();
69 try{
70 UpdateResult result;
71 TaxonNode parent = getParentEntity();
72
73 Map<Language, LanguageString> notes = ((TaxonNodeDetailElement)taxonNodePage.getDetailElement()).getMultiLanguageTextExcludedNotes();
74 DescriptionElementSource source = parent.getSource().checkEmpty()? null: parent.getSource();
75
76
77 TaxonNodeStatus status = ((TaxonNodeDetailElement)taxonNodePage.getDetailElement()).getTaxonNodeStatus();
78 if (status == null){
79 notes = null;
80 }
81
82 result = CdmStore.getService(ITaxonNodeService.class).createNewTaxonNode(parent.getUuid(), taxon, source, parent.getMicroReference(),
83 status, notes);
84
85
86 if (result.isOk()){
87 this.setEntity((TaxonNode)result.getCdmEntity());
88 CdmApplicationState.getCurrentDataChangeService()
89 .fireChangeEvent(new CdmChangeEvent(Action.Create, result.getUpdatedObjects(), NewTaxonNodeWizard.class), true);
90
91 }else{
92 setSuccess(false);
93 if (!result.isOk()){
94 if (!result.getExceptions().isEmpty()){
95 MessagingUtils.error(getClass(), "Taxon could not be created", result.getExceptions().iterator().next());
96 }else{
97 MessagingUtils.warn(getClass(), "Taxon could not be created");
98 }
99
100 }
101 }
102 }catch(IllegalArgumentException e){
103 MessagingUtils.warningDialog("Taxon already exists in classfication", getClass(), e.getMessage());
104 }
105 }
106 }
107
108 public boolean openInEditor() {
109 return isOpenInEditor ;
110 }
111
112 public void setOpenInEditor(boolean isOpenInEditor) {
113 this.isOpenInEditor = isOpenInEditor;
114 }
115
116 public boolean openEmpty(){
117 return openInEditor() && openEmptyEditor;
118 }
119
120 public TaxonNode getTaxonNode(){
121 if(generatedTaxonNodeUuid != null){
122 return CdmStore.getService(ITaxonNodeService.class).load(generatedTaxonNodeUuid);
123 }
124 return null;
125 }
126
127 public ITaxonTreeNode getParentTreeNode(){
128 return taxonNodePage.getParentTreeNode();
129 }
130
131 @Override
132 protected String getEntityName() {
133 return "Taxon";
134 }
135
136 public void addWizardPageListener(IWizardPageListener wizardPageListener){
137 this.wizardPageListener = wizardPageListener;
138 }
139
140 public boolean isSuccess() {
141 return success;
142 }
143
144 public void setSuccess(boolean success) {
145 this.success = success;
146 }
147
148 @Override
149 public void createParentEntity() {
150 Object selectedObject = getSelection().getFirstElement();
151 if(selectedObject instanceof TaxonNodeDto){
152 if(selectedObject instanceof TaxonNodeDto){
153 TaxonNodeDto taxonNodeDto = (TaxonNodeDto) selectedObject;
154 setParentEntity(CdmStore.getService(ITaxonNodeService.class).load(taxonNodeDto.getUuid()));
155 }
156 }
157 }
158 }