Project

General

Profile

Download (21.6 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
* Copyright (C) 2007 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

    
11
package eu.etaxonomy.cdm.ext.geo;
12

    
13
import static org.junit.Assert.assertTrue;
14

    
15
import java.awt.Color;
16
import java.io.FileNotFoundException;
17
import java.io.IOException;
18
import java.io.InputStream;
19
import java.io.InputStreamReader;
20
import java.net.HttpURLConnection;
21
import java.net.MalformedURLException;
22
import java.net.URI;
23
import java.net.URISyntaxException;
24
import java.net.URL;
25
import java.util.ArrayList;
26
import java.util.Collection;
27
import java.util.HashMap;
28
import java.util.HashSet;
29
import java.util.List;
30
import java.util.Map;
31
import java.util.Set;
32
import java.util.UUID;
33

    
34
import org.apache.commons.lang.StringUtils;
35
import org.apache.http.client.ClientProtocolException;
36
import org.apache.log4j.Logger;
37
import org.junit.Assert;
38
import org.junit.Before;
39
import org.junit.Test;
40
import org.unitils.dbunit.annotation.DataSet;
41
import org.unitils.spring.annotation.SpringBeanByType;
42

    
43
import eu.etaxonomy.cdm.api.service.ITaxonService;
44
import eu.etaxonomy.cdm.api.service.ITermService;
45
import eu.etaxonomy.cdm.api.service.IVocabularyService;
46
import eu.etaxonomy.cdm.api.utility.DescriptionUtility;
47
import eu.etaxonomy.cdm.common.StreamUtils;
48
import eu.etaxonomy.cdm.common.UriUtils;
49
import eu.etaxonomy.cdm.model.common.CdmBase;
50
import eu.etaxonomy.cdm.model.common.DefinedTermBase;
51
import eu.etaxonomy.cdm.model.common.Language;
52
import eu.etaxonomy.cdm.model.common.MarkerType;
53
import eu.etaxonomy.cdm.model.common.TermType;
54
import eu.etaxonomy.cdm.model.common.TermVocabulary;
55
import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
56
import eu.etaxonomy.cdm.model.description.Distribution;
57
import eu.etaxonomy.cdm.model.description.Feature;
58
import eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm;
59
import eu.etaxonomy.cdm.model.description.TaxonDescription;
60
import eu.etaxonomy.cdm.model.location.Country;
61
import eu.etaxonomy.cdm.model.location.NamedArea;
62
import eu.etaxonomy.cdm.model.location.NamedAreaLevel;
63
import eu.etaxonomy.cdm.model.location.NamedAreaType;
64
import eu.etaxonomy.cdm.model.taxon.Taxon;
65
import eu.etaxonomy.cdm.persistence.dao.common.IDefinedTermDao;
66
import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;
67

    
68
/**
69
 * @author a.mueller
70
 * @created 08.10.2008
71
 */
72
public class EditGeoServiceTest extends CdmTransactionalIntegrationTest {
73
    private static final Logger logger = Logger.getLogger(EditGeoServiceTest.class);
74

    
75
    private static final String EDIT_MAPSERVICE_URI_STING = "http://edit.africamuseum.be/edit_wp5/v1.2/rest_gen.php";
76
    private static URI editMapServiceUri;
77

    
78
    @SpringBeanByType
79
    private IDefinedTermDao termDao;
80

    
81
    @SpringBeanByType
82
    private ITermService termService;
83

    
84
    @SpringBeanByType
85
    private IVocabularyService vocabService;
86

    
87
    @SpringBeanByType
88
    private GeoServiceAreaAnnotatedMapping mapping;
89

    
90
    @SpringBeanByType
91
    private IEditGeoService editGeoService;
92

    
93
    @SpringBeanByType
94
    private ITaxonService taxonService ;
95

    
96

    
97
    /**
98
     * @throws java.lang.Exception
99
     */
100
    @Before
101
    public void setUp() throws Exception {
102
        EditGeoServiceUtilities.setTermDao(termDao);
103
        System.setProperty("ONLY-A-TEST", "TRUE"); // allows EditGeoServiceUtilities to skip some line of code
104
        editMapServiceUri = new URI(EDIT_MAPSERVICE_URI_STING);
105
    }
106

    
107

    
108
//******************************************** TESTS**************
109

    
110
    @Test
111
    public void testGetWebServiceUrlCountry() throws MalformedURLException, IOException {
112
        Set<Distribution> distributions = new HashSet<Distribution>();
113
        Country germany = termService.findByIdInVocabulary("DEU", Country.uuidCountryVocabulary, Country.class);
114
//        germany = (Country)termService.find(665);
115
//        germany = (Country)termService.find(UUID.fromString("cbe7ce69-2952-4309-85dd-0d7d4a4830a1"));
116

    
117
//        germany = Country.GERMANY();
118

    
119
        distributions.add(Distribution.NewInstance(germany, PresenceAbsenceTerm.PRESENT()));
120
        distributions.add(Distribution.NewInstance(termService.findByIdInVocabulary("DE", Country.uuidCountryVocabulary, Country.class), PresenceAbsenceTerm.INTRODUCED()));
121
        Map<PresenceAbsenceTerm, Color> presenceAbsenceColorMap = new HashMap<PresenceAbsenceTerm, Color>();
122
        presenceAbsenceColorMap.put(PresenceAbsenceTerm.PRESENT(), Color.BLUE);
123
        presenceAbsenceColorMap.put(PresenceAbsenceTerm.INTRODUCED(), Color.BLACK);
124
        List<Language> languages = new ArrayList<Language>();
125

    
126
        boolean subAreaPreference = false;
127
        boolean statusOrderPreference = false;
128

    
129

    
130
        Collection<Distribution> filteredDistributions = DescriptionUtility.filterDistributions(
131
                distributions, null, true, statusOrderPreference, subAreaPreference);
132

    
133
        String result = EditGeoServiceUtilities.getDistributionServiceRequestParameterString(filteredDistributions,
134
                mapping, null, null, languages );
135
        logger.warn(result);
136
        Assert.assertTrue("WebServiceUrl must contain country part for Germany", result.matches(".*ad=country_earth(%3A|:)gmi_cntry:.:DEU.*"));
137
    }
138

    
139
    @Test
140
    public void testGetWebServiceUrlTdwg() throws MalformedURLException, IOException {
141
        //String webServiceUrl = "http://www.test.de/webservice";
142
        Set<Distribution> distributions = new HashSet<Distribution>();
143
        distributions.add(Distribution.NewInstance(termService.getAreaByTdwgAbbreviation("SPA"), PresenceAbsenceTerm.PRESENT()));
144
        distributions.add(Distribution.NewInstance(termService.getAreaByTdwgAbbreviation("GER"), PresenceAbsenceTerm.INTRODUCED()));
145
        distributions.add(Distribution.NewInstance(termService.getAreaByTdwgAbbreviation("14"), PresenceAbsenceTerm.CULTIVATED()));
146
        distributions.add(Distribution.NewInstance(termService.getAreaByTdwgAbbreviation("BGM"), PresenceAbsenceTerm.ABSENT()));
147
        distributions.add(Distribution.NewInstance(termService.getAreaByTdwgAbbreviation("FRA"), PresenceAbsenceTerm.ABSENT()));
148
        distributions.add(Distribution.NewInstance(termService.getAreaByTdwgAbbreviation("IND-AP"), PresenceAbsenceTerm.PRESENT()));
149

    
150
        Map<PresenceAbsenceTerm, Color> presenceAbsenceColorMap = new HashMap<PresenceAbsenceTerm, Color>();
151
        presenceAbsenceColorMap.put(PresenceAbsenceTerm.PRESENT(), Color.BLUE);
152
        presenceAbsenceColorMap.put(PresenceAbsenceTerm.INTRODUCED(), Color.BLACK);
153
        presenceAbsenceColorMap.put(PresenceAbsenceTerm.CULTIVATED(), Color.YELLOW);
154
        presenceAbsenceColorMap.put(PresenceAbsenceTerm.ABSENT(), Color.DARK_GRAY);
155
        String backLayer ="";
156
        presenceAbsenceColorMap = null;
157
        String bbox="-20,0,120,70";
158
        List<Language> languages = new ArrayList<Language>();
159

    
160
        boolean subAreaPreference = false;
161
        boolean statusOrderPreference = false;
162
        String result = EditGeoServiceUtilities.getDistributionServiceRequestParameterString(
163
                distributions,
164
                mapping,
165
                null, // presenceAbsenceTermColors
166
                null, // projectToLayer
167
                languages );
168
        //TODO Set semantics is not determined
169
        //String expected = "http://www.test.de/webservice?l=tdwg3&ad=tdwg3:a:GER|b:OKL|c:BGM|b:SPA|d:FRA&as=a:005500|b:00FF00|c:FFFFFF|d:001100&bbox=-20,40,40,40&ms=400x300";
170
        logger.debug(result);
171
        assertTrue(result.matches(".*ad=tdwg[1-4].*"));
172
        assertTrue(result.matches(".*tdwg2:[a-d]:14[\\|&].*") );
173
        assertTrue(result.matches(".*[a-d]:FRA,BGM[\\|&].*") || result.matches(".*[a-d]:BGM,FRA[\\|&].*") );
174
        assertTrue(result.matches(".*[a-d]:GER[\\|&].*") );
175
        assertTrue(result.matches(".*[a-d]:SPA[\\|&].*") );
176
        assertTrue(result.matches(".*tdwg4:[a-d]:INDAP[\\|&].*") );
177
        //assertTrue(result.matches("0000ff"));
178
        //TODO continue
179

    
180
        // request map image from webservice
181
        subTestWithEditMapService(result);
182
    }
183

    
184
    @Test
185
    public void testGetWebServiceUrlCyprus() throws ClientProtocolException, IOException, URISyntaxException {
186
        makeCyprusAreas();
187
        Set<Distribution> distributions = new HashSet<Distribution>();
188
        distributions.add(Distribution.NewInstance(divisions.get("1"), PresenceAbsenceTerm.PRESENT()));
189
        distributions.add(Distribution.NewInstance(divisions.get("2"), PresenceAbsenceTerm.INTRODUCED()));
190
        distributions.add(Distribution.NewInstance(divisions.get("3"), PresenceAbsenceTerm.CULTIVATED()));
191
        distributions.add(Distribution.NewInstance(divisions.get("4"), PresenceAbsenceTerm.ABSENT()));
192
        distributions.add(Distribution.NewInstance(divisions.get("5"), PresenceAbsenceTerm.ABSENT()));
193
        distributions.add(Distribution.NewInstance(divisions.get("6"), PresenceAbsenceTerm.PRESENT()));
194

    
195
        Map<PresenceAbsenceTerm, Color> presenceAbsenceColorMap = new HashMap<PresenceAbsenceTerm, Color>();
196
        presenceAbsenceColorMap.put(PresenceAbsenceTerm.PRESENT(), Color.BLUE);
197
        presenceAbsenceColorMap.put(PresenceAbsenceTerm.INTRODUCED(), Color.BLACK);
198
        presenceAbsenceColorMap.put(PresenceAbsenceTerm.CULTIVATED(), Color.YELLOW);
199
        presenceAbsenceColorMap.put(PresenceAbsenceTerm.ABSENT(), Color.DARK_GRAY);
200
        String backLayer ="";
201
        presenceAbsenceColorMap = null;
202
        String bbox="-20,0,120,70";
203
        List<Language> languages = new ArrayList<Language>();
204

    
205
        boolean subAreaPreference = false;
206
        boolean statusOrderPreference = false;
207
        String result = EditGeoServiceUtilities.getDistributionServiceRequestParameterString(
208
                distributions,
209
                mapping,
210
                null, null, languages );
211
        //TODO Set semantics is not determined
212
        //String expected = "http://www.test.de/webservice?l=tdwg3&ad=tdwg3:a:GER|b:OKL|c:BGM|b:SPA|d:FRA&as=a:005500|b:00FF00|c:FFFFFF|d:001100&bbox=-20,40,40,40&ms=400x300";
213
        assertTrue(result.matches(".*ad=cyprusdivs%3Abdcode:.*"));
214
        assertTrue(result.matches(".*[a-d]:5,4[\\|&].*") || result.matches(".*[a-d]:4,5[\\|&].*") );
215
        assertTrue(result.matches(".*[a-d]:1,6[\\|&].*") || result.matches(".*[a-d]:6,1[\\|&].*") );
216
        assertTrue(result.matches(".*[a-d]:2[\\|&].*") );
217
        assertTrue(result.matches(".*[a-d]:3[\\|&].*") );
218

    
219
        // request map image from webservice
220
        subTestWithEditMapService(result);
221
    }
222

    
223
    private void subTestWithEditMapService(String queryString)throws MalformedURLException, IOException {
224
        if(UriUtils.isServiceAvailable(editMapServiceUri)){
225
            URL requestUrl = new URL(editMapServiceUri.toString() + "?img=false&bbox=-180,-90,180,90&ms=1000&" + queryString);
226
            logger.debug("editMapServiceUri: " + requestUrl);
227
            HttpURLConnection connection = (HttpURLConnection) requestUrl.openConnection();
228
            connection.connect();
229
//            connection.setReadTimeout(10000);  //timeout after 10 sec, does not seem to work
230
            assertTrue(connection.getResponseCode() == 200);
231
            InputStream contentStream = connection.getInputStream();
232
            String content = StreamUtils.readToString(contentStream);
233
            logger.debug("EditMapService response body:\n" + content);
234
            assertTrue(content.startsWith("[{"));
235
            assertTrue(content.endsWith("}]"));
236
            assertTrue(content.matches(".*\"bbox\":.*"));
237
            assertTrue(content.matches(".*\"legend\":.*"));
238
            assertTrue(content.matches(".*\"layers\":.*"));
239
            assertTrue(content.matches(".*\"sld\":.*"));
240
            assertTrue(content.matches(".*\"geoserver\":.*"));
241
        }
242
    }
243

    
244
    public static final UUID uuidCyprusDivisionsVocabulary = UUID.fromString("2119f610-1f93-4d87-af28-40aeefaca100");
245
    private final Map<String, NamedArea> divisions = new HashMap<String, NamedArea>();
246

    
247
    private boolean makeCyprusAreas() throws IOException {
248
        //divisions
249

    
250

    
251
        NamedAreaType areaType = NamedAreaType.NATURAL_AREA();
252
        NamedAreaLevel areaLevel = NamedAreaLevel.NewInstance("Cyprus Division", "Cyprus Division", null);
253

    
254
        termService.saveOrUpdate(areaLevel);
255

    
256
        TermVocabulary<NamedArea> areaVocabulary = TermVocabulary.NewInstance(TermType.NamedArea, "Cyprus devisions", "Cyprus divisions", null, null);
257
        areaVocabulary.setUuid(uuidCyprusDivisionsVocabulary);
258

    
259

    
260
        for(int i = 1; i <= 8; i++){
261
            UUID divisionUuid = getNamedAreaUuid(String.valueOf(i));
262
            NamedArea division = this.newNamedArea(
263
                    divisionUuid,
264
                    "Division " + i,
265
                    "Cyprus: Division " + i,
266
                    String.valueOf(i), // id in vocab
267
                    areaType,
268
                    areaLevel,
269
                    areaVocabulary);
270
            divisions.put(String.valueOf(i), division);
271
        }
272

    
273
        vocabService.saveOrUpdate(areaVocabulary);
274
        commitAndStartNewTransaction(null);
275

    
276

    
277
        // import and map shapefile attributes from csv
278
        InputStream is = getClass().getClassLoader().getResourceAsStream("eu/etaxonomy/cdm/ext/geo/cyprusdivs.csv");
279
        List<String> idSearchFields = new ArrayList<String>();
280
        idSearchFields.add("bdcode");
281
        String wmsLayerName = "cyprusdivs";
282
        editGeoService.mapShapeFileToNamedAreas(new InputStreamReader(is), idSearchFields, wmsLayerName, uuidCyprusDivisionsVocabulary, null);
283

    
284
        divisions.clear();
285
        Set<DefinedTermBase> terms = vocabService.load(uuidCyprusDivisionsVocabulary).getTerms();
286
        for(DefinedTermBase dtb : terms){
287
            divisions.put(dtb.getIdInVocabulary(), (NamedArea) dtb);
288
        }
289

    
290

    
291
//		indigenousStatus = (PresenceTerm)getTermService().find(CyprusTransformer.indigenousUuid);
292
//		casualStatus = (PresenceTerm)getTermService().find(CyprusTransformer.casualUuid);
293
//		nonInvasiveStatus = (PresenceTerm)getTermService().find(CyprusTransformer.nonInvasiveUuid);
294
//		invasiveStatus = (PresenceTerm)getTermService().find(CyprusTransformer.invasiveUuid);
295
//		questionableStatus = (PresenceTerm)getTermService().find(CyprusTransformer.questionableUuid);
296

    
297
        return true;
298

    
299

    
300
    }
301

    
302
    public static final UUID uuidDivision1 = UUID.fromString("ab17eee9-1abb-4ce9-a9a2-563f840cdbfc");
303
    public static final UUID uuidDivision2 = UUID.fromString("c3606165-efb7-4224-a168-63e009eb4aa5");
304
    public static final UUID uuidDivision3 = UUID.fromString("750d4e07-e34b-491f-a7b7-09723afdc960");
305
    public static final UUID uuidDivision4 = UUID.fromString("8a858922-e8e5-4791-ad53-906e50633ec7");
306
    public static final UUID uuidDivision5 = UUID.fromString("16057133-d541-4ebd-81d4-cb92265ec54c");
307
    public static final UUID uuidDivision6 = UUID.fromString("fbf21230-4a42-4f4c-9af8-5da52123c264");
308
    public static final UUID uuidDivision7 = UUID.fromString("d31dd96a-36ea-4428-871c-d8552a9565ca");
309
    public static final UUID uuidDivision8 = UUID.fromString("236ea447-c3ab-486d-9e06-cc5907861acc");
310

    
311

    
312
    public UUID getNamedAreaUuid(String key) {
313
        if (StringUtils.isBlank(key)){return null;
314
        }else if (key.equalsIgnoreCase("1")){return uuidDivision1;
315
        }else if (key.equalsIgnoreCase("2")){return uuidDivision2;
316
        }else if (key.equalsIgnoreCase("3")){return uuidDivision3;
317
        }else if (key.equalsIgnoreCase("4")){return uuidDivision4;
318
        }else if (key.equalsIgnoreCase("5")){return uuidDivision5;
319
        }else if (key.equalsIgnoreCase("6")){return uuidDivision6;
320
        }else if (key.equalsIgnoreCase("7")){return uuidDivision7;
321
        }else if (key.equalsIgnoreCase("8")){return uuidDivision8;
322
        }else{
323
            return null;
324
        }
325
    }
326

    
327
    protected NamedArea newNamedArea(UUID uuid, String label, String text, String IdInVocabulary, NamedAreaType areaType, NamedAreaLevel level, TermVocabulary<NamedArea> voc){
328
        NamedArea namedArea = NamedArea.NewInstance(text, label, null);
329
        voc.addTerm(namedArea);
330
        namedArea.setType(areaType);
331
        namedArea.setLevel(level);
332
        namedArea.setUuid(uuid);
333
        namedArea.setIdInVocabulary(IdInVocabulary);
334
        return namedArea;
335
    }
336

    
337
    @Test
338
    public void testGetWebServiceUrlBangka() throws ClientProtocolException, IOException, URISyntaxException {
339
        NamedArea areaBangka = NamedArea.NewInstance("Bangka", "Bangka", null);
340
        TermVocabulary<NamedArea> voc = TermVocabulary.NewInstance(TermType.NamedArea, "test Voc", "test voc", null, null);
341
        voc.addTerm(areaBangka);
342

    
343
        GeoServiceArea geoServiceArea = new GeoServiceArea();
344
        String geoServiceLayer="vmap0_as_bnd_political_boundary_a";
345
        String layerFieldName ="nam";
346
        String areaValue = "PULAU BANGKA#SUMATERA SELATAN";
347
        geoServiceArea.add(geoServiceLayer, layerFieldName, areaValue);
348
        geoServiceArea.add(geoServiceLayer, layerFieldName, "BALI");
349

    
350
        mapping.set(areaBangka, geoServiceArea);
351
        Set<Distribution> distributions = new HashSet<Distribution>();
352
        distributions.add(Distribution.NewInstance(areaBangka, PresenceAbsenceTerm.PRESENT()));
353

    
354
        Map<PresenceAbsenceTerm, Color> presenceAbsenceColorMap = new HashMap<PresenceAbsenceTerm, Color>();
355
        presenceAbsenceColorMap.put(PresenceAbsenceTerm.PRESENT(), Color.BLUE);
356

    
357
        presenceAbsenceColorMap = null;
358
        List<Language> languages = new ArrayList<Language>();
359

    
360
        boolean subAreaPreference = false;
361
        boolean statusOrderPreference = false;
362
        String result = EditGeoServiceUtilities.getDistributionServiceRequestParameterString(distributions,
363
                mapping,
364
                null, null, languages );
365
        //TODO Set semantics is not determined
366
        //String expected = "http://www.test.de/webservice?l=tdwg3&ad=tdwg3:a:GER|b:OKL|c:BGM|b:SPA|d:FRA&as=a:005500|b:00FF00|c:FFFFFF|d:001100&bbox=-20,40,40,40&ms=400x300";
367

    
368
        logger.debug(result);
369
        assertTrue(result.matches(".*ad=vmap0_as_bnd_political_boundary_a%3Anam:.*"));
370
        assertTrue(result.matches(".*(PULAU\\+BANGKA%23SUMATERA\\+SELATAN).*") );
371
        assertTrue(result.matches(".*(BALI).*") );
372

    
373
        // request map image from webservice
374
        subTestWithEditMapService(result);
375
    }
376

    
377

    
378
    @SuppressWarnings("deprecation")
379
//    @Test
380
    @DataSet( value="EditGeoServiceTest.getDistributionServiceRequestParameterString.xml")
381
//    @DataSets({
382
//        @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class, value="../../database/ClearDB_with_Terms_DataSet.xml"),
383
//        @DataSet("../../database/TermsDataSet-with_auditing_info.xml"),
384
//        @DataSet( value="EditGeoServiceTest.getDistributionServiceRequestParameterString.xml")
385
//    })
386
    public void getDistributionServiceRequestParameterString(){
387
        boolean subAreaPreference = false;
388
        boolean statusOrderPreference = false;
389
        Set<MarkerType> hideMarkedAreas = null;
390
        Map<PresenceAbsenceTerm, Color> presenceAbsenceTermColors = null;
391
        List<Language> langs = null;
392

    
393
        List<TaxonDescription> taxonDescriptions = new ArrayList<TaxonDescription>();
394
        TaxonDescription description1 = TaxonDescription.NewInstance();
395
        taxonDescriptions.add(description1);
396
        Distribution distribution1 = Distribution.NewInstance(Country.GERMANY(), null);
397
        description1.addElement(distribution1);
398
        Distribution distribution2 = Distribution.NewInstance(Country.FRANCEFRENCHREPUBLIC(), null);
399
        distribution2.setFeature(Feature.COMMON_NAME());
400
        description1.addElement(distribution2);
401

    
402
        Taxon taxon = (Taxon)taxonService.find(UUID.fromString("7598f5d4-1cf2-4269-ae99-2adb79ae167c"));
403
        TaxonDescription taxDesc = taxon.getDescriptions().iterator().next();
404
        for (DescriptionElementBase deb : taxDesc.getElements()){
405
            Distribution distribution = CdmBase.deproxy(deb, Distribution.class);
406
            NamedArea area = distribution.getArea();
407
            System.out.println(area.getTitleCache());
408
        }
409
        taxonDescriptions.addAll(taxon.getDescriptions());
410

    
411
        String distributions = editGeoService.getDistributionServiceRequestParameterString(taxonDescriptions,
412
                subAreaPreference, statusOrderPreference, hideMarkedAreas, presenceAbsenceTermColors, langs);
413
        System.out.println(distributions);
414
        Assert.assertTrue("Distribution string should contain the non-persited distribution Germany", distributions.contains("DEU"));
415
        Assert.assertFalse("Distribution string should contain France as it has a non-distribution feature", distributions.contains("FRA"));
416

    
417
//        CHE,POL
418
    }
419

    
420
    @Override
421
//    @Test
422
    public void createTestDataSet() throws FileNotFoundException {
423

    
424
        List<TaxonDescription> taxonDescriptions = new ArrayList<TaxonDescription>();
425
        TaxonDescription description1 = TaxonDescription.NewInstance();
426
        taxonDescriptions.add(description1);
427
        Distribution distribution1 = Distribution.NewInstance(Country.POLANDPOLISHPEOPLESREPUBLIC(), null);
428
        description1.addElement(distribution1);
429
        Distribution distribution2 = Distribution.NewInstance(Country.SWITZERLANDSWISSCONFEDERATION(), null);
430
//        distribution2.setFeature(Feature.COMMON_NAME());
431
        description1.addElement(distribution2);
432
        Taxon taxon = Taxon.NewInstance(null, null);
433
        taxon.setTitleCache("Dummy taxon", true);
434
        taxon.addDescription(description1);
435
        taxon.setUuid(UUID.fromString("7598f5d4-1cf2-4269-ae99-2adb79ae167c"));
436

    
437
        taxonService.save(taxon);
438

    
439

    
440
        setComplete();
441
        endTransaction();
442

    
443
        writeDbUnitDataSetFile(new String[] {
444
                "TAXONBASE",
445
                "DESCRIPTIONBASE", "DESCRIPTIONELEMENTBASE",
446
                "HIBERNATE_SEQUENCES" // IMPORTANT!!!
447
                },
448
                "getDistributionServiceRequestParameterString" );
449

    
450
    }
451

    
452

    
453
}
(1-1/4)