do not provide menu item change synonym to accepted taxon for homotyp. synonym of...
[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 UpdateResult result = CdmStore.getService(ITaxonNodeService.class).createNewTaxonNode(parent.getUuid(), taxon, parent.getReference(), parent.getMicroReference());
60
61 //TaxonNode taxonNode = parent.addChildTaxon(taxon, parent.getReference(), parent.getMicroReference());
62
63 /* if(CdmStore.getCurrentSessionManager().isRemoting()) {
64 taxonNode = CdmStore.getService(ITaxonNodeService.class).merge(taxonNode);
65 } else {
66 taxonNode = CdmStore.getService(ITaxonNodeService.class).save(taxonNode);
67 }*/
68 generatedTaxonNodeUuid = result.getCdmEntity().getUuid();
69 TaxonNode taxonNode = CdmStore.getService(ITaxonNodeService.class).load(generatedTaxonNodeUuid);
70 taxonNode.getTaxon().setSec(sec);
71 CdmStore.getService(ITaxonNodeService.class).merge(taxonNode, true);
72 Set<CdmBase> affectedObjects = new HashSet<CdmBase>();
73 if (result.getUpdatedObjects().iterator().hasNext()){
74 TaxonNode parentNode = (TaxonNode)result.getUpdatedObjects().iterator().next();
75 if(parentNode.getParent() == null) {
76 affectedObjects.add(taxonNode.getClassification());
77 }
78 if(parentNode instanceof TaxonNode) {
79 affectedObjects.add(parentNode);
80 }
81 }
82
83
84
85
86 if(CdmStore.getCurrentSessionManager().isRemoting()) {
87 CdmApplicationState.getCurrentDataChangeService()
88 .fireChangeEvent(new CdmChangeEvent(Action.Create, affectedObjects, NewTaxonNodeWizard.class), true);
89 }
90 }catch(IllegalArgumentException e){
91 MessagingUtils.warningDialog("Taxon already exists in classfication", getClass(), e.getMessage());
92 }
93 }
94 }
95
96 @Override
97 protected ITaxonTreeNode createNewEntity() {
98 if(getSelection() != null){
99 Object selectedObject = getSelection().getFirstElement();
100 if(selectedObject instanceof ITaxonTreeNode){
101 ITaxonTreeNode treeNode = (ITaxonTreeNode) selectedObject;
102
103 if(treeNode instanceof Classification){
104 return CdmStore.getService(IClassificationService.class).load(treeNode.getUuid());
105 }
106 else if(treeNode instanceof TaxonNode){
107 return CdmStore.getService(ITaxonNodeService.class).load(treeNode.getUuid());
108 }
109 }
110 }
111
112 return null;
113 }
114
115 /**
116 * <p>openInEditor</p>
117 *
118 * @return a boolean.
119 */
120 public boolean openInEditor(){
121 return taxonNodePage.openInEditor();
122 }
123
124 /**
125 * <p>openEmpty</p>
126 *
127 * @return a boolean.
128 */
129 public boolean openEmpty(){
130 return openInEditor() && openEmptyEditor;
131 }
132
133 /**
134 * <p>getTaxonNode</p>
135 *
136 * @return a {@link eu.etaxonomy.cdm.model.taxon.TaxonNode} object.
137 */
138 public TaxonNode getTaxonNode(){
139 if(generatedTaxonNodeUuid != null){
140 return CdmStore.getService(ITaxonNodeService.class).load(generatedTaxonNodeUuid);
141 }
142 return null;
143 }
144
145 public ITaxonTreeNode getParentTreeNode(){
146 return taxonNodePage.getParentTreeNode();
147 }
148
149 @Override
150 protected String getEntityName() {
151 return "Taxon";
152 }
153
154 public void addWizardPageListener(IWizardPageListener wizardPageListener){
155 this.wizardPageListener = wizardPageListener;
156 }
157
158 }