Messageオブジェクトをカスタマイズ

さて、実際にbetwixtでMessageオブジェクトをXMLシリアライズしてみましょう。
基本的にはbetwixitにおまかせですが、少しだけカスタマイズが必要です。
FlexのTreeコンポーネントに表示するためには、labelという属性を付加する必要がありました。*1
labelに対するgetter、すなわちgetLabel()メソッドを実装してもよいですが、このメソッドは他で使う用途がありません。単にFlexのTreeに表示するためだけにメソッドを実装するのはよろしくないので、.betwixtファイルによってカスタマイズする事にします。


また、タイトルがあまり長いものだと、途中で見えなくなってしまうので、長いタイトルは途中で省略するgetterをMessageオブジェクトに実装します。


それから、マウスをかざした時に誰がいつ投稿したのかをToolTipとして表示するために、getToolTip()メソッドも作っておきます。*2

Message.java

public String getShortSubject() {
	String subject = this.getSubject();
	if (subject == null) return "(タイトルなし)";
	if (subject.length() <= 10) return subject;
	return subject.substring(0, 6) + "...";
}
public String getToolTip() {
	String userName = this.getUserName();
	Date submitDate = this.getSubmitDate();

	StringBuffer strbuf = new StringBuffer();
	strbuf.append(userName);
	strbuf.append(" さんが ");
	strbuf.append(getSubmitDateText);
	strbuf.append(" に投稿したメッセージです");
	return strbuf.toString();
}


それから、プライマリキーを取得するgetterも作っておきます。
通常O/Rマッピングを使用する場合、プライマリキーを意識する事は少ないと思いますが、今回はセッション管理等をしていないので、キーを持ち回る事にします*3CayenneではDataObjectUtilsというユーティリティーを使えば一発です。

Message.java(抜粋)

public int getPk() {
	return DataObjectUtils.intPKForObject(this);
}

また、自分が親メッセ−ジなのか、子メッセージなのかを示すフラグも付けたいと思います。

Message.java(抜粋)

public boolean isChild() {
	if (this.getToParent() == null) {
		return false;
	}
	return true;
}

*1:じつはそうでもないらしいが・・

*2:しかし野望は脆くも崩れる・・

*3:ちなみに簡単に見える場所(URLなど)にプライマリキーをさらすのはやめましょう