Project

General

Profile

Download (5.11 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
* Copyright (C) 2015 EDIT
4
* European Distributed Institute of Taxonomy
5
* http://www.e-taxonomy.eu
6
*
7
* The contents of this file are subject to the Mozilla Public License Version 1.1
8
* See LICENSE.TXT at the top of this package for the full license terms.
9
*/
10
package eu.etaxonomy.cdm.vaadin.presenter;
11

    
12
import java.sql.SQLException;
13
import java.util.Arrays;
14
import java.util.List;
15
import java.util.UUID;
16

    
17
import org.springframework.transaction.TransactionStatus;
18

    
19
import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;
20
import eu.etaxonomy.cdm.api.service.IClassificationService;
21
import eu.etaxonomy.cdm.api.service.IReferenceService;
22
import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
23
import eu.etaxonomy.cdm.api.service.ITaxonService;
24
import eu.etaxonomy.cdm.model.common.CdmBase;
25
import eu.etaxonomy.cdm.model.name.NonViralName;
26
import eu.etaxonomy.cdm.model.reference.Reference;
27
import eu.etaxonomy.cdm.model.taxon.Classification;
28
import eu.etaxonomy.cdm.model.taxon.Synonym;
29
import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;
30
import eu.etaxonomy.cdm.model.taxon.Taxon;
31
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
32
import eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl;
33
import eu.etaxonomy.cdm.vaadin.container.CdmSQLContainer;
34
import eu.etaxonomy.cdm.vaadin.container.IdUuidName;
35
import eu.etaxonomy.cdm.vaadin.util.CdmSpringContextHelper;
36
import eu.etaxonomy.cdm.vaadin.view.INewTaxonBaseComponentListener;
37

    
38
/**
39
 * @author cmathew
40
 * @date 2 Apr 2015
41
 *
42
 */
43
public class NewTaxonBasePresenter implements INewTaxonBaseComponentListener {
44

    
45

    
46

    
47
    private final CdmSQLContainer secRefContainer;
48

    
49
    private final IReferenceService referenceService;
50
    private final ITaxonNodeService taxonNodeService;
51
    private final ITaxonService taxonService;
52
    private final IClassificationService classificationService;
53
    private final ICdmApplicationConfiguration app;
54

    
55

    
56
    /* (non-Javadoc)
57
     * @see eu.etaxonomy.cdm.vaadin.view.INewTaxonBaseComponentListener#getSecRefContainer()
58
     */
59
    @Override
60
    public CdmSQLContainer getSecRefContainer() {
61
        return secRefContainer;
62
    }
63

    
64
    public NewTaxonBasePresenter() throws SQLException {
65
        secRefContainer = CdmSQLContainer.newInstance("Reference");
66
        referenceService = CdmSpringContextHelper.getReferenceService();
67
        taxonNodeService = CdmSpringContextHelper.getTaxonNodeService();
68
        taxonService = CdmSpringContextHelper.getTaxonService();
69
        classificationService = CdmSpringContextHelper.getClassificationService();
70
        app = CdmSpringContextHelper.getApplicationConfiguration();
71
    }
72

    
73
    /* (non-Javadoc)
74
     * @see eu.etaxonomy.cdm.vaadin.view.INewTaxonBaseComponentListener#newTaxon(java.lang.String, java.lang.Object, java.util.UUID)
75
     */
76
    @Override
77
    public IdUuidName newTaxon(String scientificName, Object secRefItemId, UUID classificationUuid) {
78
        TransactionStatus tx = app.startTransaction();
79
        UUID uuid = secRefContainer.getUuid(secRefItemId);
80

    
81
        Reference sec = CdmBase.deproxy(referenceService.load(uuid), Reference.class);
82

    
83
        NonViralNameParserImpl parser = NonViralNameParserImpl.NewInstance();
84
        NonViralName name = parser.parseFullName(scientificName);
85
        name.setTitleCache(scientificName, true);
86
        Taxon newTaxon = Taxon.NewInstance(name, sec);
87
        List<String> CLASSIFICATION_INIT_STRATEGY = Arrays.asList(new String []{
88
                "rootNode.childNodes"
89
        });
90
        Classification classification = CdmBase.deproxy(classificationService.load(classificationUuid, CLASSIFICATION_INIT_STRATEGY), Classification.class);
91
        TaxonNode newTaxonNode = classification.addChildTaxon(newTaxon, null, null);
92
        UUID newUuid = taxonNodeService.saveOrUpdate(newTaxonNode);
93

    
94
        app.commitTransaction(tx);
95
        return new IdUuidName(newTaxonNode.getTaxon().getId(), newTaxonNode.getTaxon().getUuid(), newTaxonNode.getTaxon().getTitleCache());
96
    }
97

    
98
    /* (non-Javadoc)
99
     * @see eu.etaxonomy.cdm.vaadin.view.INewTaxonBaseComponentListener#newSynonym(java.lang.String, java.lang.Object, java.util.UUID)
100
     */
101
    @Override
102
    public IdUuidName newSynonym(String scientificName, Object secRefItemId, UUID accTaxonUuid) {
103
        TransactionStatus tx = app.startTransaction();
104
        List<String> ACC_TAXON_INIT_STRATEGY = Arrays.asList(new String []{
105
                "synonymRelations"
106
        });
107
        UUID refUuid = secRefContainer.getUuid(secRefItemId);
108
        Reference sec = CdmBase.deproxy(referenceService.load(refUuid), Reference.class);
109
        NonViralNameParserImpl parser = NonViralNameParserImpl.NewInstance();
110
        NonViralName name = parser.parseFullName(scientificName);
111
        name.setTitleCache(scientificName, true);
112
        Taxon accTaxon = CdmBase.deproxy(taxonService.load(accTaxonUuid, ACC_TAXON_INIT_STRATEGY), Taxon.class);
113
        Synonym newSynonym = Synonym.NewInstance(name, sec);
114
        accTaxon.addSynonym(newSynonym, SynonymRelationshipType.SYNONYM_OF());
115
        UUID newUuid = taxonService.save(newSynonym);
116
        app.commitTransaction(tx);
117
        return new IdUuidName(newSynonym.getId(), newUuid, newSynonym.getTitleCache());
118
    }
119

    
120

    
121
}
(4-4/5)