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