diff options
11 files changed, 65 insertions, 32 deletions
diff --git a/main/src/cgeo/geocaching/connector/ConnectorFactory.java b/main/src/cgeo/geocaching/connector/ConnectorFactory.java index b11a731..a07c2d8 100644 --- a/main/src/cgeo/geocaching/connector/ConnectorFactory.java +++ b/main/src/cgeo/geocaching/connector/ConnectorFactory.java @@ -166,7 +166,7 @@ public final class ConnectorFactory { } /** @see ISearchByViewPort#searchByViewport */ - public static SearchResult searchByViewport(final Viewport viewport, final String[] tokens) { + public static SearchResult searchByViewport(final @NonNull Viewport viewport, final String[] tokens) { final SearchResult result = new SearchResult(); for (final ISearchByViewPort vpconn : searchByViewPortConns) { diff --git a/main/src/cgeo/geocaching/connector/capability/ISearchByCenter.java b/main/src/cgeo/geocaching/connector/capability/ISearchByCenter.java index 91dd094..94e31cd 100644 --- a/main/src/cgeo/geocaching/connector/capability/ISearchByCenter.java +++ b/main/src/cgeo/geocaching/connector/capability/ISearchByCenter.java @@ -4,10 +4,12 @@ import cgeo.geocaching.SearchResult; import cgeo.geocaching.connector.IConnector; import cgeo.geocaching.geopoint.Geopoint; +import org.eclipse.jdt.annotation.NonNull; + /** * connector capability for online searching caches around a center coordinate, sorted by distance * */ public interface ISearchByCenter extends IConnector { - public SearchResult searchByCenter(final Geopoint center); + public SearchResult searchByCenter(final @NonNull Geopoint center); } diff --git a/main/src/cgeo/geocaching/connector/capability/ISearchByGeocode.java b/main/src/cgeo/geocaching/connector/capability/ISearchByGeocode.java index 4c16049..7abc235 100644 --- a/main/src/cgeo/geocaching/connector/capability/ISearchByGeocode.java +++ b/main/src/cgeo/geocaching/connector/capability/ISearchByGeocode.java @@ -4,10 +4,12 @@ import cgeo.geocaching.SearchResult; import cgeo.geocaching.connector.IConnector; import cgeo.geocaching.utils.CancellableHandler; +import org.eclipse.jdt.annotation.Nullable; + /** * connector capability of searching online for a cache by geocode * */ public interface ISearchByGeocode extends IConnector { - public SearchResult searchByGeocode(final String geocode, final String guid, final CancellableHandler handler); + public SearchResult searchByGeocode(final @Nullable String geocode, final @Nullable String guid, final CancellableHandler handler); } diff --git a/main/src/cgeo/geocaching/connector/capability/ISearchByKeyword.java b/main/src/cgeo/geocaching/connector/capability/ISearchByKeyword.java index 09b2423..07cb7b3 100644 --- a/main/src/cgeo/geocaching/connector/capability/ISearchByKeyword.java +++ b/main/src/cgeo/geocaching/connector/capability/ISearchByKeyword.java @@ -3,10 +3,12 @@ package cgeo.geocaching.connector.capability; import cgeo.geocaching.SearchResult; import cgeo.geocaching.connector.IConnector; +import org.eclipse.jdt.annotation.NonNull; + /** * connector capability of searching online for a cache by name * */ public interface ISearchByKeyword extends IConnector { - public SearchResult searchByName(final String name); + public SearchResult searchByName(final @NonNull String name); } diff --git a/main/src/cgeo/geocaching/connector/capability/ISearchByViewPort.java b/main/src/cgeo/geocaching/connector/capability/ISearchByViewPort.java index 4954017..c04e9ed 100644 --- a/main/src/cgeo/geocaching/connector/capability/ISearchByViewPort.java +++ b/main/src/cgeo/geocaching/connector/capability/ISearchByViewPort.java @@ -4,6 +4,8 @@ import cgeo.geocaching.SearchResult; import cgeo.geocaching.connector.IConnector; import cgeo.geocaching.geopoint.Viewport; +import org.eclipse.jdt.annotation.NonNull; + public interface ISearchByViewPort extends IConnector { - public SearchResult searchByViewport(final Viewport viewport, final String[] tokens); + public SearchResult searchByViewport(final @NonNull Viewport viewport, final String[] tokens); } diff --git a/main/src/cgeo/geocaching/connector/ec/ECConnector.java b/main/src/cgeo/geocaching/connector/ec/ECConnector.java index a270e4e..2aff7e9 100644 --- a/main/src/cgeo/geocaching/connector/ec/ECConnector.java +++ b/main/src/cgeo/geocaching/connector/ec/ECConnector.java @@ -22,6 +22,7 @@ import cgeo.geocaching.utils.CancellableHandler; import org.apache.commons.lang3.StringUtils; import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; import android.content.Context; import android.os.Handler; @@ -77,7 +78,7 @@ public class ECConnector extends AbstractConnector implements ISearchByGeocode, } @Override - public SearchResult searchByGeocode(final String geocode, final String guid, final CancellableHandler handler) { + public SearchResult searchByGeocode(final @Nullable String geocode, final @Nullable String guid, final CancellableHandler handler) { CancellableHandler.sendLoadProgressDetail(handler, R.string.cache_dialog_loading_details_status_loadpage); @@ -87,7 +88,7 @@ public class ECConnector extends AbstractConnector implements ISearchByGeocode, } @Override - public SearchResult searchByViewport(Viewport viewport, String[] tokens) { + public SearchResult searchByViewport(@NonNull Viewport viewport, String[] tokens) { final Collection<Geocache> caches = ECApi.searchByBBox(viewport); if (caches == null) { return null; @@ -97,7 +98,7 @@ public class ECConnector extends AbstractConnector implements ISearchByGeocode, } @Override - public SearchResult searchByCenter(Geopoint center) { + public SearchResult searchByCenter(@NonNull Geopoint center) { final Collection<Geocache> caches = ECApi.searchByCenter(center); if (caches == null) { return null; diff --git a/main/src/cgeo/geocaching/connector/gc/GCConnector.java b/main/src/cgeo/geocaching/connector/gc/GCConnector.java index 1bffb3a..3dd16e5 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCConnector.java +++ b/main/src/cgeo/geocaching/connector/gc/GCConnector.java @@ -24,6 +24,7 @@ import cgeo.geocaching.utils.Log; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; import android.content.Context; import android.os.Handler; @@ -127,7 +128,7 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode, } @Override - public SearchResult searchByGeocode(final String geocode, final String guid, final CancellableHandler handler) { + public SearchResult searchByGeocode(final @Nullable String geocode, final @Nullable String guid, final CancellableHandler handler) { CancellableHandler.sendLoadProgressDetail(handler, R.string.cache_dialog_loading_details_status_loadpage); @@ -164,7 +165,7 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode, } @Override - public SearchResult searchByViewport(Viewport viewport, String[] tokens) { + public SearchResult searchByViewport(@NonNull Viewport viewport, String[] tokens) { return GCMap.searchByViewport(viewport, tokens); } @@ -264,7 +265,7 @@ public class GCConnector extends AbstractConnector implements ISearchByGeocode, } @Override - public SearchResult searchByCenter(Geopoint center) { + public SearchResult searchByCenter(@NonNull Geopoint center) { // TODO make search by coordinate use this method. currently it is just a marker that this connector supports search by center return null; } diff --git a/main/src/cgeo/geocaching/connector/oc/OCApiConnector.java b/main/src/cgeo/geocaching/connector/oc/OCApiConnector.java index ddf674f..46e4c96 100644 --- a/main/src/cgeo/geocaching/connector/oc/OCApiConnector.java +++ b/main/src/cgeo/geocaching/connector/oc/OCApiConnector.java @@ -9,6 +9,7 @@ import cgeo.geocaching.utils.CryptUtils; import org.apache.commons.lang3.StringUtils; import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; public class OCApiConnector extends OCConnector implements ISearchByGeocode { @@ -48,7 +49,7 @@ public class OCApiConnector extends OCConnector implements ISearchByGeocode { } @Override - public SearchResult searchByGeocode(final String geocode, final String guid, final CancellableHandler handler) { + public SearchResult searchByGeocode(final @Nullable String geocode, final @Nullable String guid, final CancellableHandler handler) { final Geocache cache = OkapiClient.getCache(geocode); if (cache == null) { return null; diff --git a/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java b/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java index 63ae341..9ae1872 100644 --- a/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java +++ b/main/src/cgeo/geocaching/connector/oc/OCApiLiveConnector.java @@ -17,6 +17,7 @@ import cgeo.geocaching.settings.Settings; import cgeo.geocaching.utils.CryptUtils; import org.apache.commons.lang3.StringUtils; +import org.eclipse.jdt.annotation.NonNull; import android.content.Context; import android.os.Handler; @@ -44,12 +45,12 @@ public class OCApiLiveConnector extends OCApiConnector implements ISearchByCente } @Override - public SearchResult searchByViewport(Viewport viewport, String[] tokens) { + public SearchResult searchByViewport(@NonNull Viewport viewport, String[] tokens) { return new SearchResult(OkapiClient.getCachesBBox(viewport, this)); } @Override - public SearchResult searchByCenter(Geopoint center) { + public SearchResult searchByCenter(@NonNull Geopoint center) { return new SearchResult(OkapiClient.getCachesAround(center, this)); } @@ -155,7 +156,7 @@ public class OCApiLiveConnector extends OCApiConnector implements ISearchByCente } @Override - public SearchResult searchByName(final String name) { + public SearchResult searchByName(final @NonNull String name) { final Geopoint currentPos = CgeoApplication.getInstance().currentGeo().getCoords(); return new SearchResult(OkapiClient.getCachesNamed(currentPos, name, this)); } diff --git a/main/src/cgeo/geocaching/connector/ox/OXConnector.java b/main/src/cgeo/geocaching/connector/ox/OXConnector.java index 1653838..0cd49c3 100644 --- a/main/src/cgeo/geocaching/connector/ox/OXConnector.java +++ b/main/src/cgeo/geocaching/connector/ox/OXConnector.java @@ -6,6 +6,7 @@ import cgeo.geocaching.SearchResult; import cgeo.geocaching.connector.AbstractConnector; import cgeo.geocaching.connector.capability.ISearchByCenter; import cgeo.geocaching.connector.capability.ISearchByGeocode; +import cgeo.geocaching.connector.capability.ISearchByKeyword; import cgeo.geocaching.connector.capability.ISearchByViewPort; import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.geopoint.Viewport; @@ -13,6 +14,7 @@ import cgeo.geocaching.settings.Settings; import cgeo.geocaching.utils.CancellableHandler; import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; import java.util.Collection; import java.util.regex.Pattern; @@ -21,7 +23,7 @@ import java.util.regex.Pattern; * connector for OpenCaching.com * */ -public class OXConnector extends AbstractConnector implements ISearchByCenter, ISearchByGeocode, ISearchByViewPort { +public class OXConnector extends AbstractConnector implements ISearchByCenter, ISearchByGeocode, ISearchByViewPort, ISearchByKeyword { private static final Pattern PATTERN_GEOCODE = Pattern.compile("OX[A-Z0-9]+", Pattern.CASE_INSENSITIVE); @@ -57,7 +59,10 @@ public class OXConnector extends AbstractConnector implements ISearchByCenter, I } @Override - public SearchResult searchByGeocode(String geocode, String guid, CancellableHandler handler) { + public SearchResult searchByGeocode(final @Nullable String geocode, final @Nullable String guid, final CancellableHandler handler) { + if (geocode == null) { + return null; + } final Geocache cache = OpenCachingApi.searchByGeoCode(geocode); if (cache == null) { return null; @@ -67,12 +72,8 @@ public class OXConnector extends AbstractConnector implements ISearchByCenter, I } @Override - public SearchResult searchByCenter(Geopoint center) { - Collection<Geocache> caches = OpenCachingApi.searchByCenter(center); - if (caches == null) { - return null; - } - return new SearchResult(caches); + public SearchResult searchByCenter(@NonNull Geopoint center) { + return createSearchResult(OpenCachingApi.searchByCenter(center)); } @Override @@ -81,16 +82,24 @@ public class OXConnector extends AbstractConnector implements ISearchByCenter, I } @Override - public SearchResult searchByViewport(Viewport viewport, String[] tokens) { - Collection<Geocache> caches = OpenCachingApi.searchByBoundingBox(viewport); - if (caches == null) { - return null; - } - return new SearchResult(caches); + public SearchResult searchByViewport(@NonNull Viewport viewport, String[] tokens) { + return createSearchResult(OpenCachingApi.searchByBoundingBox(viewport)); } @Override public boolean isActive() { return Settings.isOXConnectorActive(); } + + @Override + public SearchResult searchByName(final @NonNull String name) { + return createSearchResult(OpenCachingApi.searchByKeyword(name)); + } + + private static SearchResult createSearchResult(Collection<Geocache> caches) { + if (caches == null) { + return null; + } + return new SearchResult(caches); + } } diff --git a/main/src/cgeo/geocaching/connector/ox/OpenCachingApi.java b/main/src/cgeo/geocaching/connector/ox/OpenCachingApi.java index 7fb3ffa..2defc52 100644 --- a/main/src/cgeo/geocaching/connector/ox/OpenCachingApi.java +++ b/main/src/cgeo/geocaching/connector/ox/OpenCachingApi.java @@ -13,6 +13,7 @@ import cgeo.geocaching.utils.Log; import ch.boye.httpclientandroidlib.HttpResponse; import org.apache.commons.collections4.CollectionUtils; +import org.eclipse.jdt.annotation.NonNull; import java.util.Collection; import java.util.Collections; @@ -22,7 +23,7 @@ public class OpenCachingApi { private static final String API_URL_CACHES_GPX = "http://www.opencaching.com/api/geocache.gpx"; private static final String DEV_KEY = CryptUtils.rot13("PtqQnHo9RUTht3Np"); - public static Geocache searchByGeoCode(final String geocode) { + public static Geocache searchByGeoCode(final @NonNull String geocode) { final HttpResponse response = getRequest("http://www.opencaching.com/api/geocache/" + geocode + ".gpx", new Parameters( "log_limit", "50", @@ -54,7 +55,7 @@ public class OpenCachingApi { return caches; } - public static Collection<Geocache> searchByCenter(final Geopoint center) { + public static Collection<Geocache> searchByCenter(final @NonNull Geopoint center) { final HttpResponse response = getRequest(API_URL_CACHES_GPX, new Parameters( "log_limit", "0", @@ -66,7 +67,7 @@ public class OpenCachingApi { } - public static Collection<Geocache> searchByBoundingBox(final Viewport viewport) { + public static Collection<Geocache> searchByBoundingBox(final @NonNull Viewport viewport) { final String bbox = viewport.bottomLeft.format(GeopointFormatter.Format.LAT_LON_DECDEGREE_COMMA) + "," + viewport.topRight.format(GeopointFormatter.Format.LAT_LON_DECDEGREE_COMMA); final HttpResponse response = getRequest(API_URL_CACHES_GPX, new Parameters( @@ -78,4 +79,15 @@ public class OpenCachingApi { return importCachesFromResponse(response, false); } + public static Collection<Geocache> searchByKeyword(final @NonNull String name) { + final HttpResponse response = getRequest(API_URL_CACHES_GPX, + new Parameters( + "log_limit", "5", + "hint", "false", + "description", "none", + "limit", "100", + "name", name)); + return importCachesFromResponse(response, false); + } + } |
