summaryrefslogtreecommitdiff
path: root/src/io/TweetReader.java
diff options
context:
space:
mode:
authorPeter Wu <peter@lekensteyn.nl>2014-05-08 19:05:36 +0200
committerPeter Wu <peter@lekensteyn.nl>2014-05-08 19:05:36 +0200
commit9fe9d1b848156928a0d3efde4fff80a78f1bf9e1 (patch)
treee1e987f71ecb90d513e994b9cc4f3aa6c3656bdb /src/io/TweetReader.java
parent5f892ac1e0fe6a21a00808cfb0afae2a2c2071dc (diff)
downloadDatafiller-9fe9d1b848156928a0d3efde4fff80a78f1bf9e1.tar.gz
Replace JSON by GSON, adding extra validations
Also change reader method, tweets are not received via an observed but by submitting from the caller. Added TODO WTF here and there, formatted with Alt + Shift + F.
Diffstat (limited to 'src/io/TweetReader.java')
-rw-r--r--src/io/TweetReader.java57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/io/TweetReader.java b/src/io/TweetReader.java
new file mode 100644
index 0000000..d82978e
--- /dev/null
+++ b/src/io/TweetReader.java
@@ -0,0 +1,57 @@
+package io;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonSyntaxException;
+import data.Tweet;
+import data.ValidatingJsonDeserializer;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
+/**
+ * Reads tweets from an InputStream.
+ *
+ * @author Peter Wu
+ */
+public class TweetReader implements ITweetReader {
+
+ private final InputStream is;
+ private final BufferedReader reader;
+ private final Gson gson;
+
+ public TweetReader(InputStream is) {
+ if (is == null) {
+ throw new NullPointerException();
+ }
+ this.is = is;
+ reader = new BufferedReader(new InputStreamReader(is));
+ GsonBuilder gsonBuilder = new GsonBuilder();
+ ValidatingJsonDeserializer.addValidation(gsonBuilder, Tweet.class);
+ gson = gsonBuilder.create();
+ }
+
+ @Override
+ public Tweet getTweet() throws IOException {
+ String line = reader.readLine();
+ Tweet tweet = null;
+ if (line != null) {
+ try {
+ tweet = gson.fromJson(line, Tweet.class);
+ } catch (JsonSyntaxException ex) {
+ // TODO: handle something?
+ throw ex;
+ }
+ }
+ return tweet;
+ }
+
+ @Override
+ public void close() {
+ try {
+ is.close();
+ } catch (IOException ex) {
+ }
+ }
+}