Project

General

Profile

Download (5.71 KB) Statistics
| Branch: | Tag: | Revision:
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
            	UUID parentNodeUuid;
60
            	if(parent instanceof Classification){
61
            	    parentNodeUuid = ((Classification) parent).getRootNode().getUuid();
62
            	}
63
            	else{
64
            	    parentNodeUuid = parent.getUuid();
65
            	}
66
                UpdateResult result = CdmStore.getService(ITaxonNodeService.class).createNewTaxonNode(parentNodeUuid, taxon, parent.getReference(), parent.getMicroReference());
67

    
68
                //TaxonNode taxonNode = parent.addChildTaxon(taxon, parent.getReference(), parent.getMicroReference());
69

    
70
              /*  if(CdmStore.getCurrentSessionManager().isRemoting()) {
71
                    taxonNode = CdmStore.getService(ITaxonNodeService.class).merge(taxonNode);
72
                } else {
73
                    taxonNode = CdmStore.getService(ITaxonNodeService.class).save(taxonNode);
74
                }*/
75
            	generatedTaxonNodeUuid = result.getCdmEntity().getUuid();
76
            	TaxonNode taxonNode = CdmStore.getService(ITaxonNodeService.class).load(generatedTaxonNodeUuid);
77
            	taxonNode.getTaxon().setSec(sec);
78
            	CdmStore.getService(ITaxonNodeService.class).merge(taxonNode, true);
79
                Set<CdmBase> affectedObjects = new HashSet<CdmBase>();
80
                if (result.getUpdatedObjects().iterator().hasNext()){
81
                	TaxonNode parentNode = (TaxonNode)result.getUpdatedObjects().iterator().next();
82
                	if(parentNode.getParent() == null) {
83
                        affectedObjects.add(taxonNode.getClassification());
84
                    }
85
                	affectedObjects.add(parentNode);
86
                }
87

    
88
                if(CdmStore.getCurrentSessionManager().isRemoting()) {
89
                    CdmApplicationState.getCurrentDataChangeService()
90
                        .fireChangeEvent(new CdmChangeEvent(Action.Create, affectedObjects, NewTaxonNodeWizard.class), true);
91
                }
92
            }catch(IllegalArgumentException e){
93
                MessagingUtils.warningDialog("Taxon already exists in classfication", getClass(), e.getMessage());
94
            }
95
        }
96
    }
97

    
98
    @Override
99
    protected ITaxonTreeNode createNewEntity() {
100
        if(getSelection() != null){
101
            Object selectedObject = getSelection().getFirstElement();
102
            if(selectedObject instanceof ITaxonTreeNode){
103
                ITaxonTreeNode treeNode = (ITaxonTreeNode) selectedObject;
104

    
105
                if(treeNode instanceof Classification){
106
                    return CdmStore.getService(IClassificationService.class).load(treeNode.getUuid());
107
                }
108
                else if(treeNode instanceof TaxonNode){
109
                    return CdmStore.getService(ITaxonNodeService.class).load(treeNode.getUuid());
110
                }
111
            }
112
        }
113

    
114
        return null;
115
    }
116

    
117
    /**
118
     * <p>openInEditor</p>
119
     *
120
     * @return a boolean.
121
     */
122
    public boolean openInEditor(){
123
        return taxonNodePage.openInEditor();
124
    }
125

    
126
    /**
127
     * <p>openEmpty</p>
128
     *
129
     * @return a boolean.
130
     */
131
    public boolean openEmpty(){
132
        return openInEditor() && openEmptyEditor;
133
    }
134

    
135
    /**
136
     * <p>getTaxonNode</p>
137
     *
138
     * @return a {@link eu.etaxonomy.cdm.model.taxon.TaxonNode} object.
139
     */
140
    public TaxonNode getTaxonNode(){
141
        if(generatedTaxonNodeUuid != null){
142
            return CdmStore.getService(ITaxonNodeService.class).load(generatedTaxonNodeUuid);
143
        }
144
        return null;
145
    }
146

    
147
    public ITaxonTreeNode getParentTreeNode(){
148
        return taxonNodePage.getParentTreeNode();
149
    }
150

    
151
    @Override
152
    protected String getEntityName() {
153
        return "Taxon";
154
    }
155

    
156
    public void addWizardPageListener(IWizardPageListener wizardPageListener){
157
        this.wizardPageListener = wizardPageListener;
158
    }
159

    
160
}
(18-18/23)