Merge branch 'hotfix/3.12.4' into develop
[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.HashSet;
7 import java.util.Set;
8 import java.util.UUID;
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.IClassificationService;
16 import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
17 import eu.etaxonomy.cdm.api.service.UpdateResult;
18 import eu.etaxonomy.cdm.model.common.CdmBase;
19 import eu.etaxonomy.cdm.model.reference.Reference;
20 import eu.etaxonomy.cdm.model.taxon.Classification;
21 import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
22 import eu.etaxonomy.cdm.model.taxon.Taxon;
23 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
24 import eu.etaxonomy.taxeditor.model.MessagingUtils;
25 import eu.etaxonomy.taxeditor.store.CdmStore;
26 import eu.etaxonomy.taxeditor.ui.section.classification.TaxonNodeWizardPage;
27
28 /**
29 * <p>NewTaxonNodeWizard class.</p>
30 *
31 * @author n.hoffmann
32 * @created Sep 15, 2009
33 * @version 1.0
34 */
35 public class NewTaxonNodeWizard extends AbstractNewEntityWizard<ITaxonTreeNode>{
36
37 private TaxonNodeWizardPage taxonNodePage;
38 private boolean openEmptyEditor;
39 private UUID generatedTaxonNodeUuid;
40 private IWizardPageListener wizardPageListener;
41
42 @Override
43 public void addPages() {
44 taxonNodePage = new TaxonNodeWizardPage(formFactory, getConversationHolder(), getEntity(), wizardPageListener);
45 addPage(taxonNodePage);
46 }
47
48 @Override
49 protected void saveEntity() {
50 if(taxonNodePage.getTaxon() == null || StringUtils.isEmpty(taxonNodePage.getTaxon().getName().getFullTitleCache())){
51 openEmptyEditor = true;
52 }else{
53 getConversationHolder().bind();
54 ITaxonTreeNode parent = getParentTreeNode();
55 Taxon taxon = taxonNodePage.getTaxon();
56 Reference sec = taxon.getSec();
57 taxon.setSec(null);
58 try{
59 <<<<<<< HEAD
60 UpdateResult result = CdmStore.getService(ITaxonNodeService.class).createNewTaxonNode(parent.getUuid(), taxon, parent.getReference(), parent.getMicroReference());
61
62 =======
63 UUID parentNodeUuid;
64 if(parent instanceof Classification){
65 parentNodeUuid = ((Classification) parent).getRootNode().getUuid();
66 }
67 else{
68 parentNodeUuid = parent.getUuid();
69 }
70 UpdateResult result = CdmStore.getService(ITaxonNodeService.class).createNewTaxonNode(parentNodeUuid, taxon, parent.getReference(), parent.getMicroReference());
71
72 >>>>>>> hotfix/3.12.4
73 //TaxonNode taxonNode = parent.addChildTaxon(taxon, parent.getReference(), parent.getMicroReference());
74
75 /* if(CdmStore.getCurrentSessionManager().isRemoting()) {
76 taxonNode = CdmStore.getService(ITaxonNodeService.class).merge(taxonNode);
77 } else {
78 taxonNode = CdmStore.getService(ITaxonNodeService.class).save(taxonNode);
79 }*/
80 generatedTaxonNodeUuid = result.getCdmEntity().getUuid();
81 TaxonNode taxonNode = CdmStore.getService(ITaxonNodeService.class).load(generatedTaxonNodeUuid);
82 taxonNode.getTaxon().setSec(sec);
83 <<<<<<< HEAD
84 CdmStore.getService(ITaxonNodeService.class).merge(taxonNode);
85 =======
86 CdmStore.getService(ITaxonNodeService.class).merge(taxonNode, true);
87 >>>>>>> hotfix/3.12.4
88 Set<CdmBase> affectedObjects = new HashSet<CdmBase>();
89 if (result.getUpdatedObjects().iterator().hasNext()){
90 TaxonNode parentNode = (TaxonNode)result.getUpdatedObjects().iterator().next();
91 if(parentNode.getParent() == null) {
92 affectedObjects.add(taxonNode.getClassification());
93 }
94 if(parentNode instanceof TaxonNode) {
95 affectedObjects.add(parentNode);
96 }
97 }
98 <<<<<<< HEAD
99
100
101
102 =======
103
104
105
106 >>>>>>> hotfix/3.12.4
107
108 if(CdmStore.getCurrentSessionManager().isRemoting()) {
109 CdmApplicationState.getCurrentDataChangeService()
110 .fireChangeEvent(new CdmChangeEvent(Action.Create, affectedObjects, NewTaxonNodeWizard.class), true);
111 }
112 }catch(IllegalArgumentException e){
113 MessagingUtils.warningDialog("Taxon already exists in classfication", getClass(), e.getMessage());
114 }
115 }
116 }
117
118 @Override
119 protected ITaxonTreeNode createNewEntity() {
120 if(getSelection() != null){
121 Object selectedObject = getSelection().getFirstElement();
122 if(selectedObject instanceof ITaxonTreeNode){
123 ITaxonTreeNode treeNode = (ITaxonTreeNode) selectedObject;
124
125 if(treeNode instanceof Classification){
126 return CdmStore.getService(IClassificationService.class).load(treeNode.getUuid());
127 }
128 else if(treeNode instanceof TaxonNode){
129 return CdmStore.getService(ITaxonNodeService.class).load(treeNode.getUuid());
130 }
131 }
132 }
133
134 return null;
135 }
136
137 /**
138 * <p>openInEditor</p>
139 *
140 * @return a boolean.
141 */
142 public boolean openInEditor(){
143 return taxonNodePage.openInEditor();
144 }
145
146 /**
147 * <p>openEmpty</p>
148 *
149 * @return a boolean.
150 */
151 public boolean openEmpty(){
152 return openInEditor() && openEmptyEditor;
153 }
154
155 /**
156 * <p>getTaxonNode</p>
157 *
158 * @return a {@link eu.etaxonomy.cdm.model.taxon.TaxonNode} object.
159 */
160 public TaxonNode getTaxonNode(){
161 if(generatedTaxonNodeUuid != null){
162 return CdmStore.getService(ITaxonNodeService.class).load(generatedTaxonNodeUuid);
163 }
164 return null;
165 }
166
167 public ITaxonTreeNode getParentTreeNode(){
168 return taxonNodePage.getParentTreeNode();
169 }
170
171 @Override
172 protected String getEntityName() {
173 return "Taxon";
174 }
175
176 public void addWizardPageListener(IWizardPageListener wizardPageListener){
177 this.wizardPageListener = wizardPageListener;
178 }
179
180 }