rename getByIdInVocabulary
[cdmlib.git] / cdmlib-ext / src / test / java / eu / etaxonomy / cdm / ext / geo / EditGeoServiceTest.java
index 8e75156753f29e4d63cfb6cf9719965a8f46def8..ea5a0b32a278e6fac8680b384f1316876686a36b 100644 (file)
@@ -1,9 +1,9 @@
 // $Id$\r
 /**\r
 * Copyright (C) 2007 EDIT\r
-* European Distributed Institute of Taxonomy \r
+* European Distributed Institute of Taxonomy\r
 * http://www.e-taxonomy.eu\r
-* \r
+*\r
 * The contents of this file are subject to the Mozilla Public License Version 1.1\r
 * See LICENSE.TXT at the top of this package for the full license terms.\r
 */\r
@@ -15,6 +15,7 @@ import static org.junit.Assert.assertTrue;
 import java.awt.Color;\r
 import java.io.IOException;\r
 import java.io.InputStream;\r
+import java.io.InputStreamReader;\r
 import java.net.HttpURLConnection;\r
 import java.net.MalformedURLException;\r
 import java.net.URI;\r
@@ -28,238 +29,341 @@ import java.util.Map;
 import java.util.Set;\r
 import java.util.UUID;\r
 \r
+import org.apache.commons.lang.StringUtils;\r
 import org.apache.http.client.ClientProtocolException;\r
 import org.apache.log4j.Logger;\r
-import org.junit.After;\r
-import org.junit.AfterClass;\r
+import org.junit.Assert;\r
 import org.junit.Before;\r
-import org.junit.BeforeClass;\r
 import org.junit.Test;\r
+import org.unitils.spring.annotation.SpringBeanByType;\r
 \r
-import eu.etaxonomy.cdm.common.CdmUtils;\r
+import eu.etaxonomy.cdm.api.service.ITermService;\r
+import eu.etaxonomy.cdm.api.service.IVocabularyService;\r
 import eu.etaxonomy.cdm.common.StreamUtils;\r
 import eu.etaxonomy.cdm.common.UriUtils;\r
-import eu.etaxonomy.cdm.model.common.DefaultTermInitializer;\r
+import eu.etaxonomy.cdm.model.common.DefinedTermBase;\r
 import eu.etaxonomy.cdm.model.common.Language;\r
+import eu.etaxonomy.cdm.model.common.TermType;\r
 import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
 import eu.etaxonomy.cdm.model.description.AbsenceTerm;\r
 import eu.etaxonomy.cdm.model.description.Distribution;\r
 import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;\r
 import eu.etaxonomy.cdm.model.description.PresenceTerm;\r
+import eu.etaxonomy.cdm.model.location.Country;\r
 import eu.etaxonomy.cdm.model.location.NamedArea;\r
 import eu.etaxonomy.cdm.model.location.NamedAreaLevel;\r
 import eu.etaxonomy.cdm.model.location.NamedAreaType;\r
-import eu.etaxonomy.cdm.model.location.TdwgArea;\r
 import eu.etaxonomy.cdm.persistence.dao.common.IDefinedTermDao;\r
-import eu.etaxonomy.cdm.test.unit.CdmUnitTestBase;\r
+import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;\r
 \r
 /**\r
  * @author a.mueller\r
  * @created 08.10.2008\r
- * @version 1.0\r
  */\r
