ソースコードの修正
最後に、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);
}
……略……
}

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を。
