PlainTextSerializerによるテキストデータの取得
テキストデータの取得は、「PlainTextSerializer」というシリアライザを利用します。setSerializerでこのPlainTextSerializerをシリアライザに設定して実行すれば、テキストデータとしてデータを取得するようになります。ただし、taskExecutedメソッドで渡されるTaskの「getResult」では、Stringが得られるわけではありません。テキストデータといえども、もっと構造化されたオブジェクトが返されるのです。
PlainTextSerializerでは、getResultで得られるのは「Document」というインスタンスになっています。この中には、テキストが段落ごとに「Paragraph」というオブジェクトとしてまとめられています。Documentから順にParagraphを取り出し、そこからさらに内容を取得していくことで、長いドキュメントなども取り出すことができます。
DocumentおよびParagraphから要素を取り出すには「get」メソッドを呼び出します。これは引数に取り出す要素のインデックス番号を指定します。Paragraphには、「Node」というオブジェクトとしてテキストが保管されており、getでNodeを取り出せば、後はtoStringでテキストが得られます。ここでのtaskExecutedでの処理を見てください。
Document doc = (Document)task.getResult(); Paragraph para = (Paragraph)doc.get(0); Prompt.prompt(para.get(0).toString(), window);
getResultでDocumentを取得し、そこからgetでさらにParagraphを取り出し、さらにgetでNodeを取り出して、そのtoStringをpromptで表示しています。プレーンなテキストといえども、このようにきっちりと構造化されているのです。
CSVデータの利用
多量のデータをファイルとして整理する場合、よく利用されるのがCSVファイルです。このCSVファイルも、やはりシリアライザを使って読み込むことができます。これもやってみましょう。まず、プログラムの公開場所(ここではhttp://サーバー/HelloPivot/)に「sampledata.csv」というCSVファイルを配置しましょう。内容は、次のようなサンプルデータを用意しておきます。
Tokyo,1234,987 Osaka,567,654 Nagoya,89,321
ここでは、支店名、前期・後期の売上、といった項目を用意しておきました。これをロードして表示させることにしましょう。まずWTKXファイルにテーブルを用意しておきます。HelloApp.wtkxに、次のようなタグを用意してください。
<TableView wtkx:id="table1"
styles="{includeTrailingVerticalGridLine:true}">
<columns>
<TableView.Column name="siten" width="100"
headerData="Siten" />
<TableView.Column name="zenki" width="70"
headerData="Zenki" />
<TableView.Column name="kouki" width="70"
headerData="Kouki" />
</columns>
<tableViewSortListeners>
<wtkx:script>
function sortChanged(view) {
var tableData = view.getTableData();
tableData.setComparator(new org.apache.pivot.wtk.content.TableViewRowComparator(view));
}
</wtkx:script>
</tableViewSortListeners>
</TableView>
Beanクラスの定義
続いて、データを保管するBeanクラスを用意しましょう。ここでは、「SampleDataObject」というクラスとして用意します。中には、siten、zenki、koukiという3つのプロパティを用意しておくことにします。これらに、CSVデータの各項目を保管するようにします。
package jp.tuyano.pivot;
public class SampleDataObject {
private String siten = null;
private int zenki = 0;
private int kouki = 0;
public String getSiten() {
return siten;
}
public void setSiten(String siten) {
this.siten = siten;
}
public int getZenki() {
return zenki;
}
public void setZenki(int zenki) {
this.zenki = zenki;
}
public int getKouki() {
return kouki;
}
public void setKouki(int kouki) {
this.kouki = kouki;
}
@Override
public String toString() {
return this.siten + "," + this.zenki + "," + this.kouki;
}
}