-public class EditGeoServiceTest extends CdmUnitTestBase {\r
-       @SuppressWarnings("unused")\r
-       private static final Logger logger = Logger.getLogger(EditGeoServiceTest.class);\r
-\r
-       private static final String EDIT_MAPSERVICE_URI_STING = "http://edit.br.fgov.be/edit_wp5/v1/areas.php";\r
-       private static URI editMapServiceUri;\r
-       \r
-       //@SpringBeanByType\r
-       private IDefinedTermDao termDao;\r
-       \r
-       /**\r
-        * @throws java.lang.Exception\r
-        */\r
-       @BeforeClass\r
-       public static void setUpBeforeClass() throws Exception {\r
-               DefaultTermInitializer initializer = new DefaultTermInitializer();\r
-               initializer.initialize();\r
-       }\r
-\r
-       /**\r
-        * @throws java.lang.Exception\r
-        */\r
-       @AfterClass\r
-       public static void tearDownAfterClass() throws Exception {\r
-       }\r
-\r
-       /**\r
-        * @throws java.lang.Exception\r
-        */\r
-       @Before\r
-       public void setUp() throws Exception {\r
-               EditGeoServiceUtilities.setTermDao(termDao);\r
-               System.setProperty("ONLY-A-TEST", "TRUE"); // allows EditGeoServiceUtilities to skip some line of code\r
-               editMapServiceUri = new URI(EDIT_MAPSERVICE_URI_STING);\r
-       }\r
-\r
-       /**\r
-        * @throws java.lang.Exception\r
-        */\r
-       @After\r
-       public void tearDown() throws Exception {\r
-       }\r
-       \r
+public class EditGeoServiceTest extends CdmTransactionalIntegrationTest {\r
+    private static final Logger logger = Logger.getLogger(EditGeoServiceTest.class);\r
+\r
+    private static final String EDIT_MAPSERVICE_URI_STING = "http://edit.africamuseum.be/edit_wp5/v1.2/rest_gen.php";\r
+    private static URI editMapServiceUri;\r
+\r
+    //@SpringBeanByType\r
+    private IDefinedTermDao termDao;\r
+\r
+    @SpringBeanByType\r
+    private ITermService termService;\r
+\r
+    @SpringBeanByType\r
+    private IVocabularyService vocabService;\r
+\r
+    @SpringBeanByType\r
+    private GeoServiceAreaAnnotatedMapping mapping;\r
+\r
+    @SpringBeanByType\r
+    private IEditGeoService editGeoService;\r
+//\r
+//     /**\r
+//      * @throws java.lang.Exception\r
+//      */\r
+//     @BeforeClass\r
+//     public static void setUpBeforeClass() throws Exception {\r
+//             DefaultTermInitializer initializer = new DefaultTermInitializer();\r
+//             initializer.initialize();\r
+//     }\r
+\r
+    /**\r
+     * @throws java.lang.Exception\r
+     */\r
+    @Before\r
+    public void setUp() throws Exception {\r
+        EditGeoServiceUtilities.setTermDao(termDao);\r
+        System.setProperty("ONLY-A-TEST", "TRUE"); // allows EditGeoServiceUtilities to skip some line of code\r
+        editMapServiceUri = new URI(EDIT_MAPSERVICE_URI_STING);\r
+    }\r
+\r
+\r
 //******************************************** TESTS**************\r
-       @Test\r
-       public void testGetWebServiceUrlTdwg() throws MalformedURLException, IOException {\r
-               //String webServiceUrl = "http://www.test.de/webservice";\r
-               Set<Distribution> distributions = new HashSet<Distribution>();\r
-               distributions.add(Distribution.NewInstance(TdwgArea.getAreaByTdwgAbbreviation("SPA"), PresenceTerm.PRESENT()));\r
-               distributions.add(Distribution.NewInstance(TdwgArea.getAreaByTdwgAbbreviation("GER"), PresenceTerm.INTRODUCED()));\r
-               distributions.add(Distribution.NewInstance(TdwgArea.getAreaByTdwgAbbreviation("14"), PresenceTerm.CULTIVATED()));\r
-               distributions.add(Distribution.NewInstance(TdwgArea.getAreaByTdwgAbbreviation("BGM"), AbsenceTerm.ABSENT()));\r
-               distributions.add(Distribution.NewInstance(TdwgArea.getAreaByTdwgAbbreviation("FRA"), AbsenceTerm.ABSENT()));\r
-               distributions.add(Distribution.NewInstance(TdwgArea.getAreaByTdwgAbbreviation("IND-AP"), PresenceTerm.PRESENT()));\r
-               \r
-               Map<PresenceAbsenceTermBase<?>, Color> presenceAbsenceColorMap = new HashMap<PresenceAbsenceTermBase<?>, Color>();\r
-               presenceAbsenceColorMap.put(PresenceTerm.PRESENT(), Color.BLUE);\r
-               presenceAbsenceColorMap.put(PresenceTerm.INTRODUCED(), Color.BLACK);\r
-               presenceAbsenceColorMap.put(PresenceTerm.CULTIVATED(), Color.YELLOW);\r
-               presenceAbsenceColorMap.put(AbsenceTerm.ABSENT(), Color.DARK_GRAY);\r
-               String backLayer ="";\r
-               presenceAbsenceColorMap = null;\r
-               String bbox="-20,0,120,70";\r
-               List<Language> languages = new ArrayList<Language>();\r
-                               \r
-               String result = EditGeoServiceUtilities.getDistributionServiceRequestParameterString(distributions, presenceAbsenceColorMap, 600, 300, bbox,backLayer, null, languages );               \r
-               //TODO Set semantics is not determined\r
-               //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";\r
-               System.out.println(result);\r
-               assertTrue(result.matches(".*l=earth.*"));\r
-               assertTrue(result.matches(".*ms=600,300.*"));\r
-               assertTrue(result.matches(".*ad=tdwg[1-4].*"));\r
-               assertTrue(result.matches(".*tdwg2:[a-d]:14[\\|&].*") );\r
-               assertTrue(result.matches(".*[a-d]:FRA,BGM[\\|&].*") || result.matches(".*[a-d]:BGM,FRA[\\|&].*") );\r
-               assertTrue(result.matches(".*[a-d]:GER[\\|&].*") );\r
-               assertTrue(result.matches(".*[a-d]:SPA[\\|&].*") );\r
-               assertTrue(result.matches(".*tdwg4:[a-d]:INDAP[\\|&].*") );\r
-               //assertTrue(result.matches("0000ff"));\r
-               //TODO continue\r
-               \r
-               // request map image from webservice\r
-               subTestWithEditMapService(result);\r
-       }\r
-       \r
-       @Test\r
-       public void testGetWebServiceUrlCyprus() throws ClientProtocolException, IOException, URISyntaxException {\r
-               makeCyprusAreas();\r
-               Set<Distribution> distributions = new HashSet<Distribution>();\r
-               distributions.add(Distribution.NewInstance(divisions.get("1"), PresenceTerm.PRESENT()));\r
-               distributions.add(Distribution.NewInstance(divisions.get("2"), PresenceTerm.INTRODUCED()));\r
-               distributions.add(Distribution.NewInstance(divisions.get("3"), PresenceTerm.CULTIVATED()));\r
-               distributions.add(Distribution.NewInstance(divisions.get("4"), AbsenceTerm.ABSENT()));\r
-               distributions.add(Distribution.NewInstance(divisions.get("5"), AbsenceTerm.ABSENT()));\r
-               distributions.add(Distribution.NewInstance(divisions.get("6"), PresenceTerm.PRESENT()));\r
-               \r
-               Map<PresenceAbsenceTermBase<?>, Color> presenceAbsenceColorMap = new HashMap<PresenceAbsenceTermBase<?>, Color>();\r
-               presenceAbsenceColorMap.put(PresenceTerm.PRESENT(), Color.BLUE);\r
-               presenceAbsenceColorMap.put(PresenceTerm.INTRODUCED(), Color.BLACK);\r
-               presenceAbsenceColorMap.put(PresenceTerm.CULTIVATED(), Color.YELLOW);\r
-               presenceAbsenceColorMap.put(AbsenceTerm.ABSENT(), Color.DARK_GRAY);\r
-               String backLayer ="";\r
-               presenceAbsenceColorMap = null;\r
-               String bbox="-20,0,120,70";\r
-               List<Language> languages = new ArrayList<Language>();\r
-                               \r
-               String result = EditGeoServiceUtilities.getDistributionServiceRequestParameterString(distributions, presenceAbsenceColorMap, 600, 300, bbox,backLayer, null, languages );               \r
-               //TODO Set semantics is not determined\r
-               //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";\r
-               System.out.println(result);\r
-               assertTrue(result.matches(".*l=earth.*"));\r
-               assertTrue(result.matches(".*ms=600,300.*"));\r
-               assertTrue(result.matches(".*ad=cyprusdivs%3Abdcode:.*"));\r
-               assertTrue(result.matches(".*[a-d]:5,4[\\|&].*") || result.matches(".*[a-d]:4,5[\\|&].*") );\r
-               assertTrue(result.matches(".*[a-d]:1,6[\\|&].*") || result.matches(".*[a-d]:6,1[\\|&].*") );\r
-               assertTrue(result.matches(".*[a-d]:2[\\|&].*") );\r
-               assertTrue(result.matches(".*[a-d]:3[\\|&].*") );\r
-               \r
-               // request map image from webservice\r
-               subTestWithEditMapService(result);\r
-       }\r
-\r
-       private void subTestWithEditMapService(String result)\r
-                       throws MalformedURLException, IOException {\r
-               if(UriUtils.isServiceAvailable(editMapServiceUri)){\r
-                       URL requestUrl = new URL(editMapServiceUri.toString() + "?img=false&" + result); \r
-                       HttpURLConnection connection = (HttpURLConnection) requestUrl.openConnection();\r
-                       connection.connect();\r
-                       assertTrue(connection.getResponseCode() == 200);\r
-                       InputStream contentStream = connection.getInputStream();\r
-                       String content = StreamUtils.readToString(contentStream); \r
-                       System.out.println(content);\r
-                       assertTrue(content.startsWith("[{"));\r
-                       assertTrue(content.endsWith("}]"));\r
-                       assertTrue(content.matches(".*\"bbox\":.*"));\r
-                       assertTrue(content.matches(".*\"legend\":.*"));\r
-                       assertTrue(content.matches(".*\"layers\":.*"));\r
-                       assertTrue(content.matches(".*\"sld\":.*"));\r
-                       assertTrue(content.matches(".*\"geoserver\":.*"));\r
-               }\r
-       }\r
-       \r
-       public static final UUID uuidCyprusDivisionsVocabulary = UUID.fromString("2119f610-1f93-4d87-af28-40aeefaca100");\r
-       private Map<String, NamedArea> divisions = new HashMap<String, NamedArea>();\r
-       \r
-       private boolean makeCyprusAreas() {\r
-               //divisions\r
-               \r
-               \r
-               NamedAreaType areaType = NamedAreaType.NATURAL_AREA();\r
-               NamedAreaLevel areaLevel = NamedAreaLevel.NewInstance("Cyprus Division", "Cyprus Division", null);\r
-               \r
-               TermVocabulary areaVocabulary = TermVocabulary.NewInstance("Cyprus devisions", "Cyprus divisions", null, null);\r
-               areaVocabulary.setUuid(uuidCyprusDivisionsVocabulary);\r
-               \r
-               for(int i = 1; i <= 8; i++){\r
-                       UUID divisionUuid = getNamedAreaUuid(String.valueOf(i));\r
-                       NamedArea division = this.getNamedArea(divisionUuid, "Division " + i, "Cyprus: Division " + i, String.valueOf(i), areaType, areaLevel, areaVocabulary);\r
-                       divisions.put(String.valueOf(i), division);\r
-               }\r
-               \r
+\r
+    @Test\r
+    public void testGetWebServiceUrlCountry() throws MalformedURLException, IOException {\r
+        Set<Distribution> distributions = new HashSet<Distribution>();\r
+        Country germany = termService.findByIdInVocabulary("DEU", Country.uuidCountryVocabulary, Country.class);\r
+//        germany = (Country)termService.find(665);\r
+//        germany = (Country)termService.find(UUID.fromString("cbe7ce69-2952-4309-85dd-0d7d4a4830a1"));\r
+\r
+//        germany = Country.GERMANY();\r
+\r
+        distributions.add(Distribution.NewInstance(germany, PresenceTerm.PRESENT()));\r
+        distributions.add(Distribution.NewInstance(termService.findByIdInVocabulary("DE", Country.uuidCountryVocabulary, Country.class), PresenceTerm.INTRODUCED()));\r
+        Map<PresenceAbsenceTermBase<?>, Color> presenceAbsenceColorMap = new HashMap<PresenceAbsenceTermBase<?>, Color>();\r
+        presenceAbsenceColorMap.put(PresenceTerm.PRESENT(), Color.BLUE);\r
+        presenceAbsenceColorMap.put(PresenceTerm.INTRODUCED(), Color.BLACK);\r
+        List<Language> languages = new ArrayList<Language>();\r
+\r
+        boolean subAreaPreference = false;\r
+        boolean statusOrderPreference = false;\r
+        String result = EditGeoServiceUtilities.getDistributionServiceRequestParameterString(distributions,\r
+                subAreaPreference, statusOrderPreference, null, mapping,\r
+                presenceAbsenceColorMap, null, languages );\r
+        logger.warn(result);\r
+        Assert.assertTrue("WebServiceUrl must contain country part for Germany", result.matches(".*ad=country_earth(%3A|:)gmi_cntry:a:DEU.*"));\r
+\r
+    }\r
+\r
+    @Test\r
+    public void testGetWebServiceUrlTdwg() throws MalformedURLException, IOException {\r
+        //String webServiceUrl = "http://www.test.de/webservice";\r
+        Set<Distribution> distributions = new HashSet<Distribution>();\r
+        distributions.add(Distribution.NewInstance(termService.getAreaByTdwgAbbreviation("SPA"), PresenceTerm.PRESENT()));\r
+        distributions.add(Distribution.NewInstance(termService.getAreaByTdwgAbbreviation("GER"), PresenceTerm.INTRODUCED()));\r
+        distributions.add(Distribution.NewInstance(termService.getAreaByTdwgAbbreviation("14"), PresenceTerm.CULTIVATED()));\r
+        distributions.add(Distribution.NewInstance(termService.getAreaByTdwgAbbreviation("BGM"), AbsenceTerm.ABSENT()));\r
+        distributions.add(Distribution.NewInstance(termService.getAreaByTdwgAbbreviation("FRA"), AbsenceTerm.ABSENT()));\r
+        distributions.add(Distribution.NewInstance(termService.getAreaByTdwgAbbreviation("IND-AP"), PresenceTerm.PRESENT()));\r
+\r
+        Map<PresenceAbsenceTermBase<?>, Color> presenceAbsenceColorMap = new HashMap<PresenceAbsenceTermBase<?>, Color>();\r
+        presenceAbsenceColorMap.put(PresenceTerm.PRESENT(), Color.BLUE);\r
+        presenceAbsenceColorMap.put(PresenceTerm.INTRODUCED(), Color.BLACK);\r
+        presenceAbsenceColorMap.put(PresenceTerm.CULTIVATED(), Color.YELLOW);\r
+        presenceAbsenceColorMap.put(AbsenceTerm.ABSENT(), Color.DARK_GRAY);\r
+        String backLayer ="";\r
+        presenceAbsenceColorMap = null;\r
+        String bbox="-20,0,120,70";\r
+        List<Language> languages = new ArrayList<Language>();\r
+\r
+        boolean subAreaPreference = false;\r
+        boolean statusOrderPreference = false;\r
+        String result = EditGeoServiceUtilities.getDistributionServiceRequestParameterString(distributions,\r
+                subAreaPreference ,\r
+                statusOrderPreference,\r
+                null, mapping, presenceAbsenceColorMap, null, languages );\r
+        //TODO Set semantics is not determined\r
+        //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";\r
+        logger.debug(result);\r
+        assertTrue(result.matches(".*ad=tdwg[1-4].*"));\r
+        assertTrue(result.matches(".*tdwg2:[a-d]:14[\\|&].*") );\r
+        assertTrue(result.matches(".*[a-d]:FRA,BGM[\\|&].*") || result.matches(".*[a-d]:BGM,FRA[\\|&].*") );\r
+        assertTrue(result.matches(".*[a-d]:GER[\\|&].*") );\r
+        assertTrue(result.matches(".*[a-d]:SPA[\\|&].*") );\r
+        assertTrue(result.matches(".*tdwg4:[a-d]:INDAP[\\|&].*") );\r
+        //assertTrue(result.matches("0000ff"));\r
+        //TODO continue\r
+\r
+        // request map image from webservice\r
+        subTestWithEditMapService(result);\r
+    }\r
+\r
+    @Test\r
+    public void testGetWebServiceUrlCyprus() throws ClientProtocolException, IOException, URISyntaxException {\r
+        makeCyprusAreas();\r
+        Set<Distribution> distributions = new HashSet<Distribution>();\r
+        distributions.add(Distribution.NewInstance(divisions.get("1"), PresenceTerm.PRESENT()));\r
+        distributions.add(Distribution.NewInstance(divisions.get("2"), PresenceTerm.INTRODUCED()));\r
+        distributions.add(Distribution.NewInstance(divisions.get("3"), PresenceTerm.CULTIVATED()));\r
+        distributions.add(Distribution.NewInstance(divisions.get("4"), AbsenceTerm.ABSENT()));\r
+        distributions.add(Distribution.NewInstance(divisions.get("5"), AbsenceTerm.ABSENT()));\r
+        distributions.add(Distribution.NewInstance(divisions.get("6"), PresenceTerm.PRESENT()));\r
+\r
+        Map<PresenceAbsenceTermBase<?>, Color> presenceAbsenceColorMap = new HashMap<PresenceAbsenceTermBase<?>, Color>();\r
+        presenceAbsenceColorMap.put(PresenceTerm.PRESENT(), Color.BLUE);\r
+        presenceAbsenceColorMap.put(PresenceTerm.INTRODUCED(), Color.BLACK);\r
+        presenceAbsenceColorMap.put(PresenceTerm.CULTIVATED(), Color.YELLOW);\r
+        presenceAbsenceColorMap.put(AbsenceTerm.ABSENT(), Color.DARK_GRAY);\r
+        String backLayer ="";\r
+        presenceAbsenceColorMap = null;\r
+        String bbox="-20,0,120,70";\r
+        List<Language> languages = new ArrayList<Language>();\r
+\r
+        boolean subAreaPreference = false;\r
+        boolean statusOrderPreference = false;\r
+        String result = EditGeoServiceUtilities.getDistributionServiceRequestParameterString(distributions,\r
+                subAreaPreference ,\r
+                statusOrderPreference,\r
+                null, mapping, presenceAbsenceColorMap, null, languages );\r
+        //TODO Set semantics is not determined\r
+        //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";\r
+        assertTrue(result.matches(".*ad=cyprusdivs%3Abdcode:.*"));\r
+        assertTrue(result.matches(".*[a-d]:5,4[\\|&].*") || result.matches(".*[a-d]:4,5[\\|&].*") );\r
+        assertTrue(result.matches(".*[a-d]:1,6[\\|&].*") || result.matches(".*[a-d]:6,1[\\|&].*") );\r
+        assertTrue(result.matches(".*[a-d]:2[\\|&].*") );\r
+        assertTrue(result.matches(".*[a-d]:3[\\|&].*") );\r
+\r
+        // request map image from webservice\r
+        subTestWithEditMapService(result);\r
+    }\r
+\r
+    private void subTestWithEditMapService(String queryString)throws MalformedURLException, IOException {\r
+        if(UriUtils.isServiceAvailable(editMapServiceUri)){\r
+            URL requestUrl = new URL(editMapServiceUri.toString() + "?img=false&bbox=-180,-90,180,90&ms=1000&" + queryString);\r
+            logger.debug("editMapServiceUri: " + requestUrl);\r
+            HttpURLConnection connection = (HttpURLConnection) requestUrl.openConnection();\r
+            connection.connect();\r
+            assertTrue(connection.getResponseCode() == 200);\r
+            InputStream contentStream = connection.getInputStream();\r
+            String content = StreamUtils.readToString(contentStream);\r
+            logger.debug("EditMapService response body:\n" + content);\r
+            assertTrue(content.startsWith("[{"));\r
+            assertTrue(content.endsWith("}]"));\r
+            assertTrue(content.matches(".*\"bbox\":.*"));\r
+            assertTrue(content.matches(".*\"legend\":.*"));\r
+            assertTrue(content.matches(".*\"layers\":.*"));\r
+            assertTrue(content.matches(".*\"sld\":.*"));\r
+            assertTrue(content.matches(".*\"geoserver\":.*"));\r
+        }\r
+    }\r
+\r
+    public static final UUID uuidCyprusDivisionsVocabulary = UUID.fromString("2119f610-1f93-4d87-af28-40aeefaca100");\r
+    private final Map<String, NamedArea> divisions = new HashMap<String, NamedArea>();\r
+\r
+    private boolean makeCyprusAreas() throws IOException {\r
+        //divisions\r
+\r
+\r
+        NamedAreaType areaType = NamedAreaType.NATURAL_AREA();\r
+        NamedAreaLevel areaLevel = NamedAreaLevel.NewInstance("Cyprus Division", "Cyprus Division", null);\r
+\r
+        termService.saveOrUpdate(areaLevel);\r
+\r
+        TermVocabulary<NamedArea> areaVocabulary = TermVocabulary.NewInstance(TermType.NamedArea, "Cyprus devisions", "Cyprus divisions", null, null);\r
+        areaVocabulary.setUuid(uuidCyprusDivisionsVocabulary);\r
+\r
+\r
+        for(int i = 1; i <= 8; i++){\r
+            UUID divisionUuid = getNamedAreaUuid(String.valueOf(i));\r
+            NamedArea division = this.newNamedArea(\r
+                    divisionUuid,\r
+                    "Division " + i,\r
+                    "Cyprus: Division " + i,\r
+                    String.valueOf(i), // id in vocab\r
+                    areaType,\r
+                    areaLevel,\r
+                    areaVocabulary);\r
+            divisions.put(String.valueOf(i), division);\r
+        }\r
+\r
+        vocabService.saveOrUpdate(areaVocabulary);\r
+        commitAndStartNewTransaction(null);\r
+\r
+\r
+        // import and map shapefile attributes from csv\r
+        InputStream is = getClass().getClassLoader().getResourceAsStream("eu/etaxonomy/cdm/ext/geo/cyprusdivs.csv");\r
+        List<String> idSearchFields = new ArrayList<String>();\r
+        idSearchFields.add("bdcode");\r
+        String wmsLayerName = "cyprusdivs";\r
+        editGeoService.mapShapeFileToNamedAreas(new InputStreamReader(is), idSearchFields, wmsLayerName, uuidCyprusDivisionsVocabulary, null);\r
+\r
+        divisions.clear();\r
+        Set<DefinedTermBase> terms = vocabService.load(uuidCyprusDivisionsVocabulary).getTerms();\r
+        for(DefinedTermBase dtb : terms){\r
+            divisions.put(dtb.getIdInVocabulary(), (NamedArea) dtb);\r
+        }\r
+\r
+\r
 //             indigenousStatus = (PresenceTerm)getTermService().find(CyprusTransformer.indigenousUuid);\r
 //             casualStatus = (PresenceTerm)getTermService().find(CyprusTransformer.casualUuid);\r
 //             nonInvasiveStatus = (PresenceTerm)getTermService().find(CyprusTransformer.nonInvasiveUuid);\r
 //             invasiveStatus = (PresenceTerm)getTermService().find(CyprusTransformer.invasiveUuid);\r
 //             questionableStatus = (PresenceTerm)getTermService().find(CyprusTransformer.questionableUuid);\r
-               \r
-               return true;\r
-                       \r
-               \r
-       }\r
-               \r
-       public static final UUID uuidDivision1 = UUID.fromString("ab17eee9-1abb-4ce9-a9a2-563f840cdbfc");\r
-       public static final UUID uuidDivision2 = UUID.fromString("c3606165-efb7-4224-a168-63e009eb4aa5");\r
-       public static final UUID uuidDivision3 = UUID.fromString("750d4e07-e34b-491f-a7b7-09723afdc960");\r
-       public static final UUID uuidDivision4 = UUID.fromString("8a858922-e8e5-4791-ad53-906e50633ec7");\r
-       public static final UUID uuidDivision5 = UUID.fromString("16057133-d541-4ebd-81d4-cb92265ec54c");\r
-       public static final UUID uuidDivision6 = UUID.fromString("fbf21230-4a42-4f4c-9af8-5da52123c264");\r
-       public static final UUID uuidDivision7 = UUID.fromString("d31dd96a-36ea-4428-871c-d8552a9565ca");\r
-       public static final UUID uuidDivision8 = UUID.fromString("236ea447-c3ab-486d-9e06-cc5907861acc");\r
-\r
-       \r
-       public UUID getNamedAreaUuid(String key) {\r
-               if (CdmUtils.isEmpty(key)){return null;\r
-               }else if (key.equalsIgnoreCase("1")){return uuidDivision1;\r
-               }else if (key.equalsIgnoreCase("2")){return uuidDivision2;\r
-               }else if (key.equalsIgnoreCase("3")){return uuidDivision3;\r
-               }else if (key.equalsIgnoreCase("4")){return uuidDivision4;\r
-               }else if (key.equalsIgnoreCase("5")){return uuidDivision5;\r
-               }else if (key.equalsIgnoreCase("6")){return uuidDivision6;\r
-               }else if (key.equalsIgnoreCase("7")){return uuidDivision7;\r
-               }else if (key.equalsIgnoreCase("8")){return uuidDivision8;\r
-               }else{\r
-                       return null;\r
-               }       \r
-       }\r
-       \r
-       protected NamedArea getNamedArea(UUID uuid, String label, String text, String labelAbbrev, NamedAreaType areaType, NamedAreaLevel level, TermVocabulary voc){\r
-               NamedArea namedArea = NamedArea.NewInstance(text, label, labelAbbrev);\r
-               voc.addTerm(namedArea);\r
-               namedArea.setType(areaType);\r
-               namedArea.setLevel(level);\r
-               namedArea.setUuid(uuid);\r
-               return namedArea;\r
-       }\r
+\r
+        return true;\r
+\r
+\r
+    }\r
+\r
+    public static final UUID uuidDivision1 = UUID.fromString("ab17eee9-1abb-4ce9-a9a2-563f840cdbfc");\r
+    public static final UUID uuidDivision2 = UUID.fromString("c3606165-efb7-4224-a168-63e009eb4aa5");\r
+    public static final UUID uuidDivision3 = UUID.fromString("750d4e07-e34b-491f-a7b7-09723afdc960");\r
+    public static final UUID uuidDivision4 = UUID.fromString("8a858922-e8e5-4791-ad53-906e50633ec7");\r
+    public static final UUID uuidDivision5 = UUID.fromString("16057133-d541-4ebd-81d4-cb92265ec54c");\r
+    public static final UUID uuidDivision6 = UUID.fromString("fbf21230-4a42-4f4c-9af8-5da52123c264");\r
+    public static final UUID uuidDivision7 = UUID.fromString("d31dd96a-36ea-4428-871c-d8552a9565ca");\r
+    public static final UUID uuidDivision8 = UUID.fromString("236ea447-c3ab-486d-9e06-cc5907861acc");\r
+\r
+\r
+    public UUID getNamedAreaUuid(String key) {\r
+        if (StringUtils.isBlank(key)){return null;\r
+        }else if (key.equalsIgnoreCase("1")){return uuidDivision1;\r
+        }else if (key.equalsIgnoreCase("2")){return uuidDivision2;\r
+        }else if (key.equalsIgnoreCase("3")){return uuidDivision3;\r
+        }else if (key.equalsIgnoreCase("4")){return uuidDivision4;\r
+        }else if (key.equalsIgnoreCase("5")){return uuidDivision5;\r
+        }else if (key.equalsIgnoreCase("6")){return uuidDivision6;\r
+        }else if (key.equalsIgnoreCase("7")){return uuidDivision7;\r
+        }else if (key.equalsIgnoreCase("8")){return uuidDivision8;\r
+        }else{\r
+            return null;\r
+        }\r
+    }\r
+\r
+    protected NamedArea newNamedArea(UUID uuid, String label, String text, String IdInVocabulary, NamedAreaType areaType, NamedAreaLevel level, TermVocabulary<NamedArea> voc){\r
+        NamedArea namedArea = NamedArea.NewInstance(text, label, null);\r
+        voc.addTerm(namedArea);\r
+        namedArea.setType(areaType);\r
+        namedArea.setLevel(level);\r
+        namedArea.setUuid(uuid);\r
+        namedArea.setIdInVocabulary(IdInVocabulary);\r
+        return namedArea;\r
+    }\r
+\r
+    @Test\r
+    public void testGetWebServiceUrlBangka() throws ClientProtocolException, IOException, URISyntaxException {\r
+        NamedArea areaBangka = NamedArea.NewInstance("Bangka", "Bangka", null);\r
+        TermVocabulary<NamedArea> voc = TermVocabulary.NewInstance(TermType.NamedArea, "test Voc", "test voc", null, null);\r
+        voc.addTerm(areaBangka);\r
+\r
+        GeoServiceArea geoServiceArea = new GeoServiceArea();\r
+        String geoServiceLayer="vmap0_as_bnd_political_boundary_a";\r
+        String layerFieldName ="nam";\r
+        String areaValue = "PULAU BANGKA#SUMATERA SELATAN";\r
+        geoServiceArea.add(geoServiceLayer, layerFieldName, areaValue);\r
+        geoServiceArea.add(geoServiceLayer, layerFieldName, "BALI");\r
+\r
+        mapping.set(areaBangka, geoServiceArea);\r
+        Set<Distribution> distributions = new HashSet<Distribution>();\r
+        distributions.add(Distribution.NewInstance(areaBangka, PresenceTerm.PRESENT()));\r
+\r
+        Map<PresenceAbsenceTermBase<?>, Color> presenceAbsenceColorMap = new HashMap<PresenceAbsenceTermBase<?>, Color>();\r
+        presenceAbsenceColorMap.put(PresenceTerm.PRESENT(), Color.BLUE);\r
+\r
+        presenceAbsenceColorMap = null;\r
+        List<Language> languages = new ArrayList<Language>();\r
+\r
+        boolean subAreaPreference = false;\r
+        boolean statusOrderPreference = false;\r
+        String result = EditGeoServiceUtilities.getDistributionServiceRequestParameterString(distributions,\r
+                subAreaPreference ,\r
+                statusOrderPreference,\r
+                null, mapping, presenceAbsenceColorMap, null, languages );\r
+        //TODO Set semantics is not determined\r
+        //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";\r
+\r
+        logger.debug(result);\r
+        assertTrue(result.matches(".*ad=vmap0_as_bnd_political_boundary_a%3Anam:.*"));\r
+        assertTrue(result.matches(".*(PULAU\\+BANGKA%23SUMATERA\\+SELATAN).*") );\r
+        assertTrue(result.matches(".*(BALI).*") );\r
+\r
+        // request map image from webservice\r
+        subTestWithEditMapService(result);\r
+    }\r
+\r
+\r
 }
\ No newline at end of file