S2Text

S2Text の開発担当に内定していた WR さんが S2i18n プロジェクトへ異動 (栄転?) となったので,どうしたものかなと思いつつ,Wiki の方に書いたプロパティファイルを使った実装について考えていました.
プロパティファイルの,というか java.util.Properties の難点は,InputStream を使ってファイルを読み込むため,native2ascii しなきゃいけないことですよね.
そんなわけで (どんなわけで?),Apache Jakarta Commons にありがたいクラスがあったはず.ごそごそっ
おぉ,いつの間にやら Commons Configuration とやらへ移っていたのですね (遅っ).
ともあれ (JW),PropertiesConfiguration が探していたもの.当然エンコードを指定することも出来ます.ありがたや.
こいつを眺めていて思ったのですが,このままでも使えるんじゃないの? (^^;
例えばこんな感じ.

    <component name="props" class="org.apache.commons.configuration.PropertiesConfiguration">
        <arg>"hogehoge.properties"</arg>
    </component>

    <component name="foo" class="...">
        <property name="bar">props.getProperty("foo.bar")</property>
    </component>

一応,テキストを dicon ファイルの外に出すことには成功します.


でもでも,あまりすっきりはしてませんよね.
もし OGNL が Commons BeanUtils の DynaBean に対応していれば,

    <component name="foo" class="...">
        <property name="bar">props.foo.bar</property>
    </component>

みたいなことも考えられるのですが,どうなんでしょうか?
少なくとも OGNL の配布パッケージに BeanUtils は含まれていないようで...


ちなみに Spring では,PropertyPlaceholderConfigurer を使って次のように書くことが出来ます.

    <bean id="foo" class="...">
        <property name="bar">
            <value>${foo.bar}</value>
        </property>
    </bean>

例によって <value> タグを書くのがうざいわけですが,最初のよりはいいか?
うーみゅ,OGNL + DynaBean なら逆転できるんだけどな...


ところで Commons Configuration には XmlConfiguration というクラスもあるのですが,腐ってますちょっと困ったちゃん.
なんか,XML 宣言でのエンコーディング指定なんて最初から見るつもりがないらしく,明示的にエンコーディング指定しないとプラットフォームデフォルトのエンコードで読み込もうとしやがる.ダメダメ.orz


ともあれ (JW),OGNL で遊んでいて発見.なんと,数値リテラルBigDecimal を表現できる!!

    <component name="foo" class="...">
        <property name="bar">12B</property>
    </component>

みたいに 数値の後ろに b または B を付けると BigDecimal になるそうな.
S2 では BigDecimal のプロパティに対して

    <component name="foo" class="...">
        <property name="bar">"12"</property>
    </component>

みたいに文字列でも設定できるわけですが,B つけた方がすっきりな気分♪
他に h または HBigInteger らしい.H は Huge から採用したとのこと.


そんなわけで (どんなわけで?),S2Text ですが,どなたか開発者に名乗りを上げる方はいらっしゃらないでしょうか?