From 489df8f0dd22043507299d02f934fe0213ca29e6 Mon Sep 17 00:00:00 2001 From: Peter Wu Date: Wed, 7 May 2014 12:23:23 +0200 Subject: Add flush command --- src/io/DataWriter.java | 14 +++++++++++++- src/main/TweetShell.java | 7 +++++++ src/provider/CompositeResultListener.java | 20 +++++++++++++++++++- 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/src/io/DataWriter.java b/src/io/DataWriter.java index ec7a30e..4f4c022 100644 --- a/src/io/DataWriter.java +++ b/src/io/DataWriter.java @@ -5,6 +5,7 @@ import java.io.Closeable; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; +import java.io.Flushable; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -24,7 +25,7 @@ import provider.ResultListener; * * @author Maurice Laveaux */ -public class DataWriter implements ResultListener, Closeable { +public class DataWriter implements ResultListener, Closeable, Flushable { /** * The writer for the tweet stream. @@ -148,6 +149,11 @@ public class DataWriter implements ResultListener, Closeable { return Logger.getLogger(getClass().getName()); } + @Override + public void flush() throws IOException { + m_tweet.flush(); + } + abstract class Store { private final String filename; @@ -204,6 +210,12 @@ public class DataWriter implements ResultListener, Closeable { * @throws IOException if no input file can be retrieved. */ abstract public InputStream getInputStream() throws IOException; + + private void flush() throws IOException { + if (os != null) { + os.flush(); + } + } } class SimpleFileStore extends Store { diff --git a/src/main/TweetShell.java b/src/main/TweetShell.java index 8b801ea..e8d387d 100644 --- a/src/main/TweetShell.java +++ b/src/main/TweetShell.java @@ -5,6 +5,7 @@ import io.DataWriter; import io.OAuthRequester; import io.StreamImpl; import java.io.Closeable; +import java.io.Flushable; import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; @@ -195,6 +196,7 @@ public class TweetShell implements TwitterApi.PinSupplier { keywords("Display currently active keywords"), commit("Activate the stream or apply the stream keyword changes"), status("Show some status and statistics"), + flush("Writes any pending buffers"), close("Close the stream"), exit("Returns to shell"), help("Get help"), @@ -306,6 +308,11 @@ public class TweetShell implements TwitterApi.PinSupplier { System.out.println("Received tweets in session: " + tc.getTweetCount()); System.out.println("Unique users: " + tc.getUsers().size()); break; + case flush: + if (stream_cached != null) { + resultListeners.flush(); + } + break; case close: safeClose(); break; diff --git a/src/provider/CompositeResultListener.java b/src/provider/CompositeResultListener.java index dc4a754..64a8a0b 100644 --- a/src/provider/CompositeResultListener.java +++ b/src/provider/CompositeResultListener.java @@ -1,8 +1,12 @@ package provider; import java.io.Closeable; +import java.io.Flushable; +import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; import org.apache.commons.io.IOUtils; import org.json.JSONObject; @@ -11,7 +15,8 @@ import org.json.JSONObject; * * @author Peter Wu */ -public class CompositeResultListener implements ResultListener, Closeable { +public class CompositeResultListener implements ResultListener, Closeable, + Flushable { private final List listeners; @@ -55,4 +60,17 @@ public class CompositeResultListener implements ResultListener, Closeable { } } } + + public void flush() { + for (ResultListener rl : listeners) { + if (rl instanceof Flushable) { + try { + ((Flushable) rl).flush(); + } catch (IOException ex) { + Logger.getLogger(rl.getClass().getName()) + .log(Level.SEVERE, "flush", ex); + } + } + } + } } -- cgit v1.2.1