aboutsummaryrefslogtreecommitdiffstats
path: root/main/src
diff options
context:
space:
mode:
authorBananeweizen <bananeweizen@gmx.de>2011-11-01 22:02:31 +0100
committerBananeweizen <bananeweizen@gmx.de>2011-11-01 22:02:31 +0100
commite2be3a453815fd8519be5f12914656dd1fc29112 (patch)
tree6b4ab398674b12e6203f52cd9ee4a1138cd4dbef /main/src
parent8579c883dbc8c1aea42483b943a1bc79b4d645d8 (diff)
downloadcgeo-e2be3a453815fd8519be5f12914656dd1fc29112.zip
cgeo-e2be3a453815fd8519be5f12914656dd1fc29112.tar.gz
cgeo-e2be3a453815fd8519be5f12914656dd1fc29112.tar.bz2
new: import caches from unknown source, fixes #720
Diffstat (limited to 'main/src')
-rw-r--r--main/src/cgeo/geocaching/connector/ConnectorFactory.java18
-rw-r--r--main/src/cgeo/geocaching/connector/UnknownConnector.java28
-rw-r--r--main/src/cgeo/geocaching/connector/opencaching/OkapiClient.java12
-rw-r--r--main/src/cgeo/geocaching/files/GPXParser.java18
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);
+ }
}
}
}