Project

General

Profile

Download (5.98 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 com.vaadin.data.util.sqlcontainer.RowId;
20

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

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

    
47

    
48

    
49
    private final CdmSQLContainer secRefContainer;
50

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

    
57

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

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

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

    
83
        Reference sec = CdmBase.deproxy(referenceService.load(uuid), Reference.class);
84

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

    
97
        app.commitTransaction(tx);
98
        return new IdUuidName(newTaxonNode.getTaxon().getId(), newTaxonNode.getTaxon().getUuid(), newTaxonNode.getTaxon().getTitleCache());
99
    }
100

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

    
123

    
124
    @Override
125
    public Object getAcceptedTaxonRefId(UUID accTaxonUuid) {
126
        Taxon accTaxon = CdmBase.deproxy(taxonService.load(accTaxonUuid), Taxon.class);
127
        if(accTaxon.getSec() != null) {
128
            int refId = accTaxon.getSec().getId();
129
            RowId itemId = new RowId(refId);
130
            return itemId;
131
        }
132
        return null;
133
    }
134

    
135
    @Override
136
    public Object getClassificationRefId(UUID classificationUuid) {
137
        Classification classification = CdmBase.deproxy(classificationService.load(classificationUuid), Classification.class);
138
        if(classification.getReference() != null) {
139
            int refId = classification.getReference().getId();
140
            RowId itemId = new RowId(refId);
141
            return itemId;
142
        }
143
        return null;
144
    }
145

    
146

    
147

    
148
}
(4-4/5)