diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 0754fa9..807c284 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -3,7 +3,7 @@ android:versionCode="1" android:versionName="1.0"> - + - + filters) throws IOException, - ParseException { + protected PoiList parse(Collection filters) throws IOException { InputStream fis = null; try { fis = Thread.currentThread().getContextClassLoader() diff --git a/src/bma/groomservice/data/dataprovence/DataprovenceHelper.java b/src/bma/groomservice/data/dataprovence/DataprovenceHelper.java index a1e3928..afe53a4 100644 --- a/src/bma/groomservice/data/dataprovence/DataprovenceHelper.java +++ b/src/bma/groomservice/data/dataprovence/DataprovenceHelper.java @@ -5,10 +5,15 @@ import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; -import java.text.ParseException; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -23,6 +28,34 @@ public class DataprovenceHelper { Logger logger = LoggerFactory.getLogger(DataprovenceHelper.class); + // + // Constantes des "thèmes" + // + + public static final String THEME_PLEINAIR = "PLEIN AIR"; + public static final String THEME_RESTAURATION = "RESTAURATION"; + public static final String THEME_SPORT = "SPORT"; + public static final String THEME_CULTURE = "CULTURE"; + + public static final Map DATASETS = new HashMap(); + static { + DATASETS.put(THEME_PLEINAIR, new String[] { "ServicesDeGuides", + "LocationDeVelo", "CentresEquestres", + "AccompagnateurDeMoyenneMontagneEtMoniteursDEscalade", + "ParcsAThemesEtAnimaliers", "GolfsEtMinigolfs", + "ParcsAcrobatiquesForestiers", "ParcsEtJardins", + "SitesNaturelsIncontournables", "Plages" }); + DATASETS.put(THEME_RESTAURATION, new String[] { + "RestaurantsGastronomiques", "Restaurants" }); + DATASETS.put(THEME_SPORT, new String[] { "SportNautique", + "LocationDeVelo", "CentresEquestres", + "AccompagnateurDeMoyenneMontagneEtMoniteursDEscalade", + "GolfsEtMinigolfs", "ParcsAcrobatiquesForestiers" }); + DATASETS.put(THEME_CULTURE, new String[] { "ServicesDeGuides", + "SitesNaturelsIncontournables", "Musees", + "MonumentsEtStesCulturels" }); + } + private final String rootUrl; private final String datasetName; private final Collection filters; @@ -43,6 +76,44 @@ public class DataprovenceHelper { datasetName, null); } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + + ((datasetName == null) ? 0 : datasetName.hashCode()); + result = prime * result + ((filters == null) ? 0 : filters.hashCode()); + result = prime * result + ((rootUrl == null) ? 0 : rootUrl.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + DataprovenceHelper other = (DataprovenceHelper) obj; + if (datasetName == null) { + if (other.datasetName != null) + return false; + } else if (!datasetName.equals(other.datasetName)) + return false; + if (filters == null) { + if (other.filters != null) + return false; + } else if (!filters.equals(other.filters)) + return false; + if (rootUrl == null) { + if (other.rootUrl != null) + return false; + } else if (!rootUrl.equals(other.rootUrl)) + return false; + return true; + } + /** * Lit le contenu total du flux dans une {@link String} */ @@ -58,8 +129,7 @@ public class DataprovenceHelper { * Lit un {@link PoiList} depuis un {@link InputStream} donné * Attention à bien fermer l'input stream après. */ - protected PoiList getContent(InputStream is) throws IOException, - ParseException { + protected PoiList getContent(InputStream is) throws IOException { String json = readStream(is); logger.debug("json={}", json); @@ -69,8 +139,7 @@ public class DataprovenceHelper { return all; } - protected PoiList parse(Collection filters) throws IOException, - ParseException { + protected PoiList parse(Collection filters) throws IOException { Collection ff = filters; if (ff == null) { @@ -108,9 +177,39 @@ public class DataprovenceHelper { } } - public List find(Collection filters) throws IOException, - ParseException { + public List find(Collection filters) throws IOException { PoiList gl = parse(filters); return Arrays.asList(gl.d); } + + protected static Collection findHelpers( + Collection tags) { + ArrayList helpers = new ArrayList(); + for (String tag : tags) { + String[] datasets = DATASETS.get(tag); + for (int d = 0; d < datasets.length; d++) { + helpers.add(new DataprovenceHelper(datasets[d])); + } + } + return helpers; + } + + public static List findAll(Collection tags) throws IOException { + + Set helpers = new HashSet(); + helpers.addAll(findHelpers(tags)); + + TreeSet pois = new TreeSet(); + for (DataprovenceHelper helper : findHelpers(tags)) { + pois.addAll(helper.find(null)); + } + + return new ArrayList(pois); + + } + + public static List findAll(String[] tags) throws IOException { + return findAll(Arrays.asList(tags)); + } + } diff --git a/src/bma/groomservice/data/dataprovence/DataprovenceParserTest.java b/src/bma/groomservice/data/dataprovence/DataprovenceParserTest.java index b6e2f35..837fee7 100644 --- a/src/bma/groomservice/data/dataprovence/DataprovenceParserTest.java +++ b/src/bma/groomservice/data/dataprovence/DataprovenceParserTest.java @@ -4,26 +4,38 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; -import junit.framework.TestCase; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import android.test.AndroidTestCase; import bma.groomservice.data.Filter; import bma.groomservice.data.Poi; -public class DataprovenceParserTest extends TestCase { +public class DataprovenceParserTest extends AndroidTestCase { Logger logger = LoggerFactory.getLogger(DataprovenceParserTest.class); + // DataprovenceHelper parser = new DataprovenceHelper( + // "RestaurantsGastronomiques"); + DataprovenceHelper parser; + + @Override + protected void setUp() throws Exception { + super.setUp(); + parser = new DataprovenceFileHelper( + "RestaurantsGastronomiques_cdtRestaurant.json"); + } + + @Override + protected void tearDown() throws Exception { + parser = null; + super.tearDown(); + } + public void testRestaurantsGastronomiques() { Collection filters = new ArrayList(); filters.add(Filter.eq("type", "cdt:Restaurant")); try { - // DataprovenceHelper parser = new DataprovenceHelper( - // "RestaurantsGastronomiques"); - DataprovenceHelper parser = new DataprovenceFileHelper( - "RestaurantsGastronomiques_cdtRestaurant.json"); List gs = parser.find(filters); logger.debug("RestaurantsGastronomiques={}", gs); @@ -35,9 +47,6 @@ public class DataprovenceParserTest extends TestCase { public void testParcsEtJardins() { try { - DataprovenceHelper parser = new DataprovenceHelper("ParcsEtJardins"); - // DataprovenceHelper parser = new DataprovenceFileHelper( - // "ParcsEtJardins.json"); List gs = parser.find(null); logger.debug("ParcsEtJardins={}", gs); @@ -46,4 +55,33 @@ public class DataprovenceParserTest extends TestCase { fail(e.getMessage()); } } + + public void testfindHelpersCulture() { + try { + List pois = DataprovenceHelper + .findAll(new String[] { "CULTURE" }); + assertEquals(4, pois.size()); + assertTrue(pois + .contains(new DataprovenceHelper("ServicesDeGuides"))); + assertTrue(pois.contains(new DataprovenceHelper( + "SitesNaturelsIncontournables"))); + assertTrue(pois.contains(new DataprovenceHelper("Musees"))); + assertTrue(pois.contains(new DataprovenceHelper( + "MonumentsEtStesCulturels"))); + } catch (Exception e) { + e.printStackTrace(System.err); + fail(e.getMessage()); + } + } + + public void testfindHelpersCultureSport() { + try { + List pois = DataprovenceHelper.findAll(new String[] { + "CULTURE", "PLEIN AIR" }); + assertEquals(12, pois.size()); + } catch (Exception e) { + e.printStackTrace(System.err); + fail(e.getMessage()); + } + } }