diff options
Diffstat (limited to 'main/src')
4 files changed, 60 insertions, 16 deletions
diff --git a/main/src/cgeo/geocaching/connector/ConnectorFactory.java b/main/src/cgeo/geocaching/connector/ConnectorFactory.java index a264bd8..7b0326c 100644 --- a/main/src/cgeo/geocaching/connector/ConnectorFactory.java +++ b/main/src/cgeo/geocaching/connector/ConnectorFactory.java @@ -7,9 +7,9 @@ import cgeo.geocaching.connector.opencaching.OpenCachingConnector; import org.apache.commons.lang3.StringUtils; public final class ConnectorFactory { - private static final GCConnector GC_CONNECTOR = new GCConnector(); + private static final UnknownConnector UNKNOWN_CONNECTOR = new UnknownConnector(); private static final IConnector[] connectors = new IConnector[] { - GC_CONNECTOR, + new GCConnector(), new OpenCachingConnector("OpenCaching.DE", "www.opencaching.de", "OC"), new OpenCachingConnector("OpenCaching.CZ", "www.opencaching.cz", "OZ"), new ApiOpenCachingConnector("OpenCaching.CO.UK", "www.opencaching.org.uk", "OK", "arU4okouc4GEjMniE2fq"), @@ -22,7 +22,8 @@ public final class ConnectorFactory { new ApiOpenCachingConnector("OpenCaching.US", "www.opencaching.us", "OU", "pTsYAYSXFcfcRQnYE6uA"), new OXConnector(), new GeocachingAustraliaConnector(), - new GeopeitusConnector() + new GeopeitusConnector(), + UNKNOWN_CONNECTOR // the unknown connector MUST be the last one }; public static IConnector[] getConnectors() { @@ -47,21 +48,18 @@ public final class ConnectorFactory { public static IConnector getConnector(String geocode) { if (isInvalidGeocode(geocode)) { - return GC_CONNECTOR; + return UNKNOWN_CONNECTOR; } for (IConnector connector : connectors) { if (connector.canHandle(geocode)) { return connector; } } - // in case of errors, assume GC as default - return GC_CONNECTOR; + // in case of errors, take UNKNOWN + return UNKNOWN_CONNECTOR; } private static boolean isInvalidGeocode(final String geocode) { - if (StringUtils.isBlank(geocode) || geocode.length() <= 2) { - return true; - } - return false; + return StringUtils.isBlank(geocode); } } diff --git a/main/src/cgeo/geocaching/connector/UnknownConnector.java b/main/src/cgeo/geocaching/connector/UnknownConnector.java new file mode 100644 index 0000000..fce9220 --- /dev/null +++ b/main/src/cgeo/geocaching/connector/UnknownConnector.java @@ -0,0 +1,28 @@ +package cgeo.geocaching.connector; + +import cgeo.geocaching.cgCache; + +import org.apache.commons.lang3.StringUtils; + +public class UnknownConnector extends AbstractConnector implements IConnector { + + @Override + public String getName() { + return "Unknown caches"; + } + + @Override + public String getCacheUrl(cgCache cache) { + return null; // we have no url for these caches + } + + @Override + public String getHost() { + return null; // we have no host for these caches + } + + @Override + public boolean canHandle(final String geocode) { + return StringUtils.isNotBlank(geocode); + } +} diff --git a/main/src/cgeo/geocaching/connector/opencaching/OkapiClient.java b/main/src/cgeo/geocaching/connector/opencaching/OkapiClient.java index 7c35088..9869526 100644 --- a/main/src/cgeo/geocaching/connector/opencaching/OkapiClient.java +++ b/main/src/cgeo/geocaching/connector/opencaching/OkapiClient.java @@ -142,7 +142,10 @@ final public class OkapiClient { if (!uri.isAbsolute()) { final IConnector connector = ConnectorFactory.getConnector(geocode); - return "http://" + connector.getHost() + "/" + url; + final String host = connector.getHost(); + if (StringUtils.isNotBlank(host)) { + return "http://" + host + "/" + url; + } } return url; } @@ -254,7 +257,12 @@ final public class OkapiClient { return null; } - final String uri = "http://" + connector.getHost() + service; + final String host = connector.getHost(); + if (StringUtils.isBlank(host)) { + return null; + } + + final String uri = "http://" + host + service; ((ApiOpenCachingConnector) connector).addAuthentication(params); return cgBase.requestJSON(uri, params); } diff --git a/main/src/cgeo/geocaching/files/GPXParser.java b/main/src/cgeo/geocaching/files/GPXParser.java index 01929c6..c1cc1a3 100644 --- a/main/src/cgeo/geocaching/files/GPXParser.java +++ b/main/src/cgeo/geocaching/files/GPXParser.java @@ -260,12 +260,18 @@ public abstract class GPXParser extends FileParser { @Override public void end() { + // try to find geocode somewhere else if (StringUtils.isBlank(cache.getGeocode())) { - // try to find geocode somewhere else findGeoCode(name); findGeoCode(desc); findGeoCode(cmt); } + // take the name as code, if nothing else is available + if (StringUtils.isBlank(cache.getGeocode())) { + if (StringUtils.isNotBlank(name)) { + cache.setGeocode(name.trim()); + } + } if (StringUtils.isNotBlank(cache.getGeocode()) && cache.getCoords() != null @@ -772,11 +778,15 @@ public abstract class GPXParser extends FileParser { if (input == null || StringUtils.isNotBlank(cache.getGeocode())) { return; } - final Matcher matcherGeocode = patternGeocode.matcher(input); + final String trimmed = input.trim(); + final Matcher matcherGeocode = patternGeocode.matcher(trimmed); if (matcherGeocode.find()) { final String geocode = matcherGeocode.group(1); - if (ConnectorFactory.canHandle(geocode)) { - cache.setGeocode(geocode); + // a geocode should not be part of a word + if (geocode.length() == trimmed.length() || Character.isWhitespace(trimmed.charAt(geocode.length()))) { + if (ConnectorFactory.canHandle(geocode)) { + cache.setGeocode(geocode); + } } } } |
