ref #8223: check success before try to open new taxon
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / newWizard / NewTaxonNodeWizard.java
1 /**
2 *
3 */
4 package eu.etaxonomy.taxeditor.newWizard;
5
6 import java.util.UUID;
7
8 import javax.inject.Inject;
9
10 import org.apache.commons.lang.StringUtils;
11
12 import eu.etaxonomy.cdm.api.application.CdmApplicationState;
13 import eu.etaxonomy.cdm.api.application.CdmChangeEvent;
14 import eu.etaxonomy.cdm.api.application.CdmChangeEvent.Action;
15 import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
16 import eu.etaxonomy.cdm.api.service.UpdateResult;
17 import eu.etaxonomy.cdm.model.name.TaxonNameFactory;
18 import eu.etaxonomy.cdm.model.reference.Reference;
19 import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
20 import eu.etaxonomy.cdm.model.taxon.Taxon;
21 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
22 import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
23 import eu.etaxonomy.taxeditor.l10n.Messages;
24 import eu.etaxonomy.taxeditor.model.MessagingUtils;
25 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
26 import eu.etaxonomy.taxeditor.store.CdmStore;
27 import eu.etaxonomy.taxeditor.ui.section.classification.TaxonNodeWizardPage;
28
29 /**
30 * <p>NewTaxonNodeWizard class.</p>
31 *
32 * @author n.hoffmann
33 * @created Sep 15, 2009
34 * @version 1.0
35 */
36 public class NewTaxonNodeWizard extends AbstractNewEntityWizard<TaxonNode>{
37
38 private TaxonNodeWizardPage taxonNodePage;
39 private boolean openEmptyEditor;
40 private UUID generatedTaxonNodeUuid;
41 private IWizardPageListener wizardPageListener;
42 private boolean isOpenInEditor = false;
43 private boolean success = true;
44
45 /**
46 * <p>Constructor for AbstractNewEntityWizard.</p>
47 *
48 * @param <T> a T object.
49 */
50 @Inject
51 public NewTaxonNodeWizard(){
52 setWindowTitle(Messages.TaxonNodeWizardPage_new);
53 }
54
55
56 @Override
57 public void addPages() {
58 taxonNodePage = new TaxonNodeWizardPage(formFactory, getConversationHolder(), getEntity(), wizardPageListener, true);
59 addPage(taxonNodePage);
60
61 }
62
63 @Override
64 protected void saveEntity() {
65 Taxon taxon = taxonNodePage.createTaxon();
66 if(taxon == null || StringUtils.isEmpty(taxon.getName().getFullTitleCache())){
67 openEmptyEditor = true;
68 }else{
69 getConversationHolder().bind();
70 // ITaxonTreeNode parent = getParentTreeNode();
71 try{
72 UUID parentNodeUuid;
73 // if(parent instanceof Classification){
74 // parentNodeUuid = ((Classification) parent).getRootNode().getUuid();
75 // }
76 // else{
77 // parentNodeUuid = parent.getUuid();
78 // }
79 UpdateResult result;
80 result = CdmStore.getService(ITaxonNodeService.class).saveNewTaxonNode(getEntity());
81 if (result.isOk()){
82 this.setEntity((TaxonNode)result.getCdmEntity());
83 CdmApplicationState.getCurrentDataChangeService()
84 .fireChangeEvent(new CdmChangeEvent(Action.Create, result.getUpdatedObjects(), NewTaxonNodeWizard.class), true);
85
86 }else{
87 setSuccess(false);
88 if (!result.isOk()){
89 if (!result.getExceptions().isEmpty()){
90 MessagingUtils.error(getClass(), "Taxon could not be created", result.getExceptions().iterator().next());
91 }else{
92 MessagingUtils.warn(getClass(), "Taxon could not be created");
93 }
94
95 }
96 }
97 }catch(IllegalArgumentException e){
98 MessagingUtils.warningDialog("Taxon already exists in classfication", getClass(), e.getMessage());
99 }
100 }
101 }
102
103 @Override
104 protected TaxonNode createNewEntity() {
105 if(getSelection() != null){
106 Object selectedObject = getSelection().getFirstElement();
107 if(selectedObject instanceof TaxonNodeDto){
108 TaxonNodeDto taxonNodeDto = (TaxonNodeDto) selectedObject;
109 TaxonNode node = CdmStore.getService(ITaxonNodeService.class).load(taxonNodeDto.getUuid());
110 Reference sec = node.getTaxon() != null? node.getTaxon().getSec():null;
111 Taxon newTaxon = Taxon.NewInstance(TaxonNameFactory.NewNameInstance(PreferencesUtil.getPreferredNomenclaturalCode(), null), sec);
112 TaxonNode child = node.addChildTaxon(newTaxon, null, null);
113
114 return child;
115
116 }
117 }
118
119 return null;
120 }
121
122
123 /**
124 * <p>
125 * openInEditor
126 * </p>
127 *
128 * @return a boolean.
129 */
130 public boolean openInEditor() {
131 return isOpenInEditor ;
132 }
133
134 public void setOpenInEditor(boolean isOpenInEditor) {
135 this.isOpenInEditor = isOpenInEditor;
136 }
137
138 /**
139 * <p>openEmpty</p>
140 *
141 * @return a boolean.
142 */
143 public boolean openEmpty(){
144 return openInEditor() && openEmptyEditor;
145 }
146
147 /**
148 * <p>getTaxonNode</p>
149 *
150 * @return a {@link eu.etaxonomy.cdm.model.taxon.TaxonNode} object.
151 */
152 public TaxonNode getTaxonNode(){
153 if(generatedTaxonNodeUuid != null){
154 return CdmStore.getService(ITaxonNodeService.class).load(generatedTaxonNodeUuid);
155 }
156 return null;
157 }
158
159 public ITaxonTreeNode getParentTreeNode(){
160 return taxonNodePage.getParentTreeNode();
161 }
162
163 @Override
164 protected String getEntityName() {
165 return "Taxon";
166 }
167
168 public void addWizardPageListener(IWizardPageListener wizardPageListener){
169 this.wizardPageListener = wizardPageListener;
170 }
171
172
173 public boolean isSuccess() {
174 return success;
175 }
176
177
178 public void setSuccess(boolean success) {
179 this.success = success;
180 }
181
182
183
184 }