Project

General

Profile

Download (7.32 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.ITaxonNodeService;
16
import eu.etaxonomy.cdm.api.service.UpdateResult;
17
import eu.etaxonomy.cdm.model.common.CdmBase;
18
import eu.etaxonomy.cdm.model.name.TaxonNameFactory;
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.cdm.persistence.dto.MergeResult;
25
import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
26
import eu.etaxonomy.taxeditor.model.MessagingUtils;
27
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
28
import eu.etaxonomy.taxeditor.store.CdmStore;
29
import eu.etaxonomy.taxeditor.ui.section.classification.TaxonNodeDetailElement;
30
import eu.etaxonomy.taxeditor.ui.section.classification.TaxonNodeWizardPage;
31

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

    
41
    private TaxonNodeWizardPage taxonNodePage;
42
    private boolean openEmptyEditor;
43
    private UUID generatedTaxonNodeUuid;
44
    private IWizardPageListener wizardPageListener;
45
    private boolean isOpenInEditor = false;
46

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

    
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

    
73

    
74
            	UpdateResult result;
75

    
76

    
77
            	if (taxon.getId() == 0){
78
            	    //getEntity().setTaxon(taxon);
79
            		result = CdmStore.getService(ITaxonNodeService.class).saveNewTaxonNode(getEntity());
80

    
81
            	}else{
82
            		result = CdmStore.getService(ITaxonNodeService.class).createNewTaxonNode(parentNodeUuid, taxon.getUuid(), parent.getReference(), parent.getMicroReference());
83
            	}
84
            	if (result.isOk()){
85
	             	generatedTaxonNodeUuid = result.getCdmEntity().getUuid();
86
	             	TaxonNode taxonNode = CdmStore.getService(ITaxonNodeService.class).load(generatedTaxonNodeUuid);
87
	             	taxonNode.getTaxon().setSec(sec);
88
	             	taxonNode.setExcluded(((TaxonNodeDetailElement)taxonNodePage.getDetailElement()).isExcluded());
89
	             	taxonNode.setUnplaced(((TaxonNodeDetailElement)taxonNodePage.getDetailElement()).isUnplaced());
90

    
91

    
92
	             	MergeResult resultMerge =  CdmStore.getService(ITaxonNodeService.class).merge(taxonNode, true);
93
	                 Set<CdmBase> affectedObjects = new HashSet<CdmBase>();
94
	                 if (result.getUpdatedObjects().iterator().hasNext()){
95
	                 	TaxonNode parentNode = (TaxonNode)result.getUpdatedObjects().iterator().next();
96
	                 	if(parentNode.getParent() == null) {
97
	                         affectedObjects.add(taxonNode.getClassification());
98
	                     }
99
	                 	affectedObjects.add(parentNode);
100
	                 }
101
	                 if (resultMerge.getMergedEntity() instanceof TaxonNode){
102
	                        TaxonNode node = (TaxonNode)resultMerge.getMergedEntity();
103
	                        affectedObjects.remove(node);
104

    
105
	                        affectedObjects.add(node);
106
	                     }
107
	                 CdmApplicationState.getCurrentDataChangeService()
108
	                         .fireChangeEvent(new CdmChangeEvent(Action.Create, affectedObjects, NewTaxonNodeWizard.class), true);
109

    
110
	             }else{
111
	                 if (!result.isOk()){
112
	                     if (!result.getExceptions().isEmpty()){
113
	                         MessagingUtils.error(getClass(), "Taxon could not be created", result.getExceptions().iterator().next());
114
	                     }else{
115
	                         MessagingUtils.warn(getClass(), "Taxon could not be created");
116
	                     }
117
	                 }
118
	             }
119
          }catch(IllegalArgumentException e){
120
                MessagingUtils.warningDialog("Taxon already exists in classfication", getClass(), e.getMessage());
121
            }
122
        }
123
    }
124

    
125
    @Override
126
    protected TaxonNode createNewEntity() {
127
        if(getSelection() != null){
128
            Object selectedObject = getSelection().getFirstElement();
129
            if(selectedObject instanceof TaxonNodeDto){
130
                TaxonNodeDto taxonNodeDto = (TaxonNodeDto) selectedObject;
131
            	TaxonNode node =  CdmStore.getService(ITaxonNodeService.class).load(taxonNodeDto.getUuid());
132
            	Reference sec = node.getTaxon() != null? node.getTaxon().getSec():null;
133
            	Taxon newTaxon = Taxon.NewInstance(TaxonNameFactory.NewNameInstance(PreferencesUtil.getPreferredNomenclaturalCode(), null), sec);
134
            	TaxonNode child = node.addChildTaxon(newTaxon, null, null);
135
//            	if(node.getTaxon()!=null){
136
//            	    //FIXME this taxon is not used. Do we need this call?
137
//            	    Taxon taxon = (Taxon) CdmStore.getService(ITaxonService.class).load(node.getTaxon().getUuid());
138
//            	}
139
//            	else if(node.getClassification()!=null){
140
//            	    return CdmStore.getService(IClassificationService.class).load(node.getClassification().getUuid());
141
//            	}
142
                return child;
143

    
144
            }
145
        }
146

    
147
        return null;
148
    }
149

    
150

    
151
    /**
152
     * <p>
153
     * openInEditor
154
     * </p>
155
     *
156
     * @return a boolean.
157
     */
158
    public boolean openInEditor() {
159
        return isOpenInEditor ;
160
    }
161

    
162
    public void setOpenInEditor(boolean isOpenInEditor) {
163
        this.isOpenInEditor = isOpenInEditor;
164
    }
165

    
166
    /**
167
     * <p>openEmpty</p>
168
     *
169
     * @return a boolean.
170
     */
171
    public boolean openEmpty(){
172
        return openInEditor() && openEmptyEditor;
173
    }
174

    
175
    /**
176
     * <p>getTaxonNode</p>
177
     *
178
     * @return a {@link eu.etaxonomy.cdm.model.taxon.TaxonNode} object.
179
     */
180
    public TaxonNode getTaxonNode(){
181
        if(generatedTaxonNodeUuid != null){
182
            return CdmStore.getService(ITaxonNodeService.class).load(generatedTaxonNodeUuid);
183
        }
184
        return null;
185
    }
186

    
187
    public ITaxonTreeNode getParentTreeNode(){
188
        return taxonNodePage.getParentTreeNode();
189
    }
190

    
191
    @Override
192
    protected String getEntityName() {
193
        return "Taxon";
194
    }
195

    
196
    public void addWizardPageListener(IWizardPageListener wizardPageListener){
197
        this.wizardPageListener = wizardPageListener;
198
    }
199

    
200

    
201

    
202
}
(19-19/27)