Project

General

Profile

Download (6.33 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 *
3
 */
4
package eu.etaxonomy.taxeditor.newWizard;
5

    
6
import java.util.ArrayList;
7
import java.util.HashSet;
8
import java.util.List;
9
import java.util.Set;
10
import java.util.UUID;
11

    
12
import org.apache.commons.lang.StringUtils;
13

    
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;
32

    
33
/**
34
 * <p>NewTaxonNodeWizard class.</p>
35
 *
36
 * @author n.hoffmann
37
 * @created Sep 15, 2009
38
 * @version 1.0
39
 */
40
public class NewTaxonNodeWizard extends AbstractNewEntityWizard<ITaxonTreeNode>{
41

    
42
    private TaxonNodeWizardPage taxonNodePage;
43
    private boolean openEmptyEditor;
44
    private UUID generatedTaxonNodeUuid;
45
    private IWizardPageListener wizardPageListener;
46

    
47
    @Override
48
    public void addPages() {
49
        taxonNodePage = new TaxonNodeWizardPage(formFactory, getConversationHolder(), getEntity(), wizardPageListener, true);
50

    
51
        addPage(taxonNodePage);
52
    }
53

    
54
    @Override
55
    protected void saveEntity() {
56
        Taxon taxon = taxonNodePage.createTaxon();
57
        if(taxon == null || StringUtils.isEmpty(taxon.getName().getFullTitleCache())){
58
            openEmptyEditor = true;
59
        }else{
60
            getConversationHolder().bind();
61
            ITaxonTreeNode parent = getParentTreeNode();
62
            Reference sec = taxon.getSec();
63
            taxon.setSec(null);
64
            try{
65
            	UUID parentNodeUuid;
66
            	if(parent instanceof Classification){
67
            	    parentNodeUuid = ((Classification) parent).getRootNode().getUuid();
68
            	}
69
            	else{
70
            	    parentNodeUuid = parent.getUuid();
71
            	}
72
            	UpdateResult result;
73
            	
74
            	if (taxon.getId() == 0){
75
            		result = CdmStore.getService(ITaxonNodeService.class).createNewTaxonNode(parentNodeUuid, taxon, parent.getReference(), parent.getMicroReference());
76
            	}else{
77
            		result = CdmStore.getService(ITaxonNodeService.class).createNewTaxonNode(parentNodeUuid, taxon.getUuid(), parent.getReference(), parent.getMicroReference());
78
            	}
79
            	if (result.isOk()){
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());
89
	                     }
90
	                 	affectedObjects.add(parentNode);
91
	                 }
92
	                 CdmApplicationState.getCurrentDataChangeService()
93
	                         .fireChangeEvent(new CdmChangeEvent(Action.Create, affectedObjects, NewTaxonNodeWizard.class), true);
94
	                 
95
	             }else{
96
	                 if (!result.isOk()){
97
	                     if (!result.getExceptions().isEmpty()){
98
	                         MessagingUtils.error(getClass(), "Taxon could not be created", result.getExceptions().iterator().next());
99
	                     }else{
100
	                         MessagingUtils.warn(getClass(), "Taxon could not be created");
101
	                     }
102
	                 }
103
	             }
104
          }catch(IllegalArgumentException e){
105
                MessagingUtils.warningDialog("Taxon already exists in classfication", getClass(), e.getMessage());
106
            }
107
        }
108
    }
109

    
110
    @Override
111
    protected ITaxonTreeNode createNewEntity() {
112
        if(getSelection() != null){
113
            Object selectedObject = getSelection().getFirstElement();
114
            if(selectedObject instanceof ITaxonTreeNode){
115
                ITaxonTreeNode treeNode = (ITaxonTreeNode) selectedObject;
116

    
117
                if(treeNode instanceof Classification){
118
                    return CdmStore.getService(IClassificationService.class).load(treeNode.getUuid());
119
                }
120
                else if(treeNode instanceof TaxonNode){
121
                	
122
                	TaxonNode node =  CdmStore.getService(ITaxonNodeService.class).load(treeNode.getUuid());
123
                	Taxon taxon = (Taxon) CdmStore.getService(ITaxonService.class).load(node.getTaxon().getUuid());
124
                    return node;
125
                }
126
            }
127
        }
128

    
129
        return null;
130
    }
131

    
132
    /**
133
     * <p>openInEditor</p>
134
     *
135
     * @return a boolean.
136
     */
137
    public boolean openInEditor(){
138
        return taxonNodePage.openInEditor();
139
    }
140

    
141
    /**
142
     * <p>openEmpty</p>
143
     *
144
     * @return a boolean.
145
     */
146
    public boolean openEmpty(){
147
        return openInEditor() && openEmptyEditor;
148
    }
149

    
150
    /**
151
     * <p>getTaxonNode</p>
152
     *
153
     * @return a {@link eu.etaxonomy.cdm.model.taxon.TaxonNode} object.
154
     */
155
    public TaxonNode getTaxonNode(){
156
        if(generatedTaxonNodeUuid != null){
157
            return CdmStore.getService(ITaxonNodeService.class).load(generatedTaxonNodeUuid);
158
        }
159
        return null;
160
    }
161

    
162
    public ITaxonTreeNode getParentTreeNode(){
163
        return taxonNodePage.getParentTreeNode();
164
    }
165

    
166
    @Override
167
    protected String getEntityName() {
168
        return "Taxon";
169
    }
170

    
171
    public void addWizardPageListener(IWizardPageListener wizardPageListener){
172
        this.wizardPageListener = wizardPageListener;
173
    }
174

    
175
}
(18-18/23)