Project

General

Profile

Download (7.19 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.INameService;
24
import eu.etaxonomy.cdm.api.service.IReferenceService;
25
import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
26
import eu.etaxonomy.cdm.api.service.ITaxonService;
27
import eu.etaxonomy.cdm.api.service.pager.Pager;
28
import eu.etaxonomy.cdm.model.common.CdmBase;
29
import eu.etaxonomy.cdm.model.name.NonViralName;
30
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
31
import eu.etaxonomy.cdm.model.reference.Reference;
32
import eu.etaxonomy.cdm.model.taxon.Classification;
33
import eu.etaxonomy.cdm.model.taxon.Synonym;
34
import eu.etaxonomy.cdm.model.taxon.SynonymType;
35
import eu.etaxonomy.cdm.model.taxon.Taxon;
36
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
37
import eu.etaxonomy.cdm.persistence.query.MatchMode;
38
import eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl;
39
import eu.etaxonomy.cdm.vaadin.container.CdmSQLContainer;
40
import eu.etaxonomy.cdm.vaadin.container.IdUuidName;
41
import eu.etaxonomy.cdm.vaadin.util.CdmSpringContextHelper;
42
import eu.etaxonomy.cdm.vaadin.view.INewTaxonBaseComponentListener;
43

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

    
51
    private final CdmSQLContainer accTaxonSecRefContainer;
52
    private final CdmSQLContainer synSecRefContainer;
53

    
54
    private final IReferenceService referenceService;
55
    private final ITaxonNodeService taxonNodeService;
56
    private final ITaxonService taxonService;
57
    private final IClassificationService classificationService;
58
    private final INameService nameService;
59
    private final ICdmApplicationConfiguration app;
60

    
61

    
62

    
63
    @Override
64
    public CdmSQLContainer getAccTaxonSecRefContainer() {
65
        return accTaxonSecRefContainer;
66
    }
67

    
68
    @Override
69
    public CdmSQLContainer getSynSecRefContainer() {
70
        return synSecRefContainer;
71
    }
72

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

    
81
        classificationService = CdmSpringContextHelper.getClassificationService();
82
        app = CdmSpringContextHelper.getApplicationConfiguration();
83
    }
84

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

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

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

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

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

    
126
    /* (non-Javadoc)
127
     * @see eu.etaxonomy.cdm.vaadin.view.INewTaxonBaseComponentListener#newSynonym(java.lang.String, java.lang.Object, java.util.UUID)
128
     */
129
    @Override
130
    public IdUuidName newSynonym(String scientificName, Object synSecRefItemId, Object accTaxonSecRefItemId, UUID accTaxonUuid) {
131
        NonViralNameParserImpl parser = NonViralNameParserImpl.NewInstance();
132
        NonViralName name = parser.parseFullName(scientificName);
133

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

    
142
        UUID synRefUuid = synSecRefContainer.getUuid(synSecRefItemId);
143
        Reference synSec = CdmBase.deproxy(referenceService.load(synRefUuid), Reference.class);
144

    
145
        //name.setTitleCache(scientificName, true);
146
        Synonym newSynonym = Synonym.NewInstance(name, synSec);
147

    
148

    
149
        UUID accTaxonRefUuid = accTaxonSecRefContainer.getUuid(accTaxonSecRefItemId);
150
        Reference accTaxonSec = CdmBase.deproxy(referenceService.load(accTaxonRefUuid), Reference.class);
151
        Taxon accTaxon = CdmBase.deproxy(taxonService.load(accTaxonUuid, ACC_TAXON_INIT_STRATEGY), Taxon.class);
152
        accTaxon.setSec(accTaxonSec);
153

    
154
        accTaxon.addSynonym(newSynonym, SynonymType.SYNONYM_OF());
155

    
156
        UUID newUuid = taxonService.save(newSynonym).getUuid();
157
        app.commitTransaction(tx);
158
        return new IdUuidName(newSynonym.getId(), newUuid, newSynonym.getTitleCache());
159
    }
160

    
161

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

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

    
184

    
185

    
186
}
(4-4/5)