SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Javaで軽快に使える「軽量フレームワーク」特集

Javaで軽快に使える「軽量フレームワーク」特集
~アプレットベースのRIAフレームワーク「Apache Pivot」(4)

第16回

ソースコードの修正

 最後に、HelloAppクラスを修正します。HelloApp.javaを次のように書き換えてください。これで作業は完了です。プログラムを実行し、CSVのデータが読み込まれることを確認しましょう。

package jp.tuyano.pivot;

import org.apache.pivot.collections.*;
import org.apache.pivot.serialization.CSVSerializer;
import org.apache.pivot.util.concurrent.*;
import org.apache.pivot.web.GetQuery;
import org.apache.pivot.wtk.*;
import org.apache.pivot.wtkx.WTKXSerializer;

public class HelloApp implements Application {
    private Window window;
    private TableView table1;
    private Label msg;
    
    @Override
    public void startup(Display display, Map<String, String> map)
            throws Exception {
        WTKXSerializer serializer = new WTKXSerializer();
        window = (Window)serializer.readObject(this, "HelloApp.wtkx");
        msg = (Label)serializer.get("msg");
        table1 = (TableView)serializer.get("table1");
        GetQuery query = new GetQuery(【サーバー指定】, "/HelloPivot/sampledata.csv");
        CSVSerializer csvserializer = new CSVSerializer("utf-8");
        csvserializer.getKeys().add("siten");
        csvserializer.getKeys().add("zenki");
        csvserializer.getKeys().add("kouki");
        csvserializer.setItemClass(SampleDataObject.class);
        query.setSerializer(csvserializer);
        
        query.execute(new TaskAdapter<Object>(new TaskListener<Object>() {
            @Override
            public void taskExecuted(Task<Object> task) {
                msg.setText("loaded.");
                List<SampleDataObject> list = (List<SampleDataObject>)task.getResult();
                table1.setTableData(list);
            }
                
            @Override
            public void executeFailed(Task<Object> task) {
                msg.setText(task.getFault().getMessage());
            }
        }));
        window.open(display);
    }

    ……略……
}
図4 CSVファイルを読み込みテーブルに表示する。
図4 CSVファイルを読み込みテーブルに表示する。

CSVSerializerの利用

 ここでは、GetQueryのシリアライザに「CSVSerializer」というクラスを使用しています。これがCSVデータを扱うためのシリアライザです。ソースコードを見てみましょう。まずCSVファイルをロードするGetQueryを用意し、CSVSerializerのインスタンスを作成します。

GetQuery query = new GetQuery(【サーバー指定】, "/HelloPivot/sampledata.csv");
CSVSerializer csvserializer = new CSVSerializer("utf-8");

 次に、作成したCSVSerializerにキーを追加していきます。CSVSerializerでは、データの各項目をキーとして登録しておき、そのキーでデータを管理するようになっています。CSVファイルに保管してあるデータの項目に併せてキーを追加します。

csvserializer.getKeys().add("siten");
csvserializer.getKeys().add("zenki");
csvserializer.getKeys().add("kouki");

 キーは、CSVSerializerの「getKeys」というメソッドで得られる「KeySequence」クラスのインスタンスとして管理されています。このKeySequenceは、Listのように多数のデータを管理する機能を持っています。この「add」を使い、キーの名前を追加していきます。

csvserializer.setItemClass(SampleDataObject.class);

 最後に「setItemClass」で、各データをどのBeanクラスとして扱うかを設定します。ここでSampleDataObject.classに設定することにより、各データはSampleDataObjectインスタンスとして扱われるようになります。taskExecutedでの処理を見てください。

List<SampleDataObject> list = (List<SampleDataObject>)task.getResult();
table1.setTableData(list);

 getResultで取得したデータは、(List<SampleDataObject>)という形でキャストされています。すなわち、SampleDataObjectインスタンスのみが保管されたListとして取得されるわけです。これをsetTableDataでTableViewに設定すると、各SampleDataObjectの内容がテーブルに整理され表示されるわけです。各データはBeanとして保管されていますから、Javaのコード内から自由に利用できるでしょう。

まとめ

 今回は、外部データの扱いに絞って説明をしてきました。RIAフレームワークと言うと、クールなGUIにばかり目が向いてしまいがちですが、Webのフレームワークとして使う以上、データをいかに柔軟に利用できるかは重要です。今回、とりあえずJSON、テキスト、CSVファイルといったデータを利用する基本について説明しました。外部データにどのような形でアクセスするか、その基本的な仕組みぐらいは分かったことと思います。

 Pivotは、アプレットであるため、さまざまなところで一般的なWebフレームワークの常識が通用しないことがあります。サーバーサイド言語でもなく、AjaxでもないRIAフレームワークというのは、まだまだ馴染みのないものですが、ある程度使ってみると新しい発見がいろいろとあるものです。「こういうアプローチもありかな?」思ったなら、少しだけ試してみてください、Pivotを。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
Javaで軽快に使える「軽量フレームワーク」特集連載記事一覧

もっと読む

この記事の著者

掌田 津耶乃(ショウダ ツヤノ)

三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5114 2010/06/02 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー