aboutsummaryrefslogtreecommitdiffstats
path: root/src/cgeo/geocaching/cgData.java
diff options
context:
space:
mode:
authorSamuel Tardieu <sam@rfc1149.net>2011-09-09 22:41:57 +0200
committerSamuel Tardieu <sam@rfc1149.net>2011-09-09 22:45:17 +0200
commitd01ff869025c5d83f438f04fca6bbf19bbfc5ce5 (patch)
treec1ed669cda1165b6be4a689f25d07cc4ece35d5d /src/cgeo/geocaching/cgData.java
parent820ba2f83ddd488bc5809ce31cf0a718143a1419 (diff)
parent09dd423be6c182d434aa3e20330ee1866a0b0aef (diff)
downloadcgeo-d01ff869025c5d83f438f04fca6bbf19bbfc5ce5.zip
cgeo-d01ff869025c5d83f438f04fca6bbf19bbfc5ce5.tar.gz
cgeo-d01ff869025c5d83f438f04fca6bbf19bbfc5ce5.tar.bz2
Merge branch 'master' into use-geopoint-391
Conflicts: src/cgeo/geocaching/cgData.java
Diffstat (limited to 'src/cgeo/geocaching/cgData.java')
-rw-r--r--src/cgeo/geocaching/cgData.java278
1 files changed, 145 insertions, 133 deletions
diff --git a/src/cgeo/geocaching/cgData.java b/src/cgeo/geocaching/cgData.java
index 9329ff2..940ef09 100644
--- a/src/cgeo/geocaching/cgData.java
+++ b/src/cgeo/geocaching/cgData.java
@@ -35,6 +35,13 @@ import cgeo.geocaching.utils.CollectionUtils;
public class cgData {
+ /**The list of fields needed for mapping.*/
+ private static final String[] CACHE_COLUMNS = new String[]{
+ "_id", "updated", "reason", "detailed", "detailedupdate", "visiteddate", "geocode", "cacheid", "guid", "type", "name", "own", "owner", "owner_real", "hidden", "hint", "size",
+ "difficulty", "distance", "direction", "terrain", "latlon", "latitude_string", "longitude_string", "location", "latitude", "longitude", "elevation", "shortdesc",
+ "description", "favourite_cnt", "rating", "votes", "myvote", "disabled", "archived", "members", "found", "favourite", "inventorycoins", "inventorytags",
+ "inventoryunknown", "onWatchlist", "personal_note", "reliable_latlon"
+ };
public cgCacheWrap caches;
private Context context = null;
private String path = null;
@@ -1016,6 +1023,8 @@ public class cgData {
}
}
+
+ @Deprecated
public boolean isReliableLatLon(String geocode, String guid) {
init();
@@ -1196,7 +1205,7 @@ public class cgData {
values.put("distance", cache.distance);
values.put("direction", cache.direction);
// save coordinates
- final boolean rel = isReliableLatLon(cache.geocode, cache.guid);
+ final boolean rel = cache.reliableLatLon;
if (cache.reliableLatLon) { // new cache has reliable coordinates, store
values.put("latitude", cache.coords.getLatitude());
values.put("longitude", cache.coords.getLongitude());
@@ -1713,6 +1722,19 @@ public class cgData {
return loadCache(geocode, guid, false, true, false, false, false, false);
}
+ /**
+ * Loads a single Cache.
+ * @param geocode The Geocode GCXXXX
+ * @param guid
+ * @param loadA
+ * @param loadW
+ * @param loadS
+ * @param loadL
+ * @param loadI
+ * @param loadO
+ * @return the loaded cache
+ */
+
public cgCache loadCache(String geocode, String guid, boolean loadA, boolean loadW, boolean loadS, boolean loadL, boolean loadI, boolean loadO) {
Object[] geocodes = new Object[1];
Object[] guids = new Object[1];
@@ -1729,7 +1751,7 @@ public class cgData {
guids = null;
}
- List<cgCache> caches = loadCaches(geocodes, guids, null, null, null, null, loadA, loadW, loadS, loadL, loadI, loadO);
+ List<cgCache> caches = loadCaches(geocodes, null, null, null, null, null, loadA, loadW, loadS, loadL, loadI, loadO);
if (caches != null && caches.isEmpty() == false) {
return caches.get(0);
}
@@ -1751,7 +1773,17 @@ public class cgData {
public List<cgCache> loadCaches(Object[] geocodes, Object[] guids, Long centerLat, Long centerLon, Long spanLat, Long spanLon, boolean loadA, boolean loadW, boolean loadS, boolean loadL, boolean loadI, boolean loadO) {
init();
-
+// Using more than one of the parametersets results in overly comlex wheres
+ if (((geocodes != null && geocodes.length > 0) && (guids != null && guids.length > 0))) {
+ throw new IllegalArgumentException("Please use only one parameter");
+ }
+ if (((geocodes != null && geocodes.length > 0) || (guids != null && guids.length > 0))
+ && centerLat != null
+ && centerLon != null
+ && spanLat != null
+ && spanLon != null) {
+ throw new IllegalArgumentException("Please use only one parameter");
+ }
StringBuilder where = new StringBuilder();
Cursor cursor = null;
List<cgCache> caches = new ArrayList<cgCache>();
@@ -1827,15 +1859,9 @@ public class cgData {
where.append(String.format((Locale) null, "%.6f", lonMax));
where.append(')');
}
-
cursor = databaseRO.query(
dbTableCaches,
- new String[]{
- "_id", "updated", "reason", "detailed", "detailedupdate", "visiteddate", "geocode", "cacheid", "guid", "type", "name", "own", "owner", "owner_real", "hidden", "hint", "size",
- "difficulty", "distance", "direction", "terrain", "latlon", "latitude_string", "longitude_string", "location", "latitude", "longitude", "elevation", "shortdesc",
- "description", "favourite_cnt", "rating", "votes", "myvote", "disabled", "archived", "members", "found", "favourite", "inventorycoins", "inventorytags",
- "inventoryunknown", "onWatchlist", "personal_note"
- },
+ CACHE_COLUMNS,
where.toString(),
null,
null,
@@ -1844,77 +1870,12 @@ public class cgData {
null);
if (cursor != null) {
- int index = 0;
-
if (cursor.getCount() > 0) {
cursor.moveToFirst();
do {
- cgCache cache = new cgCache();
-
- cache.updated = (long) cursor.getLong(cursor.getColumnIndex("updated"));
- cache.reason = (int) cursor.getInt(cursor.getColumnIndex("reason"));
- cache.detailed = cursor.getInt(cursor.getColumnIndex("detailed")) == 1;
- cache.detailedUpdate = (Long) cursor.getLong(cursor.getColumnIndex("detailedupdate"));
- cache.visitedDate = (Long) cursor.getLong(cursor.getColumnIndex("visiteddate"));
- cache.geocode = (String) cursor.getString(cursor.getColumnIndex("geocode"));
- cache.cacheid = (String) cursor.getString(cursor.getColumnIndex("cacheid"));
- cache.guid = (String) cursor.getString(cursor.getColumnIndex("guid"));
- cache.type = (String) cursor.getString(cursor.getColumnIndex("type"));
- cache.name = (String) cursor.getString(cursor.getColumnIndex("name"));
- cache.own = cursor.getInt(cursor.getColumnIndex("own")) == 1;
- cache.owner = (String) cursor.getString(cursor.getColumnIndex("owner"));
- cache.ownerReal = (String) cursor.getString(cursor.getColumnIndex("owner_real"));
- cache.hidden = new Date((long) cursor.getLong(cursor.getColumnIndex("hidden")));
- cache.hint = (String) cursor.getString(cursor.getColumnIndex("hint"));
- cache.size = (String) cursor.getString(cursor.getColumnIndex("size"));
- cache.difficulty = (Float) cursor.getFloat(cursor.getColumnIndex("difficulty"));
- index = cursor.getColumnIndex("direction");
- if (cursor.isNull(index)) {
- cache.direction = null;
- } else {
- cache.direction = (Double) cursor.getDouble(index);
- }
- index = cursor.getColumnIndex("distance");
- if (cursor.isNull(index)) {
- cache.distance = null;
- } else {
- cache.distance = (Double) cursor.getDouble(index);
- }
- cache.terrain = (Float) cursor.getFloat(cursor.getColumnIndex("terrain"));
- cache.latlon = (String) cursor.getString(cursor.getColumnIndex("latlon"));
- cache.latitudeString = (String) cursor.getString(cursor.getColumnIndex("latitude_string"));
- cache.longitudeString = (String) cursor.getString(cursor.getColumnIndex("longitude_string"));
- cache.location = (String) cursor.getString(cursor.getColumnIndex("location"));
-
- final int indexLat = cursor.getColumnIndex("latitude");
- final int indexLon = cursor.getColumnIndex("longitude");
- if (cursor.isNull(indexLat) || cursor.isNull(indexLon)) {
- cache.coords = null;
- } else {
- cache.coords = new Geopoint(cursor.getDouble(indexLat), cursor.getDouble(indexLon));;
- }
-
- index = cursor.getColumnIndex("elevation");
- if (cursor.isNull(index)) {
- cache.elevation = null;
- } else {
- cache.elevation = (Double) cursor.getDouble(index);
- }
- cache.personalNote = (String) cursor.getString(cursor.getColumnIndex("personal_note"));
- cache.shortdesc = (String) cursor.getString(cursor.getColumnIndex("shortdesc"));
- cache.description = (String) cursor.getString(cursor.getColumnIndex("description"));
- cache.favouriteCnt = (Integer) cursor.getInt(cursor.getColumnIndex("favourite_cnt"));
- cache.rating = (Float) cursor.getFloat(cursor.getColumnIndex("rating"));
- cache.votes = (Integer) cursor.getInt(cursor.getColumnIndex("votes"));
- cache.myVote = (Float) cursor.getFloat(cursor.getColumnIndex("myvote"));
- cache.disabled = cursor.getLong(cursor.getColumnIndex("disabled")) == 1L;
- cache.archived = cursor.getLong(cursor.getColumnIndex("archived")) == 1L;
- cache.members = cursor.getLong(cursor.getColumnIndex("members")) == 1L;
- cache.found = cursor.getLong(cursor.getColumnIndex("found")) == 1L;
- cache.favourite = cursor.getLong(cursor.getColumnIndex("favourite")) == 1L;
- cache.inventoryItems = (Integer) cursor.getInt(cursor.getColumnIndex("inventoryunknown"));
- cache.onWatchlist = cursor.getLong(cursor.getColumnIndex("onWatchlist")) == 1L;
+ //Extracted Method
+ cgCache cache = createCacheFromDatabaseContent(cursor);
if (loadA) {
List<String> attributes = loadAttributes(cache.geocode);
@@ -2001,6 +1962,81 @@ public class cgData {
return caches;
}
+ /**
+ * maps a Cache from the cursor. Doesn't next.
+ * @param cursor
+ * @return
+ */
+
+ private static cgCache createCacheFromDatabaseContent(Cursor cursor) {
+ int index;
+ cgCache cache = new cgCache();
+
+ cache.updated = (long) cursor.getLong(cursor.getColumnIndex("updated"));
+ cache.reason = (int) cursor.getInt(cursor.getColumnIndex("reason"));
+ cache.detailed = cursor.getInt(cursor.getColumnIndex("detailed")) == 1;
+ cache.detailedUpdate = (Long) cursor.getLong(cursor.getColumnIndex("detailedupdate"));
+ cache.visitedDate = (Long) cursor.getLong(cursor.getColumnIndex("visiteddate"));
+ cache.geocode = (String) cursor.getString(cursor.getColumnIndex("geocode"));
+ cache.cacheid = (String) cursor.getString(cursor.getColumnIndex("cacheid"));
+ cache.guid = (String) cursor.getString(cursor.getColumnIndex("guid"));
+ cache.type = (String) cursor.getString(cursor.getColumnIndex("type"));
+ cache.name = (String) cursor.getString(cursor.getColumnIndex("name"));
+ cache.own = cursor.getInt(cursor.getColumnIndex("own")) == 1;
+ cache.owner = (String) cursor.getString(cursor.getColumnIndex("owner"));
+ cache.ownerReal = (String) cursor.getString(cursor.getColumnIndex("owner_real"));
+ cache.hidden = new Date((long) cursor.getLong(cursor.getColumnIndex("hidden")));
+ cache.hint = (String) cursor.getString(cursor.getColumnIndex("hint"));
+ cache.size = (String) cursor.getString(cursor.getColumnIndex("size"));
+ cache.difficulty = (Float) cursor.getFloat(cursor.getColumnIndex("difficulty"));
+ index = cursor.getColumnIndex("direction");
+ if (cursor.isNull(index)) {
+ cache.direction = null;
+ } else {
+ cache.direction = (Double) cursor.getDouble(index);
+ }
+ index = cursor.getColumnIndex("distance");
+ if (cursor.isNull(index)) {
+ cache.distance = null;
+ } else {
+ cache.distance = (Double) cursor.getDouble(index);
+ }
+ cache.terrain = (Float) cursor.getFloat(cursor.getColumnIndex("terrain"));
+ cache.latlon = (String) cursor.getString(cursor.getColumnIndex("latlon"));
+ cache.latitudeString = (String) cursor.getString(cursor.getColumnIndex("latitude_string"));
+ cache.longitudeString = (String) cursor.getString(cursor.getColumnIndex("longitude_string"));
+ cache.location = (String) cursor.getString(cursor.getColumnIndex("location"));
+ final int indexLat = cursor.getColumnIndex("latitude");
+ final int indexLon = cursor.getColumnIndex("longitude");
+ if (cursor.isNull(indexLat) || cursor.isNull(indexLon)) {
+ cache.coords = null;
+ } else {
+ cache.coords = new Geopoint(cursor.getDouble(indexLat), cursor.getDouble(indexLon));
+ }
+ index = cursor.getColumnIndex("elevation");
+ if (cursor.isNull(index)) {
+ cache.elevation = null;
+ } else {
+ cache.elevation = (Double) cursor.getDouble(index);
+ }
+ cache.personalNote = (String) cursor.getString(cursor.getColumnIndex("personal_note"));
+ cache.shortdesc = (String) cursor.getString(cursor.getColumnIndex("shortdesc"));
+ cache.description = (String) cursor.getString(cursor.getColumnIndex("description"));
+ cache.favouriteCnt = (Integer) cursor.getInt(cursor.getColumnIndex("favourite_cnt"));
+ cache.rating = (Float) cursor.getFloat(cursor.getColumnIndex("rating"));
+ cache.votes = (Integer) cursor.getInt(cursor.getColumnIndex("votes"));
+ cache.myVote = (Float) cursor.getFloat(cursor.getColumnIndex("myvote"));
+ cache.disabled = cursor.getLong(cursor.getColumnIndex("disabled")) == 1l;
+ cache.archived = cursor.getLong(cursor.getColumnIndex("archived")) == 1l;
+ cache.members = cursor.getLong(cursor.getColumnIndex("members")) == 1l;
+ cache.found = cursor.getLong(cursor.getColumnIndex("found")) == 1l;
+ cache.favourite = cursor.getLong(cursor.getColumnIndex("favourite")) == 1l;
+ cache.inventoryItems = (Integer) cursor.getInt(cursor.getColumnIndex("inventoryunknown"));
+ cache.onWatchlist = cursor.getLong(cursor.getColumnIndex("onWatchlist")) == 1l;
+ cache.reliableLatLon = cursor.getInt(cursor.getColumnIndex("reliable_latlon"))>0;
+ return cache;
+ }
+
public List<String> loadAttributes(String geocode) {
if (StringUtils.isBlank(geocode)) {
return null;
@@ -2231,31 +2267,40 @@ public class cgData {
List<cgLog> logs = new ArrayList<cgLog>();
- Cursor cursor = databaseRO.query(
- dbTableLogs,
- new String[]{"_id", "type", "author", "log", "date", "found"},
- "geocode = \"" + geocode + "\"",
- null,
- null,
- null,
- "date desc, _id asc",
- "100");
+ Cursor cursor = databaseRO.rawQuery(
+ "SELECT cg_logs._id as cg_logs_id, type, author, log, date, found, " + dbTableLogImages + "._id as cg_logImages_id, log_id, title, url FROM "
+ + dbTableLogs + " LEFT OUTER JOIN " + dbTableLogImages
+ + " ON ( cg_logs._id = log_id ) WHERE geocode = ? ORDER BY date desc, cg_logs._id asc", new String[]{ geocode});
if (cursor != null && cursor.getCount() > 0) {
- cursor.moveToFirst();
-
- do {
- cgLog log = new cgLog();
- log.id = (int) cursor.getInt(cursor.getColumnIndex("_id"));
- log.type = (int) cursor.getInt(cursor.getColumnIndex("type"));
- log.author = (String) cursor.getString(cursor.getColumnIndex("author"));
- log.log = (String) cursor.getString(cursor.getColumnIndex("log"));
- log.date = (long) cursor.getLong(cursor.getColumnIndex("date"));
- log.found = (int) cursor.getInt(cursor.getColumnIndex("found"));
- log.logImages = loadLogImages(log.id);
-
- logs.add(log);
- } while (cursor.moveToNext());
+ cgLog log = null;
+ while (cursor.moveToNext() && logs.size() < 100) {
+ if (log == null || log.id != cursor.getInt(cursor.getColumnIndex("cg_logs_id"))) {
+ log = new cgLog();
+ log.id = (int) cursor.getInt(cursor.getColumnIndex("cg_logs_id"));
+ log.type = (int) cursor.getInt(cursor.getColumnIndex("type"));
+ log.author = (String) cursor.getString(cursor.getColumnIndex("author"));
+ log.log = (String) cursor.getString(cursor.getColumnIndex("log"));
+ log.date = (long) cursor.getLong(cursor.getColumnIndex("date"));
+ log.found = (int) cursor.getInt(cursor.getColumnIndex("found"));
+ logs.add(log);
+ }
+ if (!cursor.isNull(cursor.getColumnIndex("cg_logImages_id"))) {
+ final cgImage log_img = new cgImage();
+ log_img.title = (String) cursor.getString(cursor.getColumnIndex("title"));
+ if (log_img.title == null) {
+ log_img.title = "";
+ }
+ log_img.url = (String) cursor.getString(cursor.getColumnIndex("url"));
+ if (log_img.url == null) {
+ log_img.url = "";
+ }
+ if (log.logImages == null) {
+ log.logImages = new ArrayList<cgImage>();
+ }
+ log.logImages.add(log_img);
+ }
+ }
}
if (cursor != null) {
@@ -2302,39 +2347,6 @@ public class cgData {
return logCounts;
}
- public List<cgImage> loadLogImages(int log_id) {
- init();
-
- List<cgImage> logImgList = new ArrayList<cgImage>();
-
- Cursor cursor = databaseRO.query(
- dbTableLogImages,
- new String[]{"_id", "log_id", "title", "url"},
- "log_id = \"" + log_id + "\"",
- null,
- null,
- null,
- null,
- "100");
-
- if (cursor != null && cursor.getCount() > 0) {
- cursor.moveToFirst();
-
- do {
- final cgImage log_img = new cgImage();
- log_img.title = (String)cursor.getString(cursor.getColumnIndex("title"));
- log_img.url = (String)cursor.getString(cursor.getColumnIndex("url"));
- logImgList.add(log_img);
- } while (cursor.moveToNext());
- }
-
- if (cursor != null) {
- cursor.close();
- }
-
- return logImgList;
- }
-
public List<cgTrackable> loadInventory(String geocode) {
if (StringUtils.isBlank(geocode)) {
return null;