Project

General

Profile

Download (6.22 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.ITaxonService;
18
import eu.etaxonomy.cdm.api.service.UpdateResult;
19
import eu.etaxonomy.cdm.model.common.CdmBase;
20
import eu.etaxonomy.cdm.model.reference.Reference;
21
import eu.etaxonomy.cdm.model.taxon.Classification;
22
import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
23
import eu.etaxonomy.cdm.model.taxon.Taxon;
24
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
25
import eu.etaxonomy.taxeditor.model.MessagingUtils;
26
import eu.etaxonomy.taxeditor.store.CdmStore;
27
import eu.etaxonomy.taxeditor.ui.section.classification.TaxonNodeWizardPage;
28

    
29
/**
30
 * <p>NewTaxonNodeWizard class.</p>
31
 *
32
 * @author n.hoffmann
33
 * @created Sep 15, 2009
34
 * @version 1.0
35
 */
36
public class NewTaxonNodeWizard extends AbstractNewEntityWizard<ITaxonTreeNode>{
37

    
38
    private TaxonNodeWizardPage taxonNodePage;
39
    private boolean openEmptyEditor;
40
    private UUID generatedTaxonNodeUuid;
41
    private IWizardPageListener wizardPageListener;
42

    
43
    @Override
44
    public void addPages() {
45
        taxonNodePage = new TaxonNodeWizardPage(formFactory, getConversationHolder(), getEntity(), wizardPageListener, true);
46

    
47
        addPage(taxonNodePage);
48
    }
49

    
50
    @Override
51
    protected void saveEntity() {
52
        Taxon taxon = taxonNodePage.createTaxon();
53
        if(taxon == null || StringUtils.isEmpty(taxon.getName().getFullTitleCache())){
54
            openEmptyEditor = true;
55
        }else{
56
            getConversationHolder().bind();
57
            ITaxonTreeNode parent = getParentTreeNode();
58
            Reference sec = taxon.getSec();
59
            taxon.setSec(null);
60
            try{
61
            	UUID parentNodeUuid;
62
            	if(parent instanceof Classification){
63
            	    parentNodeUuid = ((Classification) parent).getRootNode().getUuid();
64
            	}
65
            	else{
66
            	    parentNodeUuid = parent.getUuid();
67
            	}
68
            	UpdateResult result;
69

    
70
            	if (taxon.getId() == 0){
71
            		result = CdmStore.getService(ITaxonNodeService.class).createNewTaxonNode(parentNodeUuid, taxon, parent.getReference(), parent.getMicroReference());
72
            	}else{
73
            		result = CdmStore.getService(ITaxonNodeService.class).createNewTaxonNode(parentNodeUuid, taxon.getUuid(), parent.getReference(), parent.getMicroReference());
74
            	}
75
            	if (result.isOk()){
76
	             	generatedTaxonNodeUuid = result.getCdmEntity().getUuid();
77
	             	TaxonNode taxonNode = CdmStore.getService(ITaxonNodeService.class).load(generatedTaxonNodeUuid);
78
	             	taxonNode.getTaxon().setSec(sec);
79
	             	CdmStore.getService(ITaxonNodeService.class).merge(taxonNode, true);
80
	                 Set<CdmBase> affectedObjects = new HashSet<CdmBase>();
81
	                 if (result.getUpdatedObjects().iterator().hasNext()){
82
	                 	TaxonNode parentNode = (TaxonNode)result.getUpdatedObjects().iterator().next();
83
	                 	if(parentNode.getParent() == null) {
84
	                         affectedObjects.add(taxonNode.getClassification());
85
	                     }
86
	                 	affectedObjects.add(parentNode);
87
	                 }
88
	                 CdmApplicationState.getCurrentDataChangeService()
89
	                         .fireChangeEvent(new CdmChangeEvent(Action.Create, affectedObjects, NewTaxonNodeWizard.class), true);
90

    
91
	             }else{
92
	                 if (!result.isOk()){
93
	                     if (!result.getExceptions().isEmpty()){
94
	                         MessagingUtils.error(getClass(), "Taxon could not be created", result.getExceptions().iterator().next());
95
	                     }else{
96
	                         MessagingUtils.warn(getClass(), "Taxon could not be created");
97
	                     }
98
	                 }
99
	             }
100
          }catch(IllegalArgumentException e){
101
                MessagingUtils.warningDialog("Taxon already exists in classfication", getClass(), e.getMessage());
102
            }
103
        }
104
    }
105

    
106
    @Override
107
    protected ITaxonTreeNode createNewEntity() {
108
        if(getSelection() != null){
109
            Object selectedObject = getSelection().getFirstElement();
110
            if(selectedObject instanceof ITaxonTreeNode){
111
            	ITaxonTreeNode treeNode = (ITaxonTreeNode) selectedObject;
112

    
113
            	if(treeNode instanceof TaxonNode){
114
	            	TaxonNode node =  CdmStore.getService(ITaxonNodeService.class).load(treeNode.getUuid());
115
	            	if(node.getTaxon()!=null){
116
	            	    //FIXME this taxon is not used. Do we need this call?
117
	            	    Taxon taxon = (Taxon) CdmStore.getService(ITaxonService.class).load(node.getTaxon().getUuid());
118
	            	}
119
	            	else if(node.getClassification()!=null){
120
	            	    return CdmStore.getService(IClassificationService.class).load(node.getClassification().getUuid());
121
	            	}
122
	                return node;
123
            	}
124
            }
125
        }
126

    
127
        return null;
128
    }
129

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

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

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

    
160
    public ITaxonTreeNode getParentTreeNode(){
161
        return taxonNodePage.getParentTreeNode();
162
    }
163

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

    
169
    public void addWizardPageListener(IWizardPageListener wizardPageListener){
170
        this.wizardPageListener = wizardPageListener;
171
    }
172

    
173
}
(18-18/23)