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