2007年9月22日土曜日

PropertyConverter(Teeda)なるものを作ってみた

スズキです。

Teedaのコンバーター、便利です。

DBから取得した、表示フラグなど、
"true"なら"表示"、"false"なら"非表示"と出力する場合でも、
Converter作れば、アノテーション一発で変換することができ、
さらにそのConverterは使いまわすことも容易です。

で、実際の案件で上記のようConverter使おうとすると、
結構な数のConverterが必要になってきます。

クラスがいっぱいできるのは、あまり好きではないので、
変換ルールをpropertiesファイルに書いて、
そのキーを指定すると、キーに従った変換ルールを適用する
Converter(PropertyConverter)を作ってみました。

まずは変換ルールを書いたプロパティファイル
(appConverters_ja.properties)を用意します。

--------
jp.co.iret.suz.s2.converter.teeda.display.true=表示
jp.co.iret.suz.s2.converter.teeda.display.false=非表示

jp.co.iret.suz.s2.converter.teeda.country.0=日本
jp.co.iret.suz.s2.converter.teeda.country.1=アメリカ
jp.co.iret.suz.s2.converter.teeda.country.2=中国

jp.co.iret.suz.s2.converter.teeda.pref.AAA=東京都
jp.co.iret.suz.s2.converter.teeda.pref.BBB=大阪府
jp.co.iret.suz.s2.converter.teeda.pref.CCC=北海道
--------
http://suz-lab.googlecode.com/svn/trunk/suz-example-teeda/src/main/resources/appConverters_ja.properties

キーの最後が変換元の値で、それより前がmessageIdとなります。
そして、下記のようにアノテーションに上記のmessageIdを指定します。

--------
public boolean trueFlag = true;
public boolean falseFlag = false;
public int zeroId = 0;
public int oneId = 1;
public int twoId = 2;
public String aaaCd = "AAA";
public String bbbCd = "BBB";
public String cccCd = "CCC";

@PropertyConverter(
  messageId="jp.co.iret.suz.s2.converter.teeda.display"
)
public boolean isTrueFlag() { return trueFlag; }

@PropertyConverter(
  messageId="jp.co.iret.suz.s2.converter.teeda.display"
)
public boolean isFalseFlag() { return falseFlag; }

@PropertyConverter(
  messageId="jp.co.iret.suz.s2.converter.teeda.country"
)
public int getZeroId() { return zeroId; }

@PropertyConverter(
  messageId="jp.co.iret.suz.s2.converter.teeda.country"
)
public int getOneId() { return oneId; }

@PropertyConverter(
  messageId="jp.co.iret.suz.s2.converter.teeda.country"
)
public int getTwoId() { return twoId; }

@PropertyConverter(
  messageId="jp.co.iret.suz.s2.converter.teeda.pref"
)
public String getAaaCd() { return aaaCd; }

@PropertyConverter(
  messageId="jp.co.iret.suz.s2.converter.teeda.pref"
)
public String getBbbCd() { return bbbCd; }

@PropertyConverter(
  messageId="jp.co.iret.suz.s2.converter.teeda.pref"
)
public String getCccCd() { return cccCd; }
--------
http://suz-lab.googlecode.com/svn/trunk/suz-example-teeda/src/main/java/jp/co/iret/suz/example/teeda/web/converter/ListPage.java

そうすると、表示は次のように変換された結果となります。

(messageId: jp.co.iret.suz.s2.converter.teeda.display)
true → 表示
false → 非表示
(messageId: jp.co.iret.suz.s2.converter.teeda.country)
0 → 日本
1 → アメリカ
2 → 中国
(messageId: jp.co.iret.suz.s2.converter.teeda.pref)
AAA → 東京都
BBB → 大阪府
CCC → 北海道

設定としては、app.diconに下記記述が必要となります。

--------
<components>
  ...
  <include path="suz-s2-converter.dicon"/>
</components>
--------
http://suz-lab.googlecode.com/svn/trunk/suz-example-teeda/src/main/resources/app.dicon

というのを、suz-s2-converter-0.0.1としてリリースしてみました。
http://code.google.com/p/suz-lab/downloads/detail?name=suz-s2-converter-0.0.1.zip
http://suz-lab.googlecode.com/svn/trunk/suz-s2-converter/

次は、VelocityConverterなるものを作ろう。

--
blog: http://suz-lab.blogspot.com/

0 コメント: