4 package eu
.etaxonomy
.taxeditor
.newWizard
;
6 import java
.util
.ArrayList
;
7 import java
.util
.HashSet
;
10 import java
.util
.UUID
;
12 import org
.apache
.commons
.lang
.StringUtils
;
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
;
34 * <p>NewTaxonNodeWizard class.</p>
37 * @created Sep 15, 2009
40 public class NewTaxonNodeWizard
extends AbstractNewEntityWizard
<ITaxonTreeNode
>{
42 private TaxonNodeWizardPage taxonNodePage
;
43 private boolean openEmptyEditor
;
44 private UUID generatedTaxonNodeUuid
;
45 private IWizardPageListener wizardPageListener
;
48 public void addPages() {
49 taxonNodePage
= new TaxonNodeWizardPage(formFactory
, getConversationHolder(), getEntity(), wizardPageListener
, true);
51 addPage(taxonNodePage
);
55 protected void saveEntity() {
56 Taxon taxon
= taxonNodePage
.createTaxon();
57 if(taxon
== null || StringUtils
.isEmpty(taxon
.getName().getFullTitleCache())){
58 openEmptyEditor
= true;
60 getConversationHolder().bind();
61 ITaxonTreeNode parent
= getParentTreeNode();
62 Reference sec
= taxon
.getSec();
66 if(parent
instanceof Classification
){
67 parentNodeUuid
= ((Classification
) parent
).getRootNode().getUuid();
70 parentNodeUuid
= parent
.getUuid();
74 if (taxon
.getId() == 0){
75 result
= CdmStore
.getService(ITaxonNodeService
.class).createNewTaxonNode(parentNodeUuid
, taxon
, parent
.getReference(), parent
.getMicroReference());
77 result
= CdmStore
.getService(ITaxonNodeService
.class).createNewTaxonNode(parentNodeUuid
, taxon
.getUuid(), parent
.getReference(), parent
.getMicroReference());
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());
90 affectedObjects
.add(parentNode
);
92 CdmApplicationState
.getCurrentDataChangeService()
93 .fireChangeEvent(new CdmChangeEvent(Action
.Create
, affectedObjects
, NewTaxonNodeWizard
.class), true);
97 if (!result
.getExceptions().isEmpty()){
98 MessagingUtils
.error(getClass(), "Taxon could not be created", result
.getExceptions().iterator().next());
100 MessagingUtils
.warn(getClass(), "Taxon could not be created");
104 }catch(IllegalArgumentException e
){
105 MessagingUtils
.warningDialog("Taxon already exists in classfication", getClass(), e
.getMessage());
111 protected ITaxonTreeNode
createNewEntity() {
112 if(getSelection() != null){
113 Object selectedObject
= getSelection().getFirstElement();
114 if(selectedObject
instanceof ITaxonTreeNode
){
115 ITaxonTreeNode treeNode
= (ITaxonTreeNode
) selectedObject
;
117 if(treeNode
instanceof Classification
){
118 return CdmStore
.getService(IClassificationService
.class).load(treeNode
.getUuid());
120 else if(treeNode
instanceof TaxonNode
){
121 List
<String
> propertyPaths
= new ArrayList
<String
>();
122 propertyPaths
.add("taxon");
123 propertyPaths
.add("taxon.sec");
124 TaxonNode node
= CdmStore
.getService(ITaxonNodeService
.class).load(treeNode
.getUuid(), propertyPaths
);
125 //Taxon taxon = (Taxon) CdmStore.getService(ITaxonService.class).load(node.getTaxon().getUuid());
135 * <p>openInEditor</p>
139 public boolean openInEditor(){
140 return taxonNodePage
.openInEditor();
148 public boolean openEmpty(){
149 return openInEditor() && openEmptyEditor
;
153 * <p>getTaxonNode</p>
155 * @return a {@link eu.etaxonomy.cdm.model.taxon.TaxonNode} object.
157 public TaxonNode
getTaxonNode(){
158 if(generatedTaxonNodeUuid
!= null){
159 return CdmStore
.getService(ITaxonNodeService
.class).load(generatedTaxonNodeUuid
);
164 public ITaxonTreeNode
getParentTreeNode(){
165 return taxonNodePage
.getParentTreeNode();
169 protected String
getEntityName() {
173 public void addWizardPageListener(IWizardPageListener wizardPageListener
){
174 this.wizardPageListener
= wizardPageListener
;