diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/data/Tweet.java | 16 | ||||
-rw-r--r-- | src/data/User.java | 1 | ||||
-rw-r--r-- | src/data/ValidatingJsonDeserializer.java | 5 | ||||
-rw-r--r-- | src/database/QueryUtils.java | 6 |
4 files changed, 24 insertions, 4 deletions
diff --git a/src/data/Tweet.java b/src/data/Tweet.java index 67292ec..384a9e1 100644 --- a/src/data/Tweet.java +++ b/src/data/Tweet.java @@ -10,10 +10,14 @@ public class Tweet { public long id; public String lang; + @ValidatingJsonDeserializer.Nullable public long in_reply_to_user_id; public String created_at; public long favorite_count; - public String place; + @ValidatingJsonDeserializer.Nullable + @ValidatingJsonDeserializer.Validator + public Place place; + @ValidatingJsonDeserializer.Nullable public String coordinates; public String text; @ValidatingJsonDeserializer.Nullable @@ -31,6 +35,16 @@ public class Tweet { return gson.toJson(this); } + public static class Place { + + //public String id; // "a5b6bdd8008412b1" + //public String name; // "Danbury" + //public String country_code; // "US" + public String country; // "United States" + //public String url; // "https://api.twitter.com/1.1/geo/id/a5b6bdd8008412b1.json" + public String full_name; // "Danbury, CT" + } + public static class Entities { @ValidatingJsonDeserializer.Validator diff --git a/src/data/User.java b/src/data/User.java index 390d986..97061bc 100644 --- a/src/data/User.java +++ b/src/data/User.java @@ -14,6 +14,7 @@ public class User { public String location; public String screen_name; public String created_at; + @ValidatingJsonDeserializer.Nullable @ValidatingJsonDeserializer.Validator public Entities entities; public String lang; diff --git a/src/data/ValidatingJsonDeserializer.java b/src/data/ValidatingJsonDeserializer.java index 511264d..c168821 100644 --- a/src/data/ValidatingJsonDeserializer.java +++ b/src/data/ValidatingJsonDeserializer.java @@ -33,14 +33,15 @@ public class ValidatingJsonDeserializer<T> implements JsonDeserializer<T> { private void checkObject(String path, JsonElement je, Class type) { JsonObject jsonObj = je.getAsJsonObject(); for (Field f : type.getDeclaredFields()) { - if (!jsonObj.has(f.getName())) { + JsonElement val = jsonObj.get(f.getName()); + if (!jsonObj.has(f.getName()) || val.isJsonNull()) { if (f.getAnnotation(Nullable.class) != null) { // null allowed, skip continue; } throw new JsonParseException("Missing field: " + path + f.getName()); } - tryValidateProperty(path, jsonObj.get(f.getName()), f); + tryValidateProperty(path, val, f); // TODO: validate type? } } diff --git a/src/database/QueryUtils.java b/src/database/QueryUtils.java index f87ba47..228ccc8 100644 --- a/src/database/QueryUtils.java +++ b/src/database/QueryUtils.java @@ -103,7 +103,11 @@ public class QueryUtils { } tweetStatement.setLong("replyid", tweet.in_reply_to_user_id); // TODO: place is not a string... - tweetStatement.setString("place", tweet.place); + if (tweet.place != null) { + tweetStatement.setString("place", tweet.place.full_name + " " + tweet.place.country); + } else { + tweetStatement.setString("place", null); + } User twuser = tweet.user; tweetStatement.setLong("userid", twuser.id); |