Project

General

Profile

Download (6.88 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.cdm.persistence.dto.MergeResult;
26
import eu.etaxonomy.taxeditor.model.MessagingUtils;
27
import eu.etaxonomy.taxeditor.store.CdmStore;
28
import eu.etaxonomy.taxeditor.ui.section.classification.TaxonNodeDetailElement;
29
import eu.etaxonomy.taxeditor.ui.section.classification.TaxonNodeWizardPage;
30

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

    
40
    private TaxonNodeWizardPage taxonNodePage;
41
    private boolean openEmptyEditor;
42
    private UUID generatedTaxonNodeUuid;
43
    private IWizardPageListener wizardPageListener;
44

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

    
49
        addPage(taxonNodePage);
50
    }
51

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

    
72
            	if (taxon.getId() == 0){
73
            		result = CdmStore.getService(ITaxonNodeService.class).createNewTaxonNode(parentNodeUuid, taxon, parent.getReference(), parent.getMicroReference());
74
            	}else{
75
            		result = CdmStore.getService(ITaxonNodeService.class).createNewTaxonNode(parentNodeUuid, taxon.getUuid(), parent.getReference(), parent.getMicroReference());
76
            	}
77
            	if (result.isOk()){
78
	             	generatedTaxonNodeUuid = result.getCdmEntity().getUuid();
79
	             	TaxonNode taxonNode = CdmStore.getService(ITaxonNodeService.class).load(generatedTaxonNodeUuid);
80
	             	taxonNode.getTaxon().setSec(sec);
81
	             	taxonNode.setExcluded(((TaxonNodeDetailElement)taxonNodePage.getDetailElement()).isExcluded());
82
	             	taxonNode.setUnplaced(((TaxonNodeDetailElement)taxonNodePage.getDetailElement()).isUnplaced());
83
	             	MergeResult resultMerge =  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
	                 if (resultMerge.getMergedEntity() instanceof TaxonNode){
93
	                        TaxonNode node = (TaxonNode)resultMerge.getMergedEntity();
94
	                        affectedObjects.remove(node);
95

    
96
	                        affectedObjects.add(node);
97
	                     }
98
	                 CdmApplicationState.getCurrentDataChangeService()
99
	                         .fireChangeEvent(new CdmChangeEvent(Action.Create, affectedObjects, NewTaxonNodeWizard.class), true);
100

    
101
	             }else{
102
	                 if (!result.isOk()){
103
	                     if (!result.getExceptions().isEmpty()){
104
	                         MessagingUtils.error(getClass(), "Taxon could not be created", result.getExceptions().iterator().next());
105
	                     }else{
106
	                         MessagingUtils.warn(getClass(), "Taxon could not be created");
107
	                     }
108
	                 }
109
	             }
110
          }catch(IllegalArgumentException e){
111
                MessagingUtils.warningDialog("Taxon already exists in classfication", getClass(), e.getMessage());
112
            }
113
        }
114
    }
115

    
116
    @Override
117
    protected ITaxonTreeNode createNewEntity() {
118
        if(getSelection() != null){
119
            Object selectedObject = getSelection().getFirstElement();
120
            if(selectedObject instanceof ITaxonTreeNode){
121
            	ITaxonTreeNode treeNode = (ITaxonTreeNode) selectedObject;
122

    
123
            	if(treeNode instanceof TaxonNode){
124
	            	TaxonNode node =  CdmStore.getService(ITaxonNodeService.class).load(treeNode.getUuid());
125
	            	if(node.getTaxon()!=null){
126
	            	    //FIXME this taxon is not used. Do we need this call?
127
	            	    Taxon taxon = (Taxon) CdmStore.getService(ITaxonService.class).load(node.getTaxon().getUuid());
128
	            	}
129
	            	else if(node.getClassification()!=null){
130
	            	    return CdmStore.getService(IClassificationService.class).load(node.getClassification().getUuid());
131
	            	}
132
	                return node;
133
            	}
134
            }
135
        }
136

    
137
        return null;
138
    }
139

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

    
149
    /**
150
     * <p>openEmpty</p>
151
     *
152
     * @return a boolean.
153
     */
154
    public boolean openEmpty(){
155
        return openInEditor() && openEmptyEditor;
156
    }
157

    
158
    /**
159
     * <p>getTaxonNode</p>
160
     *
161
     * @return a {@link eu.etaxonomy.cdm.model.taxon.TaxonNode} object.
162
     */
163
    public TaxonNode getTaxonNode(){
164
        if(generatedTaxonNodeUuid != null){
165
            return CdmStore.getService(ITaxonNodeService.class).load(generatedTaxonNodeUuid);
166
        }
167
        return null;
168
    }
169

    
170
    public ITaxonTreeNode getParentTreeNode(){
171
        return taxonNodePage.getParentTreeNode();
172
    }
173

    
174
    @Override
175
    protected String getEntityName() {
176
        return "Taxon";
177
    }
178

    
179
    public void addWizardPageListener(IWizardPageListener wizardPageListener){
180
        this.wizardPageListener = wizardPageListener;
181
    }
182

    
183
}
(18-18/23)