読者です 読者をやめる 読者になる 読者になる

Challenge Java EE !

Java EEを中心に趣味や仕事における開発メモを書いています。

PrimeFacesのTerminalとTwitter4jをコラボしてみる

PrimeFaces NetBeans Java EE 6 Twitter4J JSF

August 6 2013 EDIT
I rewrite this entry in English.

Integrating PrimeFaces Terminal sample with Twitter4j.
http://kikutaro777.hatenablog.com/entry/2013/08/06/202431

仕事でしばらくC#(しかも2.0のまま…VS2005…VSS…ぬぅ…)に戻るのでネタがないです(-_-;

そんなわけで、昨日TwitterでPrimeFacesのTerminalを利用されている方がいらっしゃったので、自分も使ってみたくなって遊んでみました(^^;

Terminalコンポとは?

TerminalはいわゆるUnixLinuxのターミナルを模したWebコンポです。
以下ショーケースで動くものがあります。
http://www.primefaces.org/showcase/ui/terminal.jsf

上記のショーケースでは、コードをみるとわかりますが以下のコマンドを打てます。

  • greet
  • date

greetは引数もとれて名前を入れると挨拶してくれます。以下試した画像。

f:id:kikutaro777:20130805230220j:plain

Twitter4shを作ってみる

普通にコマンド作ってもなぁ…と思って、少し前に遊んでいたTwitter4jを思い出し、Terminalとコラボしてみました(^^;

名付けてTwitter4sh

なんちゃって…完全に遊びレベルです。すみません。

コマンドは

  • user :ユーザ情報に関するコマンド
  • tweet:ツイートするコマンド

の2つ

userコマンドは「-i」で詳細情報を指定できて

  • user -i name  :ユーザ名を表示
  • user -i follow :フォロー数を表示
  • user -i follower:フォロワー数を表示

みたいな(^^;テキトーです。

実行結果

起動すると

f:id:kikutaro777:20130805230607j:plain

それぞれコマンド打つと

f:id:kikutaro777:20130805230742j:plain

で、Twitterみると

それっぽく動く(^^)/

コード

すごくしょぼいです。JSFのビューは以下だけ。Terminal置いただけですね;

promptが各行の先頭にでるプロンプトのしるしです。
welcomeMessageは起動時に表示される文言ですね。

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <h:form>
            <p:terminal commandHandler="#{terminalBean.handleCommand}" 
                        prompt="Twitter4sh"
                        welcomeMessage="Welcome to Twitter4sh!"/>
        </h:form>
    </h:body>
</html>

JSF管理対象は以下。ここはCDI管理対象で作るほうが今やベターですが手抜きしました;

package com.mycompany.primefacesterminal;

import java.io.Serializable;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.User;

@ManagedBean
@ViewScoped
public class TerminalBean implements Serializable{
    
    private Twitter twitter;
    
    @PostConstruct
    public void init(){
        twitter = new TwitterFactory().getInstance();
    }

    public String handleCommand(String command, String[] params) {
        try {
            if(command == null){
                return "コマンド入力してください";
            }else switch(command){
                case "user":
                    User user = twitter.verifyCredentials();
                    
                    if(params.length == 2){
                        if(params[0].equals("-i")){
                            switch(params[1]){
                                case "name":
                                    return user.getName();
                                case "follow":
                                    return Integer.toString(user.getFriendsCount());
                                case "follower":
                                    return Integer.toString(user.getFollowersCount());
                            }
                        }else{
                            return "詳細情報は「-i」で指定してください";
                        }
                    }else{
                        return "使い方:user -i name/follow/follower";
                    }
                    
                case "tweet":
                    if(params.length == 1){
                        twitter.updateStatus(params[0]);
                        return "「" + params[0] + "」" + "とツイートしました。";
                    }else{
                        return "使い方:tweet ツイート文言";
                    }
                default:      
                    return "userコマンドまたはtweetコマンドを入力してください";
            }
        } catch (TwitterException ex) {
            return "エラーです" + ex.getErrorMessage();
        }
    }
}

多分もっとシンプルで綺麗にかけると思いますが…(^^;

こんなサンプルが10分くらいで作れました。そう、Java EEJSFならね!

とか言ってみたり。

にほんブログ村 IT技術ブログへ
にほんブログ村
にほんブログ村 IT技術ブログ Javaへ
にほんブログ村