Project

General

Profile

Download (17.7 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2016 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.ext.geo;
10

    
11
import java.util.HashSet;
12
import java.util.Set;
13
import java.util.UUID;
14

    
15
import org.junit.Assert;
16
import org.junit.Before;
17
import org.junit.BeforeClass;
18
import org.junit.Test;
19

    
20
import eu.etaxonomy.cdm.api.service.dto.CondensedDistribution;
21
import eu.etaxonomy.cdm.ext.geo.CondensedDistributionComposer.SymbolUsage;
22
import eu.etaxonomy.cdm.model.description.Distribution;
23
import eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm;
24
import eu.etaxonomy.cdm.model.location.NamedArea;
25
import eu.etaxonomy.cdm.model.term.OrderedTermVocabulary;
26
import eu.etaxonomy.cdm.model.term.TermType;
27
import eu.etaxonomy.cdm.model.term.TermVocabulary;
28
import eu.etaxonomy.cdm.test.TermTestBase;
29

    
30
/**
31
 * Tests for {@link FloraCubaCondensedDistributionComposerOld}
32
 * @author a.mueller
33
 * @since 07.04.2016
34
 */
35
public class CondensedDistributionComposerFloraCubaTest extends TermTestBase {
36

    
37
    private CondensedDistributionConfiguration config;
38

    
39
    private static OrderedTermVocabulary<PresenceAbsenceTerm> statusVoc;
40
    private static OrderedTermVocabulary<NamedArea> cubaAreasVocabualary;
41

    
42
    private static NamedArea cuba;
43
    private static NamedArea westernCuba;
44
    private static NamedArea eastCuba;
45
    private static NamedArea centralCuba;
46
    private static NamedArea pinarDelRio;
47
    private static NamedArea artemisa;
48
    private static NamedArea habana;
49
    private static NamedArea mayabeque;
50
    private static NamedArea matanzas;
51
    private static NamedArea isla_juventud;
52

    
53
    private static NamedArea holguin;
54
    private static NamedArea guantanamo;
55

    
56
    private static NamedArea bahamas;
57
    private static NamedArea oldWorld;
58

    
59
    private static UUID uuidStatusOccasionallyCultivated = UUID.fromString("936c3f9a-6099-4322-9792-0a72c6c2ce25");
60
    private static UUID uuidStatusNotNativButNaturalised = UUID.fromString("a1e26234-831e-4190-9fe3-011aca09ddba");
61
    private static UUID uuidStatusDoubtfullyNativeError = UUID.fromString("71b72e24-c2b6-44a5-bdab-39f083bf0f06");
62

    
63
    @SuppressWarnings("unchecked")
64
    @BeforeClass
65
    public static void setUpBeforeClass() throws Exception {
66

    
67
        defineSymbolsForExistingTerms();
68
        statusVoc = OrderedTermVocabulary.NewInstance(TermType.PresenceAbsenceTerm);
69
        statusVoc.addTerm(makeStatusTerm("occasionally cultivated","oc","(c)",false, uuidStatusOccasionallyCultivated));
70
        statusVoc.addTerm(makeStatusTerm("not native but possibly naturalised","p","p", false,uuidStatusNotNativButNaturalised));
71
        statusVoc.addTerm(makeStatusTerm("doubtfully native: reported in error","df","-d",false,uuidStatusDoubtfullyNativeError));
72

    
73
        makeAreas();
74
    }
75

    
76
    private static void defineSymbolsForExistingTerms() {
77
        PresenceAbsenceTerm.ENDEMIC_FOR_THE_RELEVANT_AREA().setSymbol("\u25CF");
78
        PresenceAbsenceTerm.NATIVE().setSymbol("");
79
        PresenceAbsenceTerm.NATIVE_PRESENCE_QUESTIONABLE().setSymbol("?");
80
        PresenceAbsenceTerm.PRESENT_DOUBTFULLY().setSymbol("?");
81
        PresenceAbsenceTerm.NATIVE_DOUBTFULLY_NATIVE().setSymbol("d");
82
        PresenceAbsenceTerm.NATIVE_REPORTED_IN_ERROR().setSymbol("-");
83
        PresenceAbsenceTerm.REPORTED_IN_ERROR().setSymbol("-");
84
        PresenceAbsenceTerm.CASUAL().setSymbol("a");
85
        PresenceAbsenceTerm.CULTIVATED().setSymbol("c");
86
        PresenceAbsenceTerm.NATURALISED().setSymbol("n");
87
        PresenceAbsenceTerm.CULTIVATED_PRESENCE_QUESTIONABLE().setSymbol("?c");
88
        PresenceAbsenceTerm.CULTIVATED_REPORTED_IN_ERROR().setSymbol("-c");
89
        PresenceAbsenceTerm.NATIVE().setSymbol("");
90
        //Cuba specific
91
//      statusSymbols.put(UUID.fromString("936c3f9a-6099-4322-9792-0a72c6c2ce25"), "(c)");
92
//      //endemic, doubtfully present
93
//      statusSymbols.put(UUID.fromString("5f954f08-267a-4928-b073-12328f74c187"), "?e");
94
//      //non-native and doubtfully naturalised
95
//      statusSymbols.put(UUID.fromString("a1e26234-831e-4190-9fe3-011aca09ddba"), "p");
96
//      //rare casual
97
//      statusSymbols.put(UUID.fromString("8914ce0d-7d31-4c88-8317-985f2b3a493b"), "(a)");
98
//      //?non-native and doubtfully naturalised
99
//      statusSymbols.put(UUID.fromString("9e0b413b-5a68-4e5b-91f2-227b4f832466"), "?p");
100
//      //?adventive (casual) alien
101
//      statusSymbols.put(UUID.fromString("c42ca644-1773-4230-a2ee-328a5d4a21ab"), "?a");
102
//      //endemic, reported in error
103
//      statusSymbols.put(UUID.fromString("679b215d-c231-4ee2-ae12-3ffc3dd528ad"), "-e");
104
//      //naturalised, reported in error
105
//      statusSymbols.put(UUID.fromString("8d918a37-3add-4e1c-a233-c37dbee209aa"), "-n");
106
//      //non-native and doubtfully naturalised, reported in error
107
//      statusSymbols.put(UUID.fromString("b9153d90-9e31-465a-a28c-79077a8ed4c2"), "-p");
108
//      //adventive alien , reported in error
109
//      statusSymbols.put(UUID.fromString("9b910b7b-43e3-4260-961c-6063b11cb7dc"), "-a");
110
//      //doubtfully native: reported in error
111
//      statusSymbols.put(UUID.fromString("71b72e24-c2b6-44a5-bdab-39f083bf0f06"), "-d");
112
    }
113

    
114
    @Before
115
    public void setUp(){
116
        config = CondensedDistributionConfiguration.NewCubaInstance();
117
    }
118

    
119
// ********************* TESTS ******************************/
120

    
121
    @Test
122
    public void testCreateCondensedDistribution() {
123
        CondensedDistributionComposer composer = new CondensedDistributionComposer();
124

    
125
        Set<Distribution> filteredDistributions = new HashSet<>();
126
        filteredDistributions.add(Distribution.NewInstance(cuba, PresenceAbsenceTerm.NATURALISED()));
127
        filteredDistributions.add(Distribution.NewInstance(eastCuba, statusVoc.findTermByUuid(uuidStatusOccasionallyCultivated)));
128
        filteredDistributions.add(Distribution.NewInstance(westernCuba, statusVoc.findTermByUuid(uuidStatusDoubtfullyNativeError)));
129
        filteredDistributions.add(Distribution.NewInstance(pinarDelRio, PresenceAbsenceTerm.CULTIVATED_REPORTED_IN_ERROR()));
130
        filteredDistributions.add(Distribution.NewInstance(holguin, PresenceAbsenceTerm.NATURALISED()));
131
        filteredDistributions.add(Distribution.NewInstance(bahamas, PresenceAbsenceTerm.NATIVE()));
132
        filteredDistributions.add(Distribution.NewInstance(oldWorld, PresenceAbsenceTerm.NATIVE_PRESENCE_QUESTIONABLE()));
133

    
134
        CondensedDistribution condensedDistribution = composer.createCondensedDistribution(filteredDistributions, null, config);
135
        String condensedString = condensedDistribution.toString();
136

    
137
        Assert.assertEquals("Condensed string for Cuba differs",
138
                "n<b>Cu</b>(-d<b>CuW</b>(-c<b>PR*</b>) (c)<b>CuE</b>(n<b>Ho</b>))" + config.outOfScopeAreasSeperator + "<b>Bah</b> ?<b>VM</b>",
139
                condensedString);
140

    
141
        //TODO work in progress
142
    }
143

    
144
    @Test
145
    public void testCreateCondensedDistributionOrderSubAreas() {
146

    
147
        CondensedDistributionComposer composer = new CondensedDistributionComposer();
148

    
149
        Set<Distribution> filteredDistributions = new HashSet<>();
150
        filteredDistributions.add(Distribution.NewInstance(cuba, PresenceAbsenceTerm.NATURALISED()));
151
        filteredDistributions.add(Distribution.NewInstance(eastCuba, statusVoc.findTermByUuid(uuidStatusOccasionallyCultivated)));
152
        filteredDistributions.add(Distribution.NewInstance(westernCuba, statusVoc.findTermByUuid(uuidStatusDoubtfullyNativeError)));
153

    
154
        //pinarDelRio, artemisa, habana, mayabeque, matanzas, isla_juventud
155
        filteredDistributions.add(Distribution.NewInstance(matanzas, PresenceAbsenceTerm.NATIVE()));
156
        filteredDistributions.add(Distribution.NewInstance(artemisa, PresenceAbsenceTerm.NATIVE()));
157
        filteredDistributions.add(Distribution.NewInstance(pinarDelRio, PresenceAbsenceTerm.NATIVE()));
158
        filteredDistributions.add(Distribution.NewInstance(isla_juventud, PresenceAbsenceTerm.NATIVE()));
159
        filteredDistributions.add(Distribution.NewInstance(mayabeque, PresenceAbsenceTerm.NATIVE()));
160
        filteredDistributions.add(Distribution.NewInstance(habana, PresenceAbsenceTerm.NATIVE()));
161

    
162
        filteredDistributions.add(Distribution.NewInstance(guantanamo, PresenceAbsenceTerm.CULTIVATED_REPORTED_IN_ERROR()));
163
        filteredDistributions.add(Distribution.NewInstance(holguin, PresenceAbsenceTerm.NATURALISED()));
164
        filteredDistributions.add(Distribution.NewInstance(bahamas, PresenceAbsenceTerm.NATIVE()));
165
        filteredDistributions.add(Distribution.NewInstance(oldWorld, PresenceAbsenceTerm.NATIVE_PRESENCE_QUESTIONABLE()));
166

    
167
        config.areasBold = false;
168
        CondensedDistribution condensedDistribution = composer.createCondensedDistribution(filteredDistributions, null, config);
169

    
170
        Assert.assertEquals("Condensed string for Cuba differs",
171
                "nCu(-dCuW(PR* Art Hab* May Mat IJ) (c)CuE(nHo -cGu))" + config.outOfScopeAreasSeperator + "Bah ?VM",
172
                condensedDistribution.toString());
173

    
174
        //TODO work in progress
175

    
176
        //test against default configuration (E+M) to see if the result looks reasonable
177
        //this should better be done CondensedDistributionComposerEuroMedTest but we have the test data here, therefore we keep the test here
178
        config = CondensedDistributionConfiguration.NewDefaultInstance();
179
        config.statusSymbolField = SymbolUsage.Symbol1;
180
        condensedDistribution = composer.createCondensedDistribution(filteredDistributions, null, config);
181
        Assert.assertEquals("Condensed string for Cuba differs",
182
                "n (c)CuE -dCuW(<b>Art Hab* IJ Mat May PR*</b>) [(c)CuE(-cGu nHo)]" + config.outOfScopeAreasSeperator + "<b>Bah</b> ?VM",
183
                condensedDistribution.toString());
184
        //Note: CuE is handled as both native and introduced as (c) is not yet defined as "introduced" status. Currently
185
        //      introduced status are hardcoded in PresenceAbsence term. This will probably change in future by becoming an own attribute like "isPresent"
186
    }
187

    
188
    private static boolean makeAreas(){
189

    
190
        //vocabulary
191
        UUID cubaAreasVocabularyUuid = UUID.fromString("c81e3c7b-3c01-47d1-87cf-388de4b1908c");
192
        String label = "Cuba Areas";
193
        String abbrev = null;
194

    
195
        cubaAreasVocabualary = OrderedTermVocabulary.NewOrderedInstance(TermType.NamedArea, NamedArea.class, label, label, abbrev, null);
196

    
197
        cubaAreasVocabualary.setUuid(cubaAreasVocabularyUuid);
198

    
199
        //Cuba
200
        label = "Cuba";
201
        abbrev = "Cu";
202
        UUID uuid = UUID.fromString("d0144a6e-0e17-4a1d-bce5-d464a2aa7229");
203
        cuba = getNamedArea(uuid, label, abbrev, cubaAreasVocabualary);
204

    
205
        //Western Cuba
206
        label = "Western Cuba";
207
        abbrev = "CuW";
208
        uuid = UUID.randomUUID();
209
        westernCuba = getNamedArea(uuid, label, abbrev, cubaAreasVocabualary);
210
//        cuba.addIncludes(westernCuba);
211

    
212
        //Central Cuba
213
        label = "Central Cuba";
214
        abbrev = "CuC";
215
        uuid = UUID.randomUUID();
216
        centralCuba = getNamedArea(uuid, label, abbrev, cubaAreasVocabualary);
217
        cuba.addIncludes(centralCuba);
218

    
219
        //East Cuba
220
        label = "East Cuba";
221
        abbrev = "CuE";
222
        uuid = UUID.randomUUID();
223
        eastCuba = getNamedArea(uuid, label, abbrev, cubaAreasVocabualary);
224
        cuba.addIncludes(eastCuba);
225

    
226
        cuba.addIncludes(westernCuba);
227

    
228
        //Pinar del Río PR
229
        label = "Pinar del Río";
230
        abbrev = "PR*";
231
        uuid = UUID.randomUUID();
232
        pinarDelRio = getNamedArea(uuid, label, abbrev, cubaAreasVocabualary);
233
        westernCuba.addIncludes(pinarDelRio);
234

    
235
        //Artemisa
236
        label = "Artemisa";
237
        abbrev = "Art";
238
        uuid = UUID.randomUUID();
239
        artemisa = getNamedArea(uuid, label, abbrev, cubaAreasVocabualary);
240
        westernCuba.addIncludes(artemisa);
241

    
242
        //Ciudad de la Habana
243
        label = "Ciudad de la Habana";
244
        abbrev = "Hab*";
245
        uuid = UUID.randomUUID();
246
        habana = getNamedArea(uuid, label, abbrev, cubaAreasVocabualary);
247
        westernCuba.addIncludes(habana);
248

    
249
        //Ciudad de la Habana
250
        label = "Mayabeque";
251
        abbrev = "May";
252
        uuid = UUID.randomUUID();
253
        mayabeque = getNamedArea(uuid, label, abbrev, cubaAreasVocabualary);
254
        westernCuba.addIncludes(mayabeque);
255

    
256
        //Matanzas Mat
257
        label = "Matanzas";
258
        abbrev = "Mat";
259
        uuid = UUID.randomUUID();
260
        matanzas = getNamedArea(uuid, label, abbrev, cubaAreasVocabualary);
261
        westernCuba.addIncludes(matanzas);
262

    
263
        //Isla de la Juventud IJ
264
        label = "Isla de la Juventud";
265
        abbrev = "IJ";
266
        uuid = UUID.randomUUID();
267
        isla_juventud = getNamedArea(uuid, label, abbrev, cubaAreasVocabualary);
268
        westernCuba.addIncludes(isla_juventud);
269

    
270
        //Provinces - Central
271
        //Villa Clara VC
272
        label = "Villa Clara";
273
        abbrev = "VC";
274
        uuid = UUID.randomUUID();
275
        NamedArea area = getNamedArea(uuid, label, abbrev, cubaAreasVocabualary);
276
        centralCuba.addIncludes(area);
277

    
278
        //Cienfuegos Ci VC
279
        label = "Cienfuegos";
280
        abbrev = "Ci";
281
        uuid = UUID.randomUUID();
282
        area = getNamedArea(uuid, label, abbrev, cubaAreasVocabualary);
283
        centralCuba.addIncludes(area);
284

    
285
        //Sancti Spiritus SS
286
        label = "Sancti Spíritus";
287
        abbrev = "SS";
288
        uuid = UUID.randomUUID();
289
        area = getNamedArea(uuid, label, abbrev, cubaAreasVocabualary);
290
        centralCuba.addIncludes(area);
291

    
292
        //Ciego de Ávila CA
293
        label = "Ciego de Ávila";
294
        abbrev = "CA";
295
        uuid = UUID.randomUUID();
296
        area = getNamedArea(uuid, label, abbrev, cubaAreasVocabualary);
297
        centralCuba.addIncludes(area);
298

    
299
        //Camagüey Cam
300
        label = "Camagüey";
301
        abbrev = "Cam";
302
        uuid = UUID.randomUUID();
303
        area = getNamedArea(uuid, label, abbrev, cubaAreasVocabualary);
304
        centralCuba.addIncludes(area);
305

    
306
        //Las Tunas LT
307
        label = "Las Tunas";
308
        abbrev = "LT";
309
        uuid = UUID.randomUUID();
310
        area = getNamedArea(uuid, label, abbrev, cubaAreasVocabualary);
311
        centralCuba.addIncludes(area);
312

    
313
        //Provinces - East
314
        //Granma Gr
315
        label = "Granma";
316
        abbrev = "Gr";
317
        uuid = UUID.randomUUID();
318
        area = getNamedArea(uuid, label, abbrev, cubaAreasVocabualary);
319
        eastCuba.addIncludes(area);
320

    
321
        //Holguín Ho
322
        label = "Holguín";
323
        abbrev = "Ho";
324
        uuid = UUID.randomUUID();
325
        holguin = getNamedArea(uuid, label, abbrev, cubaAreasVocabualary);
326
        eastCuba.addIncludes(holguin);
327

    
328
        //Santiago de Cuba SC
329
        label = "Santiago de Cuba";
330
        abbrev = "SC";
331
        uuid = UUID.randomUUID();
332
        area = getNamedArea(uuid, label, abbrev, cubaAreasVocabualary);
333
        eastCuba.addIncludes(area);
334

    
335
        //Guantánamo Gu
336
        label = "Guantánamo";
337
        abbrev = "Gu";
338
        uuid = UUID.randomUUID();
339
        guantanamo = getNamedArea(uuid, label, abbrev, cubaAreasVocabualary);
340
        eastCuba.addIncludes(guantanamo);
341

    
342
        //other Greater Antilles (Cuba, Española, Jamaica, Puerto Rico)
343
        //Española Esp (=Haiti + Dominican Republic)
344
        label = "Española";
345
        abbrev = "Esp";
346
        uuid = UUID.randomUUID();
347
        area = getNamedArea(uuid, label, abbrev, cubaAreasVocabualary);
348

    
349
        //Jamaica Ja
350
        label = "Jamaica";
351
        abbrev = "Ja";
352
        uuid = UUID.randomUUID();
353
        area = getNamedArea(uuid, label, abbrev, cubaAreasVocabualary);
354

    
355
        //Puerto Rico PR
356
        label = "Puerto Rico";
357
        abbrev = "PRc";
358
        uuid = UUID.randomUUID();
359
        area = getNamedArea(uuid, label, abbrev, cubaAreasVocabualary);
360

    
361
        //Lesser Antilles Men
362
        label = "Lesser Antilles";
363
        abbrev = "Men";
364
        uuid = UUID.randomUUID();
365
        area = getNamedArea(uuid, label, abbrev, cubaAreasVocabualary);
366

    
367
        //Bahamas
368
        label = "Bahamas";
369
        abbrev = "Bah";
370
        uuid = UUID.randomUUID();
371
        bahamas = getNamedArea(uuid, label, abbrev, cubaAreasVocabualary);
372

    
373
        //Cayman Islands
374
        label = "Cayman Islands"; //[Trinidad, Tobago, Curaçao, Margarita, ABC Isl. => S. America];
375
        abbrev = "Cay";
376
        uuid = UUID.randomUUID();
377
        area = getNamedArea(uuid, label, abbrev, cubaAreasVocabualary);
378

    
379
        //World
380
        //N America
381
        label = "N America"; //(incl. Mexico)
382
        abbrev = "AmN";
383
        uuid = UUID.randomUUID();
384
        area = getNamedArea(uuid, label, abbrev, cubaAreasVocabualary);
385

    
386
        //Central America
387
        label = "Central America";
388
        abbrev = "AmC";
389
        uuid = UUID.randomUUID();
390
        area = getNamedArea(uuid, label, abbrev, cubaAreasVocabualary);
391

    
392

    
393
        //S America
394
        label = "S America";
395
        abbrev = "AmS";
396
        uuid = UUID.randomUUID();
397
        area = getNamedArea(uuid, label, abbrev, cubaAreasVocabualary);
398

    
399
        //Old World
400
        label = "Old World ";
401
        abbrev = "VM";
402
        uuid = UUID.randomUUID();
403
        oldWorld = getNamedArea(uuid, label, abbrev, cubaAreasVocabualary);
404

    
405
        return true;
406
    }
407

    
408
    private static NamedArea getNamedArea(UUID uuid, String label, String abbrev, TermVocabulary<NamedArea> vocabulary) {
409
        NamedArea result = NamedArea.NewInstance(label, label, abbrev);
410
        result.setUuid(uuid);
411
        vocabulary.addTerm(result);
412
        result.setIdInVocabulary(abbrev);
413
        return result;
414

    
415
    }
416

    
417
    private static PresenceAbsenceTerm makeStatusTerm(String desc, String abbrev, String symbol, boolean absent, UUID uuid) {
418
        PresenceAbsenceTerm result = PresenceAbsenceTerm.NewPresenceInstance(desc, desc, abbrev);
419
        result.setAbsenceTerm(absent);
420
        result.setUuid(uuid);
421
        result.setSymbol(symbol);
422
        return result;
423
    }
424
}
(2-2/4)