--- /dev/null
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package twitter.action;
+
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import twitter.manage.TweetManager;
+import twitter4j.Status;
+import twitter4j.TwitterException;
+
+/**
+ * 指定したユーザの発言を取得
+ * @author nishio
+ */
+public class TweetUserTimelineGetter implements TweetGetter{
+
+ //tweet管理用
+ private TweetManager tweetManager;
+ //検索したいユーザ
+ private int userID;
+ //sinceid
+ private long sinceID;
+
+ /**
+ *
+ * @param tweetManager
+ * @param userID
+ */
+ public TweetUserTimelineGetter(TweetManager tweetManager, int userID) {
+ this.tweetManager = tweetManager;
+ this.userID = userID;
+ }
+
+ /**
+ * 指定した人のツイートを指定した数だけ取得
+ * @param num
+ * @return
+ */
+ @Override
+ public List<Status> getTweetData(int num) {
+ List<Status> status = null;
+ try {
+ status = tweetManager.getUserTimeline(num, userID);
+ } catch (TwitterException ex) {
+ Logger.getLogger(TweetUserTimelineGetter.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ if( status != null ) {
+ //一番最後のtweetのsinceIDを取得する
+ int lastnum = status.size();
+ if( lastnum > 0 ) {
+ sinceID = status.get(lastnum - 1).getId();
+ }
+ }
+ return status;
+ }
+
+ /**
+ * 指定したワードのツイートの新しく投稿されたものだけを取得
+ * @param sinceID
+ * @return
+ */
+ @Override
+ public List<Status> getNewTweetData() {
+ List<Status> status = null;
+ try {
+ status = tweetManager.getNewUserTimeline(userID, sinceID);
+ } catch (TwitterException ex) {
+ Logger.getLogger(TweetUserTimelineGetter.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ if( status != null ) {
+ //一番最後のtweetのsinceIDを取得する
+ int lastnum = status.size();
+ if( lastnum > 0 ) {
+ sinceID = status.get(lastnum - 1).getId();
+ }
+ }
+ return status;
+ }
+
+}
\ No newline at end of file
package twitter.gui.action;
import java.awt.Color;
-import java.awt.Component;
import java.awt.Desktop;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Point;
import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
-import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextPane;
import twitter.action.TweetSearchResultGetter;
import twitter.action.TweetSendDirectMessageGetter;
import twitter.action.TweetTimelineGetter;
+import twitter.action.TweetUserTimelineGetter;
import twitter.gui.component.DnDTabbedPane;
import twitter.gui.component.TweetTabbedTable;
}
/**
+ * 指定したユーザの発言を表示
+ * @param username タブのタイトルにつけるユーザ名
+ * @param userID ユーザID
+ * @param period 更新周期[sec]
+ */
+ public void actionAddUserTimelineTab(String username, int userID, int period) {
+ TimerID timerID = TimerID.getInstance();
+ String id = TimerID.createUserTimelineID(userID);
+ try {
+ //既にIDが存在していたらここで例外発生
+ timerID.addID(id);
+ //検索結果を表示するタブを生成
+ actionAddTab(id, period, new TweetUserTimelineGetter(tweetManager, userID),
+ username + "の発言");
+ } catch (ExistTimerIDException ex) {
+ JOptionPane.showMessageDialog(null, "そのタブは既に存在しています",
+ "Error", JOptionPane.ERROR_MESSAGE);
+ }
+ }
+
+ /**
* タイムラインタブが存在しているか
* @return
*/
}
/**
+ * 選択したユーザの発言を開く
+ */
+ public void actionSelectedUserTimeline() {
+ Status status = null;
+ if( this.getCurrentStatus().isRetweet() ) {
+ status = this.getCurrentStatus().getRetweetedStatus();
+ }else {
+ status = this.getCurrentStatus();
+ }
+ String username = status.getUser().getScreenName();
+ int userID = status.getUser().getId();
+ //ユーザ
+ actionAddUserTimelineTab(username, userID, this.getGetTimelinePeriod());
+ }
+
+ /**
* 選択しているツイートをお気に入りに追加
*/
public void actionCreateFavorite() {
mainAction.actionOpenStatusURL();
}
});
+
+ JMenuItem userMenuItem = new JMenuItem("この人の発言を別タブで開く(U)");
+ userMenuItem.setMnemonic('U');
+ userMenuItem.addActionListener(new java.awt.event.ActionListener() {
+
+ @Override
+ public void actionPerformed(java.awt.event.ActionEvent e) {
+ // 指定した人の発言を開く
+ mainAction.actionSelectedUserTimeline();
+ }
+ });
JMenuItem createFavMenuItem = new JMenuItem(
"この発言をお気に入りに追加(F)");
Status st = mainAction.getTweetTableInformation(table, table.getModel());
JMenuItem openBrowserUserInformationMenuItem = new JMenuItem(
- "この人のTimelineをブラウザで開く(B)");
+ "この人の発言をブラウザで開く(B)");
openBrowserUserInformationMenuItem.setMnemonic('B');
openBrowserUserInformationMenuItem.addActionListener(new java.awt.event.ActionListener() {
rightClickPopup.add(directMessageMenuItem);
//発言をブラウザで開く
rightClickPopup.add(statusBrowserMenuItem);
+ //この人の発言を別タブで開く
+ rightClickPopup.add(userMenuItem);
//この人のtimelineを開く
rightClickPopup.add(openBrowserUserInformationMenuItem);
//この人のfavを開く
}
/**
+ * 指定したユーザの発言を取得
+ * @param num
+ * @param userID
+ * @return
+ * @throws TwitterException
+ */
+ public List<Status> getUserTimeline(int num, int userID) throws TwitterException {
+ List<Status> statuses = twitter.getUserTimeline(userID, new Paging(1, num));
+
+ //tweet逆転
+ if (statuses != null && statuses.size() > 0) {
+ Collections.reverse(statuses);
+ }
+
+ return statuses;
+ }
+
+ /**
+ * 指定したユーザの最新の発言を取得
+ * @param userID
+ * @param sinceID
+ * @return
+ * @throws TwitterException
+ */
+ public List<Status> getNewUserTimeline(int userID, long sinceID) throws TwitterException {
+ // 一度もデータを取得していないとき
+ if (sinceID == 0) {
+ return getUserTimeline(MAX_TWEET_NUM, userID);
+ }
+
+ List<Status> statuses = twitter.getUserTimeline(userID, new Paging(sinceID));
+
+ //tweet逆転
+ if (statuses != null && statuses.size() > 0) {
+ Collections.reverse(statuses);
+ }
+
+ return statuses;
+ }
+
+ /**
* Twitterへログイン
*/
public void loginTwitter() throws FileNotFoundException, IOException {
public static String createSendDirectMessageID() {
return "SENDDIRECTMESSAGE";
}
+
+ /**
+ * ユーザのタイムラインIDを生成
+ * @param userID
+ * @return
+ */
+ public static String createUserTimelineID(long userID) {
+ return "USERTIMELINE:" + userID;
+ }
}