Project

General

Profile

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

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

    
16
import org.springframework.transaction.TransactionStatus;
17

    
18
import com.vaadin.data.util.sqlcontainer.RowId;
19

    
20
import eu.etaxonomy.cdm.api.application.ICdmRepository;
21
import eu.etaxonomy.cdm.api.service.IClassificationService;
22
import eu.etaxonomy.cdm.api.service.INameService;
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.api.service.pager.Pager;
27
import eu.etaxonomy.cdm.model.common.CdmBase;
28
import eu.etaxonomy.cdm.model.name.INonViralName;
29
import eu.etaxonomy.cdm.model.name.TaxonName;
30
import eu.etaxonomy.cdm.model.reference.Reference;
31
import eu.etaxonomy.cdm.model.taxon.Classification;
32
import eu.etaxonomy.cdm.model.taxon.Synonym;
33
import eu.etaxonomy.cdm.model.taxon.SynonymType;
34
import eu.etaxonomy.cdm.model.taxon.Taxon;
35
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
36
import eu.etaxonomy.cdm.persistence.query.MatchMode;
37
import eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl;
38
import eu.etaxonomy.cdm.vaadin.container.CdmSQLContainer;
39
import eu.etaxonomy.cdm.vaadin.container.IdUuidName;
40
import eu.etaxonomy.cdm.vaadin.util.CdmSpringContextHelper;
41

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

    
49
    private final CdmSQLContainer accTaxonSecRefContainer;
50
    private final CdmSQLContainer synSecRefContainer;
51

    
52
    private final IReferenceService referenceService;
53
    private final ITaxonNodeService taxonNodeService;
54
    private final ITaxonService taxonService;
55
    private final IClassificationService classificationService;
56
    private final INameService nameService;
57
    private final ICdmRepository app;
58

    
59

    
60

    
61
    @Override
62
    public CdmSQLContainer getAccTaxonSecRefContainer() {
63
        return accTaxonSecRefContainer;
64
    }
65

    
66
    @Override
67
    public CdmSQLContainer getSynSecRefContainer() {
68
        return synSecRefContainer;
69
    }
70

    
71
    public NewTaxonBasePresenter() throws SQLException {
72
        accTaxonSecRefContainer = CdmSQLContainer.newInstance("Reference");
73
        synSecRefContainer = CdmSQLContainer.newInstance("Reference");
74
        referenceService = CdmSpringContextHelper.getReferenceService();
75
        taxonNodeService = CdmSpringContextHelper.getTaxonNodeService();
76
        taxonService = CdmSpringContextHelper.getTaxonService();
77
        nameService = CdmSpringContextHelper.getNameService();
78

    
79
        classificationService = CdmSpringContextHelper.getClassificationService();
80
        app = CdmSpringContextHelper.getApplicationConfiguration();
81
    }
82

    
83
    private boolean checkIfNameExists(INonViralName nvn) {
84
        TaxonName name = TaxonName.castAndDeproxy(nvn);
85
        Pager<TaxonName> names = nameService.findByName(name.getClass(),
86
                name.getNameCache(),
87
                MatchMode.EXACT,
88
                null,
89
                null,
90
                -1,
91
                null,
92
                null);
93
        if(names.getCount() > 0) {
94
            return true;
95
        }
96
        return false;
97
    }
98

    
99
    @Override
100
    public IdUuidName newTaxon(String scientificName, Object secRefItemId, UUID classificationUuid) {
101
        NonViralNameParserImpl parser = NonViralNameParserImpl.NewInstance();
102
        INonViralName name = parser.parseFullName(scientificName);
103

    
104
        if(checkIfNameExists(name)) {
105
            throw new IllegalArgumentException("Given name already exists");
106
        }
107
        TransactionStatus tx = app.startTransaction();
108
        UUID uuid = accTaxonSecRefContainer.getUuid(secRefItemId);
109
        Reference sec = CdmBase.deproxy(referenceService.load(uuid), Reference.class);
110

    
111
        //name.setTitleCache(scientificName, true);
112
        Taxon newTaxon = Taxon.NewInstance(name, sec);
113
        List<String> CLASSIFICATION_INIT_STRATEGY = Arrays.asList(new String []{
114
                "rootNode.childNodes"
115
        });
116
        Classification classification = CdmBase.deproxy(classificationService.load(classificationUuid, CLASSIFICATION_INIT_STRATEGY), Classification.class);
117
        TaxonNode newTaxonNode = classification.addChildTaxon(newTaxon, null, null);
118
        taxonNodeService.saveOrUpdate(newTaxonNode);
119
        newTaxonNode.setUnplaced(true);
120

    
121
        app.commitTransaction(tx);
122
        return new IdUuidName(newTaxonNode.getTaxon().getId(), newTaxonNode.getTaxon().getUuid(), newTaxonNode.getTaxon().getTitleCache());
123
    }
124

    
125
    @Override
126
    public IdUuidName newSynonym(String scientificName, Object synSecRefItemId, Object accTaxonSecRefItemId, UUID accTaxonUuid) {
127
        NonViralNameParserImpl parser = NonViralNameParserImpl.NewInstance();
128
        INonViralName name = parser.parseFullName(scientificName);
129

    
130
        if(checkIfNameExists(name)) {
131
            throw new IllegalArgumentException("Given name already exists");
132
        }
133
        TransactionStatus tx = app.startTransaction();
134
        List<String> ACC_TAXON_INIT_STRATEGY = Arrays.asList(new String []{
135
                "synonymRelations"
136
        });
137

    
138
        UUID synRefUuid = synSecRefContainer.getUuid(synSecRefItemId);
139
        Reference synSec = CdmBase.deproxy(referenceService.load(synRefUuid), Reference.class);
140

    
141
        //name.setTitleCache(scientificName, true);
142
        Synonym newSynonym = Synonym.NewInstance(name, synSec);
143

    
144

    
145
        UUID accTaxonRefUuid = accTaxonSecRefContainer.getUuid(accTaxonSecRefItemId);
146
        Reference accTaxonSec = CdmBase.deproxy(referenceService.load(accTaxonRefUuid), Reference.class);
147
        Taxon accTaxon = CdmBase.deproxy(taxonService.load(accTaxonUuid, ACC_TAXON_INIT_STRATEGY), Taxon.class);
148
        accTaxon.setSec(accTaxonSec);
149

    
150
        accTaxon.addSynonym(newSynonym, SynonymType.SYNONYM_OF());
151

    
152
        UUID newUuid = taxonService.save(newSynonym).getUuid();
153
        app.commitTransaction(tx);
154
        return new IdUuidName(newSynonym.getId(), newUuid, newSynonym.getTitleCache());
155
    }
156

    
157

    
158
    @Override
159
    public Object getAcceptedTaxonRefId(UUID accTaxonUuid) {
160
        Taxon accTaxon = CdmBase.deproxy(taxonService.load(accTaxonUuid), Taxon.class);
161
        if(accTaxon.getSec() != null) {
162
            int refId = accTaxon.getSec().getId();
163
            RowId itemId = new RowId(refId);
164
            return itemId;
165
        }
166
        return null;
167
    }
168

    
169
    @Override
170
    public Object getClassificationRefId(UUID classificationUuid) {
171
        Classification classification = CdmBase.deproxy(classificationService.load(classificationUuid), Classification.class);
172
        if(classification.getReference() != null) {
173
            int refId = classification.getReference().getId();
174
            RowId itemId = new RowId(refId);
175
            return itemId;
176
        }
177
        return null;
178
    }
179

    
180

    
181

    
182
}
(10-10/12)