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マッピングを使用する場合、プライマリキーを意識する事は少ないと思いますが、今回はセッション管理等をしていないので、キーを持ち回る事にします*3。CayenneではDataObjectUtilsというユーティリティーを使えば一発です。
Message.java(抜粋)
public int getPk() { return DataObjectUtils.intPKForObject(this); }
また、自分が親メッセ−ジなのか、子メッセージなのかを示すフラグも付けたいと思います。
Message.java(抜粋)
public boolean isChild() { if (this.getToParent() == null) { return false; } return true; }