Project

General

Profile

Download (11.1 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.taxeditor.operation;
10

    
11
import java.util.ArrayList;
12
import java.util.Iterator;
13
import java.util.List;
14
import java.util.Set;
15
import java.util.UUID;
16

    
17
import org.apache.logging.log4j.LogManager;
18
import org.apache.logging.log4j.Logger;
19
import org.eclipse.core.commands.ExecutionException;
20
import org.junit.Assert;
21
import org.junit.Ignore;
22
import org.junit.Test;
23
import org.unitils.dbunit.annotation.DataSet;
24

    
25
import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
26
import eu.etaxonomy.cdm.api.service.ITaxonService;
27
import eu.etaxonomy.cdm.api.service.UpdateResult;
28
import eu.etaxonomy.cdm.model.common.Annotation;
29
import eu.etaxonomy.cdm.model.description.DescriptionElementSource;
30
import eu.etaxonomy.cdm.model.description.Feature;
31
import eu.etaxonomy.cdm.model.description.TaxonDescription;
32
import eu.etaxonomy.cdm.model.description.TextData;
33
import eu.etaxonomy.cdm.model.metadata.SecReferenceHandlingSwapEnum;
34
import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
35
import eu.etaxonomy.cdm.model.name.INonViralName;
36
import eu.etaxonomy.cdm.model.name.NameTypeDesignation;
37
import eu.etaxonomy.cdm.model.name.TaxonName;
38
import eu.etaxonomy.cdm.model.name.TaxonNameFactory;
39
import eu.etaxonomy.cdm.model.reference.OriginalSourceType;
40
import eu.etaxonomy.cdm.model.taxon.Synonym;
41
import eu.etaxonomy.cdm.model.taxon.Taxon;
42
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
43
import eu.etaxonomy.taxeditor.editor.name.operation.CreateSynonymInExistingHomotypicalGroupOperation;
44
import eu.etaxonomy.taxeditor.store.CdmStore;
45

    
46
/**
47
 * @author cmathew
48
 * @date 3 Feb 2015
49
 */
50
@DataSet
51
public class TaxonEditorTest extends BaseOperationTest {
52

    
53
    @SuppressWarnings("unused")
54
	private static final Logger logger = LogManager.getLogger();
55

    
56
    private ITaxonNodeService taxonNodeService = getRemoteApplicationController().getTaxonNodeService();
57
    private ITaxonService taxonService = getRemoteApplicationController().getTaxonService();
58

    
59
    @Test
60
    public void testAddHomotypicSynonym() throws ExecutionException {
61
        UUID taxonNodeUuid = UUID.fromString("ce54c396-3694-47f2-abb0-1d7b7e057985");
62

    
63
        TaxonNode taxonNode = taxonNodeService.load(taxonNodeUuid);
64
        Taxon taxon = taxonNode.getTaxon();
65
        HomotypicalGroup group = taxon.getHomotypicGroup();
66
        TaxonName newSynonymName = TaxonNameFactory.NewBotanicalInstance(null);
67
        newSynonymName.setTitleCache("New Synonym", true);
68
        operation = new CreateSynonymInExistingHomotypicalGroupOperation("Create Synonym In Existing Homotypical Group",
69
                undoContext, taxon, group, newSynonymName, postOperation);
70

    
71
        operation.execute(monitor, info);
72
        taxonNodeService.merge(taxonNode);
73
        Assert.assertEquals(taxon.getHomotypicGroup().getTypifiedNames().size(), 2);
74
        Assert.assertEquals(taxon.getSynonyms().size(), 1);
75
        Iterator<Synonym> synonymItr = taxon.getSynonyms().iterator();
76
        Synonym synonym = synonymItr.next();
77
        Assert.assertTrue(taxon.getHomotypicGroup().getTypifiedNames().contains(synonym.getName()));
78
    }
79

    
80
    @Test
81
    public void addHeterotypicSynonym() throws ExecutionException {
82
        UUID taxonNodeUuid = UUID.fromString("ce54c396-3694-47f2-abb0-1d7b7e057985");
83

    
84
        TaxonNode taxonNode = taxonNodeService.load(taxonNodeUuid);
85
        Taxon taxon = taxonNode.getTaxon();
86
        HomotypicalGroup group = taxon.getHomotypicGroup();
87
        TaxonName newSynonymName = TaxonNameFactory.NewBotanicalInstance(null);
88
        newSynonymName.setTitleCache("New Synonym", true);
89
        operation = new CreateSynonymInExistingHomotypicalGroupOperation("Create Synonym In Existing Homotypical Group",
90
                undoContext, taxon, group, newSynonymName, postOperation);
91

    
92
        operation.execute(monitor, info);
93
        taxonNodeService.merge(taxonNode);
94
    }
95

    
96
    @Test
97
    public void addDeleteAddHomotypicSynonym() throws ExecutionException {
98
        UUID taxonNodeUuid = UUID.fromString("ce54c396-3694-47f2-abb0-1d7b7e057985");
99

    
100
        TaxonNode taxonNode = taxonNodeService.load(taxonNodeUuid);
101
        Taxon taxon = taxonNode.getTaxon();
102
        HomotypicalGroup group = taxon.getHomotypicGroup();
103
        TaxonName newSynonymName = TaxonNameFactory.NewBotanicalInstance(null);
104
        newSynonymName.setTitleCache("New Synonym", true);
105
        operation = new CreateSynonymInExistingHomotypicalGroupOperation("Create Synonym In Existing Homotypical Group",
106
                undoContext, taxon, group, newSynonymName, postOperation);
107

    
108
        operation.execute(monitor, info);
109
        taxonNodeService.merge(taxonNode);
110

    
111
        Assert.assertEquals(taxon.getHomotypicGroup().getTypifiedNames().size(), 2);
112

    
113
        Set<Synonym> synonyms = taxon.getSynonyms();
114
        for(Synonym synonym : synonyms) {
115
            taxonService.deleteSynonym(synonym.getUuid(), null);
116
        }
117
        taxonNodeService.merge(taxonNode, true);
118

    
119
        newSynonymName = TaxonNameFactory.NewBotanicalInstance(null);
120
        newSynonymName.setTitleCache("Another New Synonym", true);
121
        operation = new CreateSynonymInExistingHomotypicalGroupOperation("Create Synonym In Existing Homotypical Group",
122
                undoContext, taxon, group, newSynonymName, postOperation);
123

    
124
        operation.execute(monitor, info);
125
        taxonNodeService.merge(taxonNode, true);
126
    }
127

    
128
    @Test
129
    public void addDeleteAddHomotypicSynonymWithAnnotations() throws ExecutionException {
130
        UUID taxonNodeUuid = UUID.fromString("ce54c396-3694-47f2-abb0-1d7b7e057985");
131

    
132
        TaxonNode taxonNode = taxonNodeService.load(taxonNodeUuid);
133
        Taxon taxon = taxonNode.getTaxon();
134
        HomotypicalGroup group = taxon.getHomotypicGroup();
135
        TaxonName newSynonymName = TaxonNameFactory.NewBotanicalInstance(null);
136
        newSynonymName.setTitleCache("New Synonym", true);
137
        operation = new CreateSynonymInExistingHomotypicalGroupOperation("Create Synonym In Existing Homotypical Group",
138
                undoContext, taxon, group, newSynonymName, postOperation);
139

    
140
        operation.execute(monitor, info);
141
        taxonNodeService.merge(taxonNode);
142

    
143
        boolean includeUnpublished = true;
144
        Synonym syn = taxonService.findBestMatchingSynonym("New Synonym", includeUnpublished);
145

    
146
        if (syn != null){
147
           syn.addAnnotation(Annotation.NewDefaultLanguageInstance("TEst"));
148
           taxonService.merge(syn);
149
        }
150

    
151
        Assert.assertEquals(taxon.getHomotypicGroup().getTypifiedNames().size(), 2);
152

    
153
        Set<Synonym> synonyms = taxon.getSynonyms();
154
        for(Synonym synonym : synonyms) {
155
            Assert.assertEquals(syn.getUuid(), synonym.getUuid());
156
            taxonService.deleteSynonym(synonym.getUuid(), null);
157
        }
158
        taxonNodeService.merge(taxonNode);
159

    
160
        newSynonymName = TaxonNameFactory.NewBotanicalInstance(null);
161
        newSynonymName.setTitleCache("Another New Synonym", true);
162
        operation = new CreateSynonymInExistingHomotypicalGroupOperation("Create Synonym In Existing Homotypical Group",
163
                undoContext, taxon, group, newSynonymName, postOperation);
164

    
165
        operation.execute(monitor, info);
166
        taxonNodeService.merge(taxonNode);
167
    }
168

    
169
    @Test
170
    @Ignore
171
    public void swapSynonymWithAcceptedTaxon() {
172
        List<TaxonNode> rootEntities = new ArrayList<TaxonNode>();
173
        UUID taxonNodeUuid = UUID.fromString("d425a971-1abe-4895-9e1f-1e5c8ff1c84c");
174
        TaxonNode taxonNode = taxonNodeService.load(taxonNodeUuid);
175
        rootEntities.add(taxonNode);
176

    
177
        UUID taxonUuid = UUID.fromString("9763e5f0-6cd4-4d96-b8a4-4420854f7727");
178
        Taxon taxon = (Taxon)taxonService.load(taxonUuid);
179
        TaxonName taxonName = taxon.getName();
180

    
181
        UUID synonymUuid = UUID.fromString("1eb173bd-b174-4162-8ff5-5136d8f1e746");
182
        Synonym synonym = (Synonym)taxonService.load(synonymUuid);
183
        TaxonName synonymName = synonym.getName();
184

    
185
        UpdateResult result = taxonService.swapSynonymAndAcceptedTaxon(synonym.getUuid(), taxon.getUuid(), false, false, SecReferenceHandlingSwapEnum.KeepOrWarn, null, null);
186
        taxon = (Taxon)result.getCdmEntity();
187
        Set<TaxonName> synNames = taxon.getSynonymNames();
188
        Iterator<TaxonName> iterator = synNames.iterator();
189
        if(iterator.hasNext()){
190
            Assert.assertEquals(taxonName, iterator.next());
191
        }else{
192
            Assert.fail();
193
        }
194

    
195
        Assert.assertEquals(synonymName, taxon.getName());
196
    }
197

    
198
    @Test
199
    public void addTaxon() {
200
        INonViralName taxonName = TaxonNameFactory.NewNonViralInstance(null);
201
        Taxon taxon = Taxon.NewInstance(taxonName, null);
202
        taxon = (Taxon)taxonService.merge(taxon);
203
        taxon.getName().addTypeDesignation(NameTypeDesignation.NewInstance(), true);
204
    }
205

    
206
    @Ignore
207
    @Test
208
    public void addDescription() {
209
        UUID taxonNodeUuid = UUID.fromString("ce54c396-3694-47f2-abb0-1d7b7e057985");
210

    
211
        TaxonNode taxonNode = taxonNodeService.load(taxonNodeUuid);
212
        Taxon taxon = taxonNode.getTaxon();
213
        TaxonDescription description = TaxonDescription.NewInstance(taxon);
214

    
215
        TextData textData = TextData.NewInstance();
216
        textData.setFeature(Feature.ECOLOGY());
217
        description.addElement(textData);
218

    
219
        DescriptionElementSource descriptionElementSource = DescriptionElementSource.NewInstance(OriginalSourceType.PrimaryTaxonomicSource);
220
        textData.addSource(descriptionElementSource);
221

    
222
        CdmStore.getService(ITaxonNodeService.class).merge(taxonNode);
223

    
224
        description.getId();
225
    }
226

    
227
    @Test
228
    public void addTaxonNodeCascadeProblem() {
229
        UUID taxonNodeUuid = UUID.fromString("ce54c396-3694-47f2-abb0-1d7b7e057985");
230

    
231
        TaxonNode taxonNode = taxonNodeService.load(taxonNodeUuid);
232
        Taxon childTaxon = Taxon.NewInstance(null, null);
233
        TaxonNode childTaxonNode = taxonNode.addChildTaxon(childTaxon, null, null);
234
        CdmStore.getService(ITaxonNodeService.class).merge(childTaxonNode, true);
235

    
236
        Taxon grandChildTaxon = Taxon.NewInstance(null, null);
237
        TaxonNode grandChildTaxonNode = childTaxonNode.addChildTaxon(grandChildTaxon, null, null);
238

    
239
        CdmStore.getService(ITaxonNodeService.class).merge(grandChildTaxonNode, true);
240

    
241
        Assert.assertEquals(taxonNode.getChildNodes().get(0).getId(), childTaxonNode.getId());
242

    
243
        Assert.assertTrue(childTaxonNode.treeIndex() != null);
244
        Assert.assertEquals(taxonNode.getChildNodes().get(0).treeIndex(), childTaxonNode.treeIndex());
245
        Assert.assertFalse(childTaxon.getId() == 0);
246
        Assert.assertEquals(taxonNode.getChildNodes().get(0).getTaxon().getId(), childTaxon.getId());
247

    
248
        Assert.assertTrue(grandChildTaxonNode.treeIndex() != null);
249
        Assert.assertEquals(taxonNode.getChildNodes().get(0).getChildNodes().get(0).getId(), grandChildTaxonNode.getId());
250
        Assert.assertFalse(grandChildTaxon.getId() == 0);
251
        Assert.assertEquals(taxonNode.getChildNodes().get(0).getChildNodes().get(0).getTaxon().getId(), grandChildTaxon.getId());
252
    }
253
}
(4-4/5)