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