ユーティリティコンポーネント作成プロジェクト

テキストファイル読み込み

案3

koichik
uguu さんのご意見を取り入れて S2UtilConfiguration にしてみました.もはや S2Text じゃないぞ? なのでバージョン番号も 0.0.1 のまま (笑)
名前に合わせて全面的に Commons Configuration ベースにしちゃいました.もはや Commons Configuration に OGNL でアクセスすることが主目的で,ついでにヒアドキュメントと J2SE5.0 Properties 風の XML をサポートしているという感じです.
使い方は案 2 とあまり変わっていなくて

<component name="conf" class="org.seasar.util.configuration.PropertiesConfiguration">
  <initMethod name="load">
    <arg>"org/seasar/util/configuration/PropertiesConfigurationTest.properties"</arg>
  </initMethod>
</component>

のように設定ファイルを読み込ませておけば,OGNL 式で

conf["foo.bar"]

のように設定情報にアクセスできます.
上記のようにアクセスした場合にキーに値がマッピングされていなければ例外がスローされます.これは設定で変更することは出来ません.
もしキーが存在しない場合に null を戻して欲しければ,

conf.getProperty("foo.bar")

とすることができます.また,

conf.getInt("foo.bar", 0)

のようにデフォルトを指定することもできます.

files2-util-configuration-0.0.1-src.zip


案2

koichik
こんな感じです.使うときはまず

<component name="env" class="org.seasar.util.text.env.impl.PropertiesEnvironment">
  <initMethod name="load">
    <arg>"org/seasar/util/text/env/impl/PropertiesEnvironmentTest.properties"</arg>
  </initMethod>
</component>

という具合にコンポーネントにファイルをロードして,後は任意の OGNL 式で

env["foo.bar"]

のように使うことが出来ます.
ファイル形式としては suga さんのヒアドキュメントに加えてプロパティファイル,XML ファイルをサポートしています.でもプレーンファイルは用意してません.キーがないと困るので.(^^;
files2-util-text-0.0.1-src.zip

  • これは個人的な経験に基づく意見なのですが、指定したキーに対応するデータが存在しない場合は、必ず例外 (KeyNotFoundException) をスローした方が良いかと思います。設定情報を読み込もうとしているのに設定情報が存在しないなんて、ユーザの想定しない状況だと思いますので。 -- uguu? 2004-12-19 (日) 15:19:08
  • コメントありがとうございます.現状,デフォルトで KeyNotFoundException を飛ばすようにしていますが,そもそも選択肢をなくして無条件に例外を飛ばす方がよいということでしょうか? 意図的に例外を飛ばさないように設定した場合にキーがないのは「ユーザの想定しない状況」ではないと思うのですが... -- koichik 2004-12-20 (月) 16:58:43
  • そもそも選択肢をなくして無条件に例外をスローして良いと思います。あくまで私の感覚ですが、指定したキーに対する設定情報が存在しないなんておかしな事態ですので、そういう時は例外をスローして欲しいです。私の経験値が足りないせいか、逆に例外をスローして欲しくないケースが分かりません… koichik さん的には必要だと思いますか? -- uguu? 2004-12-20 (月) 17:27:52
  • えと,「例外をスローして欲しい」と「例外をスローしない選択肢をなくして欲しい」はかなり違うと思うのですが,選択肢をなくすべき強い理由があるのでしょうか? 私としては「設定情報が存在しないなんておかしな事態」と決めつけることに躊躇してしまうのですが.例えば HttpClient 等を使っていて,プロキシのホストをプロパティファイルから取得するようにした場合,プロパティファイルになければ null が設定されて構わない (プロキシを使わない) みたいなケースがないでしょうか? -- koichik 2004-12-20 (月) 17:45:58
  • なるほど、「例外をスローして欲しい」と「例外をスローしない選択肢をなくして欲しい」は違いますね。理由としては、単純に「選択肢なんて出来るだけ少ないほうがすっきりする」というだけです。 HttpClient の件についても、そのようなケースは考えられますね。私が浅はかでした (^^; -- uguu? 2004-12-21 (火) 12:57:17

案1

suga
こんな感じです。(案なので仕様も実装も手抜きですけど)
使うときには OGNL で #test.get("foo") とやるか、直接コンポーネントを受け取って内部メソッドを呼び出すか、ではないでしょうか。
この程度のものですが、作る意義は、エンコーディングの問題や改行コードの問題、例外処理などがあるのでいちいち作るのは面倒、結構汎用的に使える、ということです。
テンプレート的に使うなら MessageFormat と組み合わせて使う、とかでしょうか。
files2util-text.zip

  • いい感じですね.個人的に一番ベーシックに使いたいのはプロパティファイル形式なので,そちらもサポートしてもらえると嬉しいです>WRさん.もちろんnative2asciiなんかしないでdiconファイルにエンコード指定ができるといいです(省略時はプラットフォームデフォルトで).commonsにそのためのライブラリがありましたよね. -- koichik 2004-11-21 (日) 22:56:57
  • 複数行にまたがるテキストを扱う場合には,ヒアドキュメントよりもXMLがいいなぁ〜って思ったりするのですが,いかがでしょう? CDATAセクションを使えばエスケープも不要だし今風ではないかと. -- koichik 2004-11-21 (日) 22:59:22
  • 些細なことですが,インタフェースのTextContainerという名前はS2Containerを連想させやすくないでしょうか? 代案としてはTextBundleとかTextProviderとか? -- koichik 2004-11-21 (日) 23:03:11
  • そこらの名前は全然考えていなくて、とりあえず形を出そうとしただけですので、適したものを考えましょう。こういう形であれば、実装が複数あれば良いだけなので、XML 用のものを作れば良いだけかと。 -- suga 2004-11-22 (月) 00:11:11
  • 作れば良いだけは了解なんですが,機能的に完全にかぶっちゃうのでわざわざ作ってもらうほどのことはないかもしれないなぁ,と.こういう用途でXMLを希望する人がどれくらいいるか分からないのです. -- koichik 2004-11-22 (月) 01:26:31
  • sugaさんありがとうございます。流れにのれていませんが、もう少々お待ちを。 -- WR? 2004-11-22 (月) 10:17:41
  • テキストファイルの読み込みというより、設定情報の読み込み、つまり jakarta-commons-configuration の Seasar バージョンなんですよね? 名前についての意見ですが、 s2-util-text というより s2-util-configuration の方がしっくりくるのですが、いかがなものでしょうか。 -- uguu? 2004-12-19 (日) 15:15:34


添付ファイル: files2-util-configuration-0.0.1-src.zip 1700件 [詳細] files2-util-text-0.0.1-src.zip 1544件 [詳細] files2util-text.zip 1661件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2004-12-23 (木) 00:00:00 (4742d)