diff options
11 files changed, 169 insertions, 7 deletions
diff --git a/main/src/cgeo/geocaching/connector/AbstractConnector.java b/main/src/cgeo/geocaching/connector/AbstractConnector.java index 1fc14a0..edd4aa8 100644 --- a/main/src/cgeo/geocaching/connector/AbstractConnector.java +++ b/main/src/cgeo/geocaching/connector/AbstractConnector.java @@ -25,7 +25,9 @@ import rx.functions.Action1; import java.util.ArrayList; import java.util.Collection; +import java.util.HashSet; import java.util.List; +import java.util.Set; public abstract class AbstractConnector implements IConnector { @@ -35,6 +37,17 @@ public abstract class AbstractConnector implements IConnector { } @Override + public Set<String> handledGeocodes(@NonNull final Set<String> geocodes) { + final Set<String> strippedList = new HashSet<>(); + for (final String geocode: geocodes) { + if (canHandle(geocode)) { + strippedList.add(geocode); + } + } + return strippedList; + } + + @Override public boolean supportsWatchList() { return false; } diff --git a/main/src/cgeo/geocaching/connector/IConnector.java b/main/src/cgeo/geocaching/connector/IConnector.java index 74b1028..479d378 100644 --- a/main/src/cgeo/geocaching/connector/IConnector.java +++ b/main/src/cgeo/geocaching/connector/IConnector.java @@ -10,6 +10,7 @@ import org.eclipse.jdt.annotation.Nullable; import java.util.Collection; import java.util.List; +import java.util.Set; public interface IConnector { /** @@ -29,6 +30,15 @@ public interface IConnector { public boolean canHandle(final @NonNull String geocode); /** + * Return a new geocodes list, with only geocodes for which this connector is responsible. + * + * @param geocodes + * list of geocodes of a cache + * @return return a new stripped list + */ + public Set<String> handledGeocodes(final @NonNull Set<String> geocodes); + + /** * Get the browser URL for the given cache. * */ diff --git a/main/src/cgeo/geocaching/connector/gc/GCMap.java b/main/src/cgeo/geocaching/connector/gc/GCMap.java index 6f38fd4..295d22c 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCMap.java +++ b/main/src/cgeo/geocaching/connector/gc/GCMap.java @@ -51,7 +51,11 @@ public class GCMap { public static SearchResult searchByGeocodes(final Set<String> geocodes) { final SearchResult result = new SearchResult(); - final String geocodeList = StringUtils.join(geocodes.toArray(), "|"); + final Set<String> filteredGeocodes = GCConnector.getInstance().handledGeocodes(geocodes); + if (filteredGeocodes.isEmpty()) { + return result; + } + final String geocodeList = StringUtils.join(filteredGeocodes.toArray(), "|"); try { final Parameters params = new Parameters("i", geocodeList, "_", String.valueOf(System.currentTimeMillis())); diff --git a/tests/src/cgeo/geocaching/connector/ConnectorFactoryTest.java b/tests/src/cgeo/geocaching/connector/ConnectorFactoryTest.java index 05ca6e4..e793350 100644 --- a/tests/src/cgeo/geocaching/connector/ConnectorFactoryTest.java +++ b/tests/src/cgeo/geocaching/connector/ConnectorFactoryTest.java @@ -8,6 +8,8 @@ import cgeo.geocaching.test.AbstractResourceInstrumentationTestCase; import cgeo.geocaching.test.mock.GC1ZXX2; import java.util.Collection; +import java.util.HashSet; +import java.util.Set; public class ConnectorFactoryTest extends AbstractResourceInstrumentationTestCase { @@ -96,4 +98,29 @@ public class ConnectorFactoryTest extends AbstractResourceInstrumentationTestCas assertThat(ConnectorFactory.getTrackableFromURL("http://coord.info/GC1234")).isNull(); assertThat(ConnectorFactory.getTrackableFromURL("http://www.coord.info/GC1234")).isNull(); } + + public static Set<String> getGeocodeSample() { + Set<String> geocodes = new HashSet<>(18); + geocodes.add("GC1234"); + geocodes.add("OC1234"); + geocodes.add("OX1234"); + geocodes.add("EC1234"); + geocodes.add("TCABC"); + geocodes.add("WM1234"); + geocodes.add("GE1234"); + geocodes.add("GA1234"); + geocodes.add("TP1234"); + + geocodes.add("GC5678"); + geocodes.add("OC5678"); + geocodes.add("OX5678"); + geocodes.add("EC5678"); + geocodes.add("TC2JP"); + geocodes.add("WM5678"); + geocodes.add("GE5678"); + geocodes.add("GA5678"); + geocodes.add("TP5678"); + + return geocodes; + } } diff --git a/tests/src/cgeo/geocaching/connector/GeocachingAustraliaConnectorTest.java b/tests/src/cgeo/geocaching/connector/GeocachingAustraliaConnectorTest.java new file mode 100644 index 0000000..71e7d8c --- /dev/null +++ b/tests/src/cgeo/geocaching/connector/GeocachingAustraliaConnectorTest.java @@ -0,0 +1,30 @@ +package cgeo.geocaching.connector; + +import static org.assertj.core.api.Assertions.assertThat; + +import junit.framework.TestCase; + +import java.util.Set; + +public class GeocachingAustraliaConnectorTest extends TestCase { + + private static IConnector getGeocachingAustraliaConnector() { + final IConnector gaConnector = ConnectorFactory.getConnector("GA1234"); + assertThat(gaConnector).isNotNull(); + return gaConnector; + } + + public static void testCanHandle() { + final IConnector wmConnector = getGeocachingAustraliaConnector(); + + assertThat(wmConnector.canHandle("GA1234")).isTrue(); + assertThat(wmConnector.canHandle("GAAB12")).isFalse(); + assertThat(wmConnector.canHandle("TP1234")).isTrue(); + assertThat(wmConnector.canHandle("TPAB12")).isFalse(); + } + + public static void testHandledGeocodes() { + Set<String> geocodes = ConnectorFactoryTest.getGeocodeSample(); + assertThat(getGeocachingAustraliaConnector().handledGeocodes(geocodes)).containsOnly("GA1234", "TP1234", "GA5678", "TP5678"); + } +} diff --git a/tests/src/cgeo/geocaching/connector/GeopeitusConnectorTest.java b/tests/src/cgeo/geocaching/connector/GeopeitusConnectorTest.java new file mode 100644 index 0000000..fbb7fe6 --- /dev/null +++ b/tests/src/cgeo/geocaching/connector/GeopeitusConnectorTest.java @@ -0,0 +1,28 @@ +package cgeo.geocaching.connector; + +import static org.assertj.core.api.Assertions.assertThat; + +import junit.framework.TestCase; + +import java.util.Set; + +public class GeopeitusConnectorTest extends TestCase { + + private static IConnector getGeopeitusConnector() { + final IConnector geopeitusConnector = ConnectorFactory.getConnector("GE1234"); + assertThat(geopeitusConnector).isNotNull(); + return geopeitusConnector; + } + + public static void testCanHandle() { + final IConnector wmConnector = getGeopeitusConnector(); + + assertThat(wmConnector.canHandle("GE1234")).isTrue(); + assertThat(wmConnector.canHandle("GEAB12")).isFalse(); + } + + public static void testHandledGeocodes() { + Set<String> geocodes = ConnectorFactoryTest.getGeocodeSample(); + assertThat(getGeopeitusConnector().handledGeocodes(geocodes)).containsOnly("GE1234", "GE5678"); + } +} diff --git a/tests/src/cgeo/geocaching/connector/WaymarkingConnectorTest.java b/tests/src/cgeo/geocaching/connector/WaymarkingConnectorTest.java index 513c5c2..61479f5 100644 --- a/tests/src/cgeo/geocaching/connector/WaymarkingConnectorTest.java +++ b/tests/src/cgeo/geocaching/connector/WaymarkingConnectorTest.java @@ -3,14 +3,21 @@ package cgeo.geocaching.connector; import static org.assertj.core.api.Assertions.assertThat; import junit.framework.TestCase; +import java.util.Set; + public class WaymarkingConnectorTest extends TestCase { + private static IConnector getWaymarkingConnector() { + final IConnector wmConnector = ConnectorFactory.getConnector("WM1234"); + assertThat(wmConnector).isNotNull(); + return wmConnector; + } + public static void testGetGeocodeFromUrl() { assertThat(ConnectorFactory.getGeocodeFromURL("http://coord.info/WM1234")).isEqualTo("WM1234"); assertThat(ConnectorFactory.getGeocodeFromURL("http://www.waymarking.com/waymarks/WMNCDT_American_Legion_Flagpole_1983_University_of_Oregon")).isEqualTo("WMNCDT"); - final IConnector wmConnector = ConnectorFactory.getConnector("WM1234"); - assertThat(wmConnector).isNotNull(); + final IConnector wmConnector = getWaymarkingConnector(); assertThat(wmConnector.getGeocodeFromUrl("http://coord.info/WM1234")).isEqualTo("WM1234"); assertThat(wmConnector.getGeocodeFromUrl("http://www.waymarking.com/waymarks/WMNCDT_American_Legion_Flagpole_1983_University_of_Oregon")).isEqualTo("WMNCDT"); @@ -20,10 +27,14 @@ public class WaymarkingConnectorTest extends TestCase { } public static void testCanHandle() { - final IConnector wmConnector = ConnectorFactory.getConnector("WM1234"); - assertThat(wmConnector).isNotNull(); + final IConnector wmConnector = getWaymarkingConnector(); assertThat(wmConnector.canHandle("WM1234")).isTrue(); assertThat(wmConnector.canHandle("GC1234")).isFalse(); } + + public static void testHandledGeocodes() { + Set<String> geocodes = ConnectorFactoryTest.getGeocodeSample(); + assertThat(getWaymarkingConnector().handledGeocodes(geocodes)).containsOnly("WM1234", "WM5678"); + } } diff --git a/tests/src/cgeo/geocaching/connector/ec/ECConnectorTest.java b/tests/src/cgeo/geocaching/connector/ec/ECConnectorTest.java index f4073a9..f7090a2 100644 --- a/tests/src/cgeo/geocaching/connector/ec/ECConnectorTest.java +++ b/tests/src/cgeo/geocaching/connector/ec/ECConnectorTest.java @@ -3,10 +3,12 @@ package cgeo.geocaching.connector.ec; import static org.assertj.core.api.Assertions.assertThat; import cgeo.geocaching.Geocache; +import cgeo.geocaching.connector.ConnectorFactoryTest; import cgeo.geocaching.enumerations.CacheType; import cgeo.geocaching.enumerations.LogType; import java.util.List; +import java.util.Set; import junit.framework.TestCase; @@ -36,4 +38,8 @@ public class ECConnectorTest extends TestCase { assertThat(ECConnector.getInstance().getGeocodeFromUrl("http://extremcaching.com/index.php/output-2/738")).isEqualTo("EC738"); } + public static void testHandledGeocodes() { + Set<String> geocodes = ConnectorFactoryTest.getGeocodeSample(); + assertThat(ECConnector.getInstance().handledGeocodes(geocodes)).containsOnly("EC1234", "EC5678"); + } } diff --git a/tests/src/cgeo/geocaching/connector/gc/GCConnectorTest.java b/tests/src/cgeo/geocaching/connector/gc/GCConnectorTest.java index b9f959c..e8aaaf3 100644 --- a/tests/src/cgeo/geocaching/connector/gc/GCConnectorTest.java +++ b/tests/src/cgeo/geocaching/connector/gc/GCConnectorTest.java @@ -4,6 +4,7 @@ import static org.assertj.core.api.Assertions.assertThat; import cgeo.geocaching.SearchResult; import cgeo.geocaching.connector.ConnectorFactory; +import cgeo.geocaching.connector.ConnectorFactoryTest; import cgeo.geocaching.connector.trackable.TravelBugConnector; import cgeo.geocaching.enumerations.CacheType; import cgeo.geocaching.location.Geopoint; @@ -12,6 +13,8 @@ import cgeo.geocaching.settings.Settings; import cgeo.geocaching.settings.TestSettings; import cgeo.geocaching.test.AbstractResourceInstrumentationTestCase; +import java.util.Set; + public class GCConnectorTest extends AbstractResourceInstrumentationTestCase { public static void testGetViewport() { @@ -102,4 +105,9 @@ public class GCConnectorTest extends AbstractResourceInstrumentationTestCase { // uppercase is managed in ConnectorFactory assertThat(GCConnector.getInstance().getGeocodeFromUrl("http://coord.info/gc77")).isEqualTo("gc77"); } + + public static void testHandledGeocodes() { + Set<String> geocodes = ConnectorFactoryTest.getGeocodeSample(); + assertThat(GCConnector.getInstance().handledGeocodes(geocodes)).containsOnly("GC1234", "GC5678"); + } } diff --git a/tests/src/cgeo/geocaching/connector/oc/OCConnectorTest.java b/tests/src/cgeo/geocaching/connector/oc/OCConnectorTest.java index 0a2b248..57f43c3 100644 --- a/tests/src/cgeo/geocaching/connector/oc/OCConnectorTest.java +++ b/tests/src/cgeo/geocaching/connector/oc/OCConnectorTest.java @@ -3,10 +3,13 @@ package cgeo.geocaching.connector.oc; import static org.assertj.core.api.Assertions.assertThat; import cgeo.geocaching.connector.ConnectorFactory; +import cgeo.geocaching.connector.ConnectorFactoryTest; import cgeo.geocaching.connector.IConnector; import junit.framework.TestCase; +import java.util.Set; + public class OCConnectorTest extends TestCase { /** @@ -20,6 +23,7 @@ public class OCConnectorTest extends TestCase { private static IConnector getOcDeConnector() { final IConnector ocConnector = ConnectorFactory.getConnector("OCXXX"); + assertThat(ocConnector).isNotNull(); assertThat(ocConnector.getHost()).contains(".de"); return ocConnector; } @@ -35,4 +39,8 @@ public class OCConnectorTest extends TestCase { assertThat(connector.getGeocodeFromUrl("http://www.opencaching.us/viewcache.php?wp=OU07A0")).isEqualTo("OU07A0"); } + public static void testHandledGeocodes() { + Set<String> geocodes = ConnectorFactoryTest.getGeocodeSample(); + assertThat(getOcDeConnector().handledGeocodes(geocodes)).containsOnly("OC1234", "OC5678"); + } } diff --git a/tests/src/cgeo/geocaching/connector/ox/OXConnectorTest.java b/tests/src/cgeo/geocaching/connector/ox/OXConnectorTest.java index 11f2d66..c957912 100644 --- a/tests/src/cgeo/geocaching/connector/ox/OXConnectorTest.java +++ b/tests/src/cgeo/geocaching/connector/ox/OXConnectorTest.java @@ -1,13 +1,26 @@ package cgeo.geocaching.connector.ox; import static org.assertj.core.api.Assertions.assertThat; + +import cgeo.geocaching.connector.ConnectorFactory; +import cgeo.geocaching.connector.ConnectorFactoryTest; +import cgeo.geocaching.connector.IConnector; + import junit.framework.TestCase; +import java.util.Set; + public class OXConnectorTest extends TestCase { + private static IConnector getOXConnector() { + final IConnector oxConnector = ConnectorFactory.getConnector("OXZZZZZ"); + assertThat(oxConnector).isNotNull(); + return oxConnector; + } + public static void testCanHandle() { // http://www.opencaching.com/api_doc/concepts/oxcodes.html - final OXConnector oxConnector = new OXConnector(); + final IConnector oxConnector = getOXConnector(); assertThat(oxConnector.canHandle("OXZZZZZ")).isTrue(); assertThat(oxConnector.canHandle("OX1")).isTrue(); assertThat(oxConnector.canHandle("GCABCDE")).isFalse(); @@ -15,9 +28,13 @@ public class OXConnectorTest extends TestCase { } public static void testGetGeocodeFromUrl() { - final OXConnector connector = new OXConnector(); + final IConnector connector = getOXConnector(); assertThat(connector.getGeocodeFromUrl("http://www.opencaching.com/de/#!geocache/OX1R421")).isEqualTo("OX1R421"); assertThat(connector.getGeocodeFromUrl("http://www.opencaching.com/#!geocache/OX1R421")).isEqualTo("OX1R421"); } + public static void testHandledGeocodes() { + Set<String> geocodes = ConnectorFactoryTest.getGeocodeSample(); + assertThat(getOXConnector().handledGeocodes(geocodes)).containsOnly("OX1234", "OX5678"); + } } |