OSDN Git Service

改行コード指定
authorOlyutorskii <olyutorskii@users.osdn.me>
Wed, 11 May 2011 03:17:42 +0000 (12:17 +0900)
committerOlyutorskii <olyutorskii@users.osdn.me>
Wed, 11 May 2011 03:17:42 +0000 (12:17 +0900)
36 files changed:
.hgeol [new file with mode: 0644]
CHANGELOG.txt
LICENSE.txt
README.txt
src/main/java/jp/sourceforge/jindolf/corelib/DateUtils.java
src/main/java/jp/sourceforge/jindolf/corelib/Destiny.java
src/main/java/jp/sourceforge/jindolf/corelib/DisclosureType.java
src/main/java/jp/sourceforge/jindolf/corelib/DomUtils.java
src/main/java/jp/sourceforge/jindolf/corelib/EventFamily.java
src/main/java/jp/sourceforge/jindolf/corelib/GameRole.java
src/main/java/jp/sourceforge/jindolf/corelib/LandDef.java
src/main/java/jp/sourceforge/jindolf/corelib/LandState.java
src/main/java/jp/sourceforge/jindolf/corelib/PeriodType.java
src/main/java/jp/sourceforge/jindolf/corelib/PreDefAvatar.java
src/main/java/jp/sourceforge/jindolf/corelib/SysEventType.java
src/main/java/jp/sourceforge/jindolf/corelib/TalkType.java
src/main/java/jp/sourceforge/jindolf/corelib/Team.java
src/main/java/jp/sourceforge/jindolf/corelib/VillageState.java
src/main/java/jp/sourceforge/jindolf/corelib/VillageTag.java
src/main/java/jp/sourceforge/jindolf/corelib/XmlResource.java
src/main/java/jp/sourceforge/jindolf/corelib/package-info.java
src/test/java/jp/sourceforge/jindolf/corelib/DateUtilsTest.java
src/test/java/jp/sourceforge/jindolf/corelib/DestinyTest.java
src/test/java/jp/sourceforge/jindolf/corelib/DisclosureTypeTest.java
src/test/java/jp/sourceforge/jindolf/corelib/EventFamilyTest.java
src/test/java/jp/sourceforge/jindolf/corelib/GameRoleTest.java
src/test/java/jp/sourceforge/jindolf/corelib/LandDefTest.java
src/test/java/jp/sourceforge/jindolf/corelib/LandStateTest.java
src/test/java/jp/sourceforge/jindolf/corelib/PeriodTypeTest.java
src/test/java/jp/sourceforge/jindolf/corelib/PreDefAvatarTest.java
src/test/java/jp/sourceforge/jindolf/corelib/SysEventTypeTest.java
src/test/java/jp/sourceforge/jindolf/corelib/TalkTypeTest.java
src/test/java/jp/sourceforge/jindolf/corelib/TeamTest.java
src/test/java/jp/sourceforge/jindolf/corelib/VillageStateTest.java
src/test/java/jp/sourceforge/jindolf/corelib/VillageTagTest.java
src/test/java/jp/sourceforge/jindolf/corelib/XmlResourceTest.java

diff --git a/.hgeol b/.hgeol
new file mode 100644 (file)
index 0000000..ca5f1c1
--- /dev/null
+++ b/.hgeol
@@ -0,0 +1,13 @@
+[patterns]
+
+**.txt = native
+
+**.java = native
+**.properties = LF
+
+**.xml = LF
+**.xsd = LF
+
+**.css = LF
+**.html = LF
+**.png = BIN
index bb9d220..4069e2e 100644 (file)
@@ -1,71 +1,71 @@
-[UTF-8 Japanese]\r
-\r
-\r
-JinCore 変更履歴\r
-\r
-\r
-1.206.4 (2011-05-10)\r
-    ・リファクタリングのみ、仕様変更無し。\r
-    ・Mavenプラグイン更新。\r
-\r
-1.206.2 (2010-12-02)\r
-    ・CHECKOUTイベントの追加。\r
-\r
-1.205.2 (2010-11-29)\r
-    ・SHORTMEMBERイベントの追加。\r
-\r
-1.204.2 (2010-08-26)\r
-    ・G国定員増(Max16名)に対処。\r
-\r
-1.203.4 (2010-08-26)\r
-    ・MavenとMercurialによる開発体制に移行。\r
-\r
-1.203.2 (2010-03-16)\r
-    ・VANISH(失踪)イベントの追加。\r
-\r
-1.202.2 (2010-03-15)\r
-    ・F国亡国に対応。\r
-\r
-1.201.2 (2010-03-14)\r
-    ・G国定義の追加。\r
-    ・G国で追加されたシステムイベントを追加。\r
-\r
-1.110.2 (2009-10-22)\r
-    ・DisclosureTypeの追加。\r
-    ・各種XML名定義を追加。\r
-\r
-1.109.2 (2009-09-10)\r
-    ・過去ログ提供サーバの移動に対処。\r
-\r
-1.108.2 (2009-09-09)\r
-    ・システムイベントとイベントファミリの対応付け。\r
-\r
-1.107.2 (2009-08-29)\r
-    ・ビルド環境の整備。\r
-    ・ユニットテストの整備。\r
-    ・各種ソースコード診断に対処。\r
-    ・Javadocコメントの大幅な改善。\r
-    ・XMLスキーマを302系に合わせてXML関連の識別子整理。\r
-\r
-1.106.2 (2009-08-09)\r
-    ・パッケージ名を修正。\r
-\r
-1.105.4 (2009-08-08)\r
-    ・マニフェストの不備を修正。\r
-\r
-1.105.2 (2009-08-08)\r
-    ・初期化時の不要なDNS問い合わせを抑止。\r
-    ・カスタムビルドファイルの提供。\r
-    ・XMLスキーマを301系に変更。\r
-\r
-1.104.2 (2009-08-04)\r
-    ・XML関連の実装を分離。\r
-    ・役職から陣営を求める処理を追加\r
-    ・F国欠番情報追加\r
-    ・ハム溶けのケースを追加\r
-\r
-1.103.2 (2009-06-02)\r
-    ・初回リリース。\r
-    ・Jindolfプロジェクトより分離独立。\r
-\r
---- EOF ---\r
+[UTF-8 Japanese]
+
+
+JinCore 変更履歴
+
+
+1.206.4 (2011-05-10)
+    ・リファクタリングのみ、仕様変更無し。
+    ・Mavenプラグイン更新。
+
+1.206.2 (2010-12-02)
+    ・CHECKOUTイベントの追加。
+
+1.205.2 (2010-11-29)
+    ・SHORTMEMBERイベントの追加。
+
+1.204.2 (2010-08-26)
+    ・G国定員増(Max16名)に対処。
+
+1.203.4 (2010-08-26)
+    ・MavenとMercurialによる開発体制に移行。
+
+1.203.2 (2010-03-16)
+    ・VANISH(失踪)イベントの追加。
+
+1.202.2 (2010-03-15)
+    ・F国亡国に対応。
+
+1.201.2 (2010-03-14)
+    ・G国定義の追加。
+    ・G国で追加されたシステムイベントを追加。
+
+1.110.2 (2009-10-22)
+    ・DisclosureTypeの追加。
+    ・各種XML名定義を追加。
+
+1.109.2 (2009-09-10)
+    ・過去ログ提供サーバの移動に対処。
+
+1.108.2 (2009-09-09)
+    ・システムイベントとイベントファミリの対応付け。
+
+1.107.2 (2009-08-29)
+    ・ビルド環境の整備。
+    ・ユニットテストの整備。
+    ・各種ソースコード診断に対処。
+    ・Javadocコメントの大幅な改善。
+    ・XMLスキーマを302系に合わせてXML関連の識別子整理。
+
+1.106.2 (2009-08-09)
+    ・パッケージ名を修正。
+
+1.105.4 (2009-08-08)
+    ・マニフェストの不備を修正。
+
+1.105.2 (2009-08-08)
+    ・初期化時の不要なDNS問い合わせを抑止。
+    ・カスタムビルドファイルの提供。
+    ・XMLスキーマを301系に変更。
+
+1.104.2 (2009-08-04)
+    ・XML関連の実装を分離。
+    ・役職から陣営を求める処理を追加
+    ・F国欠番情報追加
+    ・ハム溶けのケースを追加
+
+1.103.2 (2009-06-02)
+    ・初回リリース。
+    ・Jindolfプロジェクトより分離独立。
+
+--- EOF ---
index 305e281..8faaa8b 100644 (file)
@@ -1,33 +1,33 @@
-[UTF-8 Japanese]\r
-\r
-The MIT License\r
-\r
-\r
-Copyright(c) 2009 olyutorskii\r
-\r
-\r
-Permission is hereby granted, free of charge, to any person obtaining a copy\r
-of this software and associated documentation files (the "Software"), to deal\r
-in the Software without restriction, including without limitation the rights\r
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
-copies of the Software, and to permit persons to whom the Software is\r
-furnished to do so, subject to the following conditions:\r
-\r
-The above copyright notice and this permission notice shall be included in\r
-all copies or substantial portions of the Software.\r
-\r
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
-THE SOFTWARE.\r
-\r
-\r
-JinCore作者自身からのコメント:\r
-\r
-  ※ 少なくともこのソフトウェアの実行、複製、配布、改造は自由です。\r
-  ※ 少なくともこのソフトウェアは無保証です。\r
-\r
---- EOF ---\r
+[UTF-8 Japanese]
+
+The MIT License
+
+
+Copyright(c) 2009 olyutorskii
+
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+JinCore作者自身からのコメント:
+
+  ※ 少なくともこのソフトウェアの実行、複製、配布、改造は自由です。
+  ※ 少なくともこのソフトウェアは無保証です。
+
+--- EOF ---
index f72fd58..23e22a9 100644 (file)
@@ -1,89 +1,89 @@
-[UTF-8 Japanese]\r
-\r
-                              JinCoreライブラリ\r
-                                  README\r
-\r
-                                              Copyright(c) 2009 olyutorskii\r
-\r
-\r
-=== JinCoreとは ===\r
-\r
-\r
- JinCoreライブラリは、Jindolf プロジェクトのコア共通部分を構成する\r
-Javaパッケージです。\r
- このアーカイブは、JinCoreライブラリの開発資産を、ある時点で凍結したものです。\r
-\r
- Jindolfは、CGIゲーム「人狼BBS」の専用クライアント開発プロジェクトです。\r
- JinCoreは、Jindolf以外の人狼BBSクライアント製作者向けに、\r
-Jindolfの機能の一部を提供することを目的に発足した、派生プロジェクトです。\r
-\r
-※ このアーカイブにはJindolfの実行バイナリは含まれていません。\r
-  Jindolfを動かしたい方は、jindolfで始まり拡張子が*.jarであるファイルを\r
-  別途入手してください。\r
-※ 人狼BBSのURLは [ http://homepage2.nifty.com/ninjinia/ ] まで\r
-※ 人狼BBSを主催するninjin氏は、JinCoreの製作に一切関与していません。\r
-  JinCoreに関する問い合わせををninjin氏へ投げかけないように!約束だよ!\r
-\r
-\r
-=== ソースコードに関して ===\r
-\r
- - JinCoreはJava言語(JLS3)で記述されたプログラムです。\r
- - JinCoreは他のプログラムに組み込まれて利用されるライブラリです。\r
-   JARファイルによるライブラリ提供や、他プロジェクトのソースツリーへの\r
-   マージの形で利用される事を想定しています。\r
- - JinCoreはJRE1.5に準拠したJava実行環境で利用できるように作られています。\r
-   原則として、JRE1.5に準拠した実行系であれば、プラットフォームを選びません。\r
-\r
-\r
-=== アーカイブ管理体制 ===\r
-\r
-  このアーカイブは、UTF-8による開発環境を前提として構成されています。\r
-  このアーカイブの原本となる開発資産は、\r
-      http://hg.sourceforge.jp/view/jindolf/JinCore\r
-  を上位に持つMercurialリポジトリで管理されています。\r
-\r
-\r
-=== 開発プロジェクト運営元 ===\r
-\r
-  http://sourceforge.jp/projects/jindolf/devel/ まで。\r
-\r
-\r
-=== ディレクトリ内訳構成 ===\r
-\r
-基本的にはMaven2のmaven-archetype-quickstart構成に準じます。\r
-\r
-./README.txt\r
-    あなたが今見てるこれ。\r
-\r
-./CHANGELOG.txt\r
-    変更履歴。\r
-\r
-./LICENSE.txt\r
-    ライセンスに関して。\r
-\r
-./pom.xml\r
-    Maven2用プロジェクト構成定義ファイル。\r
-\r
-./build.xml\r
-    Ant用追加タスク。\r
-\r
-./src/main/java/\r
-    Javaのソースコード。\r
-\r
-./src/main/resources/\r
-    プロパティファイルなどの各種リソース。\r
-\r
-./src/test/java/\r
-    JUnit 4.* 用のユニットテストコード。\r
-\r
-./src/main/config/checks.xml\r
-    Checkstyle用configファイル。\r
-\r
-./src/main/config/pmdrules.xml\r
-    PMD用ルール定義ファイル。\r
-\r
-./src/main/assembly/descriptor.xml\r
-    ソースアーカイブ構成定義ファイル。\r
-\r
-\r
---- EOF ---\r
+[UTF-8 Japanese]
+
+                              JinCoreライブラリ
+                                  README
+
+                                              Copyright(c) 2009 olyutorskii
+
+
+=== JinCoreとは ===
+
+
+ JinCoreライブラリは、Jindolf プロジェクトのコア共通部分を構成する
+Javaパッケージです。
+ このアーカイブは、JinCoreライブラリの開発資産を、ある時点で凍結したものです。
+
+ Jindolfは、CGIゲーム「人狼BBS」の専用クライアント開発プロジェクトです。
+ JinCoreは、Jindolf以外の人狼BBSクライアント製作者向けに、
+Jindolfの機能の一部を提供することを目的に発足した、派生プロジェクトです。
+
+※ このアーカイブにはJindolfの実行バイナリは含まれていません。
+  Jindolfを動かしたい方は、jindolfで始まり拡張子が*.jarであるファイルを
+  別途入手してください。
+※ 人狼BBSのURLは [ http://homepage2.nifty.com/ninjinia/ ] まで
+※ 人狼BBSを主催するninjin氏は、JinCoreの製作に一切関与していません。
+  JinCoreに関する問い合わせををninjin氏へ投げかけないように!約束だよ!
+
+
+=== ソースコードに関して ===
+
+ - JinCoreはJava言語(JLS3)で記述されたプログラムです。
+ - JinCoreは他のプログラムに組み込まれて利用されるライブラリです。
+   JARファイルによるライブラリ提供や、他プロジェクトのソースツリーへの
+   マージの形で利用される事を想定しています。
+ - JinCoreはJRE1.5に準拠したJava実行環境で利用できるように作られています。
+   原則として、JRE1.5に準拠した実行系であれば、プラットフォームを選びません。
+
+
+=== アーカイブ管理体制 ===
+
+  このアーカイブは、UTF-8による開発環境を前提として構成されています。
+  このアーカイブの原本となる開発資産は、
+      http://hg.sourceforge.jp/view/jindolf/JinCore
+  を上位に持つMercurialリポジトリで管理されています。
+
+
+=== 開発プロジェクト運営元 ===
+
+  http://sourceforge.jp/projects/jindolf/devel/ まで。
+
+
+=== ディレクトリ内訳構成 ===
+
+基本的にはMaven2のmaven-archetype-quickstart構成に準じます。
+
+./README.txt
+    あなたが今見てるこれ。
+
+./CHANGELOG.txt
+    変更履歴。
+
+./LICENSE.txt
+    ライセンスに関して。
+
+./pom.xml
+    Maven2用プロジェクト構成定義ファイル。
+
+./build.xml
+    Ant用追加タスク。
+
+./src/main/java/
+    Javaのソースコード。
+
+./src/main/resources/
+    プロパティファイルなどの各種リソース。
+
+./src/test/java/
+    JUnit 4.* 用のユニットテストコード。
+
+./src/main/config/checks.xml
+    Checkstyle用configファイル。
+
+./src/main/config/pmdrules.xml
+    PMD用ルール定義ファイル。
+
+./src/main/assembly/descriptor.xml
+    ソースアーカイブ構成定義ファイル。
+
+
+--- EOF ---
index 3642778..07183db 100644 (file)
-/*\r
- * Date Utilities\r
- * (ISO8601)\r
- *\r
- * License : The MIT License\r
- * Copyright(c) 2011 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-import java.util.Calendar;\r
-import java.util.GregorianCalendar;\r
-import java.util.TimeZone;\r
-import java.util.regex.Matcher;\r
-import java.util.regex.Pattern;\r
-\r
-/**\r
- * 日付ユーティリティ。\r
- */\r
-final class DateUtils{\r
-\r
-    private static final Pattern ISO8601_PATTERN;\r
-    private static final String REG_PLUS   = "\\+";\r
-    private static final String REG_HYPHEN = "\\-";\r
-\r
-    static{\r
-        String year   = "([0-9][0-9][0-9][0-9])";\r
-        String month  = "([0-1][0-9])";\r
-        String day    = "([0-3][0-9])";\r
-        String hour   = "([0-2][0-9])";\r
-        String minute = "([0-5][0-9])";\r
-        String second = "([0-6][0-9])";\r
-        String timezone =\r
-                "("+\r
-                    "["+REG_PLUS+REG_HYPHEN+"][0-2][0-9]"+\r
-                    "(?:"+ ":?[0-5][0-9]" +")?"+\r
-                "|"+\r
-                    "Z"+\r
-                ")";\r
-        String iso8601Regex =\r
-                year +REG_HYPHEN+ month +REG_HYPHEN+ day\r
-                +"T"+\r
-                hour +":"+ minute +":"+ second\r
-                +timezone;\r
-\r
-        ISO8601_PATTERN = Pattern.compile(iso8601Regex);\r
-    }\r
-\r
-\r
-    /**\r
-     * 隠しコンストラクタ。\r
-     */\r
-    private DateUtils(){\r
-        assert false;\r
-        return;\r
-    }\r
-\r
-\r
-    /**\r
-     * ISO8601形式の日付をエポック秒msに変換する。\r
-     * JRE1.6 の javax.xml.bind.DatatypeConverter 代替品\r
-     * @param date ISO8601形式の日付文字列\r
-     * @return エポック秒ms\r
-     * @throws IllegalArgumentException 形式が変な場合。\r
-     */\r
-    public static long parseISO8601(CharSequence date)\r
-            throws IllegalArgumentException {\r
-        Matcher matcher = ISO8601_PATTERN.matcher(date);\r
-        if( ! matcher.matches() ){\r
-            throw new IllegalArgumentException(date.toString());\r
-        }\r
-\r
-        int gid = 1;\r
-        String yearStr   = matcher.group(gid++);\r
-        String monthStr  = matcher.group(gid++);\r
-        String dayStr    = matcher.group(gid++);\r
-        String hourStr   = matcher.group(gid++);\r
-        String minuteStr = matcher.group(gid++);\r
-        String secondStr = matcher.group(gid++);\r
-        String tzString  = matcher.group(gid++);\r
-\r
-        int year   = Integer.parseInt(yearStr);\r
-        int month  = Integer.parseInt(monthStr);\r
-        int day    = Integer.parseInt(dayStr);\r
-        int hour   = Integer.parseInt(hourStr);\r
-        int minute = Integer.parseInt(minuteStr);\r
-        int second = Integer.parseInt(secondStr);\r
-\r
-        String tzID = "GMT";\r
-        if( tzString.compareToIgnoreCase("Z") == 0 ) tzID += "+00:00";\r
-        else                                         tzID += tzString;\r
-        TimeZone timezone = TimeZone.getTimeZone(tzID);\r
-\r
-        Calendar calendar = new GregorianCalendar();\r
-        calendar.clear();\r
-        calendar.setTimeZone(timezone);\r
-        calendar.set(year, month - 1, day, hour, minute, second);\r
-\r
-        long result = calendar.getTimeInMillis();\r
-\r
-        return result;\r
-    }\r
-\r
-}\r
+/*
+ * Date Utilities
+ * (ISO8601)
+ *
+ * License : The MIT License
+ * Copyright(c) 2011 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+import java.util.TimeZone;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * 日付ユーティリティ。
+ */
+final class DateUtils{
+
+    private static final Pattern ISO8601_PATTERN;
+    private static final String REG_PLUS   = "\\+";
+    private static final String REG_HYPHEN = "\\-";
+
+    static{
+        String year   = "([0-9][0-9][0-9][0-9])";
+        String month  = "([0-1][0-9])";
+        String day    = "([0-3][0-9])";
+        String hour   = "([0-2][0-9])";
+        String minute = "([0-5][0-9])";
+        String second = "([0-6][0-9])";
+        String timezone =
+                "("+
+                    "["+REG_PLUS+REG_HYPHEN+"][0-2][0-9]"+
+                    "(?:"+ ":?[0-5][0-9]" +")?"+
+                "|"+
+                    "Z"+
+                ")";
+        String iso8601Regex =
+                year +REG_HYPHEN+ month +REG_HYPHEN+ day
+                +"T"+
+                hour +":"+ minute +":"+ second
+                +timezone;
+
+        ISO8601_PATTERN = Pattern.compile(iso8601Regex);
+    }
+
+
+    /**
+     * 隠しコンストラクタ。
+     */
+    private DateUtils(){
+        assert false;
+        return;
+    }
+
+
+    /**
+     * ISO8601形式の日付をエポック秒msに変換する。
+     * JRE1.6 の javax.xml.bind.DatatypeConverter 代替品
+     * @param date ISO8601形式の日付文字列
+     * @return エポック秒ms
+     * @throws IllegalArgumentException 形式が変な場合。
+     */
+    public static long parseISO8601(CharSequence date)
+            throws IllegalArgumentException {
+        Matcher matcher = ISO8601_PATTERN.matcher(date);
+        if( ! matcher.matches() ){
+            throw new IllegalArgumentException(date.toString());
+        }
+
+        int gid = 1;
+        String yearStr   = matcher.group(gid++);
+        String monthStr  = matcher.group(gid++);
+        String dayStr    = matcher.group(gid++);
+        String hourStr   = matcher.group(gid++);
+        String minuteStr = matcher.group(gid++);
+        String secondStr = matcher.group(gid++);
+        String tzString  = matcher.group(gid++);
+
+        int year   = Integer.parseInt(yearStr);
+        int month  = Integer.parseInt(monthStr);
+        int day    = Integer.parseInt(dayStr);
+        int hour   = Integer.parseInt(hourStr);
+        int minute = Integer.parseInt(minuteStr);
+        int second = Integer.parseInt(secondStr);
+
+        String tzID = "GMT";
+        if( tzString.compareToIgnoreCase("Z") == 0 ) tzID += "+00:00";
+        else                                         tzID += tzString;
+        TimeZone timezone = TimeZone.getTimeZone(tzID);
+
+        Calendar calendar = new GregorianCalendar();
+        calendar.clear();
+        calendar.setTimeZone(timezone);
+        calendar.set(year, month - 1, day, hour, minute, second);
+
+        long result = calendar.getTimeInMillis();
+
+        return result;
+    }
+
+}
index 4ad1fcf..90fb984 100644 (file)
@@ -1,46 +1,46 @@
-/*\r
- * Destiny\r
- *\r
- * License : The MIT License\r
- * Copyright(c) 2009 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-/**\r
- * プレイヤーの死因・運命。\r
- */\r
-public enum Destiny{\r
-\r
-    /** 生存。 */\r
-    ALIVE("生存"),\r
-    /** 突然死。 */\r
-    SUDDENDEATH("突然死"),\r
-    /** 処刑死。 */\r
-    EXECUTED("処刑死"),\r
-    /** 襲撃死。 */\r
-    EATEN("襲撃死"),\r
-    /** ハム溶け。 */\r
-    DISSOLVE("ハム溶け"),\r
-    ;\r
-\r
-    private final String message;\r
-\r
-    /**\r
-     * コンストラクタ。\r
-     * @param message 死因メッセージ\r
-     */\r
-    private Destiny(String message){\r
-        this.message = message.intern();\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * 死因メッセージを取得する。\r
-     * @return 死因文字列\r
-     */\r
-    public String getMessage(){\r
-        return this.message;\r
-    }\r
-\r
-}\r
+/*
+ * Destiny
+ *
+ * License : The MIT License
+ * Copyright(c) 2009 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+/**
+ * プレイヤーの死因・運命。
+ */
+public enum Destiny{
+
+    /** 生存。 */
+    ALIVE("生存"),
+    /** 突然死。 */
+    SUDDENDEATH("突然死"),
+    /** 処刑死。 */
+    EXECUTED("処刑死"),
+    /** 襲撃死。 */
+    EATEN("襲撃死"),
+    /** ハム溶け。 */
+    DISSOLVE("ハム溶け"),
+    ;
+
+    private final String message;
+
+    /**
+     * コンストラクタ。
+     * @param message 死因メッセージ
+     */
+    private Destiny(String message){
+        this.message = message.intern();
+        return;
+    }
+
+    /**
+     * 死因メッセージを取得する。
+     * @return 死因文字列
+     */
+    public String getMessage(){
+        return this.message;
+    }
+
+}
index 931ea23..0d6fdc4 100644 (file)
@@ -1,42 +1,42 @@
-/*\r
- * disclosure type\r
- *\r
- * License : The MIT License\r
- * Copyright(c) 2009 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-/**\r
- * 各Periodの発言開示状況。\r
- */\r
-public enum DisclosureType{\r
-\r
-    /** プレイ真っ最中の最新日。 */\r
-    HOT("hot"),\r
-    /** 未公開発言があり得る。 */\r
-    UNCOMPLETE("uncomplete"),\r
-    /** 全発言は完全に公開された。 */\r
-    COMPLETE("complete"),\r
-    ;\r
-\r
-    private final String xmlName;\r
-\r
-    /**\r
-     * コンストラクタ。\r
-     * @param xmlName XML用シンボル\r
-     */\r
-    private DisclosureType(String xmlName){\r
-        this.xmlName = xmlName.intern();\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * XML用シンボルを取得する。\r
-     * @return XML用シンボル\r
-     */\r
-    public String getXmlName(){\r
-        return this.xmlName;\r
-    }\r
-\r
-}\r
+/*
+ * disclosure type
+ *
+ * License : The MIT License
+ * Copyright(c) 2009 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+/**
+ * 各Periodの発言開示状況。
+ */
+public enum DisclosureType{
+
+    /** プレイ真っ最中の最新日。 */
+    HOT("hot"),
+    /** 未公開発言があり得る。 */
+    UNCOMPLETE("uncomplete"),
+    /** 全発言は完全に公開された。 */
+    COMPLETE("complete"),
+    ;
+
+    private final String xmlName;
+
+    /**
+     * コンストラクタ。
+     * @param xmlName XML用シンボル
+     */
+    private DisclosureType(String xmlName){
+        this.xmlName = xmlName.intern();
+        return;
+    }
+
+    /**
+     * XML用シンボルを取得する。
+     * @return XML用シンボル
+     */
+    public String getXmlName(){
+        return this.xmlName;
+    }
+
+}
index fe5a02b..aa27398 100644 (file)
-/*\r
- * DOM Utilities\r
- *\r
- * License : The MIT License\r
- * Copyright(c) 2011 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-import java.io.IOException;\r
-import java.io.InputStream;\r
-import java.net.URI;\r
-import java.net.URISyntaxException;\r
-import java.net.URL;\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-import javax.xml.parsers.DocumentBuilder;\r
-import org.w3c.dom.Attr;\r
-import org.w3c.dom.Document;\r
-import org.w3c.dom.Element;\r
-import org.w3c.dom.Node;\r
-import org.w3c.dom.NodeList;\r
-import org.xml.sax.SAXException;\r
-\r
-/**\r
- * DOM ユーティリティ。\r
- */\r
-final class DomUtils{\r
-\r
-    /**\r
-     * 隠しコンストラクタ。\r
-     */\r
-    private DomUtils(){\r
-        assert false;\r
-        return;\r
-    }\r
-\r
-\r
-    /**\r
-     * DOM要素のリストをXMLリソースからロードする。\r
-     * @param builder DOMビルダ\r
-     * @param url URL\r
-     * @param childName 要素名\r
-     * @return DOM要素のリスト\r
-     * @throws IOException 入力エラー\r
-     * @throws SAXException XMLパースエラー\r
-     */\r
-    static List<Element> loadElemList(\r
-            DocumentBuilder builder,\r
-            URL url,\r
-            String childName )\r
-            throws IOException, SAXException{\r
-        Element root = loadElement(builder, url);\r
-        List<Element> result = getChildElemList(root, childName);\r
-        return result;\r
-    }\r
-\r
-    /**\r
-     * root要素をXMLリソースからロードする。\r
-     * @param builder DOMビルダ\r
-     * @param url URL\r
-     * @return root要素\r
-     * @throws IOException 入力エラー\r
-     * @throws SAXException XMLパースエラー\r
-     */\r
-    private static Element loadElement(DocumentBuilder builder, URL url)\r
-            throws IOException, SAXException{\r
-        InputStream istream = url.openStream();\r
-\r
-        Document document;\r
-        try{\r
-            document = builder.parse(istream);\r
-        }finally{\r
-            istream.close();\r
-        }\r
-\r
-        Element root = document.getDocumentElement();\r
-\r
-        return root;\r
-    }\r
-\r
-    /**\r
-     * root要素から子要素のリストを得る。\r
-     * @param root root要素\r
-     * @param childName 子要素のタグ名\r
-     * @return 子要素のリスト\r
-     */\r
-    private static List<Element> getChildElemList(\r
-            Element root, String childName){\r
-        NodeList nodeList = root.getElementsByTagName(childName);\r
-        int childNum = nodeList.getLength();\r
-\r
-        List<Element> result = new ArrayList<Element>(childNum);\r
-\r
-        for(int index = 0; index < childNum; index++){\r
-            Node node = nodeList.item(index);\r
-            Element element = (Element) node;\r
-            result.add(element);\r
-        }\r
-\r
-        return result;\r
-    }\r
-\r
-    /**\r
-     * XMLタグの必須属性値を得る。\r
-     * @param elem XML要素\r
-     * @param attrName 属性名\r
-     * @return 属性値\r
-     * @throws SAXException 必須属性が無かった。\r
-     */\r
-    static String attrRequired(Element elem, String attrName)\r
-            throws SAXException{\r
-        Attr attr = elem.getAttributeNode(attrName);\r
-        if(attr == null){\r
-            throw new SAXException("no attribute[" + attrName + "]");\r
-        }\r
-        String result = attr.getValue();\r
-        if(result == null){\r
-            throw new SAXException("no value[" + attrName + "]");\r
-        }\r
-        return result;\r
-    }\r
-\r
-    /**\r
-     * XMLタグの属性値を得る。\r
-     * @param elem XML要素\r
-     * @param attrName 属性名\r
-     * @return 属性値。なければnull\r
-     */\r
-    static String attrValue(Element elem, String attrName){\r
-        Attr attr = elem.getAttributeNode(attrName);\r
-        if(attr == null) return null;\r
-\r
-        String result = attr.getValue();\r
-\r
-        return result;\r
-    }\r
-\r
-    /**\r
-     * XML属性値からURIを展開する。\r
-     * @param elem XML国定義要素\r
-     * @param attrName 属性名\r
-     * @return URI\r
-     * @throws SAXException 属性が未定義もしくはURI形式を満たさない。\r
-     */\r
-    static URI attrToUri(Element elem, String attrName)\r
-            throws SAXException{\r
-        Attr attr = elem.getAttributeNode(attrName);\r
-        if(attr == null) return null;\r
-\r
-        String uriText = attr.getValue();\r
-        if(uriText == null) return null;\r
-\r
-        URI uri;\r
-        try{\r
-            uri = new URI(uriText).normalize();\r
-        }catch(URISyntaxException e){\r
-            throw new SAXException("illegal URI " + uriText, e);\r
-        }\r
-\r
-        return uri;\r
-    }\r
-\r
-}\r
+/*
+ * DOM Utilities
+ *
+ * License : The MIT License
+ * Copyright(c) 2011 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.parsers.DocumentBuilder;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+/**
+ * DOM ユーティリティ。
+ */
+final class DomUtils{
+
+    /**
+     * 隠しコンストラクタ。
+     */
+    private DomUtils(){
+        assert false;
+        return;
+    }
+
+
+    /**
+     * DOM要素のリストをXMLリソースからロードする。
+     * @param builder DOMビルダ
+     * @param url URL
+     * @param childName 要素名
+     * @return DOM要素のリスト
+     * @throws IOException 入力エラー
+     * @throws SAXException XMLパースエラー
+     */
+    static List<Element> loadElemList(
+            DocumentBuilder builder,
+            URL url,
+            String childName )
+            throws IOException, SAXException{
+        Element root = loadElement(builder, url);
+        List<Element> result = getChildElemList(root, childName);
+        return result;
+    }
+
+    /**
+     * root要素をXMLリソースからロードする。
+     * @param builder DOMビルダ
+     * @param url URL
+     * @return root要素
+     * @throws IOException 入力エラー
+     * @throws SAXException XMLパースエラー
+     */
+    private static Element loadElement(DocumentBuilder builder, URL url)
+            throws IOException, SAXException{
+        InputStream istream = url.openStream();
+
+        Document document;
+        try{
+            document = builder.parse(istream);
+        }finally{
+            istream.close();
+        }
+
+        Element root = document.getDocumentElement();
+
+        return root;
+    }
+
+    /**
+     * root要素から子要素のリストを得る。
+     * @param root root要素
+     * @param childName 子要素のタグ名
+     * @return 子要素のリスト
+     */
+    private static List<Element> getChildElemList(
+            Element root, String childName){
+        NodeList nodeList = root.getElementsByTagName(childName);
+        int childNum = nodeList.getLength();
+
+        List<Element> result = new ArrayList<Element>(childNum);
+
+        for(int index = 0; index < childNum; index++){
+            Node node = nodeList.item(index);
+            Element element = (Element) node;
+            result.add(element);
+        }
+
+        return result;
+    }
+
+    /**
+     * XMLタグの必須属性値を得る。
+     * @param elem XML要素
+     * @param attrName 属性名
+     * @return 属性値
+     * @throws SAXException 必須属性が無かった。
+     */
+    static String attrRequired(Element elem, String attrName)
+            throws SAXException{
+        Attr attr = elem.getAttributeNode(attrName);
+        if(attr == null){
+            throw new SAXException("no attribute[" + attrName + "]");
+        }
+        String result = attr.getValue();
+        if(result == null){
+            throw new SAXException("no value[" + attrName + "]");
+        }
+        return result;
+    }
+
+    /**
+     * XMLタグの属性値を得る。
+     * @param elem XML要素
+     * @param attrName 属性名
+     * @return 属性値。なければnull
+     */
+    static String attrValue(Element elem, String attrName){
+        Attr attr = elem.getAttributeNode(attrName);
+        if(attr == null) return null;
+
+        String result = attr.getValue();
+
+        return result;
+    }
+
+    /**
+     * XML属性値からURIを展開する。
+     * @param elem XML国定義要素
+     * @param attrName 属性名
+     * @return URI
+     * @throws SAXException 属性が未定義もしくはURI形式を満たさない。
+     */
+    static URI attrToUri(Element elem, String attrName)
+            throws SAXException{
+        Attr attr = elem.getAttributeNode(attrName);
+        if(attr == null) return null;
+
+        String uriText = attr.getValue();
+        if(uriText == null) return null;
+
+        URI uri;
+        try{
+            uri = new URI(uriText).normalize();
+        }catch(URISyntaxException e){
+            throw new SAXException("illegal URI " + uriText, e);
+        }
+
+        return uri;
+    }
+
+}
index e7d3563..5048e91 100644 (file)
@@ -1,50 +1,50 @@
-/*\r
- * family of system-event-message\r
- *\r
- * License : The MIT License\r
- * Copyright(c) 2009 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-/**\r
- * システムイベントメッセージのおおまかな種別。\r
- */\r
-public enum EventFamily{\r
-\r
-    /** &lt;div class="announce"&gt;メッセージに対応。 */\r
-    ANNOUNCE("announce"),\r
-    /** &lt;div class="order"&gt;メッセージに対応。 */\r
-    ORDER("order"),\r
-    /** &lt;div class="extra"&gt;メッセージに対応。 */\r
-    EXTRA("extra"),\r
-    ;\r
-\r
-    private final String divClass;\r
-\r
-    /**\r
-     * コンストラクタ。\r
-     * @param divClass divタグclass名\r
-     */\r
-    private EventFamily(String divClass){\r
-        this.divClass = divClass;\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * 由来となった&lt;div&gt;要素のclass属性値を得る。\r
-     * @return class属性値\r
-     */\r
-    public String getDivClass(){\r
-        return this.divClass;\r
-    }\r
-\r
-    /**\r
-     * XML用シンボルを取得する。\r
-     * @return XML用シンボル\r
-     */\r
-    public String getXmlName(){\r
-        return this.divClass;\r
-    }\r
-\r
-}\r
+/*
+ * family of system-event-message
+ *
+ * License : The MIT License
+ * Copyright(c) 2009 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+/**
+ * システムイベントメッセージのおおまかな種別。
+ */
+public enum EventFamily{
+
+    /** &lt;div class="announce"&gt;メッセージに対応。 */
+    ANNOUNCE("announce"),
+    /** &lt;div class="order"&gt;メッセージに対応。 */
+    ORDER("order"),
+    /** &lt;div class="extra"&gt;メッセージに対応。 */
+    EXTRA("extra"),
+    ;
+
+    private final String divClass;
+
+    /**
+     * コンストラクタ。
+     * @param divClass divタグclass名
+     */
+    private EventFamily(String divClass){
+        this.divClass = divClass;
+        return;
+    }
+
+    /**
+     * 由来となった&lt;div&gt;要素のclass属性値を得る。
+     * @return class属性値
+     */
+    public String getDivClass(){
+        return this.divClass;
+    }
+
+    /**
+     * XML用シンボルを取得する。
+     * @return XML用シンボル
+     */
+    public String getXmlName(){
+        return this.divClass;
+    }
+
+}
index 755f2cf..f30f19c 100644 (file)
-/*\r
- * Roles in game\r
- *\r
- * License : The MIT License\r
- * Copyright(c) 2009 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-import java.util.Comparator;\r
-import java.util.regex.Matcher;\r
-import java.util.regex.Pattern;\r
-\r
-/**\r
- * 役職。\r
- */\r
-public enum GameRole{\r
-\r
-    /** 村人。 */\r
-    INNOCENT("村人", '村', "innocent", Team.VILLAGE),\r
-    /** 人狼。 */\r
-    WOLF("人狼", '狼', "wolf", Team.WOLF),\r
-    /** 占い師。 */\r
-    SEER("占い師", '占', "seer", Team.VILLAGE),\r
-    /** 霊能者。 */\r
-    SHAMAN("霊能者", '霊', "shaman", Team.VILLAGE),\r
-    /** 狂人。 */\r
-    MADMAN("狂人", '狂', "madman", Team.WOLF),\r
-    /** 狩人。 */\r
-    HUNTER("狩人", '狩', "hunter", Team.VILLAGE),\r
-    /** 共有者。 */\r
-    FRATER("共有者", '共', "frater", Team.VILLAGE),\r
-    /** ハムスター人間。 */\r
-    HAMSTER("ハムスター人間", '公', "hamster", Team.HAMSTER),\r
-    ;\r
-\r
-    private static final Comparator<GameRole> BALANCE_COMPARATOR =\r
-            new PowerBalanceComparator();\r
-\r
-    private static final Pattern ROLE_PATTERN;\r
-\r
-    static{\r
-        StringBuilder roleRegex = new StringBuilder();\r
-        for(GameRole role : values()){\r
-            if(roleRegex.length() > 0){\r
-                roleRegex.append('|');\r
-            }\r
-            roleRegex.append('(')\r
-                     .append(Pattern.quote(role.getRoleName()))\r
-                     .append(')');\r
-        }\r
-        ROLE_PATTERN = Pattern.compile(roleRegex.toString());\r
-    }\r
-\r
-\r
-    private final String roleName;\r
-    private final char shortName;\r
-    private final String xmlName;\r
-    private final Team team;\r
-\r
-\r
-    /**\r
-     * コンストラクタ。\r
-     * @param roleName 役職名\r
-     * @param shortName 短縮名\r
-     * @param xmlName XML用シンボル\r
-     * @param team 陣営\r
-     */\r
-    private GameRole(String roleName,\r
-                      char shortName,\r
-                      String xmlName,\r
-                      Team team ){\r
-        this.roleName = roleName.intern();\r
-        this.shortName = shortName;\r
-        this.xmlName = xmlName.intern();\r
-        this.team = team;\r
-        return;\r
-    }\r
-\r
-\r
-    /**\r
-     * 与えられたマッチャ先頭が定義済みRole名に一致しないか調べる。\r
-     * @param matcher マッチャ\r
-     * @return 一致した役職。どれにも一致しなければnull。\r
-     */\r
-    public static GameRole lookingAtRole(Matcher matcher){\r
-        matcher.usePattern(ROLE_PATTERN);\r
-\r
-        if( ! matcher.lookingAt() ) return null;\r
-        int groupCt = matcher.groupCount();\r
-        for(int group = 1; group <= groupCt; group++){\r
-            if(matcher.start(group) >= 0){\r
-                GameRole role = values()[group - 1];\r
-                return role;\r
-            }\r
-        }\r
-\r
-        return null;\r
-    }\r
-\r
-    /**\r
-     * 勢力バランス表記用Comparatorを得る。\r
-     * 「村共占霊狩公狂狼」の順で役職を一意に順序づける。\r
-     * @return Comparator\r
-     */\r
-    public static Comparator<GameRole> getPowerBalanceComparator(){\r
-        return BALANCE_COMPARATOR;\r
-    }\r
-\r
-\r
-    /**\r
-     * 役職名を返す。\r
-     * @return 役職名\r
-     */\r
-    public String getRoleName(){\r
-        return this.roleName;\r
-    }\r
-\r
-    /**\r
-     * 一文字に短縮された役職名を得る。\r
-     * @return 短縮された役職名\r
-     */\r
-    public char getShortName(){\r
-        return this.shortName;\r
-    }\r
-\r
-    /**\r
-     * XML用シンボルを取得する。\r
-     * @return XML用シンボル\r
-     */\r
-    public String getXmlName(){\r
-        return this.xmlName;\r
-    }\r
-\r
-    /**\r
-     * 各役職のチームを得る。\r
-     * @return チーム\r
-     */\r
-    public Team getTeam(){\r
-        return this.team;\r
-    }\r
-\r
-    /**\r
-     * 勢力バランス表記用Comparator。\r
-     * 「村共占霊狩公狂狼」の順で役職を一意に順序づける。\r
-     */\r
-    private static final class PowerBalanceComparator\r
-            implements Comparator<GameRole> {\r
-\r
-        /**\r
-         * コンストラクタ。\r
-         */\r
-        private PowerBalanceComparator(){\r
-            super();\r
-            return;\r
-        }\r
-\r
-        /**\r
-         * 役職に順序を割り当てる。\r
-         * 村人陣営のほうが狼陣営より小さい値を返す。\r
-         * @param role 役職\r
-         * @return 強さ\r
-         */\r
-        private static int getPowerValue(GameRole role){\r
-            int power;\r
-\r
-            if(role == null) return Integer.MIN_VALUE;\r
-\r
-            switch(role){\r
-            case INNOCENT: power = -50; break;\r
-            case FRATER:   power = -40; break;\r
-            case SEER:     power = -30; break;\r
-            case SHAMAN:   power = -20; break;\r
-            case HUNTER:   power = -10; break;\r
-            case HAMSTER:  power =   0; break;\r
-            case MADMAN:   power = +10; break;\r
-            case WOLF:     power = +20; break;\r
-            default:\r
-                assert false;\r
-                throw new AssertionError();\r
-            }\r
-\r
-            return power;\r
-        }\r
-\r
-        /**\r
-         * {@inheritDoc}\r
-         * @param role1 {@inheritDoc}\r
-         * @param role2 {@inheritDoc}\r
-         * @return {@inheritDoc}\r
-         */\r
-        @Override\r
-        public int compare(GameRole role1, GameRole role2){\r
-            int power1 = getPowerValue(role1);\r
-            int power2 = getPowerValue(role2);\r
-            return power1 - power2;\r
-        }\r
-\r
-    }\r
-\r
-}\r
+/*
+ * Roles in game
+ *
+ * License : The MIT License
+ * Copyright(c) 2009 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+import java.util.Comparator;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * 役職。
+ */
+public enum GameRole{
+
+    /** 村人。 */
+    INNOCENT("村人", '村', "innocent", Team.VILLAGE),
+    /** 人狼。 */
+    WOLF("人狼", '狼', "wolf", Team.WOLF),
+    /** 占い師。 */
+    SEER("占い師", '占', "seer", Team.VILLAGE),
+    /** 霊能者。 */
+    SHAMAN("霊能者", '霊', "shaman", Team.VILLAGE),
+    /** 狂人。 */
+    MADMAN("狂人", '狂', "madman", Team.WOLF),
+    /** 狩人。 */
+    HUNTER("狩人", '狩', "hunter", Team.VILLAGE),
+    /** 共有者。 */
+    FRATER("共有者", '共', "frater", Team.VILLAGE),
+    /** ハムスター人間。 */
+    HAMSTER("ハムスター人間", '公', "hamster", Team.HAMSTER),
+    ;
+
+    private static final Comparator<GameRole> BALANCE_COMPARATOR =
+            new PowerBalanceComparator();
+
+    private static final Pattern ROLE_PATTERN;
+
+    static{
+        StringBuilder roleRegex = new StringBuilder();
+        for(GameRole role : values()){
+            if(roleRegex.length() > 0){
+                roleRegex.append('|');
+            }
+            roleRegex.append('(')
+                     .append(Pattern.quote(role.getRoleName()))
+                     .append(')');
+        }
+        ROLE_PATTERN = Pattern.compile(roleRegex.toString());
+    }
+
+
+    private final String roleName;
+    private final char shortName;
+    private final String xmlName;
+    private final Team team;
+
+
+    /**
+     * コンストラクタ。
+     * @param roleName 役職名
+     * @param shortName 短縮名
+     * @param xmlName XML用シンボル
+     * @param team 陣営
+     */
+    private GameRole(String roleName,
+                      char shortName,
+                      String xmlName,
+                      Team team ){
+        this.roleName = roleName.intern();
+        this.shortName = shortName;
+        this.xmlName = xmlName.intern();
+        this.team = team;
+        return;
+    }
+
+
+    /**
+     * 与えられたマッチャ先頭が定義済みRole名に一致しないか調べる。
+     * @param matcher マッチャ
+     * @return 一致した役職。どれにも一致しなければnull。
+     */
+    public static GameRole lookingAtRole(Matcher matcher){
+        matcher.usePattern(ROLE_PATTERN);
+
+        if( ! matcher.lookingAt() ) return null;
+        int groupCt = matcher.groupCount();
+        for(int group = 1; group <= groupCt; group++){
+            if(matcher.start(group) >= 0){
+                GameRole role = values()[group - 1];
+                return role;
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * 勢力バランス表記用Comparatorを得る。
+     * 「村共占霊狩公狂狼」の順で役職を一意に順序づける。
+     * @return Comparator
+     */
+    public static Comparator<GameRole> getPowerBalanceComparator(){
+        return BALANCE_COMPARATOR;
+    }
+
+
+    /**
+     * 役職名を返す。
+     * @return 役職名
+     */
+    public String getRoleName(){
+        return this.roleName;
+    }
+
+    /**
+     * 一文字に短縮された役職名を得る。
+     * @return 短縮された役職名
+     */
+    public char getShortName(){
+        return this.shortName;
+    }
+
+    /**
+     * XML用シンボルを取得する。
+     * @return XML用シンボル
+     */
+    public String getXmlName(){
+        return this.xmlName;
+    }
+
+    /**
+     * 各役職のチームを得る。
+     * @return チーム
+     */
+    public Team getTeam(){
+        return this.team;
+    }
+
+    /**
+     * 勢力バランス表記用Comparator。
+     * 「村共占霊狩公狂狼」の順で役職を一意に順序づける。
+     */
+    private static final class PowerBalanceComparator
+            implements Comparator<GameRole> {
+
+        /**
+         * コンストラクタ。
+         */
+        private PowerBalanceComparator(){
+            super();
+            return;
+        }
+
+        /**
+         * 役職に順序を割り当てる。
+         * 村人陣営のほうが狼陣営より小さい値を返す。
+         * @param role 役職
+         * @return 強さ
+         */
+        private static int getPowerValue(GameRole role){
+            int power;
+
+            if(role == null) return Integer.MIN_VALUE;
+
+            switch(role){
+            case INNOCENT: power = -50; break;
+            case FRATER:   power = -40; break;
+            case SEER:     power = -30; break;
+            case SHAMAN:   power = -20; break;
+            case HUNTER:   power = -10; break;
+            case HAMSTER:  power =   0; break;
+            case MADMAN:   power = +10; break;
+            case WOLF:     power = +20; break;
+            default:
+                assert false;
+                throw new AssertionError();
+            }
+
+            return power;
+        }
+
+        /**
+         * {@inheritDoc}
+         * @param role1 {@inheritDoc}
+         * @param role2 {@inheritDoc}
+         * @return {@inheritDoc}
+         */
+        @Override
+        public int compare(GameRole role1, GameRole role2){
+            int power1 = getPowerValue(role1);
+            int power2 = getPowerValue(role2);
+            return power1 - power2;
+        }
+
+    }
+
+}
index 365a859..8b41df1 100644 (file)
-/*\r
- * land information definition\r
- *\r
- * License : The MIT License\r
- * Copyright(c) 2009 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-import java.io.IOException;\r
-import java.net.URI;\r
-import java.nio.charset.Charset;\r
-import java.util.ArrayList;\r
-import java.util.Arrays;\r
-import java.util.Collections;\r
-import java.util.HashMap;\r
-import java.util.List;\r
-import java.util.Locale;\r
-import java.util.Map;\r
-import java.util.Set;\r
-import java.util.SortedSet;\r
-import java.util.TimeZone;\r
-import java.util.TreeSet;\r
-import javax.xml.parsers.DocumentBuilder;\r
-import org.w3c.dom.Element;\r
-import org.xml.sax.SAXException;\r
-\r
-/**\r
- * 人狼BBSの各国設定。\r
- */\r
-public final class LandDef{\r
-\r
-    /** 各種イメージの相対なベースURI。 */\r
-    public static final String IMAGE_RELPATH = "./plugin_wolf/img/";\r
-\r
-    /** 顔アイコンURIのテンプレート。 */\r
-    public static final String DEF_FACE_URI_TMPL =\r
-        IMAGE_RELPATH + "face{0,number,#00}.jpg";\r
-    /** デカキャラURIのテンプレート。 */\r
-    public static final String DEF_BODY_URI_TMPL =\r
-        IMAGE_RELPATH + "body{0,number,#00}.jpg";\r
-\r
-    /** 墓小アイコンのデフォルト相対URI。 */\r
-    public static final URI DEF_TOMBFACE_URI =\r
-            URI.create(IMAGE_RELPATH + "face99.jpg").normalize();\r
-    /** 墓大アイコンのデフォルト相対URI。 */\r
-    public static final URI DEF_TOMBBODY_URI =\r
-            URI.create(IMAGE_RELPATH + "body99.jpg").normalize();\r
-\r
-    private static final Map<String, LandState> STATE_MAP;\r
-\r
-\r
-    static{\r
-        STATE_MAP = new HashMap<String, LandState>();\r
-        STATE_MAP.put("closed",     LandState.CLOSED);\r
-        STATE_MAP.put("historical", LandState.HISTORICAL);\r
-        STATE_MAP.put("active",     LandState.ACTIVE);\r
-    }\r
-\r
-\r
-    private String landName;\r
-    private String landId;\r
-    private String formalName;\r
-    private String landPrefix;\r
-    private LandState landState;\r
-    private int minMembers;\r
-    private int maxMembers;\r
-    private URI webURI;\r
-    private URI cgiURI;\r
-    private URI tombFaceIconURI;\r
-    private URI tombBodyIconURI;\r
-    private String faceURITemplate;\r
-    private String bodyURITemplate;\r
-    private Locale locale;\r
-    private Charset encoding;\r
-    private TimeZone timeZone;\r
-    private long startDateTime;\r
-    private long endDateTime;\r
-    private String description;\r
-    private String contactInfo;\r
-    private int[] invalidVid;\r
-\r
-\r
-    /**\r
-     * コンストラクタ。\r
-     */\r
-    private LandDef(){\r
-        super();\r
-        return;\r
-    }\r
-\r
-\r
-    /**\r
-     * ハイフンで区切られた整数範囲をパースする。\r
-     * 「1-3」なら1,2,3を結果に格納する。\r
-     * @param intSet 格納先Set\r
-     * @param seq パース対象\r
-     * @throws IllegalArgumentException 形式が変\r
-     */\r
-    private static void parseIntPair(Set<Integer> intSet, CharSequence seq)\r
-            throws IllegalArgumentException{\r
-        String token = seq.toString();\r
-\r
-        String[] ivalues = token.split("-");\r
-        assert ivalues.length >= 1;\r
-        if(ivalues.length >= 3){\r
-            throw new IllegalArgumentException(token);\r
-        }\r
-\r
-        int ivalStart;\r
-        int ivalEnd;\r
-        try{\r
-            ivalStart = Integer.parseInt(ivalues[0]);\r
-            if(ivalues.length >= 2) ivalEnd = Integer.parseInt(ivalues[1]);\r
-            else                    ivalEnd = ivalStart;\r
-        }catch(NumberFormatException e){\r
-            throw new IllegalArgumentException(token, e);\r
-        }\r
-\r
-        if(ivalStart > ivalEnd){\r
-            int dummy = ivalStart;\r
-            ivalStart = ivalEnd;\r
-            ivalEnd = dummy;\r
-            assert ivalStart <= ivalEnd;\r
-        }\r
-\r
-        for(int ival = ivalStart; ival <= ivalEnd; ival++){\r
-            intSet.add(ival);\r
-        }\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * コンマとハイフンで区切られた整数の羅列をパースする。\r
-     * 「10,23-25」なら10,23,24,25を結果に返す。\r
-     * @param seq パース対象文字列\r
-     * @return ソートされたIntegerのList\r
-     * @throws IllegalArgumentException 形式が変。\r
-     */\r
-    public static SortedSet<Integer> parseIntList(CharSequence seq)\r
-            throws IllegalArgumentException{\r
-        SortedSet<Integer> result = new TreeSet<Integer>();\r
-\r
-        if(seq.length() <= 0 ) return result;\r
-        String str = seq.toString();\r
-        str = str.replaceAll("\\p{Blank}", "");\r
-\r
-        String[] tokens = str.split(",");\r
-        assert tokens.length >= 1;\r
-        for(String token : tokens){\r
-            if(token.length() <= 0) continue;\r
-            if(   token.charAt(0) == '-'\r
-               || token.endsWith("-") ){\r
-                throw new IllegalArgumentException(token);\r
-            }\r
-            parseIntPair(result, token);\r
-        }\r
-\r
-        return result;\r
-    }\r
-\r
-    /**\r
-     * 国設定のListを返す。\r
-     * @param builder DOMビルダ\r
-     * @return List 国設定リスト\r
-     * @throws IOException IOエラー\r
-     * @throws SAXException パースエラー\r
-     */\r
-    public static List<LandDef> buildLandDefList(DocumentBuilder builder)\r
-            throws IOException,\r
-                   SAXException{\r
-        List<Element> elemList = DomUtils.loadElemList(\r
-                builder, XmlResource.I_URL_LANDDEF, "landDef");\r
-\r
-        List<LandDef> result = new ArrayList<LandDef>(elemList.size());\r
-\r
-        for(Element elem : elemList){\r
-            LandDef landDef = buildLandDef(elem);\r
-            result.add(landDef);\r
-        }\r
-\r
-        result = Collections.unmodifiableList(result);\r
-\r
-        return result;\r
-    }\r
-\r
-    /**\r
-     * ハイフンをデリミタに持つロケール指定文字列からLocaleを生成する。\r
-     * @param attrVal ロケール指定文字列\r
-     * @return Locale\r
-     */\r
-    public static Locale buildLocale(CharSequence attrVal){\r
-        String lang    = "";\r
-        String country = "";\r
-        String variant = "";\r
-\r
-        String[] lcstr = attrVal.toString().split("-", 3);\r
-        if(lcstr.length >= 1) lang    = lcstr[0];\r
-        if(lcstr.length >= 2) country = lcstr[1];\r
-        if(lcstr.length >= 3) variant = lcstr[2];\r
-\r
-        Locale locale = new Locale(lang, country, variant);\r
-\r
-        return locale;\r
-    }\r
-\r
-    /**\r
-     * XML属性を使って国定義の識別子情報を埋める。\r
-     * @param result 国定義\r
-     * @param elem 個別のXML国定義要素\r
-     * @throws SAXException XML属性の記述に関する異常系\r
-     */\r
-    private static void fillIdInfo(LandDef result, Element elem)\r
-            throws SAXException{\r
-        String landName   = DomUtils.attrRequired(elem, "landName");\r
-        String landId     = DomUtils.attrRequired(elem, "landId");\r
-        String formalName = DomUtils.attrRequired(elem, "formalName");\r
-        String landPrefix = DomUtils.attrRequired(elem, "landPrefix");\r
-\r
-        if(   landName  .length() <= 0\r
-           || landId    .length() <= 0\r
-           || formalName.length() <= 0 ){\r
-            throw new SAXException("no identification info");\r
-        }\r
-\r
-        result.landName   = landName;\r
-        result.landId     = landId;\r
-        result.formalName = formalName;\r
-        result.landPrefix = landPrefix;\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * XML属性を使って国定義の定員情報を埋める。\r
-     * @param result 国定義\r
-     * @param elem 個別のXML国定義要素\r
-     * @throws SAXException XML属性の記述に関する異常系\r
-     */\r
-    private static void fillMemberInfo(LandDef result, Element elem)\r
-            throws SAXException{\r
-        String minStr = DomUtils.attrRequired(elem, "minMembers");\r
-        String maxStr = DomUtils.attrRequired(elem, "maxMembers");\r
-\r
-        int minMembers = Integer.parseInt(minStr);\r
-        int maxMembers = Integer.parseInt(maxStr);\r
-\r
-        if(   minMembers <= 0\r
-           || minMembers > maxMembers ){\r
-            throw new SAXException("invalid member limitation");\r
-        }\r
-\r
-        result.minMembers = minMembers;\r
-        result.maxMembers = maxMembers;\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * XML属性を使って国定義のURI情報を埋める。\r
-     * @param result 国定義\r
-     * @param elem 個別のXML国定義要素\r
-     * @throws SAXException XML属性の記述に関する異常系\r
-     */\r
-    private static void fillUriInfo(LandDef result, Element elem)\r
-            throws SAXException{\r
-        URI webURI = DomUtils.attrToUri(elem, "webURI");\r
-        URI cgiURI = DomUtils.attrToUri(elem, "cgiURI");\r
-        if(webURI == null || cgiURI == null){\r
-            throw new SAXException("no URI");\r
-        }\r
-        if(   ! webURI.isAbsolute()\r
-           || ! cgiURI.isAbsolute() ){\r
-            throw new SAXException("relative URI");\r
-        }\r
-\r
-        URI tombFaceIconURI = DomUtils.attrToUri(elem, "tombFaceIconURI");\r
-        URI tombBodyIconURI = DomUtils.attrToUri(elem, "tombBodyIconURI");\r
-        if(tombFaceIconURI == null) tombFaceIconURI = DEF_TOMBFACE_URI;\r
-        if(tombBodyIconURI == null) tombBodyIconURI = DEF_TOMBBODY_URI;\r
-\r
-        result.webURI          = webURI;\r
-        result.cgiURI          = cgiURI;\r
-        result.tombFaceIconURI = tombFaceIconURI;\r
-        result.tombBodyIconURI = tombBodyIconURI;\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * XML属性を使って国定義のURIテンプレート情報を埋める。\r
-     * @param result 国定義\r
-     * @param elem 個別のXML国定義要素\r
-     * @throws SAXException XML属性の記述に関する異常系\r
-     */\r
-    private static void fillTemplateInfo(LandDef result, Element elem)\r
-            throws SAXException{\r
-        String faceURITemplate;\r
-        String bodyURITemplate;\r
-\r
-        faceURITemplate = DomUtils.attrValue(elem, "faceIconURITemplate");\r
-        bodyURITemplate = DomUtils.attrValue(elem, "bodyIconURITemplate");\r
-\r
-        if(faceURITemplate == null) faceURITemplate = DEF_FACE_URI_TMPL;\r
-        if(bodyURITemplate == null) bodyURITemplate = DEF_BODY_URI_TMPL;\r
-\r
-        result.faceURITemplate = faceURITemplate;\r
-        result.bodyURITemplate = bodyURITemplate;\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * XML属性を使って国定義の国際化情報を埋める。\r
-     * @param result 国定義\r
-     * @param elem 個別のXML国定義要素\r
-     * @throws SAXException XML属性の記述に関する異常系\r
-     */\r
-    private static void fillI18NInfo(LandDef result, Element elem)\r
-            throws SAXException{\r
-        String localeText   = DomUtils.attrRequired(elem, "locale");\r
-        String encodingText = DomUtils.attrRequired(elem, "encoding");\r
-        String timeZoneText = DomUtils.attrRequired(elem, "timeZone");\r
-\r
-        Locale locale = buildLocale(localeText);\r
-        Charset encoding = Charset.forName(encodingText);\r
-        TimeZone timeZone = TimeZone.getTimeZone(timeZoneText);\r
-\r
-        result.locale   = locale;\r
-        result.encoding = encoding;\r
-        result.timeZone = timeZone;\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * XML属性を使って国定義の日付情報を埋める。\r
-     * @param result 国定義\r
-     * @param elem 個別のXML国定義要素\r
-     * @throws SAXException XML属性の記述に関する異常系\r
-     */\r
-    private static void fillDateInfo(LandDef result, Element elem)\r
-            throws SAXException{\r
-        long startDateTime;\r
-        long endDateTime;\r
-\r
-        String startDateText = DomUtils.attrRequired(elem, "startDate");\r
-        String endDateText = elem.getAttribute("endDate");\r
-\r
-        startDateTime = DateUtils.parseISO8601(startDateText);\r
-\r
-        if(endDateText.length() > 0){\r
-            endDateTime = DateUtils.parseISO8601(endDateText);\r
-        }else{\r
-            endDateTime = -1;\r
-        }\r
-\r
-        if(startDateTime < 0){\r
-            throw new SAXException("illegal start date " + startDateText);\r
-        }\r
-\r
-        if(endDateTime >= 0 && startDateTime > endDateTime){\r
-            throw new SAXException("start date is too old " + startDateText);\r
-        }\r
-\r
-        result.startDateTime = startDateTime;\r
-        result.endDateTime   = endDateTime;\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * XML属性を使って国定義の各種ステータス情報を埋める。\r
-     * @param result 国定義\r
-     * @param elem 個別のXML国定義要素\r
-     * @throws SAXException XML属性の記述に関する異常系\r
-     */\r
-    private static void fillLandInfo(LandDef result, Element elem)\r
-            throws SAXException{\r
-        String state = DomUtils.attrRequired(elem, "landState");\r
-        LandState landState = STATE_MAP.get(state);\r
-        if(landState == null){\r
-            throw new SAXException("illegal land status " + state);\r
-        }\r
-\r
-        String description = DomUtils.attrRequired(elem, "description");\r
-        String contactInfo = DomUtils.attrRequired(elem, "contactInfo");\r
-\r
-        String invalidVid = elem.getAttribute("invalidVid");\r
-        SortedSet<Integer> invalidSet = parseIntList(invalidVid);\r
-        int[] invalidArray = new int[invalidSet.size()];\r
-        int pos = 0;\r
-        for(int vid : invalidSet){\r
-            invalidArray[pos++] = vid;\r
-        }\r
-\r
-        result.landState   = landState;\r
-        result.description = description;\r
-        result.contactInfo = contactInfo;\r
-        result.invalidVid  = invalidArray;\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * 個々の国設定をオブジェクトに変換する。\r
-     * @param elem 国設定要素\r
-     * @return 国設定オブジェクト\r
-     * @throws SAXException パースエラー\r
-     */\r
-    private static LandDef buildLandDef(Element elem)\r
-            throws SAXException{\r
-        LandDef result = new LandDef();\r
-\r
-        fillLandInfo    (result, elem);\r
-        fillIdInfo      (result, elem);\r
-        fillMemberInfo  (result, elem);\r
-        fillUriInfo     (result, elem);\r
-        fillTemplateInfo(result, elem);\r
-        fillI18NInfo    (result, elem);\r
-        fillDateInfo    (result, elem);\r
-\r
-        return result;\r
-    }\r
-\r
-\r
-    /**\r
-     * 国名を得る。\r
-     * @return 国名\r
-     */\r
-    public String getLandName(){\r
-        return this.landName;\r
-    }\r
-\r
-    /**\r
-     * 国識別子を得る。\r
-     * @return 識別子\r
-     */\r
-    public String getLandId(){\r
-        return this.landId;\r
-    }\r
-\r
-    /**\r
-     * 正式名称を得る。\r
-     * @return 正式名称\r
-     */\r
-    public String getFormalName(){\r
-        return this.formalName;\r
-    }\r
-\r
-    /**\r
-     * 各村の前置文字。\r
-     * F国なら「F」\r
-     * @return 前置文字\r
-     */\r
-    public String getLandPrefix(){\r
-        return this.landPrefix;\r
-    }\r
-\r
-    /**\r
-     * 国の状態を得る。\r
-     * @return 状態\r
-     */\r
-    public LandState getLandState(){\r
-        return this.landState;\r
-    }\r
-\r
-    /**\r
-     * 最小定員を得る。\r
-     * @return 最小定員\r
-     */\r
-    public int getMinMembers(){\r
-        return this.minMembers;\r
-    }\r
-\r
-    /**\r
-     * 最大定員を得る。\r
-     * @return 最大定員\r
-     */\r
-    public int getMaxMembers(){\r
-        return this.maxMembers;\r
-    }\r
-\r
-    /**\r
-     * Webアクセス用の入り口URIを得る。\r
-     * @return 入り口URI\r
-     */\r
-    public URI getWebURI(){\r
-        return this.webURI;\r
-    }\r
-\r
-    /**\r
-     * クエリーを投げるCGIのURIを得る。\r
-     * @return CGIのURI\r
-     */\r
-    public URI getCgiURI(){\r
-        return this.cgiURI;\r
-    }\r
-\r
-    /**\r
-     * 墓画像のURIを得る。\r
-     * @return 墓URI\r
-     */\r
-    public URI getTombFaceIconURI(){\r
-        return this.tombFaceIconURI;\r
-    }\r
-\r
-    /**\r
-     * 大きな墓画像のURIを得る。\r
-     * @return 墓URI\r
-     */\r
-    public URI getTombBodyIconURI(){\r
-        return this.tombBodyIconURI;\r
-    }\r
-\r
-    /**\r
-     * 顔アイコンURIのテンプレートを得る。\r
-     * @return Formatter用テンプレート\r
-     */\r
-    public String getFaceURITemplate(){\r
-        return this.faceURITemplate;\r
-    }\r
-\r
-    /**\r
-     * 全身像アイコンURIのテンプレートを得る。\r
-     * @return Formatter用テンプレート\r
-     */\r
-    public String getBodyURITemplate(){\r
-        return this.bodyURITemplate;\r
-    }\r
-\r
-    /**\r
-     * この国のロケールを得る。\r
-     * @return ロケール\r
-     */\r
-    public Locale getLocale(){\r
-        return this.locale;\r
-    }\r
-\r
-    /**\r
-     * この国が使うエンコーディングを得る。\r
-     * @return エンコーディング\r
-     */\r
-    public Charset getEncoding(){\r
-        return this.encoding;\r
-    }\r
-\r
-    /**\r
-     * この国の時刻表記で使うタイムゾーンのコピーを得る。\r
-     * @return タイムゾーン\r
-     */\r
-    public TimeZone getTimeZone(){\r
-        TimeZone result = (TimeZone)( this.timeZone.clone() );\r
-        return result;\r
-    }\r
-\r
-    /**\r
-     * この国の始まった時刻を得る。\r
-     * @return 始まった時刻(エポックミリ秒)。\r
-     */\r
-    public long getStartDateTime(){\r
-        return this.startDateTime;\r
-    }\r
-\r
-    /**\r
-     * この国が発言を打ち切った時刻を得る。\r
-     * @return 打ち切った時刻(エポックミリ秒)。まだ打ち切っていない場合は負。\r
-     */\r
-    public long getEndDateTime(){\r
-        return this.endDateTime;\r
-    }\r
-\r
-    /**\r
-     * この国の説明を得る。\r
-     * @return 説明文字列\r
-     */\r
-    public String getDescription(){\r
-        return this.description;\r
-    }\r
-\r
-    /**\r
-     * この国の連絡先を得る。\r
-     * @return 連絡先文字列\r
-     */\r
-    public String getContactInfo(){\r
-        return this.contactInfo;\r
-    }\r
-\r
-    /**\r
-     * 有効な村IDか否か判定する。\r
-     * @param vid 村ID\r
-     * @return 無効な村ならfalse\r
-     */\r
-    public boolean isValidVillageId(int vid){\r
-        int pos = Arrays.binarySearch(this.invalidVid, vid);\r
-        if(pos >= 0) return false;\r
-        return true;\r
-    }\r
-\r
-}\r
+/*
+ * land information definition
+ *
+ * License : The MIT License
+ * Copyright(c) 2009 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+import java.io.IOException;
+import java.net.URI;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TimeZone;
+import java.util.TreeSet;
+import javax.xml.parsers.DocumentBuilder;
+import org.w3c.dom.Element;
+import org.xml.sax.SAXException;
+
+/**
+ * 人狼BBSの各国設定。
+ */
+public final class LandDef{
+
+    /** 各種イメージの相対なベースURI。 */
+    public static final String IMAGE_RELPATH = "./plugin_wolf/img/";
+
+    /** 顔アイコンURIのテンプレート。 */
+    public static final String DEF_FACE_URI_TMPL =
+        IMAGE_RELPATH + "face{0,number,#00}.jpg";
+    /** デカキャラURIのテンプレート。 */
+    public static final String DEF_BODY_URI_TMPL =
+        IMAGE_RELPATH + "body{0,number,#00}.jpg";
+
+    /** 墓小アイコンのデフォルト相対URI。 */
+    public static final URI DEF_TOMBFACE_URI =
+            URI.create(IMAGE_RELPATH + "face99.jpg").normalize();
+    /** 墓大アイコンのデフォルト相対URI。 */
+    public static final URI DEF_TOMBBODY_URI =
+            URI.create(IMAGE_RELPATH + "body99.jpg").normalize();
+
+    private static final Map<String, LandState> STATE_MAP;
+
+
+    static{
+        STATE_MAP = new HashMap<String, LandState>();
+        STATE_MAP.put("closed",     LandState.CLOSED);
+        STATE_MAP.put("historical", LandState.HISTORICAL);
+        STATE_MAP.put("active",     LandState.ACTIVE);
+    }
+
+
+    private String landName;
+    private String landId;
+    private String formalName;
+    private String landPrefix;
+    private LandState landState;
+    private int minMembers;
+    private int maxMembers;
+    private URI webURI;
+    private URI cgiURI;
+    private URI tombFaceIconURI;
+    private URI tombBodyIconURI;
+    private String faceURITemplate;
+    private String bodyURITemplate;
+    private Locale locale;
+    private Charset encoding;
+    private TimeZone timeZone;
+    private long startDateTime;
+    private long endDateTime;
+    private String description;
+    private String contactInfo;
+    private int[] invalidVid;
+
+
+    /**
+     * コンストラクタ。
+     */
+    private LandDef(){
+        super();
+        return;
+    }
+
+
+    /**
+     * ハイフンで区切られた整数範囲をパースする。
+     * 「1-3」なら1,2,3を結果に格納する。
+     * @param intSet 格納先Set
+     * @param seq パース対象
+     * @throws IllegalArgumentException 形式が変
+     */
+    private static void parseIntPair(Set<Integer> intSet, CharSequence seq)
+            throws IllegalArgumentException{
+        String token = seq.toString();
+
+        String[] ivalues = token.split("-");
+        assert ivalues.length >= 1;
+        if(ivalues.length >= 3){
+            throw new IllegalArgumentException(token);
+        }
+
+        int ivalStart;
+        int ivalEnd;
+        try{
+            ivalStart = Integer.parseInt(ivalues[0]);
+            if(ivalues.length >= 2) ivalEnd = Integer.parseInt(ivalues[1]);
+            else                    ivalEnd = ivalStart;
+        }catch(NumberFormatException e){
+            throw new IllegalArgumentException(token, e);
+        }
+
+        if(ivalStart > ivalEnd){
+            int dummy = ivalStart;
+            ivalStart = ivalEnd;
+            ivalEnd = dummy;
+            assert ivalStart <= ivalEnd;
+        }
+
+        for(int ival = ivalStart; ival <= ivalEnd; ival++){
+            intSet.add(ival);
+        }
+
+        return;
+    }
+
+    /**
+     * コンマとハイフンで区切られた整数の羅列をパースする。
+     * 「10,23-25」なら10,23,24,25を結果に返す。
+     * @param seq パース対象文字列
+     * @return ソートされたIntegerのList
+     * @throws IllegalArgumentException 形式が変。
+     */
+    public static SortedSet<Integer> parseIntList(CharSequence seq)
+            throws IllegalArgumentException{
+        SortedSet<Integer> result = new TreeSet<Integer>();
+
+        if(seq.length() <= 0 ) return result;
+        String str = seq.toString();
+        str = str.replaceAll("\\p{Blank}", "");
+
+        String[] tokens = str.split(",");
+        assert tokens.length >= 1;
+        for(String token : tokens){
+            if(token.length() <= 0) continue;
+            if(   token.charAt(0) == '-'
+               || token.endsWith("-") ){
+                throw new IllegalArgumentException(token);
+            }
+            parseIntPair(result, token);
+        }
+
+        return result;
+    }
+
+    /**
+     * 国設定のListを返す。
+     * @param builder DOMビルダ
+     * @return List 国設定リスト
+     * @throws IOException IOエラー
+     * @throws SAXException パースエラー
+     */
+    public static List<LandDef> buildLandDefList(DocumentBuilder builder)
+            throws IOException,
+                   SAXException{
+        List<Element> elemList = DomUtils.loadElemList(
+                builder, XmlResource.I_URL_LANDDEF, "landDef");
+
+        List<LandDef> result = new ArrayList<LandDef>(elemList.size());
+
+        for(Element elem : elemList){
+            LandDef landDef = buildLandDef(elem);
+            result.add(landDef);
+        }
+
+        result = Collections.unmodifiableList(result);
+
+        return result;
+    }
+
+    /**
+     * ハイフンをデリミタに持つロケール指定文字列からLocaleを生成する。
+     * @param attrVal ロケール指定文字列
+     * @return Locale
+     */
+    public static Locale buildLocale(CharSequence attrVal){
+        String lang    = "";
+        String country = "";
+        String variant = "";
+
+        String[] lcstr = attrVal.toString().split("-", 3);
+        if(lcstr.length >= 1) lang    = lcstr[0];
+        if(lcstr.length >= 2) country = lcstr[1];
+        if(lcstr.length >= 3) variant = lcstr[2];
+
+        Locale locale = new Locale(lang, country, variant);
+
+        return locale;
+    }
+
+    /**
+     * XML属性を使って国定義の識別子情報を埋める。
+     * @param result 国定義
+     * @param elem 個別のXML国定義要素
+     * @throws SAXException XML属性の記述に関する異常系
+     */
+    private static void fillIdInfo(LandDef result, Element elem)
+            throws SAXException{
+        String landName   = DomUtils.attrRequired(elem, "landName");
+        String landId     = DomUtils.attrRequired(elem, "landId");
+        String formalName = DomUtils.attrRequired(elem, "formalName");
+        String landPrefix = DomUtils.attrRequired(elem, "landPrefix");
+
+        if(   landName  .length() <= 0
+           || landId    .length() <= 0
+           || formalName.length() <= 0 ){
+            throw new SAXException("no identification info");
+        }
+
+        result.landName   = landName;
+        result.landId     = landId;
+        result.formalName = formalName;
+        result.landPrefix = landPrefix;
+
+        return;
+    }
+
+    /**
+     * XML属性を使って国定義の定員情報を埋める。
+     * @param result 国定義
+     * @param elem 個別のXML国定義要素
+     * @throws SAXException XML属性の記述に関する異常系
+     */
+    private static void fillMemberInfo(LandDef result, Element elem)
+            throws SAXException{
+        String minStr = DomUtils.attrRequired(elem, "minMembers");
+        String maxStr = DomUtils.attrRequired(elem, "maxMembers");
+
+        int minMembers = Integer.parseInt(minStr);
+        int maxMembers = Integer.parseInt(maxStr);
+
+        if(   minMembers <= 0
+           || minMembers > maxMembers ){
+            throw new SAXException("invalid member limitation");
+        }
+
+        result.minMembers = minMembers;
+        result.maxMembers = maxMembers;
+
+        return;
+    }
+
+    /**
+     * XML属性を使って国定義のURI情報を埋める。
+     * @param result 国定義
+     * @param elem 個別のXML国定義要素
+     * @throws SAXException XML属性の記述に関する異常系
+     */
+    private static void fillUriInfo(LandDef result, Element elem)
+            throws SAXException{
+        URI webURI = DomUtils.attrToUri(elem, "webURI");
+        URI cgiURI = DomUtils.attrToUri(elem, "cgiURI");
+        if(webURI == null || cgiURI == null){
+            throw new SAXException("no URI");
+        }
+        if(   ! webURI.isAbsolute()
+           || ! cgiURI.isAbsolute() ){
+            throw new SAXException("relative URI");
+        }
+
+        URI tombFaceIconURI = DomUtils.attrToUri(elem, "tombFaceIconURI");
+        URI tombBodyIconURI = DomUtils.attrToUri(elem, "tombBodyIconURI");
+        if(tombFaceIconURI == null) tombFaceIconURI = DEF_TOMBFACE_URI;
+        if(tombBodyIconURI == null) tombBodyIconURI = DEF_TOMBBODY_URI;
+
+        result.webURI          = webURI;
+        result.cgiURI          = cgiURI;
+        result.tombFaceIconURI = tombFaceIconURI;
+        result.tombBodyIconURI = tombBodyIconURI;
+
+        return;
+    }
+
+    /**
+     * XML属性を使って国定義のURIテンプレート情報を埋める。
+     * @param result 国定義
+     * @param elem 個別のXML国定義要素
+     * @throws SAXException XML属性の記述に関する異常系
+     */
+    private static void fillTemplateInfo(LandDef result, Element elem)
+            throws SAXException{
+        String faceURITemplate;
+        String bodyURITemplate;
+
+        faceURITemplate = DomUtils.attrValue(elem, "faceIconURITemplate");
+        bodyURITemplate = DomUtils.attrValue(elem, "bodyIconURITemplate");
+
+        if(faceURITemplate == null) faceURITemplate = DEF_FACE_URI_TMPL;
+        if(bodyURITemplate == null) bodyURITemplate = DEF_BODY_URI_TMPL;
+
+        result.faceURITemplate = faceURITemplate;
+        result.bodyURITemplate = bodyURITemplate;
+
+        return;
+    }
+
+    /**
+     * XML属性を使って国定義の国際化情報を埋める。
+     * @param result 国定義
+     * @param elem 個別のXML国定義要素
+     * @throws SAXException XML属性の記述に関する異常系
+     */
+    private static void fillI18NInfo(LandDef result, Element elem)
+            throws SAXException{
+        String localeText   = DomUtils.attrRequired(elem, "locale");
+        String encodingText = DomUtils.attrRequired(elem, "encoding");
+        String timeZoneText = DomUtils.attrRequired(elem, "timeZone");
+
+        Locale locale = buildLocale(localeText);
+        Charset encoding = Charset.forName(encodingText);
+        TimeZone timeZone = TimeZone.getTimeZone(timeZoneText);
+
+        result.locale   = locale;
+        result.encoding = encoding;
+        result.timeZone = timeZone;
+
+        return;
+    }
+
+    /**
+     * XML属性を使って国定義の日付情報を埋める。
+     * @param result 国定義
+     * @param elem 個別のXML国定義要素
+     * @throws SAXException XML属性の記述に関する異常系
+     */
+    private static void fillDateInfo(LandDef result, Element elem)
+            throws SAXException{
+        long startDateTime;
+        long endDateTime;
+
+        String startDateText = DomUtils.attrRequired(elem, "startDate");
+        String endDateText = elem.getAttribute("endDate");
+
+        startDateTime = DateUtils.parseISO8601(startDateText);
+
+        if(endDateText.length() > 0){
+            endDateTime = DateUtils.parseISO8601(endDateText);
+        }else{
+            endDateTime = -1;
+        }
+
+        if(startDateTime < 0){
+            throw new SAXException("illegal start date " + startDateText);
+        }
+
+        if(endDateTime >= 0 && startDateTime > endDateTime){
+            throw new SAXException("start date is too old " + startDateText);
+        }
+
+        result.startDateTime = startDateTime;
+        result.endDateTime   = endDateTime;
+
+        return;
+    }
+
+    /**
+     * XML属性を使って国定義の各種ステータス情報を埋める。
+     * @param result 国定義
+     * @param elem 個別のXML国定義要素
+     * @throws SAXException XML属性の記述に関する異常系
+     */
+    private static void fillLandInfo(LandDef result, Element elem)
+            throws SAXException{
+        String state = DomUtils.attrRequired(elem, "landState");
+        LandState landState = STATE_MAP.get(state);
+        if(landState == null){
+            throw new SAXException("illegal land status " + state);
+        }
+
+        String description = DomUtils.attrRequired(elem, "description");
+        String contactInfo = DomUtils.attrRequired(elem, "contactInfo");
+
+        String invalidVid = elem.getAttribute("invalidVid");
+        SortedSet<Integer> invalidSet = parseIntList(invalidVid);
+        int[] invalidArray = new int[invalidSet.size()];
+        int pos = 0;
+        for(int vid : invalidSet){
+            invalidArray[pos++] = vid;
+        }
+
+        result.landState   = landState;
+        result.description = description;
+        result.contactInfo = contactInfo;
+        result.invalidVid  = invalidArray;
+
+        return;
+    }
+
+    /**
+     * 個々の国設定をオブジェクトに変換する。
+     * @param elem 国設定要素
+     * @return 国設定オブジェクト
+     * @throws SAXException パースエラー
+     */
+    private static LandDef buildLandDef(Element elem)
+            throws SAXException{
+        LandDef result = new LandDef();
+
+        fillLandInfo    (result, elem);
+        fillIdInfo      (result, elem);
+        fillMemberInfo  (result, elem);
+        fillUriInfo     (result, elem);
+        fillTemplateInfo(result, elem);
+        fillI18NInfo    (result, elem);
+        fillDateInfo    (result, elem);
+
+        return result;
+    }
+
+
+    /**
+     * 国名を得る。
+     * @return 国名
+     */
+    public String getLandName(){
+        return this.landName;
+    }
+
+    /**
+     * 国識別子を得る。
+     * @return 識別子
+     */
+    public String getLandId(){
+        return this.landId;
+    }
+
+    /**
+     * 正式名称を得る。
+     * @return 正式名称
+     */
+    public String getFormalName(){
+        return this.formalName;
+    }
+
+    /**
+     * 各村の前置文字。
+     * F国なら「F」
+     * @return 前置文字
+     */
+    public String getLandPrefix(){
+        return this.landPrefix;
+    }
+
+    /**
+     * 国の状態を得る。
+     * @return 状態
+     */
+    public LandState getLandState(){
+        return this.landState;
+    }
+
+    /**
+     * 最小定員を得る。
+     * @return 最小定員
+     */
+    public int getMinMembers(){
+        return this.minMembers;
+    }
+
+    /**
+     * 最大定員を得る。
+     * @return 最大定員
+     */
+    public int getMaxMembers(){
+        return this.maxMembers;
+    }
+
+    /**
+     * Webアクセス用の入り口URIを得る。
+     * @return 入り口URI
+     */
+    public URI getWebURI(){
+        return this.webURI;
+    }
+
+    /**
+     * クエリーを投げるCGIのURIを得る。
+     * @return CGIのURI
+     */
+    public URI getCgiURI(){
+        return this.cgiURI;
+    }
+
+    /**
+     * 墓画像のURIを得る。
+     * @return 墓URI
+     */
+    public URI getTombFaceIconURI(){
+        return this.tombFaceIconURI;
+    }
+
+    /**
+     * 大きな墓画像のURIを得る。
+     * @return 墓URI
+     */
+    public URI getTombBodyIconURI(){
+        return this.tombBodyIconURI;
+    }
+
+    /**
+     * 顔アイコンURIのテンプレートを得る。
+     * @return Formatter用テンプレート
+     */
+    public String getFaceURITemplate(){
+        return this.faceURITemplate;
+    }
+
+    /**
+     * 全身像アイコンURIのテンプレートを得る。
+     * @return Formatter用テンプレート
+     */
+    public String getBodyURITemplate(){
+        return this.bodyURITemplate;
+    }
+
+    /**
+     * この国のロケールを得る。
+     * @return ロケール
+     */
+    public Locale getLocale(){
+        return this.locale;
+    }
+
+    /**
+     * この国が使うエンコーディングを得る。
+     * @return エンコーディング
+     */
+    public Charset getEncoding(){
+        return this.encoding;
+    }
+
+    /**
+     * この国の時刻表記で使うタイムゾーンのコピーを得る。
+     * @return タイムゾーン
+     */
+    public TimeZone getTimeZone(){
+        TimeZone result = (TimeZone)( this.timeZone.clone() );
+        return result;
+    }
+
+    /**
+     * この国の始まった時刻を得る。
+     * @return 始まった時刻(エポックミリ秒)。
+     */
+    public long getStartDateTime(){
+        return this.startDateTime;
+    }
+
+    /**
+     * この国が発言を打ち切った時刻を得る。
+     * @return 打ち切った時刻(エポックミリ秒)。まだ打ち切っていない場合は負。
+     */
+    public long getEndDateTime(){
+        return this.endDateTime;
+    }
+
+    /**
+     * この国の説明を得る。
+     * @return 説明文字列
+     */
+    public String getDescription(){
+        return this.description;
+    }
+
+    /**
+     * この国の連絡先を得る。
+     * @return 連絡先文字列
+     */
+    public String getContactInfo(){
+        return this.contactInfo;
+    }
+
+    /**
+     * 有効な村IDか否か判定する。
+     * @param vid 村ID
+     * @return 無効な村ならfalse
+     */
+    public boolean isValidVillageId(int vid){
+        int pos = Arrays.binarySearch(this.invalidVid, vid);
+        if(pos >= 0) return false;
+        return true;
+    }
+
+}
index 3f2aac7..6f947ca 100644 (file)
@@ -1,42 +1,42 @@
-/*\r
- * status of land\r
- *\r
- * License : The MIT License\r
- * Copyright(c) 2009 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-/**\r
- * 国の状態。\r
- */\r
-public enum LandState{\r
-\r
-    /** アクセス不可。 */\r
-    CLOSED("closed"),\r
-    /** 過去ログの閲覧のみが可能。 */\r
-    HISTORICAL("historical"),\r
-    /** ゲームへの参加が可能。 */\r
-    ACTIVE("active"),\r
-    ;\r
-\r
-    private final String xmlName;\r
-\r
-    /**\r
-     * コンストラクタ。\r
-     * @param xmlName XML用シンボル\r
-     */\r
-    private LandState(String xmlName){\r
-        this.xmlName = xmlName.intern();\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * XML用シンボルを取得する。\r
-     * @return XML用シンボル\r
-     */\r
-    public String getXmlName(){\r
-        return this.xmlName;\r
-    }\r
-\r
-}\r
+/*
+ * status of land
+ *
+ * License : The MIT License
+ * Copyright(c) 2009 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+/**
+ * 国の状態。
+ */
+public enum LandState{
+
+    /** アクセス不可。 */
+    CLOSED("closed"),
+    /** 過去ログの閲覧のみが可能。 */
+    HISTORICAL("historical"),
+    /** ゲームへの参加が可能。 */
+    ACTIVE("active"),
+    ;
+
+    private final String xmlName;
+
+    /**
+     * コンストラクタ。
+     * @param xmlName XML用シンボル
+     */
+    private LandState(String xmlName){
+        this.xmlName = xmlName.intern();
+        return;
+    }
+
+    /**
+     * XML用シンボルを取得する。
+     * @return XML用シンボル
+     */
+    public String getXmlName(){
+        return this.xmlName;
+    }
+
+}
index ba600a9..29ad027 100644 (file)
@@ -1,42 +1,42 @@
-/*\r
- * type of period\r
- *\r
- * License : The MIT License\r
- * Copyright(c) 2009 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-/**\r
- * Period(個別の日々)の種別。\r
- */\r
-public enum PeriodType{\r
-\r
-    /** プロローグ。 */\r
-    PROLOGUE("prologue"),\r
-    /** 通常のゲーム進行。 */\r
-    PROGRESS("progress"),\r
-    /** エピローグ。 */\r
-    EPILOGUE("epilogue"),\r
-    ;\r
-\r
-    private final String xmlName;\r
-\r
-    /**\r
-     * コンストラクタ。\r
-     * @param xmlName XML用シンボル\r
-     */\r
-    private PeriodType(String xmlName){\r
-        this.xmlName = xmlName.intern();\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * XML用シンボルを取得する。\r
-     * @return XML用シンボル\r
-     */\r
-    public String getXmlName(){\r
-        return this.xmlName;\r
-    }\r
-\r
-}\r
+/*
+ * type of period
+ *
+ * License : The MIT License
+ * Copyright(c) 2009 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+/**
+ * Period(個別の日々)の種別。
+ */
+public enum PeriodType{
+
+    /** プロローグ。 */
+    PROLOGUE("prologue"),
+    /** 通常のゲーム進行。 */
+    PROGRESS("progress"),
+    /** エピローグ。 */
+    EPILOGUE("epilogue"),
+    ;
+
+    private final String xmlName;
+
+    /**
+     * コンストラクタ。
+     * @param xmlName XML用シンボル
+     */
+    private PeriodType(String xmlName){
+        this.xmlName = xmlName.intern();
+        return;
+    }
+
+    /**
+     * XML用シンボルを取得する。
+     * @return XML用シンボル
+     */
+    public String getXmlName(){
+        return this.xmlName;
+    }
+
+}
index 4110946..b0a03ed 100644 (file)
-/*\r
- * pre-defined avatar info\r
- *\r
- * License : The MIT License\r
- * Copyright(c) 2009 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-import java.io.IOException;\r
-import java.util.ArrayList;\r
-import java.util.Collections;\r
-import java.util.List;\r
-import javax.xml.parsers.DocumentBuilder;\r
-import org.w3c.dom.Element;\r
-import org.xml.sax.SAXException;\r
-\r
-/**\r
- * プリセット済みAvatarに関する情報。\r
- * F国運用の時点で20キャラクタ。\r
- */\r
-public final class PreDefAvatar{\r
-\r
-    private final String avatarId;\r
-    private final String fullName;\r
-    private final String jobTitle;\r
-    private final String shortName;\r
-    private final int serialNo;\r
-\r
-\r
-    /**\r
-     * コンストラクタ。\r
-     * @param avatarId Avatar識別子\r
-     * @param fullName フルネーム\r
-     * @param jobTitle 職業名\r
-     * @param shortName 省略名\r
-     * @param serialNo 通し番号\r
-     */\r
-    private PreDefAvatar(String avatarId,\r
-                         String fullName,\r
-                         String jobTitle,\r
-                         String shortName,\r
-                         int serialNo ){\r
-        super();\r
-\r
-        if(   avatarId  == null\r
-           || fullName  == null\r
-           || jobTitle  == null\r
-           || shortName == null ){\r
-            throw new NullPointerException();\r
-        }\r
-\r
-        if(   avatarId.length() <= 0\r
-           || fullName.length() <= 0\r
-           || serialNo < 0 ){\r
-            throw new IllegalArgumentException();\r
-        }\r
-\r
-        this.avatarId  = avatarId.intern();\r
-        this.fullName  = fullName.intern();\r
-        this.jobTitle  = jobTitle.intern();\r
-        this.shortName = shortName.intern();\r
-        this.serialNo  = serialNo;\r
-\r
-        return;\r
-    }\r
-\r
-\r
-    /**\r
-     * プリセット済みAvatar一覧リストを生成する。\r
-     * @param builder DOMビルダ\r
-     * @return プリセット済みAvatar一覧リスト\r
-     * @throws IOException IOエラー\r
-     * @throws SAXException パースエラー\r
-     */\r
-    public static List<PreDefAvatar> buildPreDefAvatarList(\r
-            DocumentBuilder builder)\r
-            throws IOException,\r
-                   SAXException {\r
-        List<Element> elemList = DomUtils.loadElemList(\r
-                builder, XmlResource.I_URL_AVATARDEF, "preDefinedAvatar");\r
-\r
-        List<PreDefAvatar> result =\r
-                new ArrayList<PreDefAvatar>(elemList.size());\r
-\r
-        for(Element elem : elemList){\r
-            PreDefAvatar avatar = buildAvatar(elem);\r
-            result.add(avatar);\r
-        }\r
-\r
-        result = Collections.unmodifiableList(result);\r
-\r
-        return result;\r
-    }\r
-\r
-    /**\r
-     * 個々のプリセットAvatar定義をオブジェクトに変換する。\r
-     * @param avatarDef プリセットAvatar定義要素\r
-     * @return プリセットAvatar定義オブジェクト\r
-     * @throws SAXException パースエラー\r
-     */\r
-    private static PreDefAvatar buildAvatar(Element avatarDef)\r
-            throws SAXException {\r
-        String avatarId  = avatarDef.getAttribute("avatarId");\r
-        String jobTitle  = avatarDef.getAttribute("jobTitle");\r
-        String shortName = avatarDef.getAttribute("shortName");\r
-        String serialNum = avatarDef.getAttribute("serialNum");\r
-\r
-        String fullName = jobTitle + "\u0020" + shortName;\r
-\r
-        int serialNo;\r
-        try{\r
-            serialNo = Integer.parseInt(serialNum);\r
-        }catch(NumberFormatException e){\r
-            throw new SAXException("illegal number form", e);\r
-        }\r
-\r
-        PreDefAvatar avatar = new PreDefAvatar(avatarId,\r
-                                               fullName,\r
-                                               jobTitle,\r
-                                               shortName,\r
-                                               serialNo );\r
-\r
-        return avatar;\r
-    }\r
-\r
-\r
-    /**\r
-     * Avatar識別子を返す。\r
-     * @return Avatar識別子\r
-     */\r
-    public String getAvatarId(){\r
-        return this.avatarId;\r
-    }\r
-\r
-    /**\r
-     * フルネームを返す。\r
-     * @return フルネーム\r
-     */\r
-    public String getFullName(){\r
-        return this.fullName;\r
-    }\r
-\r
-    /**\r
-     * 職業名を返す。\r
-     * @return 職業名\r
-     */\r
-    public String getJobTitle(){\r
-        return this.jobTitle;\r
-    }\r
-\r
-    /**\r
-     * 省略名を返す。\r
-     * @return 省略名\r
-     */\r
-    public String getShortName(){\r
-        return this.shortName;\r
-    }\r
-\r
-    /**\r
-     * 通し番号を返す。\r
-     * @return 通し番号\r
-     */\r
-    public int getSerialNo(){\r
-        return this.serialNo;\r
-    }\r
-\r
-}\r
+/*
+ * pre-defined avatar info
+ *
+ * License : The MIT License
+ * Copyright(c) 2009 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import javax.xml.parsers.DocumentBuilder;
+import org.w3c.dom.Element;
+import org.xml.sax.SAXException;
+
+/**
+ * プリセット済みAvatarに関する情報。
+ * F国運用の時点で20キャラクタ。
+ */
+public final class PreDefAvatar{
+
+    private final String avatarId;
+    private final String fullName;
+    private final String jobTitle;
+    private final String shortName;
+    private final int serialNo;
+
+
+    /**
+     * コンストラクタ。
+     * @param avatarId Avatar識別子
+     * @param fullName フルネーム
+     * @param jobTitle 職業名
+     * @param shortName 省略名
+     * @param serialNo 通し番号
+     */
+    private PreDefAvatar(String avatarId,
+                         String fullName,
+                         String jobTitle,
+                         String shortName,
+                         int serialNo ){
+        super();
+
+        if(   avatarId  == null
+           || fullName  == null
+           || jobTitle  == null
+           || shortName == null ){
+            throw new NullPointerException();
+        }
+
+        if(   avatarId.length() <= 0
+           || fullName.length() <= 0
+           || serialNo < 0 ){
+            throw new IllegalArgumentException();
+        }
+
+        this.avatarId  = avatarId.intern();
+        this.fullName  = fullName.intern();
+        this.jobTitle  = jobTitle.intern();
+        this.shortName = shortName.intern();
+        this.serialNo  = serialNo;
+
+        return;
+    }
+
+
+    /**
+     * プリセット済みAvatar一覧リストを生成する。
+     * @param builder DOMビルダ
+     * @return プリセット済みAvatar一覧リスト
+     * @throws IOException IOエラー
+     * @throws SAXException パースエラー
+     */
+    public static List<PreDefAvatar> buildPreDefAvatarList(
+            DocumentBuilder builder)
+            throws IOException,
+                   SAXException {
+        List<Element> elemList = DomUtils.loadElemList(
+                builder, XmlResource.I_URL_AVATARDEF, "preDefinedAvatar");
+
+        List<PreDefAvatar> result =
+                new ArrayList<PreDefAvatar>(elemList.size());
+
+        for(Element elem : elemList){
+            PreDefAvatar avatar = buildAvatar(elem);
+            result.add(avatar);
+        }
+
+        result = Collections.unmodifiableList(result);
+
+        return result;
+    }
+
+    /**
+     * 個々のプリセットAvatar定義をオブジェクトに変換する。
+     * @param avatarDef プリセットAvatar定義要素
+     * @return プリセットAvatar定義オブジェクト
+     * @throws SAXException パースエラー
+     */
+    private static PreDefAvatar buildAvatar(Element avatarDef)
+            throws SAXException {
+        String avatarId  = avatarDef.getAttribute("avatarId");
+        String jobTitle  = avatarDef.getAttribute("jobTitle");
+        String shortName = avatarDef.getAttribute("shortName");
+        String serialNum = avatarDef.getAttribute("serialNum");
+
+        String fullName = jobTitle + "\u0020" + shortName;
+
+        int serialNo;
+        try{
+            serialNo = Integer.parseInt(serialNum);
+        }catch(NumberFormatException e){
+            throw new SAXException("illegal number form", e);
+        }
+
+        PreDefAvatar avatar = new PreDefAvatar(avatarId,
+                                               fullName,
+                                               jobTitle,
+                                               shortName,
+                                               serialNo );
+
+        return avatar;
+    }
+
+
+    /**
+     * Avatar識別子を返す。
+     * @return Avatar識別子
+     */
+    public String getAvatarId(){
+        return this.avatarId;
+    }
+
+    /**
+     * フルネームを返す。
+     * @return フルネーム
+     */
+    public String getFullName(){
+        return this.fullName;
+    }
+
+    /**
+     * 職業名を返す。
+     * @return 職業名
+     */
+    public String getJobTitle(){
+        return this.jobTitle;
+    }
+
+    /**
+     * 省略名を返す。
+     * @return 省略名
+     */
+    public String getShortName(){
+        return this.shortName;
+    }
+
+    /**
+     * 通し番号を返す。
+     * @return 通し番号
+     */
+    public int getSerialNo(){
+        return this.serialNo;
+    }
+
+}
index 666b811..2976a8e 100644 (file)
@@ -1,98 +1,98 @@
-/*\r
- * type of system-event-message\r
- *\r
- * License : The MIT License\r
- * Copyright(c) 2009 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-/**\r
- * イベント種別。\r
- */\r
-public enum SysEventType{\r
-\r
-    /** エントリースタート。 */\r
-    STARTENTRY(EventFamily.ANNOUNCE),\r
-    /** キャラ初登場。 */\r
-    ONSTAGE(EventFamily.ANNOUNCE),\r
-    /** 役職確定。 */\r
-    STARTMIRROR(EventFamily.ANNOUNCE),\r
-    /** 役職人数内訳発表。 */\r
-    OPENROLE(EventFamily.ANNOUNCE),\r
-    /** 襲撃成功。 */\r
-    MURDERED(EventFamily.ANNOUNCE),\r
-    /** 襲撃開始。 */\r
-    STARTASSAULT(EventFamily.ANNOUNCE),\r
-    /** 生存者確認。 */\r
-    SURVIVOR(EventFamily.ANNOUNCE),\r
-    /** 投票結果。 */\r
-    COUNTING(EventFamily.ANNOUNCE),\r
-    /** 突然死。 */\r
-    SUDDENDEATH(EventFamily.ANNOUNCE),\r
-    /** 襲撃失敗。 */\r
-    NOMURDER(EventFamily.ANNOUNCE),\r
-    /** 村側勝利。 */\r
-    WINVILLAGE(EventFamily.ANNOUNCE),\r
-    /** 狼側勝利。 */\r
-    WINWOLF(EventFamily.ANNOUNCE),\r
-    /** ハムスター勝利。 */\r
-    WINHAMSTER(EventFamily.ANNOUNCE),\r
-    /** 役職&ログイン名公開。 */\r
-    PLAYERLIST(EventFamily.ANNOUNCE),\r
-    /** 何らかのシステムトラブル。A国末期で頻発。 */\r
-    PANIC(EventFamily.ANNOUNCE),\r
-    /** 参加者募集。 */\r
-    ASKENTRY(EventFamily.ORDER),\r
-    /** 行動確定要求。 */\r
-    ASKCOMMIT(EventFamily.ORDER),\r
-    /** 未発言者一覧。 */\r
-    NOCOMMENT(EventFamily.ORDER),\r
-    /** エピローグ案内。 */\r
-    STAYEPILOGUE(EventFamily.ORDER),\r
-    /** 村終了。 */\r
-    GAMEOVER(EventFamily.ORDER),\r
-    /** 占い先表示。 */\r
-    JUDGE(EventFamily.EXTRA),\r
-    /** 護衛先表示。 */\r
-    GUARD(EventFamily.EXTRA),\r
-    /** 襲撃。 */\r
-    ASSAULT(null),\r
-    /** 処刑結果表示。 */\r
-    EXECUTION(EventFamily.ANNOUNCE),\r
-    /** 投票結果表示(G国版)。 */\r
-    COUNTING2(EventFamily.EXTRA),\r
-    /** 失踪。 */\r
-    VANISH(EventFamily.ANNOUNCE),\r
-    /** チェックアウト。 */\r
-    CHECKOUT(EventFamily.ANNOUNCE),\r
-    /** 定員不足。 */\r
-    SHORTMEMBER(EventFamily.ANNOUNCE),\r
-    /** 未定義。 */\r
-    UNKNOWN(null),\r
-    ;\r
-\r
-\r
-    private final EventFamily family;\r
-\r
-\r
-    /**\r
-     * コンストラクタ。\r
-     * @param family イベントファミリ\r
-     */\r
-    private SysEventType(EventFamily family){\r
-        this.family = family;\r
-        return;\r
-    }\r
-\r
-\r
-    /**\r
-     * イベントファミリを得る。\r
-     * ASSAULTとUNKNOWNに関してはnullを返す。\r
-     * @return イベントファミリ\r
-     */\r
-    public EventFamily getEventFamily(){\r
-        return this.family;\r
-    }\r
-\r
-}\r
+/*
+ * type of system-event-message
+ *
+ * License : The MIT License
+ * Copyright(c) 2009 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+/**
+ * イベント種別。
+ */
+public enum SysEventType{
+
+    /** エントリースタート。 */
+    STARTENTRY(EventFamily.ANNOUNCE),
+    /** キャラ初登場。 */
+    ONSTAGE(EventFamily.ANNOUNCE),
+    /** 役職確定。 */
+    STARTMIRROR(EventFamily.ANNOUNCE),
+    /** 役職人数内訳発表。 */
+    OPENROLE(EventFamily.ANNOUNCE),
+    /** 襲撃成功。 */
+    MURDERED(EventFamily.ANNOUNCE),
+    /** 襲撃開始。 */
+    STARTASSAULT(EventFamily.ANNOUNCE),
+    /** 生存者確認。 */
+    SURVIVOR(EventFamily.ANNOUNCE),
+    /** 投票結果。 */
+    COUNTING(EventFamily.ANNOUNCE),
+    /** 突然死。 */
+    SUDDENDEATH(EventFamily.ANNOUNCE),
+    /** 襲撃失敗。 */
+    NOMURDER(EventFamily.ANNOUNCE),
+    /** 村側勝利。 */
+    WINVILLAGE(EventFamily.ANNOUNCE),
+    /** 狼側勝利。 */
+    WINWOLF(EventFamily.ANNOUNCE),
+    /** ハムスター勝利。 */
+    WINHAMSTER(EventFamily.ANNOUNCE),
+    /** 役職&ログイン名公開。 */
+    PLAYERLIST(EventFamily.ANNOUNCE),
+    /** 何らかのシステムトラブル。A国末期で頻発。 */
+    PANIC(EventFamily.ANNOUNCE),
+    /** 参加者募集。 */
+    ASKENTRY(EventFamily.ORDER),
+    /** 行動確定要求。 */
+    ASKCOMMIT(EventFamily.ORDER),
+    /** 未発言者一覧。 */
+    NOCOMMENT(EventFamily.ORDER),
+    /** エピローグ案内。 */
+    STAYEPILOGUE(EventFamily.ORDER),
+    /** 村終了。 */
+    GAMEOVER(EventFamily.ORDER),
+    /** 占い先表示。 */
+    JUDGE(EventFamily.EXTRA),
+    /** 護衛先表示。 */
+    GUARD(EventFamily.EXTRA),
+    /** 襲撃。 */
+    ASSAULT(null),
+    /** 処刑結果表示。 */
+    EXECUTION(EventFamily.ANNOUNCE),
+    /** 投票結果表示(G国版)。 */
+    COUNTING2(EventFamily.EXTRA),
+    /** 失踪。 */
+    VANISH(EventFamily.ANNOUNCE),
+    /** チェックアウト。 */
+    CHECKOUT(EventFamily.ANNOUNCE),
+    /** 定員不足。 */
+    SHORTMEMBER(EventFamily.ANNOUNCE),
+    /** 未定義。 */
+    UNKNOWN(null),
+    ;
+
+
+    private final EventFamily family;
+
+
+    /**
+     * コンストラクタ。
+     * @param family イベントファミリ
+     */
+    private SysEventType(EventFamily family){
+        this.family = family;
+        return;
+    }
+
+
+    /**
+     * イベントファミリを得る。
+     * ASSAULTとUNKNOWNに関してはnullを返す。
+     * @return イベントファミリ
+     */
+    public EventFamily getEventFamily(){
+        return this.family;
+    }
+
+}
index 137a446..409f71d 100644 (file)
@@ -1,44 +1,44 @@
-/*\r
- * type of talk\r
- *\r
- * License : The MIT License\r
- * Copyright(c) 2009 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-/**\r
- * 発言種別。\r
- */\r
-public enum TalkType{\r
-\r
-    /** 公開発言。白発言。say属性。 */\r
-    PUBLIC("public"),\r
-    /** 狼発言。赤発言。whisper属性。 */\r
-    WOLFONLY("wolf"),\r
-    /** 独り言。灰発言。think属性。 */\r
-    PRIVATE("private"),\r
-    /** 墓下発言。青発言。groan属性。 */\r
-    GRAVE("grave"),\r
-    ;\r
-\r
-    private final String xmlName;\r
-\r
-    /**\r
-     * コンストラクタ。\r
-     * @param xmlName XML用シンボル\r
-     */\r
-    private TalkType(String xmlName){\r
-        this.xmlName = xmlName.intern();\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * XML用シンボルを取得する。\r
-     * @return XML用シンボル\r
-     */\r
-    public String getXmlName(){\r
-        return this.xmlName;\r
-    }\r
-\r
-}\r
+/*
+ * type of talk
+ *
+ * License : The MIT License
+ * Copyright(c) 2009 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+/**
+ * 発言種別。
+ */
+public enum TalkType{
+
+    /** 公開発言。白発言。say属性。 */
+    PUBLIC("public"),
+    /** 狼発言。赤発言。whisper属性。 */
+    WOLFONLY("wolf"),
+    /** 独り言。灰発言。think属性。 */
+    PRIVATE("private"),
+    /** 墓下発言。青発言。groan属性。 */
+    GRAVE("grave"),
+    ;
+
+    private final String xmlName;
+
+    /**
+     * コンストラクタ。
+     * @param xmlName XML用シンボル
+     */
+    private TalkType(String xmlName){
+        this.xmlName = xmlName.intern();
+        return;
+    }
+
+    /**
+     * XML用シンボルを取得する。
+     * @return XML用シンボル
+     */
+    public String getXmlName(){
+        return this.xmlName;
+    }
+
+}
index d06f7e1..e43c228 100644 (file)
@@ -1,53 +1,53 @@
-/*\r
- * team in game\r
- *\r
- * License : The MIT License\r
- * Copyright(c) 2009 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-/**\r
- * 陣営種別。\r
- */\r
-public enum Team{\r
-\r
-    /** 村陣営。 */\r
-    VILLAGE ("村陣営", "village"),\r
-    /** 狼陣営。 */\r
-    WOLF    ("狼陣営", "wolf"),\r
-    /** ハムスター陣営。 */\r
-    HAMSTER ("ハムスター人間", "hamster"),\r
-    ;\r
-\r
-    private final String teamName;\r
-    private final String xmlName;\r
-\r
-    /**\r
-     * コンストラクタ。\r
-     * @param teamName 陣営名\r
-     * @param xmlName XML用シンボル\r
-     */\r
-    private Team(String teamName, String xmlName){\r
-        this.teamName = teamName.intern();\r
-        this.xmlName = xmlName.intern();\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * チーム名を取得する。\r
-     * @return チーム名\r
-     */\r
-    public String getTeamName(){\r
-        return this.teamName;\r
-    }\r
-\r
-    /**\r
-     * XML用シンボルを取得する。\r
-     * @return XML用シンボル\r
-     */\r
-    public String getXmlName(){\r
-        return this.xmlName;\r
-    }\r
-\r
-}\r
+/*
+ * team in game
+ *
+ * License : The MIT License
+ * Copyright(c) 2009 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+/**
+ * 陣営種別。
+ */
+public enum Team{
+
+    /** 村陣営。 */
+    VILLAGE ("村陣営", "village"),
+    /** 狼陣営。 */
+    WOLF    ("狼陣営", "wolf"),
+    /** ハムスター陣営。 */
+    HAMSTER ("ハムスター人間", "hamster"),
+    ;
+
+    private final String teamName;
+    private final String xmlName;
+
+    /**
+     * コンストラクタ。
+     * @param teamName 陣営名
+     * @param xmlName XML用シンボル
+     */
+    private Team(String teamName, String xmlName){
+        this.teamName = teamName.intern();
+        this.xmlName = xmlName.intern();
+        return;
+    }
+
+    /**
+     * チーム名を取得する。
+     * @return チーム名
+     */
+    public String getTeamName(){
+        return this.teamName;
+    }
+
+    /**
+     * XML用シンボルを取得する。
+     * @return XML用シンボル
+     */
+    public String getXmlName(){
+        return this.xmlName;
+    }
+
+}
index 8b795ce..d215afe 100644 (file)
@@ -1,47 +1,47 @@
-/*\r
- * state of village\r
- *\r
- * License : The MIT License\r
- * Copyright(c) 2009 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-/**\r
- * 村の状態。\r
- * 滅んだ国の村は全てGAMEOVERとする。\r
- */\r
-public enum VillageState{\r
-\r
-    /** プロローグ進行中。 */\r
-    PROLOGUE("prologue"),\r
-    /** ゲーム進行中。 */\r
-    PROGRESS("progress"),\r
-    /** エピローグ進行中。 */\r
-    EPILOGUE("epilogue"),\r
-    /** ゲーム終了。 */\r
-    GAMEOVER("gameover"),\r
-    /** 状況不明だが村の存在は確認。 */\r
-    UNKNOWN("unknown"),\r
-    ;\r
-\r
-    private final String xmlName;\r
-\r
-    /**\r
-     * コンストラクタ。\r
-     * @param xmlName XML用シンボル\r
-     */\r
-    private VillageState(String xmlName){\r
-        this.xmlName = xmlName.intern();\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * XML用シンボルを取得する。\r
-     * @return XML用シンボル\r
-     */\r
-    public String getXmlName(){\r
-        return this.xmlName;\r
-    }\r
-\r
-}\r
+/*
+ * state of village
+ *
+ * License : The MIT License
+ * Copyright(c) 2009 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+/**
+ * 村の状態。
+ * 滅んだ国の村は全てGAMEOVERとする。
+ */
+public enum VillageState{
+
+    /** プロローグ進行中。 */
+    PROLOGUE("prologue"),
+    /** ゲーム進行中。 */
+    PROGRESS("progress"),
+    /** エピローグ進行中。 */
+    EPILOGUE("epilogue"),
+    /** ゲーム終了。 */
+    GAMEOVER("gameover"),
+    /** 状況不明だが村の存在は確認。 */
+    UNKNOWN("unknown"),
+    ;
+
+    private final String xmlName;
+
+    /**
+     * コンストラクタ。
+     * @param xmlName XML用シンボル
+     */
+    private VillageState(String xmlName){
+        this.xmlName = xmlName.intern();
+        return;
+    }
+
+    /**
+     * XML用シンボルを取得する。
+     * @return XML用シンボル
+     */
+    public String getXmlName(){
+        return this.xmlName;
+    }
+
+}
index eedfee4..d5beb28 100644 (file)
-/*\r
- * village tag-name\r
- *\r
- * License : The MIT License\r
- * Copyright(c) 2009 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-import java.util.HashMap;\r
-import java.util.Map;\r
-import java.util.regex.Matcher;\r
-import java.util.regex.Pattern;\r
-\r
-/**\r
- * 村名一覧。\r
- */\r
-public enum VillageTag{\r
-\r
-    /** 平凡な村。 */\r
-    HEIBON        ("平凡な村"),\r
-    /** 星狩りの村。 */\r
-    HOSHIKARI     ("星狩りの村"),\r
-    /** 日の差さぬ村。 */\r
-    HINOSASANU    ("日の差さぬ村"),\r
-    /** 隠された村。 */\r
-    KAKUSARETA    ("隠された村"),\r
-    /** 日の沈まぬ村。 */\r
-    HINOSHIZUMANU ("日の沈まぬ村"),\r
-    /** 消え行く村。 */\r
-    KIEYUKU       ("消え行く村"),\r
-    /** 怪しげな村。 */\r
-    AYASHIGE      ("怪しげな村"),\r
-    /** 山影の村。 */\r
-    YAMAKAGE      ("山影の村"),\r
-    /** 平和な村。 */\r
-    HEIWA         ("平和な村"),\r
-    /** 嘘つきの村。 */\r
-    USOTSUKI      ("嘘つきの村"),\r
-    /** 悲しみの村。 */\r
-    KANASHIMI     ("悲しみの村"),\r
-    /** 恐ろしい村。 */\r
-    OSOROSHII     ("恐ろしい村"),\r
-    /** 盆地の村。 */\r
-    BONCHI        ("盆地の村"),\r
-    /** 幻の村。 */\r
-    MABOROSHI     ("幻の村"),\r
-    /** 謀略の村。 */\r
-    BOURYAKU      ("謀略の村"),\r
-    /** 最果ての村。 */\r
-    SAIHATE       ("最果ての村"),\r
-    /** 封印の村。 */\r
-    HUUIN         ("封印の村"),\r
-    /** 海辺の村。 */\r
-    UMIBE         ("海辺の村"),\r
-    /** 開拓者の村。 */\r
-    KAITAKUSHA    ("開拓者の村"),\r
-    /** 断崖の村。 */\r
-    DANGAI        ("断崖の村"),\r
-    /** 出会いの村。 */\r
-    DEAI          ("出会いの村"),\r
-    /** ふもとの村。 */\r
-    HUMOTO        ("ふもとの村"),\r
-    /** 峠の村。 */\r
-    TOUGE         ("峠の村"),\r
-    /** 血塗られた村。 */\r
-    CHINURARETA   ("血塗られた村"),\r
-    /** 僻地の村。 */\r
-    HEKICHI       ("僻地の村"),\r
-    /** 安らぎの村。 */\r
-    YASURAGI      ("安らぎの村"),\r
-    /** 最後の村。 */\r
-    SAIGO         ("最後の村"),\r
-    /** 疑心暗鬼の村。 */\r
-    GISHINANKI    ("疑心暗鬼の村"),\r
-    /** 呪われた村。 */\r
-    NOROWARETA    ("呪われた村"),\r
-    /** 新緑の村。 */\r
-    SHINRYOKU     ("新緑の村"),\r
-    /** 荒地の村。 */\r
-    ARECHI        ("荒地の村"),\r
-    /** 残された村。 */\r
-    NOKOSARETA    ("残された村"),\r
-    /** 小さな村。 */\r
-    CHIISANA      ("小さな村"),\r
-    /** 極寒の村。 */\r
-    GOKUKAN       ("極寒の村"),\r
-    /** 見捨てられた村。 */\r
-    MISUTERARETA  ("見捨てられた村"),\r
-    /** 希望の村。 */\r
-    KIBOU         ("希望の村"),\r
-    /** 裏切りの村。 */\r
-    URAGIRI       ("裏切りの村"),\r
-    /** 沈黙の村。 */\r
-    CHINMOKU      ("沈黙の村"),\r
-    /** 雨の止まぬ村。 */\r
-    AMENOYAMANU   ("雨の止まぬ村"),\r
-    /** 辺境の村。 */\r
-    HENKYOU       ("辺境の村"),\r
-    /** 忘れられた村。 */\r
-    WASURERARETA  ("忘れられた村"),\r
-    /** 谷底の村。 */\r
-    TANIZOKO      ("谷底の村"),\r
-    ;\r
-\r
-    private static final Map<String, VillageTag> TAGMAP =\r
-            new HashMap<String, VillageTag>();\r
-    private static final VillageTag[] VALUES = values();\r
-    private static final int VALUE_NUM = values().length;\r
-    private static final Pattern VTAG_PATTERN;\r
-\r
-    static{\r
-        for(VillageTag vtag : VALUES){\r
-            String tagName = vtag.getTagName();\r
-            TAGMAP.put(tagName, vtag);\r
-        }\r
-\r
-        StringBuilder vtagRegex = new StringBuilder();\r
-        for(VillageTag tag : values()){\r
-            if(vtagRegex.length() > 0){\r
-                vtagRegex.append('|');\r
-            }\r
-            vtagRegex.append('(')\r
-                     .append(Pattern.quote(tag.getTagName()))\r
-                     .append(')');\r
-        }\r
-        VTAG_PATTERN = Pattern.compile(vtagRegex.toString());\r
-    }\r
-\r
-\r
-    private final String tagName;\r
-\r
-\r
-    /**\r
-     * 隠しコンストラクタ。\r
-     * @param tagName 村名\r
-     */\r
-    private VillageTag(String tagName){\r
-        this.tagName = tagName.intern();\r
-        return;\r
-    }\r
-\r
-\r
-    /**\r
-     * 村名からEnumメンバを得る。\r
-     * @param tagName 村名\r
-     * @return Enumメンバ\r
-     */\r
-    public static VillageTag tagNameToVillageTag(String tagName){\r
-        VillageTag result = TAGMAP.get(tagName);\r
-        return result;\r
-    }\r
-\r
-    /**\r
-     * 与えられたマッチャ先頭がいずれかの村名に一致しないか調べる。\r
-     * @param matcher マッチャ\r
-     * @return 一致した村名。どれにも一致しなければnull。\r
-     */\r
-    public static VillageTag lookingAtVillageTag(Matcher matcher){\r
-        matcher.usePattern(VTAG_PATTERN);\r
-\r
-        if( ! matcher.lookingAt() ) return null;\r
-        int groupCt = matcher.groupCount();\r
-        for(int group = 1; group <= groupCt; group++){\r
-            if(matcher.start(group) >= 0){\r
-                VillageTag tag = values()[group - 1];\r
-                return tag;\r
-            }\r
-        }\r
-\r
-        return null;\r
-    }\r
-\r
-\r
-    /**\r
-     * 村名を得る。\r
-     * @return 村名\r
-     */\r
-    public String getTagName(){\r
-        return this.tagName;\r
-    }\r
-\r
-    /**\r
-     * 次のEnumメンバを得る。\r
-     * 先頭と末尾は循環する。\r
-     * @return 次のEnumメンバ\r
-     */\r
-    public VillageTag getNextVillageTag(){\r
-        int ordinal = ordinal();\r
-        ordinal = (ordinal+1) % VALUE_NUM;\r
-        VillageTag result = VALUES[ordinal];\r
-        return result;\r
-    }\r
-\r
-    /**\r
-     * 前のEnumメンバを得る。\r
-     * 先頭と末尾は循環する。\r
-     * @return 前のEnumメンバ\r
-     */\r
-    public VillageTag getPrevVillageTag(){\r
-        int ordinal = ordinal();\r
-        ordinal--;\r
-        if(ordinal < 0) ordinal += VALUE_NUM;\r
-        VillageTag result = VALUES[ordinal];\r
-        return result;\r
-    }\r
-\r
-}\r
+/*
+ * village tag-name
+ *
+ * License : The MIT License
+ * Copyright(c) 2009 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * 村名一覧。
+ */
+public enum VillageTag{
+
+    /** 平凡な村。 */
+    HEIBON        ("平凡な村"),
+    /** 星狩りの村。 */
+    HOSHIKARI     ("星狩りの村"),
+    /** 日の差さぬ村。 */
+    HINOSASANU    ("日の差さぬ村"),
+    /** 隠された村。 */
+    KAKUSARETA    ("隠された村"),
+    /** 日の沈まぬ村。 */
+    HINOSHIZUMANU ("日の沈まぬ村"),
+    /** 消え行く村。 */
+    KIEYUKU       ("消え行く村"),
+    /** 怪しげな村。 */
+    AYASHIGE      ("怪しげな村"),
+    /** 山影の村。 */
+    YAMAKAGE      ("山影の村"),
+    /** 平和な村。 */
+    HEIWA         ("平和な村"),
+    /** 嘘つきの村。 */
+    USOTSUKI      ("嘘つきの村"),
+    /** 悲しみの村。 */
+    KANASHIMI     ("悲しみの村"),
+    /** 恐ろしい村。 */
+    OSOROSHII     ("恐ろしい村"),
+    /** 盆地の村。 */
+    BONCHI        ("盆地の村"),
+    /** 幻の村。 */
+    MABOROSHI     ("幻の村"),
+    /** 謀略の村。 */
+    BOURYAKU      ("謀略の村"),
+    /** 最果ての村。 */
+    SAIHATE       ("最果ての村"),
+    /** 封印の村。 */
+    HUUIN         ("封印の村"),
+    /** 海辺の村。 */
+    UMIBE         ("海辺の村"),
+    /** 開拓者の村。 */
+    KAITAKUSHA    ("開拓者の村"),
+    /** 断崖の村。 */
+    DANGAI        ("断崖の村"),
+    /** 出会いの村。 */
+    DEAI          ("出会いの村"),
+    /** ふもとの村。 */
+    HUMOTO        ("ふもとの村"),
+    /** 峠の村。 */
+    TOUGE         ("峠の村"),
+    /** 血塗られた村。 */
+    CHINURARETA   ("血塗られた村"),
+    /** 僻地の村。 */
+    HEKICHI       ("僻地の村"),
+    /** 安らぎの村。 */
+    YASURAGI      ("安らぎの村"),
+    /** 最後の村。 */
+    SAIGO         ("最後の村"),
+    /** 疑心暗鬼の村。 */
+    GISHINANKI    ("疑心暗鬼の村"),
+    /** 呪われた村。 */
+    NOROWARETA    ("呪われた村"),
+    /** 新緑の村。 */
+    SHINRYOKU     ("新緑の村"),
+    /** 荒地の村。 */
+    ARECHI        ("荒地の村"),
+    /** 残された村。 */
+    NOKOSARETA    ("残された村"),
+    /** 小さな村。 */
+    CHIISANA      ("小さな村"),
+    /** 極寒の村。 */
+    GOKUKAN       ("極寒の村"),
+    /** 見捨てられた村。 */
+    MISUTERARETA  ("見捨てられた村"),
+    /** 希望の村。 */
+    KIBOU         ("希望の村"),
+    /** 裏切りの村。 */
+    URAGIRI       ("裏切りの村"),
+    /** 沈黙の村。 */
+    CHINMOKU      ("沈黙の村"),
+    /** 雨の止まぬ村。 */
+    AMENOYAMANU   ("雨の止まぬ村"),
+    /** 辺境の村。 */
+    HENKYOU       ("辺境の村"),
+    /** 忘れられた村。 */
+    WASURERARETA  ("忘れられた村"),
+    /** 谷底の村。 */
+    TANIZOKO      ("谷底の村"),
+    ;
+
+    private static final Map<String, VillageTag> TAGMAP =
+            new HashMap<String, VillageTag>();
+    private static final VillageTag[] VALUES = values();
+    private static final int VALUE_NUM = values().length;
+    private static final Pattern VTAG_PATTERN;
+
+    static{
+        for(VillageTag vtag : VALUES){
+            String tagName = vtag.getTagName();
+            TAGMAP.put(tagName, vtag);
+        }
+
+        StringBuilder vtagRegex = new StringBuilder();
+        for(VillageTag tag : values()){
+            if(vtagRegex.length() > 0){
+                vtagRegex.append('|');
+            }
+            vtagRegex.append('(')
+                     .append(Pattern.quote(tag.getTagName()))
+                     .append(')');
+        }
+        VTAG_PATTERN = Pattern.compile(vtagRegex.toString());
+    }
+
+
+    private final String tagName;
+
+
+    /**
+     * 隠しコンストラクタ。
+     * @param tagName 村名
+     */
+    private VillageTag(String tagName){
+        this.tagName = tagName.intern();
+        return;
+    }
+
+
+    /**
+     * 村名からEnumメンバを得る。
+     * @param tagName 村名
+     * @return Enumメンバ
+     */
+    public static VillageTag tagNameToVillageTag(String tagName){
+        VillageTag result = TAGMAP.get(tagName);
+        return result;
+    }
+
+    /**
+     * 与えられたマッチャ先頭がいずれかの村名に一致しないか調べる。
+     * @param matcher マッチャ
+     * @return 一致した村名。どれにも一致しなければnull。
+     */
+    public static VillageTag lookingAtVillageTag(Matcher matcher){
+        matcher.usePattern(VTAG_PATTERN);
+
+        if( ! matcher.lookingAt() ) return null;
+        int groupCt = matcher.groupCount();
+        for(int group = 1; group <= groupCt; group++){
+            if(matcher.start(group) >= 0){
+                VillageTag tag = values()[group - 1];
+                return tag;
+            }
+        }
+
+        return null;
+    }
+
+
+    /**
+     * 村名を得る。
+     * @return 村名
+     */
+    public String getTagName(){
+        return this.tagName;
+    }
+
+    /**
+     * 次のEnumメンバを得る。
+     * 先頭と末尾は循環する。
+     * @return 次のEnumメンバ
+     */
+    public VillageTag getNextVillageTag(){
+        int ordinal = ordinal();
+        ordinal = (ordinal+1) % VALUE_NUM;
+        VillageTag result = VALUES[ordinal];
+        return result;
+    }
+
+    /**
+     * 前のEnumメンバを得る。
+     * 先頭と末尾は循環する。
+     * @return 前のEnumメンバ
+     */
+    public VillageTag getPrevVillageTag(){
+        int ordinal = ordinal();
+        ordinal--;
+        if(ordinal < 0) ordinal += VALUE_NUM;
+        VillageTag result = VALUES[ordinal];
+        return result;
+    }
+
+}
index a1104b8..9d99155 100644 (file)
-/*\r
- * XML resources\r
- *\r
- * License : The MIT License\r
- * Copyright(c) 2009 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-import java.io.FileNotFoundException;\r
-import java.net.MalformedURLException;\r
-import java.net.URI;\r
-import java.net.URISyntaxException;\r
-import java.net.URL;\r
-import java.util.Collections;\r
-import java.util.HashMap;\r
-import java.util.Map;\r
-\r
-/**\r
- * このパッケージに含まれるXML関連の各種リソース、およびWeb上の原本。\r
- * 相対URIのベースはこのクラスのコードベース。\r
- */\r
-public final class XmlResource{\r
-\r
-    /** 独自XMLスキーマ 外部URI名の前置詞。 {@value} */\r
-    public static final String O_XSDBASE =\r
-            "http://jindolf.sourceforge.jp/xml/xsd/";\r
-    /** 独自XMLスキーマ 内部リソース名の前置詞。 {@value} */\r
-    public static final String I_XSDBASE = "resources/xsd/";\r
-    /** XML 内部リソース名の前置詞。 {@value} */\r
-    public static final String I_XMLBASE = "resources/xml/";\r
-\r
-    /** パブリックXMLスキーマ 外部URI名。 {@value} */\r
-    public static final String O_RES_EXTXML =\r
-            "http://www.w3.org/2001/xml.xsd";\r
-    /** 基本型定義XMLスキーマ 外部URI名。 {@value} */\r
-    public static final String O_RES_CORETYPE =\r
-            O_XSDBASE + "coreType-090829.xsd";\r
-    /** 文書定義XMLスキーマ 外部URI名。 {@value} */\r
-    public static final String O_RES_COREXML =\r
-            O_XSDBASE + "coreXML-090829.xsd";\r
-\r
-    /** パブリックXMLスキーマ 内部リソース名。 {@value} */\r
-    public static final String I_RES_EXTXML =\r
-            I_XSDBASE + "ext/xml-2009-01.xsd";\r
-    /** 基本型定義XMLスキーマ 内部リソース名。 {@value} */\r
-    public static final String I_RES_CORETYPE =\r
-            I_XSDBASE + "private/coreType-090829.xsd";\r
-    /** 文書定義XMLスキーマ 内部リソース名。 {@value} */\r
-    public static final String I_RES_COREXML =\r
-            I_XSDBASE + "private/coreXML-090829.xsd";\r
-\r
-    /** 国定義 内部リソース名。 {@value} */\r
-    public static final String I_RES_LANDDEF =\r
-            I_XMLBASE + "landDefList.xml";\r
-    /** キャラ定義 内部リソース名。 {@value} */\r
-    public static final String I_RES_AVATARDEF =\r
-            I_XMLBASE + "preDefAvatarList.xml";\r
-\r
-    /** パブリックXMLスキーマ 外部URI。 */\r
-    public static final URI O_URI_EXTXML;\r
-    /** 基本型定義XMLスキーマ 外部URI。 */\r
-    public static final URI O_URI_CORETYPE;\r
-    /** 文書定義XMLスキーマ 外部URI。 */\r
-    public static final URI O_URI_COREXML;\r
-\r
-    /** パブリックXMLスキーマ 内部リソースURI。 */\r
-    public static final URI I_URI_EXTXML;\r
-    /** 基本型定義XMLスキーマ 内部リソースURI。 */\r
-    public static final URI I_URI_CORETYPE;\r
-    /** 文書定義XMLスキーマ 内部リソースURI。 */\r
-    public static final URI I_URI_COREXML;\r
-\r
-    /** 国定義 内部リソースURI。 */\r
-    public static final URI I_URI_LANDDEF;\r
-    /** キャラ定義 内部リソースURI。 */\r
-    public static final URI I_URI_AVATARDEF;\r
-\r
-\r
-    /** 文書定義XMLスキーマ 内部リソースURL。 */\r
-    public static final URL I_URL_COREXML;\r
-    /** 国定義 内部リソースURL。 */\r
-    public static final URL I_URL_LANDDEF;\r
-    /** キャラ定義 内部リソースURL。 */\r
-    public static final URL I_URL_AVATARDEF;\r
-\r
-\r
-    /**\r
-     * Web上の原本からリソースへの変換を記述したマップ。\r
-     */\r
-    public static final Map<URI, URI> RESOLVE_MAP;\r
-\r
-\r
-    private static final Class<?> THISCLASS = XmlResource.class;\r
-\r
-\r
-    static{\r
-        new XmlResource();\r
-\r
-        O_URI_EXTXML   = loadOuter(O_RES_EXTXML);\r
-        O_URI_CORETYPE = loadOuter(O_RES_CORETYPE);\r
-        O_URI_COREXML  = loadOuter(O_RES_COREXML);\r
-\r
-        try{\r
-            I_URI_EXTXML    = loadInner(I_RES_EXTXML);\r
-            I_URI_CORETYPE  = loadInner(I_RES_CORETYPE);\r
-            I_URI_COREXML   = loadInner(I_RES_COREXML);\r
-            I_URI_LANDDEF   = loadInner(I_RES_LANDDEF);\r
-            I_URI_AVATARDEF = loadInner(I_RES_AVATARDEF);\r
-        }catch(FileNotFoundException e){\r
-            throw new ExceptionInInitializerError(e);\r
-        }catch(URISyntaxException e){\r
-            throw new ExceptionInInitializerError(e);\r
-        }\r
-\r
-        try{\r
-            I_URL_COREXML   = I_URI_COREXML.toURL();\r
-            I_URL_LANDDEF   = I_URI_LANDDEF.toURL();\r
-            I_URL_AVATARDEF = I_URI_AVATARDEF.toURL();\r
-        }catch(MalformedURLException e){\r
-            throw new ExceptionInInitializerError(e);\r
-        }\r
-\r
-        Map<URI, URI> map = new HashMap<URI, URI>();\r
-        map.put(O_URI_EXTXML,   I_URI_EXTXML);\r
-        map.put(O_URI_CORETYPE, I_URI_CORETYPE);\r
-        map.put(O_URI_COREXML,  I_URI_COREXML);\r
-        RESOLVE_MAP = Collections.unmodifiableMap(map);\r
-    }\r
-\r
-\r
-    /**\r
-     * 隠れコンストラクタ。\r
-     */\r
-    private XmlResource(){\r
-        super();\r
-        assert this.getClass().equals(THISCLASS);\r
-        return;\r
-    }\r
-\r
-\r
-    /**\r
-     * 内部リソースのURIを得る。\r
-     * @param res リソース名\r
-     * @return URI\r
-     * @throws FileNotFoundException リソースが見つからない。\r
-     * @throws URISyntaxException URI書式が変。\r
-     */\r
-    private static URI loadInner(String res)\r
-            throws FileNotFoundException,\r
-                   URISyntaxException {\r
-        URL url = THISCLASS.getResource(res);\r
-        if(url == null) throw new FileNotFoundException(res);\r
-        URI result = url.toURI().normalize();\r
-        return result;\r
-    }\r
-\r
-    /**\r
-     * 外部リソースのURIを得る。\r
-     * @param http 外部リソース名\r
-     * @return URI\r
-     */\r
-    private static URI loadOuter(String http){\r
-        URI uri = URI.create(http).normalize();\r
-        return uri;\r
-    }\r
-\r
-}\r
+/*
+ * XML resources
+ *
+ * License : The MIT License
+ * Copyright(c) 2009 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+import java.io.FileNotFoundException;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * このパッケージに含まれるXML関連の各種リソース、およびWeb上の原本。
+ * 相対URIのベースはこのクラスのコードベース。
+ */
+public final class XmlResource{
+
+    /** 独自XMLスキーマ 外部URI名の前置詞。 {@value} */
+    public static final String O_XSDBASE =
+            "http://jindolf.sourceforge.jp/xml/xsd/";
+    /** 独自XMLスキーマ 内部リソース名の前置詞。 {@value} */
+    public static final String I_XSDBASE = "resources/xsd/";
+    /** XML 内部リソース名の前置詞。 {@value} */
+    public static final String I_XMLBASE = "resources/xml/";
+
+    /** パブリックXMLスキーマ 外部URI名。 {@value} */
+    public static final String O_RES_EXTXML =
+            "http://www.w3.org/2001/xml.xsd";
+    /** 基本型定義XMLスキーマ 外部URI名。 {@value} */
+    public static final String O_RES_CORETYPE =
+            O_XSDBASE + "coreType-090829.xsd";
+    /** 文書定義XMLスキーマ 外部URI名。 {@value} */
+    public static final String O_RES_COREXML =
+            O_XSDBASE + "coreXML-090829.xsd";
+
+    /** パブリックXMLスキーマ 内部リソース名。 {@value} */
+    public static final String I_RES_EXTXML =
+            I_XSDBASE + "ext/xml-2009-01.xsd";
+    /** 基本型定義XMLスキーマ 内部リソース名。 {@value} */
+    public static final String I_RES_CORETYPE =
+            I_XSDBASE + "private/coreType-090829.xsd";
+    /** 文書定義XMLスキーマ 内部リソース名。 {@value} */
+    public static final String I_RES_COREXML =
+            I_XSDBASE + "private/coreXML-090829.xsd";
+
+    /** 国定義 内部リソース名。 {@value} */
+    public static final String I_RES_LANDDEF =
+            I_XMLBASE + "landDefList.xml";
+    /** キャラ定義 内部リソース名。 {@value} */
+    public static final String I_RES_AVATARDEF =
+            I_XMLBASE + "preDefAvatarList.xml";
+
+    /** パブリックXMLスキーマ 外部URI。 */
+    public static final URI O_URI_EXTXML;
+    /** 基本型定義XMLスキーマ 外部URI。 */
+    public static final URI O_URI_CORETYPE;
+    /** 文書定義XMLスキーマ 外部URI。 */
+    public static final URI O_URI_COREXML;
+
+    /** パブリックXMLスキーマ 内部リソースURI。 */
+    public static final URI I_URI_EXTXML;
+    /** 基本型定義XMLスキーマ 内部リソースURI。 */
+    public static final URI I_URI_CORETYPE;
+    /** 文書定義XMLスキーマ 内部リソースURI。 */
+    public static final URI I_URI_COREXML;
+
+    /** 国定義 内部リソースURI。 */
+    public static final URI I_URI_LANDDEF;
+    /** キャラ定義 内部リソースURI。 */
+    public static final URI I_URI_AVATARDEF;
+
+
+    /** 文書定義XMLスキーマ 内部リソースURL。 */
+    public static final URL I_URL_COREXML;
+    /** 国定義 内部リソースURL。 */
+    public static final URL I_URL_LANDDEF;
+    /** キャラ定義 内部リソースURL。 */
+    public static final URL I_URL_AVATARDEF;
+
+
+    /**
+     * Web上の原本からリソースへの変換を記述したマップ。
+     */
+    public static final Map<URI, URI> RESOLVE_MAP;
+
+
+    private static final Class<?> THISCLASS = XmlResource.class;
+
+
+    static{
+        new XmlResource();
+
+        O_URI_EXTXML   = loadOuter(O_RES_EXTXML);
+        O_URI_CORETYPE = loadOuter(O_RES_CORETYPE);
+        O_URI_COREXML  = loadOuter(O_RES_COREXML);
+
+        try{
+            I_URI_EXTXML    = loadInner(I_RES_EXTXML);
+            I_URI_CORETYPE  = loadInner(I_RES_CORETYPE);
+            I_URI_COREXML   = loadInner(I_RES_COREXML);
+            I_URI_LANDDEF   = loadInner(I_RES_LANDDEF);
+            I_URI_AVATARDEF = loadInner(I_RES_AVATARDEF);
+        }catch(FileNotFoundException e){
+            throw new ExceptionInInitializerError(e);
+        }catch(URISyntaxException e){
+            throw new ExceptionInInitializerError(e);
+        }
+
+        try{
+            I_URL_COREXML   = I_URI_COREXML.toURL();
+            I_URL_LANDDEF   = I_URI_LANDDEF.toURL();
+            I_URL_AVATARDEF = I_URI_AVATARDEF.toURL();
+        }catch(MalformedURLException e){
+            throw new ExceptionInInitializerError(e);
+        }
+
+        Map<URI, URI> map = new HashMap<URI, URI>();
+        map.put(O_URI_EXTXML,   I_URI_EXTXML);
+        map.put(O_URI_CORETYPE, I_URI_CORETYPE);
+        map.put(O_URI_COREXML,  I_URI_COREXML);
+        RESOLVE_MAP = Collections.unmodifiableMap(map);
+    }
+
+
+    /**
+     * 隠れコンストラクタ。
+     */
+    private XmlResource(){
+        super();
+        assert this.getClass().equals(THISCLASS);
+        return;
+    }
+
+
+    /**
+     * 内部リソースのURIを得る。
+     * @param res リソース名
+     * @return URI
+     * @throws FileNotFoundException リソースが見つからない。
+     * @throws URISyntaxException URI書式が変。
+     */
+    private static URI loadInner(String res)
+            throws FileNotFoundException,
+                   URISyntaxException {
+        URL url = THISCLASS.getResource(res);
+        if(url == null) throw new FileNotFoundException(res);
+        URI result = url.toURI().normalize();
+        return result;
+    }
+
+    /**
+     * 外部リソースのURIを得る。
+     * @param http 外部リソース名
+     * @return URI
+     */
+    private static URI loadOuter(String http){
+        URI uri = URI.create(http).normalize();
+        return uri;
+    }
+
+}
index 0cd4758..90d95b2 100644 (file)
@@ -1,62 +1,62 @@
-/*\r
- * Jindolf core パッケージコメント\r
- *\r
- * このファイルは、SunJDK5.0以降に含まれるJavadoc用に用意された、\r
- * 特別な名前を持つソースファイルです。\r
- * このファイルはソースコードを含まず、\r
- * パッケージコメントとパッケージ宣言のみが含まれます。\r
- *\r
- * License : The MIT License\r
- * Copyright(c) 2008 olyutorskii\r
- */\r
-\r
-/**\r
- * このライブラリ「JinCore」は、\r
- * Jindolf プロジェクトのコア共通部分を構成するパッケージです。\r
- *\r
- * Jindolfは、CGIゲーム「人狼BBS」の専用クライアント開発プロジェクトです。\r
- *\r
- * JinCoreライブラリは、Jindolf以外の人狼BBSクライアント制作者向けに、\r
- * Jindolfの機能の一部を提供することを目的に発足した、派生プロジェクトです。\r
- *\r
- * <hr>\r
- *\r
- * <p>\r
- * The MIT License\r
- * </p>\r
- * <p>\r
- * Copyright(c) 2009 olyutorskii\r
- * </p>\r
- * <p>\r
- * Permission is hereby granted, free of charge, to any person obtaining a\r
- * copy of this software and associated documentation files (the "Software"),\r
- * to deal in the Software without restriction, including without limitation\r
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
- * and/or sell copies of the Software, and to permit persons to whom the\r
- * Software is furnished to do so, subject to the following conditions:\r
- * </p>\r
- * <p>\r
- * The above copyright notice and this permission notice shall be included in\r
- * all copies or substantial portions of the Software.\r
- * </p>\r
- * <p>\r
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,\r
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\r
- * OTHER DEALINGS IN THE SOFTWARE.\r
- * </p>\r
- *\r
- * <hr>\r
- *\r
- * @see <a href="http://jindolf.sourceforge.jp/">\r
- * Jindolfポータルサイト</a>\r
- * @see <a href="http://sourceforge.jp/projects/jindolf/devel/">\r
- * Jindolf開発プロジェクト</a>\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-/* EOF */\r
+/*
+ * Jindolf core パッケージコメント
+ *
+ * このファイルは、SunJDK5.0以降に含まれるJavadoc用に用意された、
+ * 特別な名前を持つソースファイルです。
+ * このファイルはソースコードを含まず、
+ * パッケージコメントとパッケージ宣言のみが含まれます。
+ *
+ * License : The MIT License
+ * Copyright(c) 2008 olyutorskii
+ */
+
+/**
+ * このライブラリ「JinCore」は、
+ * Jindolf プロジェクトのコア共通部分を構成するパッケージです。
+ *
+ * Jindolfは、CGIゲーム「人狼BBS」の専用クライアント開発プロジェクトです。
+ *
+ * JinCoreライブラリは、Jindolf以外の人狼BBSクライアント制作者向けに、
+ * Jindolfの機能の一部を提供することを目的に発足した、派生プロジェクトです。
+ *
+ * <hr>
+ *
+ * <p>
+ * The MIT License
+ * </p>
+ * <p>
+ * Copyright(c) 2009 olyutorskii
+ * </p>
+ * <p>
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ * </p>
+ * <p>
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ * </p>
+ * <p>
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ * </p>
+ *
+ * <hr>
+ *
+ * @see <a href="http://jindolf.sourceforge.jp/">
+ * Jindolfポータルサイト</a>
+ * @see <a href="http://sourceforge.jp/projects/jindolf/devel/">
+ * Jindolf開発プロジェクト</a>
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+/* EOF */
index 0c45733..7b804a9 100644 (file)
-/*\r
- * License : The MIT License\r
- * Copyright(c) 2011 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-import java.util.GregorianCalendar;\r
-import java.util.TimeZone;\r
-import org.junit.After;\r
-import org.junit.AfterClass;\r
-import org.junit.Before;\r
-import org.junit.BeforeClass;\r
-import org.junit.Test;\r
-import static org.junit.Assert.*;\r
-\r
-/**\r
- *\r
- */\r
-public class DateUtilsTest {\r
-\r
-    public DateUtilsTest() {\r
-    }\r
-\r
-    @BeforeClass\r
-    public static void setUpClass() throws Exception {\r
-    }\r
-\r
-    @AfterClass\r
-    public static void tearDownClass() throws Exception {\r
-    }\r
-\r
-    @Before\r
-    public void setUp() {\r
-    }\r
-\r
-    @After\r
-    public void tearDown() {\r
-    }\r
-\r
-    /**\r
-     * Test of parseISO8601 method, of class LandDef.\r
-     */\r
-    @Test\r
-    public void testParseISO8601(){\r
-        System.out.println("parseISO8601");\r
-\r
-        CharSequence seq;\r
-        long result;\r
-\r
-        GregorianCalendar cal;\r
-        cal = new GregorianCalendar();\r
-        cal.clear();\r
-\r
-        TimeZone tz;\r
-        tz = TimeZone.getTimeZone("GMT+00");\r
-        cal.setTimeZone(tz);\r
-\r
-        seq = "1990-01-01T00:00:00Z";\r
-        result = DateUtils.parseISO8601(seq);\r
-        cal.set(1990, 1-1, 1, 0, 0, 0);\r
-        assertEquals(cal.getTimeInMillis(), result);\r
-\r
-        seq = "1991-02-03T04:05:06Z";\r
-        result = DateUtils.parseISO8601(seq);\r
-        cal.set(1991, 2-1, 3, 4, 5, 6);\r
-        assertEquals(cal.getTimeInMillis(), result);\r
-\r
-        seq = "2099-12-31T23:59:59Z";\r
-        result = DateUtils.parseISO8601(seq);\r
-        cal.set(2099, 12-1, 31, 23, 59, 59);\r
-        assertEquals(cal.getTimeInMillis(), result);\r
-\r
-        seq = "1991-02-03T04:05:06+23";\r
-        result = DateUtils.parseISO8601(seq);\r
-        tz = TimeZone.getTimeZone("GMT+23");\r
-        cal.setTimeZone(tz);\r
-        cal.set(1991, 2-1, 3, 4, 5, 6);\r
-        assertEquals(cal.getTimeInMillis(), result);\r
-\r
-        seq = "1991-02-03T04:05:06-23";\r
-        result = DateUtils.parseISO8601(seq);\r
-        tz = TimeZone.getTimeZone("GMT-23");\r
-        cal.setTimeZone(tz);\r
-        cal.set(1991, 2-1, 3, 4, 5, 6);\r
-        assertEquals(cal.getTimeInMillis(), result);\r
-\r
-        seq = "1991-02-03T04:05:06+2345";\r
-        result = DateUtils.parseISO8601(seq);\r
-        tz = TimeZone.getTimeZone("GMT+2345");\r
-        cal.setTimeZone(tz);\r
-        cal.set(1991, 2-1, 3, 4, 5, 6);\r
-        assertEquals(cal.getTimeInMillis(), result);\r
-\r
-        seq = "1991-02-03T04:05:06+23:45";\r
-        result = DateUtils.parseISO8601(seq);\r
-        tz = TimeZone.getTimeZone("GMT+2345");\r
-        cal.setTimeZone(tz);\r
-        cal.set(1991, 2-1, 3, 4, 5, 6);\r
-        assertEquals(cal.getTimeInMillis(), result);\r
-\r
-        seq = "!!!";\r
-        try{\r
-            result = DateUtils.parseISO8601(seq);\r
-            fail();\r
-        }catch(IllegalArgumentException e){\r
-            // GOOD\r
-        }\r
-\r
-        return;\r
-    }\r
-\r
-}\r
+/*
+ * License : The MIT License
+ * Copyright(c) 2011 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+import java.util.GregorianCalendar;
+import java.util.TimeZone;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+/**
+ *
+ */
+public class DateUtilsTest {
+
+    public DateUtilsTest() {
+    }
+
+    @BeforeClass
+    public static void setUpClass() throws Exception {
+    }
+
+    @AfterClass
+    public static void tearDownClass() throws Exception {
+    }
+
+    @Before
+    public void setUp() {
+    }
+
+    @After
+    public void tearDown() {
+    }
+
+    /**
+     * Test of parseISO8601 method, of class LandDef.
+     */
+    @Test
+    public void testParseISO8601(){
+        System.out.println("parseISO8601");
+
+        CharSequence seq;
+        long result;
+
+        GregorianCalendar cal;
+        cal = new GregorianCalendar();
+        cal.clear();
+
+        TimeZone tz;
+        tz = TimeZone.getTimeZone("GMT+00");
+        cal.setTimeZone(tz);
+
+        seq = "1990-01-01T00:00:00Z";
+        result = DateUtils.parseISO8601(seq);
+        cal.set(1990, 1-1, 1, 0, 0, 0);
+        assertEquals(cal.getTimeInMillis(), result);
+
+        seq = "1991-02-03T04:05:06Z";
+        result = DateUtils.parseISO8601(seq);
+        cal.set(1991, 2-1, 3, 4, 5, 6);
+        assertEquals(cal.getTimeInMillis(), result);
+
+        seq = "2099-12-31T23:59:59Z";
+        result = DateUtils.parseISO8601(seq);
+        cal.set(2099, 12-1, 31, 23, 59, 59);
+        assertEquals(cal.getTimeInMillis(), result);
+
+        seq = "1991-02-03T04:05:06+23";
+        result = DateUtils.parseISO8601(seq);
+        tz = TimeZone.getTimeZone("GMT+23");
+        cal.setTimeZone(tz);
+        cal.set(1991, 2-1, 3, 4, 5, 6);
+        assertEquals(cal.getTimeInMillis(), result);
+
+        seq = "1991-02-03T04:05:06-23";
+        result = DateUtils.parseISO8601(seq);
+        tz = TimeZone.getTimeZone("GMT-23");
+        cal.setTimeZone(tz);
+        cal.set(1991, 2-1, 3, 4, 5, 6);
+        assertEquals(cal.getTimeInMillis(), result);
+
+        seq = "1991-02-03T04:05:06+2345";
+        result = DateUtils.parseISO8601(seq);
+        tz = TimeZone.getTimeZone("GMT+2345");
+        cal.setTimeZone(tz);
+        cal.set(1991, 2-1, 3, 4, 5, 6);
+        assertEquals(cal.getTimeInMillis(), result);
+
+        seq = "1991-02-03T04:05:06+23:45";
+        result = DateUtils.parseISO8601(seq);
+        tz = TimeZone.getTimeZone("GMT+2345");
+        cal.setTimeZone(tz);
+        cal.set(1991, 2-1, 3, 4, 5, 6);
+        assertEquals(cal.getTimeInMillis(), result);
+
+        seq = "!!!";
+        try{
+            result = DateUtils.parseISO8601(seq);
+            fail();
+        }catch(IllegalArgumentException e){
+            // GOOD
+        }
+
+        return;
+    }
+
+}
index d708afe..8929934 100644 (file)
@@ -1,72 +1,72 @@
-/*\r
- * License : The MIT License\r
- * Copyright(c) 2009 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-import org.junit.After;\r
-import org.junit.AfterClass;\r
-import org.junit.Before;\r
-import org.junit.BeforeClass;\r
-import org.junit.Test;\r
-import static org.junit.Assert.*;\r
-\r
-/**\r
- */\r
-public class DestinyTest {\r
-\r
-    public DestinyTest() {\r
-    }\r
-\r
-    @BeforeClass\r
-    public static void setUpClass() throws Exception{\r
-    }\r
-\r
-    @AfterClass\r
-    public static void tearDownClass() throws Exception{\r
-    }\r
-\r
-    @Before\r
-    public void setUp() {\r
-    }\r
-\r
-    @After\r
-    public void tearDown() {\r
-    }\r
-\r
-    /**\r
-     * Test of values method, of class Destiny.\r
-     */\r
-    @Test\r
-    public void testValues(){\r
-        System.out.println("values");\r
-        Destiny[] values = Destiny.values();\r
-        assertEquals(5, values.length);\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of valueOf method, of class Destiny.\r
-     */\r
-    @Test\r
-    public void testValueOf(){\r
-        // NOTHING\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getMessage method, of class Destiny.\r
-     */\r
-    @Test\r
-    public void testGetMessage(){\r
-        System.out.println("getMessage");\r
-        assertEquals("生存",     Destiny.ALIVE.getMessage());\r
-        assertEquals("突然死",   Destiny.SUDDENDEATH.getMessage());\r
-        assertEquals("処刑死",   Destiny.EXECUTED.getMessage());\r
-        assertEquals("襲撃死",   Destiny.EATEN.getMessage());\r
-        assertEquals("ハム溶け", Destiny.DISSOLVE.getMessage());\r
-        return;\r
-    }\r
-\r
-}\r
+/*
+ * License : The MIT License
+ * Copyright(c) 2009 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+/**
+ */
+public class DestinyTest {
+
+    public DestinyTest() {
+    }
+
+    @BeforeClass
+    public static void setUpClass() throws Exception{
+    }
+
+    @AfterClass
+    public static void tearDownClass() throws Exception{
+    }
+
+    @Before
+    public void setUp() {
+    }
+
+    @After
+    public void tearDown() {
+    }
+
+    /**
+     * Test of values method, of class Destiny.
+     */
+    @Test
+    public void testValues(){
+        System.out.println("values");
+        Destiny[] values = Destiny.values();
+        assertEquals(5, values.length);
+        return;
+    }
+
+    /**
+     * Test of valueOf method, of class Destiny.
+     */
+    @Test
+    public void testValueOf(){
+        // NOTHING
+        return;
+    }
+
+    /**
+     * Test of getMessage method, of class Destiny.
+     */
+    @Test
+    public void testGetMessage(){
+        System.out.println("getMessage");
+        assertEquals("生存",     Destiny.ALIVE.getMessage());
+        assertEquals("突然死",   Destiny.SUDDENDEATH.getMessage());
+        assertEquals("処刑死",   Destiny.EXECUTED.getMessage());
+        assertEquals("襲撃死",   Destiny.EATEN.getMessage());
+        assertEquals("ハム溶け", Destiny.DISSOLVE.getMessage());
+        return;
+    }
+
+}
index 7c1b439..63bd611 100644 (file)
@@ -1,70 +1,70 @@
-/*\r
- * License : The MIT License\r
- * Copyright(c) 2009 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-import org.junit.After;\r
-import org.junit.AfterClass;\r
-import org.junit.Before;\r
-import org.junit.BeforeClass;\r
-import org.junit.Test;\r
-import static org.junit.Assert.*;\r
-\r
-/**\r
- */\r
-public class DisclosureTypeTest{\r
-\r
-    public DisclosureTypeTest(){\r
-    }\r
-\r
-    @BeforeClass\r
-    public static void setUpClass() throws Exception{\r
-    }\r
-\r
-    @AfterClass\r
-    public static void tearDownClass() throws Exception{\r
-    }\r
-\r
-    @Before\r
-    public void setUp(){\r
-    }\r
-\r
-    @After\r
-    public void tearDown(){\r
-    }\r
-\r
-    /**\r
-     * Test of values method, of class DisclosureType.\r
-     */\r
-    @Test\r
-    public void testValues(){\r
-        System.out.println("values");\r
-        DisclosureType[] types = DisclosureType.values();\r
-        assertEquals(3, types.length);\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of valueOf method, of class DisclosureType.\r
-     */\r
-    @Test\r
-    public void testValueOf(){\r
-        // NOTHING\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getXmlName method, of class DisclosureType.\r
-     */\r
-    @Test\r
-    public void testGetXmlName(){\r
-        System.out.println("getXmlName");\r
-        assertEquals("complete", DisclosureType.COMPLETE.getXmlName());\r
-        assertEquals("uncomplete", DisclosureType.UNCOMPLETE.getXmlName());\r
-        assertEquals("hot", DisclosureType.HOT.getXmlName());\r
-        return;\r
-    }\r
-\r
-}\r
+/*
+ * License : The MIT License
+ * Copyright(c) 2009 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+/**
+ */
+public class DisclosureTypeTest{
+
+    public DisclosureTypeTest(){
+    }
+
+    @BeforeClass
+    public static void setUpClass() throws Exception{
+    }
+
+    @AfterClass
+    public static void tearDownClass() throws Exception{
+    }
+
+    @Before
+    public void setUp(){
+    }
+
+    @After
+    public void tearDown(){
+    }
+
+    /**
+     * Test of values method, of class DisclosureType.
+     */
+    @Test
+    public void testValues(){
+        System.out.println("values");
+        DisclosureType[] types = DisclosureType.values();
+        assertEquals(3, types.length);
+        return;
+    }
+
+    /**
+     * Test of valueOf method, of class DisclosureType.
+     */
+    @Test
+    public void testValueOf(){
+        // NOTHING
+        return;
+    }
+
+    /**
+     * Test of getXmlName method, of class DisclosureType.
+     */
+    @Test
+    public void testGetXmlName(){
+        System.out.println("getXmlName");
+        assertEquals("complete", DisclosureType.COMPLETE.getXmlName());
+        assertEquals("uncomplete", DisclosureType.UNCOMPLETE.getXmlName());
+        assertEquals("hot", DisclosureType.HOT.getXmlName());
+        return;
+    }
+
+}
index ed26d9a..35e77ec 100644 (file)
@@ -1,82 +1,82 @@
-/*\r
- * License : The MIT License\r
- * Copyright(c) 2009 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-import org.junit.After;\r
-import org.junit.AfterClass;\r
-import org.junit.Before;\r
-import org.junit.BeforeClass;\r
-import org.junit.Test;\r
-import static org.junit.Assert.*;\r
-\r
-/**\r
- */\r
-public class EventFamilyTest {\r
-\r
-    public EventFamilyTest() {\r
-    }\r
-\r
-    @BeforeClass\r
-    public static void setUpClass() throws Exception{\r
-    }\r
-\r
-    @AfterClass\r
-    public static void tearDownClass() throws Exception{\r
-    }\r
-\r
-    @Before\r
-    public void setUp() {\r
-    }\r
-\r
-    @After\r
-    public void tearDown() {\r
-    }\r
-\r
-    /**\r
-     * Test of values method, of class EventFamily.\r
-     */\r
-    @Test\r
-    public void testValues(){\r
-        System.out.println("values");\r
-        EventFamily[] values = EventFamily.values();\r
-        assertEquals(3, values.length);\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of valueOf method, of class EventFamily.\r
-     */\r
-    @Test\r
-    public void testValueOf(){\r
-        // NOTHING\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getDivClass method, of class EventFamily.\r
-     */\r
-    @Test\r
-    public void testGetDivClass(){\r
-        System.out.println("getDivClass");\r
-        assertEquals("announce", EventFamily.ANNOUNCE.getDivClass());\r
-        assertEquals("order",    EventFamily.ORDER.getDivClass());\r
-        assertEquals("extra",    EventFamily.EXTRA.getDivClass());\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getXmlName method, of class EventFamily.\r
-     */\r
-    @Test\r
-    public void testGetXmlName(){\r
-        System.out.println("getXmlName");\r
-        assertEquals(EventFamily.ANNOUNCE.getXmlName(), EventFamily.ANNOUNCE.getDivClass());\r
-        assertEquals(EventFamily.ORDER.getXmlName(),    EventFamily.ORDER.getDivClass());\r
-        assertEquals(EventFamily.EXTRA.getXmlName(),    EventFamily.EXTRA.getDivClass());\r
-        return;\r
-    }\r
-\r
-}\r
+/*
+ * License : The MIT License
+ * Copyright(c) 2009 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+/**
+ */
+public class EventFamilyTest {
+
+    public EventFamilyTest() {
+    }
+
+    @BeforeClass
+    public static void setUpClass() throws Exception{
+    }
+
+    @AfterClass
+    public static void tearDownClass() throws Exception{
+    }
+
+    @Before
+    public void setUp() {
+    }
+
+    @After
+    public void tearDown() {
+    }
+
+    /**
+     * Test of values method, of class EventFamily.
+     */
+    @Test
+    public void testValues(){
+        System.out.println("values");
+        EventFamily[] values = EventFamily.values();
+        assertEquals(3, values.length);
+        return;
+    }
+
+    /**
+     * Test of valueOf method, of class EventFamily.
+     */
+    @Test
+    public void testValueOf(){
+        // NOTHING
+        return;
+    }
+
+    /**
+     * Test of getDivClass method, of class EventFamily.
+     */
+    @Test
+    public void testGetDivClass(){
+        System.out.println("getDivClass");
+        assertEquals("announce", EventFamily.ANNOUNCE.getDivClass());
+        assertEquals("order",    EventFamily.ORDER.getDivClass());
+        assertEquals("extra",    EventFamily.EXTRA.getDivClass());
+        return;
+    }
+
+    /**
+     * Test of getXmlName method, of class EventFamily.
+     */
+    @Test
+    public void testGetXmlName(){
+        System.out.println("getXmlName");
+        assertEquals(EventFamily.ANNOUNCE.getXmlName(), EventFamily.ANNOUNCE.getDivClass());
+        assertEquals(EventFamily.ORDER.getXmlName(),    EventFamily.ORDER.getDivClass());
+        assertEquals(EventFamily.EXTRA.getXmlName(),    EventFamily.EXTRA.getDivClass());
+        return;
+    }
+
+}
index 0dcff90..4fae32b 100644 (file)
-/*\r
- * License : The MIT License\r
- * Copyright(c) 2009 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-import java.util.Comparator;\r
-import java.util.regex.Matcher;\r
-import java.util.regex.Pattern;\r
-import org.junit.After;\r
-import org.junit.AfterClass;\r
-import org.junit.Before;\r
-import org.junit.BeforeClass;\r
-import org.junit.Test;\r
-import static org.junit.Assert.*;\r
-\r
-/**\r
- */\r
-public class GameRoleTest {\r
-\r
-    public GameRoleTest() {\r
-    }\r
-\r
-    @BeforeClass\r
-    public static void setUpClass() throws Exception{\r
-    }\r
-\r
-    @AfterClass\r
-    public static void tearDownClass() throws Exception{\r
-    }\r
-\r
-    @Before\r
-    public void setUp() {\r
-    }\r
-\r
-    @After\r
-    public void tearDown() {\r
-    }\r
-\r
-    /**\r
-     * Test of values method, of class GameRole.\r
-     */\r
-    @Test\r
-    public void testValues(){\r
-        System.out.println("values");\r
-        GameRole[] values = GameRole.values();\r
-        assertEquals(8, values.length);\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of valueOf method, of class GameRole.\r
-     */\r
-    @Test\r
-    public void testValueOf(){\r
-        // NOTHING\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of lookingAtRole method, of class GameRole.\r
-     */\r
-    @Test\r
-    public void testLookingAtRole(){\r
-        System.out.println("lookingAtRole");\r
-\r
-        Pattern pattern = Pattern.compile("");\r
-\r
-        Matcher matcher;\r
-\r
-        matcher = pattern.matcher("村人");\r
-        assertEquals(GameRole.INNOCENT, GameRole.lookingAtRole(matcher));\r
-\r
-        matcher = pattern.matcher("人狼");\r
-        assertEquals(GameRole.WOLF, GameRole.lookingAtRole(matcher));\r
-\r
-        matcher = pattern.matcher("占い師");\r
-        assertEquals(GameRole.SEER, GameRole.lookingAtRole(matcher));\r
-\r
-        matcher = pattern.matcher("霊能者");\r
-        assertEquals(GameRole.SHAMAN, GameRole.lookingAtRole(matcher));\r
-\r
-        matcher = pattern.matcher("狂人");\r
-        assertEquals(GameRole.MADMAN, GameRole.lookingAtRole(matcher));\r
-\r
-        matcher = pattern.matcher("狩人");\r
-        assertEquals(GameRole.HUNTER, GameRole.lookingAtRole(matcher));\r
-\r
-        matcher = pattern.matcher("共有者");\r
-        assertEquals(GameRole.FRATER, GameRole.lookingAtRole(matcher));\r
-\r
-        matcher = pattern.matcher("ハムスター人間");\r
-        assertEquals(GameRole.HAMSTER, GameRole.lookingAtRole(matcher));\r
-\r
-        matcher = pattern.matcher("xxx");\r
-        assertNull(GameRole.lookingAtRole(matcher));\r
-\r
-        matcher = pattern.matcher("");\r
-        assertNull(GameRole.lookingAtRole(matcher));\r
-\r
-        matcher = pattern.matcher("x村人");\r
-        assertNull(GameRole.lookingAtRole(matcher));\r
-\r
-        matcher = pattern.matcher("村");\r
-        assertNull(GameRole.lookingAtRole(matcher));\r
-\r
-        matcher = pattern.matcher("村人x");\r
-        assertEquals(GameRole.INNOCENT, GameRole.lookingAtRole(matcher));\r
-\r
-        matcher = pattern.matcher("x村人x");\r
-        assertNull(GameRole.lookingAtRole(matcher));\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getPowerBalanceComparator method, of class GameRole.\r
-     */\r
-    @Test\r
-    public void testGetPowerBalanceComparator(){\r
-        System.out.println("getPowerBalanceComparator");\r
-\r
-        Comparator<GameRole> cmp = GameRole.getPowerBalanceComparator();\r
-        assertNotNull(cmp);\r
-        Comparator<GameRole> cmp2 = GameRole.getPowerBalanceComparator();\r
-        assertTrue(cmp == cmp2);\r
-\r
-        assertTrue(cmp.compare(GameRole.INNOCENT, GameRole.INNOCENT) == 0);\r
-        assertTrue(cmp.compare(GameRole.INNOCENT, GameRole.FRATER) < 0);\r
-        assertTrue(cmp.compare(GameRole.FRATER, GameRole.SEER) < 0);\r
-        assertTrue(cmp.compare(GameRole.SEER, GameRole.SHAMAN) < 0);\r
-        assertTrue(cmp.compare(GameRole.SHAMAN, GameRole.HUNTER) < 0);\r
-        assertTrue(cmp.compare(GameRole.HUNTER, GameRole.HAMSTER) < 0);\r
-        assertTrue(cmp.compare(GameRole.HAMSTER, GameRole.MADMAN) < 0);\r
-        assertTrue(cmp.compare(GameRole.MADMAN, GameRole.WOLF) < 0);\r
-        assertTrue(cmp.compare(GameRole.WOLF, GameRole.INNOCENT) > 0);\r
-        assertTrue(cmp.compare(GameRole.FRATER, GameRole.INNOCENT) > 0);\r
-\r
-        assertTrue(cmp.compare(null, null) == 0);\r
-        assertTrue(cmp.compare(GameRole.INNOCENT, null) > 0);\r
-        assertTrue(cmp.compare(null, GameRole.INNOCENT) < 0);\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getRoleName method, of class GameRole.\r
-     */\r
-    @Test\r
-    public void testGetRoleName(){\r
-        System.out.println("getRoleName");\r
-        assertEquals("村人", GameRole.INNOCENT.getRoleName());\r
-        assertEquals("人狼", GameRole.WOLF.getRoleName());\r
-        assertEquals("占い師", GameRole.SEER.getRoleName());\r
-        assertEquals("霊能者", GameRole.SHAMAN.getRoleName());\r
-        assertEquals("狂人", GameRole.MADMAN.getRoleName());\r
-        assertEquals("狩人", GameRole.HUNTER.getRoleName());\r
-        assertEquals("共有者", GameRole.FRATER.getRoleName());\r
-        assertEquals("ハムスター人間", GameRole.HAMSTER.getRoleName());\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getShortName method, of class GameRole.\r
-     */\r
-    @Test\r
-    public void testGetShortName(){\r
-        System.out.println("getShortName");\r
-        assertEquals('村', GameRole.INNOCENT.getShortName());\r
-        assertEquals('狼', GameRole.WOLF.getShortName());\r
-        assertEquals('占', GameRole.SEER.getShortName());\r
-        assertEquals('霊', GameRole.SHAMAN.getShortName());\r
-        assertEquals('狂', GameRole.MADMAN.getShortName());\r
-        assertEquals('狩', GameRole.HUNTER.getShortName());\r
-        assertEquals('共', GameRole.FRATER.getShortName());\r
-        assertEquals('公', GameRole.HAMSTER.getShortName());\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getTeam method, of class GameRole.\r
-     */\r
-    @Test\r
-    public void testGetTeam(){\r
-        System.out.println("getTeam");\r
-        assertEquals(Team.VILLAGE, GameRole.INNOCENT.getTeam());\r
-        assertEquals(Team.WOLF,    GameRole.WOLF.getTeam());\r
-        assertEquals(Team.VILLAGE, GameRole.SEER.getTeam());\r
-        assertEquals(Team.VILLAGE, GameRole.SHAMAN.getTeam());\r
-        assertEquals(Team.WOLF,    GameRole.MADMAN.getTeam());\r
-        assertEquals(Team.VILLAGE, GameRole.HUNTER.getTeam());\r
-        assertEquals(Team.VILLAGE, GameRole.FRATER.getTeam());\r
-        assertEquals(Team.HAMSTER, GameRole.HAMSTER.getTeam());\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getXmlName method, of class GameRole.\r
-     */\r
-    @Test\r
-    public void testGetXmlName() {\r
-        System.out.println("getXmlName");\r
-        assertEquals("innocent", GameRole.INNOCENT.getXmlName());\r
-        assertEquals("wolf", GameRole.WOLF.getXmlName());\r
-        assertEquals("seer", GameRole.SEER.getXmlName());\r
-        assertEquals("shaman", GameRole.SHAMAN.getXmlName());\r
-        assertEquals("madman", GameRole.MADMAN.getXmlName());\r
-        assertEquals("hunter", GameRole.HUNTER.getXmlName());\r
-        assertEquals("frater", GameRole.FRATER.getXmlName());\r
-        assertEquals("hamster", GameRole.HAMSTER.getXmlName());\r
-        return;\r
-    }\r
-\r
-}\r
+/*
+ * License : The MIT License
+ * Copyright(c) 2009 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+import java.util.Comparator;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+/**
+ */
+public class GameRoleTest {
+
+    public GameRoleTest() {
+    }
+
+    @BeforeClass
+    public static void setUpClass() throws Exception{
+    }
+
+    @AfterClass
+    public static void tearDownClass() throws Exception{
+    }
+
+    @Before
+    public void setUp() {
+    }
+
+    @After
+    public void tearDown() {
+    }
+
+    /**
+     * Test of values method, of class GameRole.
+     */
+    @Test
+    public void testValues(){
+        System.out.println("values");
+        GameRole[] values = GameRole.values();
+        assertEquals(8, values.length);
+        return;
+    }
+
+    /**
+     * Test of valueOf method, of class GameRole.
+     */
+    @Test
+    public void testValueOf(){
+        // NOTHING
+        return;
+    }
+
+    /**
+     * Test of lookingAtRole method, of class GameRole.
+     */
+    @Test
+    public void testLookingAtRole(){
+        System.out.println("lookingAtRole");
+
+        Pattern pattern = Pattern.compile("");
+
+        Matcher matcher;
+
+        matcher = pattern.matcher("村人");
+        assertEquals(GameRole.INNOCENT, GameRole.lookingAtRole(matcher));
+
+        matcher = pattern.matcher("人狼");
+        assertEquals(GameRole.WOLF, GameRole.lookingAtRole(matcher));
+
+        matcher = pattern.matcher("占い師");
+        assertEquals(GameRole.SEER, GameRole.lookingAtRole(matcher));
+
+        matcher = pattern.matcher("霊能者");
+        assertEquals(GameRole.SHAMAN, GameRole.lookingAtRole(matcher));
+
+        matcher = pattern.matcher("狂人");
+        assertEquals(GameRole.MADMAN, GameRole.lookingAtRole(matcher));
+
+        matcher = pattern.matcher("狩人");
+        assertEquals(GameRole.HUNTER, GameRole.lookingAtRole(matcher));
+
+        matcher = pattern.matcher("共有者");
+        assertEquals(GameRole.FRATER, GameRole.lookingAtRole(matcher));
+
+        matcher = pattern.matcher("ハムスター人間");
+        assertEquals(GameRole.HAMSTER, GameRole.lookingAtRole(matcher));
+
+        matcher = pattern.matcher("xxx");
+        assertNull(GameRole.lookingAtRole(matcher));
+
+        matcher = pattern.matcher("");
+        assertNull(GameRole.lookingAtRole(matcher));
+
+        matcher = pattern.matcher("x村人");
+        assertNull(GameRole.lookingAtRole(matcher));
+
+        matcher = pattern.matcher("村");
+        assertNull(GameRole.lookingAtRole(matcher));
+
+        matcher = pattern.matcher("村人x");
+        assertEquals(GameRole.INNOCENT, GameRole.lookingAtRole(matcher));
+
+        matcher = pattern.matcher("x村人x");
+        assertNull(GameRole.lookingAtRole(matcher));
+
+        return;
+    }
+
+    /**
+     * Test of getPowerBalanceComparator method, of class GameRole.
+     */
+    @Test
+    public void testGetPowerBalanceComparator(){
+        System.out.println("getPowerBalanceComparator");
+
+        Comparator<GameRole> cmp = GameRole.getPowerBalanceComparator();
+        assertNotNull(cmp);
+        Comparator<GameRole> cmp2 = GameRole.getPowerBalanceComparator();
+        assertTrue(cmp == cmp2);
+
+        assertTrue(cmp.compare(GameRole.INNOCENT, GameRole.INNOCENT) == 0);
+        assertTrue(cmp.compare(GameRole.INNOCENT, GameRole.FRATER) < 0);
+        assertTrue(cmp.compare(GameRole.FRATER, GameRole.SEER) < 0);
+        assertTrue(cmp.compare(GameRole.SEER, GameRole.SHAMAN) < 0);
+        assertTrue(cmp.compare(GameRole.SHAMAN, GameRole.HUNTER) < 0);
+        assertTrue(cmp.compare(GameRole.HUNTER, GameRole.HAMSTER) < 0);
+        assertTrue(cmp.compare(GameRole.HAMSTER, GameRole.MADMAN) < 0);
+        assertTrue(cmp.compare(GameRole.MADMAN, GameRole.WOLF) < 0);
+        assertTrue(cmp.compare(GameRole.WOLF, GameRole.INNOCENT) > 0);
+        assertTrue(cmp.compare(GameRole.FRATER, GameRole.INNOCENT) > 0);
+
+        assertTrue(cmp.compare(null, null) == 0);
+        assertTrue(cmp.compare(GameRole.INNOCENT, null) > 0);
+        assertTrue(cmp.compare(null, GameRole.INNOCENT) < 0);
+
+        return;
+    }
+
+    /**
+     * Test of getRoleName method, of class GameRole.
+     */
+    @Test
+    public void testGetRoleName(){
+        System.out.println("getRoleName");
+        assertEquals("村人", GameRole.INNOCENT.getRoleName());
+        assertEquals("人狼", GameRole.WOLF.getRoleName());
+        assertEquals("占い師", GameRole.SEER.getRoleName());
+        assertEquals("霊能者", GameRole.SHAMAN.getRoleName());
+        assertEquals("狂人", GameRole.MADMAN.getRoleName());
+        assertEquals("狩人", GameRole.HUNTER.getRoleName());
+        assertEquals("共有者", GameRole.FRATER.getRoleName());
+        assertEquals("ハムスター人間", GameRole.HAMSTER.getRoleName());
+        return;
+    }
+
+    /**
+     * Test of getShortName method, of class GameRole.
+     */
+    @Test
+    public void testGetShortName(){
+        System.out.println("getShortName");
+        assertEquals('村', GameRole.INNOCENT.getShortName());
+        assertEquals('狼', GameRole.WOLF.getShortName());
+        assertEquals('占', GameRole.SEER.getShortName());
+        assertEquals('霊', GameRole.SHAMAN.getShortName());
+        assertEquals('狂', GameRole.MADMAN.getShortName());
+        assertEquals('狩', GameRole.HUNTER.getShortName());
+        assertEquals('共', GameRole.FRATER.getShortName());
+        assertEquals('公', GameRole.HAMSTER.getShortName());
+        return;
+    }
+
+    /**
+     * Test of getTeam method, of class GameRole.
+     */
+    @Test
+    public void testGetTeam(){
+        System.out.println("getTeam");
+        assertEquals(Team.VILLAGE, GameRole.INNOCENT.getTeam());
+        assertEquals(Team.WOLF,    GameRole.WOLF.getTeam());
+        assertEquals(Team.VILLAGE, GameRole.SEER.getTeam());
+        assertEquals(Team.VILLAGE, GameRole.SHAMAN.getTeam());
+        assertEquals(Team.WOLF,    GameRole.MADMAN.getTeam());
+        assertEquals(Team.VILLAGE, GameRole.HUNTER.getTeam());
+        assertEquals(Team.VILLAGE, GameRole.FRATER.getTeam());
+        assertEquals(Team.HAMSTER, GameRole.HAMSTER.getTeam());
+        return;
+    }
+
+    /**
+     * Test of getXmlName method, of class GameRole.
+     */
+    @Test
+    public void testGetXmlName() {
+        System.out.println("getXmlName");
+        assertEquals("innocent", GameRole.INNOCENT.getXmlName());
+        assertEquals("wolf", GameRole.WOLF.getXmlName());
+        assertEquals("seer", GameRole.SEER.getXmlName());
+        assertEquals("shaman", GameRole.SHAMAN.getXmlName());
+        assertEquals("madman", GameRole.MADMAN.getXmlName());
+        assertEquals("hunter", GameRole.HUNTER.getXmlName());
+        assertEquals("frater", GameRole.FRATER.getXmlName());
+        assertEquals("hamster", GameRole.HAMSTER.getXmlName());
+        return;
+    }
+
+}
index 4d9057f..bc23bcc 100644 (file)
-/*\r
- * License : The MIT License\r
- * Copyright(c) 2009 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-import java.io.IOException;\r
-import java.nio.charset.Charset;\r
-import java.util.ArrayList;\r
-import java.util.Collection;\r
-import java.util.GregorianCalendar;\r
-import java.util.List;\r
-import java.util.Locale;\r
-import java.util.TimeZone;\r
-import javax.xml.parsers.DocumentBuilder;\r
-import javax.xml.parsers.DocumentBuilderFactory;\r
-import javax.xml.parsers.ParserConfigurationException;\r
-import org.junit.After;\r
-import org.junit.AfterClass;\r
-import org.junit.Before;\r
-import org.junit.BeforeClass;\r
-import org.junit.Test;\r
-import org.xml.sax.SAXException;\r
-import static org.junit.Assert.*;\r
-\r
-/**\r
- */\r
-public class LandDefTest {\r
-\r
-    private DocumentBuilder builder;\r
-\r
-    public LandDefTest() {\r
-    }\r
-\r
-    @BeforeClass\r
-    public static void setUpClass() throws Exception{\r
-    }\r
-\r
-    @AfterClass\r
-    public static void tearDownClass() throws Exception{\r
-    }\r
-\r
-    @Before\r
-    public void setUp() {\r
-        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();\r
-        try{\r
-            this.builder = factory.newDocumentBuilder();\r
-        }catch(ParserConfigurationException e){\r
-            fail();\r
-        }\r
-        return;\r
-    }\r
-\r
-    @After\r
-    public void tearDown() {\r
-    }\r
-\r
-    /**\r
-     * Test of parseIntList method, of class LandDef.\r
-     */\r
-    @Test\r
-    public void testParseIntList(){\r
-        System.out.println("parseIntList");\r
-        CharSequence seq;\r
-        Collection<Integer> coll;\r
-        List<Integer> result;\r
-\r
-        seq = "1,2,3";\r
-        coll = LandDef.parseIntList(seq);\r
-        result = new ArrayList<Integer>(coll);\r
-        assertEquals(3, result.size());\r
-        assertEquals(Integer.valueOf(1), result.get(0));\r
-        assertEquals(Integer.valueOf(2), result.get(1));\r
-        assertEquals(Integer.valueOf(3), result.get(2));\r
-\r
-        seq = "\u0020\t1\u0020,2,\u00203\t\u0020";\r
-        coll = LandDef.parseIntList(seq);\r
-        result = new ArrayList<Integer>(coll);\r
-        assertEquals(3, result.size());\r
-        assertEquals(Integer.valueOf(1), result.get(0));\r
-        assertEquals(Integer.valueOf(2), result.get(1));\r
-        assertEquals(Integer.valueOf(3), result.get(2));\r
-\r
-        seq = "1-3";\r
-        coll = LandDef.parseIntList(seq);\r
-        result = new ArrayList<Integer>(coll);\r
-        assertEquals(3, result.size());\r
-        assertEquals(Integer.valueOf(1), result.get(0));\r
-        assertEquals(Integer.valueOf(2), result.get(1));\r
-        assertEquals(Integer.valueOf(3), result.get(2));\r
-\r
-        seq = "1\u0020\t-\t\u00203";\r
-        coll = LandDef.parseIntList(seq);\r
-        result = new ArrayList<Integer>(coll);\r
-        assertEquals(3, result.size());\r
-        assertEquals(Integer.valueOf(1), result.get(0));\r
-        assertEquals(Integer.valueOf(2), result.get(1));\r
-        assertEquals(Integer.valueOf(3), result.get(2));\r
-\r
-        seq = "3,2,1";\r
-        coll = LandDef.parseIntList(seq);\r
-        result = new ArrayList<Integer>(coll);\r
-        assertEquals(3, result.size());\r
-        assertEquals(Integer.valueOf(1), result.get(0));\r
-        assertEquals(Integer.valueOf(2), result.get(1));\r
-        assertEquals(Integer.valueOf(3), result.get(2));\r
-\r
-        seq = "3-1";\r
-        coll = LandDef.parseIntList(seq);\r
-        result = new ArrayList<Integer>(coll);\r
-        assertEquals(3, result.size());\r
-        assertEquals(Integer.valueOf(1), result.get(0));\r
-        assertEquals(Integer.valueOf(2), result.get(1));\r
-        assertEquals(Integer.valueOf(3), result.get(2));\r
-\r
-        seq = "1,2,3,11-13";\r
-        coll = LandDef.parseIntList(seq);\r
-        result = new ArrayList<Integer>(coll);\r
-        assertEquals(6, result.size());\r
-        assertEquals(Integer.valueOf(1), result.get(0));\r
-        assertEquals(Integer.valueOf(2), result.get(1));\r
-        assertEquals(Integer.valueOf(3), result.get(2));\r
-        assertEquals(Integer.valueOf(11), result.get(3));\r
-        assertEquals(Integer.valueOf(12), result.get(4));\r
-        assertEquals(Integer.valueOf(13), result.get(5));\r
-\r
-        seq = "1,2,11-13,3";\r
-        coll = LandDef.parseIntList(seq);\r
-        result = new ArrayList<Integer>(coll);\r
-        assertEquals(6, result.size());\r
-        assertEquals(Integer.valueOf(1), result.get(0));\r
-        assertEquals(Integer.valueOf(2), result.get(1));\r
-        assertEquals(Integer.valueOf(3), result.get(2));\r
-        assertEquals(Integer.valueOf(11), result.get(3));\r
-        assertEquals(Integer.valueOf(12), result.get(4));\r
-        assertEquals(Integer.valueOf(13), result.get(5));\r
-\r
-        seq = "1,1";\r
-        coll = LandDef.parseIntList(seq);\r
-        result = new ArrayList<Integer>(coll);\r
-        assertEquals(1, result.size());\r
-        assertEquals(Integer.valueOf(1), result.get(0));\r
-\r
-        seq = "1,2,1";\r
-        coll = LandDef.parseIntList(seq);\r
-        result = new ArrayList<Integer>(coll);\r
-        assertEquals(2, result.size());\r
-        assertEquals(Integer.valueOf(1), result.get(0));\r
-        assertEquals(Integer.valueOf(2), result.get(1));\r
-\r
-        seq = "1-3,2-4";\r
-        coll = LandDef.parseIntList(seq);\r
-        result = new ArrayList<Integer>(coll);\r
-        assertEquals(4, result.size());\r
-        assertEquals(Integer.valueOf(1), result.get(0));\r
-        assertEquals(Integer.valueOf(2), result.get(1));\r
-        assertEquals(Integer.valueOf(3), result.get(2));\r
-        assertEquals(Integer.valueOf(4), result.get(3));\r
-\r
-        seq = "";\r
-        coll = LandDef.parseIntList(seq);\r
-        result = new ArrayList<Integer>(coll);\r
-        assertEquals(0, result.size());\r
-\r
-        seq = "x";\r
-        try{\r
-            coll = LandDef.parseIntList(seq);\r
-            fail();\r
-        }catch(IllegalArgumentException e){\r
-        }\r
-\r
-        seq = "1,x,3";\r
-        try{\r
-            coll = LandDef.parseIntList(seq);\r
-            fail();\r
-        }catch(IllegalArgumentException e){\r
-        }\r
-\r
-        seq = "-";\r
-        try{\r
-            coll = LandDef.parseIntList(seq);\r
-            fail();\r
-        }catch(IllegalArgumentException e){\r
-        }\r
-\r
-        seq = "1-2-3";\r
-        try{\r
-            coll = LandDef.parseIntList(seq);\r
-            fail();\r
-        }catch(IllegalArgumentException e){\r
-        }\r
-\r
-        seq = "1-x";\r
-        try{\r
-            coll = LandDef.parseIntList(seq);\r
-            fail();\r
-        }catch(IllegalArgumentException e){\r
-        }\r
-\r
-        seq = "x-3";\r
-        try{\r
-            coll = LandDef.parseIntList(seq);\r
-            fail();\r
-        }catch(IllegalArgumentException e){\r
-        }\r
-\r
-        seq = "1-";\r
-        try{\r
-            coll = LandDef.parseIntList(seq);\r
-            fail();\r
-        }catch(IllegalArgumentException e){\r
-        }\r
-\r
-        seq = "-3";\r
-        try{\r
-            coll = LandDef.parseIntList(seq);\r
-            fail();\r
-        }catch(IllegalArgumentException e){\r
-        }\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of buildLandDefList method, of class LandDef.\r
-     */\r
-    @Test\r
-    public void testBuildLandDefList(){\r
-        System.out.println("buildLandDefList");\r
-\r
-        List<LandDef> result;\r
-        try{\r
-            result = LandDef.buildLandDefList(this.builder);\r
-        }catch(SAXException e){\r
-            fail();\r
-            return;\r
-        }catch(IOException e){\r
-            fail();\r
-            return;\r
-        }\r
-\r
-        assertEquals(9, result.size());\r
-\r
-        assertEquals("wolf", result.get(0).getLandId());\r
-        assertEquals("wolff", result.get(7).getLandId());\r
-        assertEquals("wolfg", result.get(8).getLandId());\r
-\r
-        return;\r
-    }\r
-\r
-    private List<LandDef> loadList(){\r
-        List<LandDef> result;\r
-        try{\r
-            result = LandDef.buildLandDefList(this.builder);\r
-        }catch(SAXException e){\r
-            fail();\r
-            return null;\r
-        }catch(IOException e){\r
-            fail();\r
-            return null;\r
-        }\r
-        return result;\r
-    }\r
-\r
-    private LandDef selectLand(String id){\r
-        for(LandDef land : loadList()){\r
-            if(land.getLandId().equals(id)) return land;\r
-        }\r
-        return null;\r
-    }\r
-\r
-    /**\r
-     * Test of getLandName method, of class LandDef.\r
-     */\r
-    @Test\r
-    public void testGetLandName(){\r
-        System.out.println("getLandName");\r
-\r
-        assertEquals("人狼BBS:古国", selectLand("wolf").getLandName());\r
-        assertEquals("人狼BBS:F国", selectLand("wolff").getLandName());\r
-        assertEquals("人狼BBS:G国", selectLand("wolfg").getLandName());\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getLandId method, of class LandDef.\r
-     */\r
-    @Test\r
-    public void testGetLandId(){\r
-        System.out.println("getLandId");\r
-\r
-        assertEquals("wolf", selectLand("wolf").getLandId());\r
-        assertEquals("wolf0", selectLand("wolf0").getLandId());\r
-        assertEquals("wolff", selectLand("wolff").getLandId());\r
-        assertEquals("wolfg", selectLand("wolfg").getLandId());\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getFormalName method, of class LandDef.\r
-     */\r
-    @Test\r
-    public void testGetFormalName(){\r
-        System.out.println("getFormalName");\r
-\r
-        assertEquals("旧人狼BBS 2", selectLand("wolf").getFormalName());\r
-        assertEquals("人狼BBS:F", selectLand("wolff").getFormalName());\r
-        assertEquals("人狼BBS:G", selectLand("wolfg").getFormalName());\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getLandPrefix method, of class LandDef.\r
-     */\r
-    @Test\r
-    public void testGetLandPrefix(){\r
-        System.out.println("getLandPrefix");\r
-\r
-        assertEquals("", selectLand("wolf").getLandPrefix());\r
-        assertEquals("", selectLand("wolf0").getLandPrefix());\r
-        assertEquals("F", selectLand("wolff").getLandPrefix());\r
-        assertEquals("G", selectLand("wolfg").getLandPrefix());\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getLandState method, of class LandDef.\r
-     */\r
-    @Test\r
-    public void testGetLandState(){\r
-        System.out.println("getLandState");\r
-\r
-        assertEquals(LandState.HISTORICAL, selectLand("wolf0").getLandState());\r
-        assertEquals(LandState.HISTORICAL, selectLand("wolff").getLandState());\r
-        assertEquals(LandState.ACTIVE,     selectLand("wolfg").getLandState());\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getMinMembers method, of class LandDef.\r
-     */\r
-    @Test\r
-    public void testGetMinMembers(){\r
-        System.out.println("getMinMembers");\r
-\r
-        assertEquals(8, selectLand("wolf0").getMinMembers());\r
-        assertEquals(11, selectLand("wolff").getMinMembers());\r
-        assertEquals(10, selectLand("wolfg").getMinMembers());\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getMaxMembers method, of class LandDef.\r
-     */\r
-    @Test\r
-    public void testGetMaxMembers(){\r
-        System.out.println("getMaxMembers");\r
-\r
-        assertEquals(16, selectLand("wolf0").getMaxMembers());\r
-        assertEquals(16, selectLand("wolff").getMaxMembers());\r
-        assertEquals(16, selectLand("wolfg").getMaxMembers());\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getWebURI method, of class LandDef.\r
-     */\r
-    @Test\r
-    public void testGetWebURI(){\r
-        System.out.println("getWebURI");\r
-\r
-        assertEquals("http://ninjinix.x0.com/wolf/",\r
-                     selectLand("wolf").getWebURI().toString());\r
-        assertEquals("http://ninjin002.x0.com/wolff/",\r
-                     selectLand("wolff").getWebURI().toString());\r
-        assertEquals("http://www.wolfg.x0.com/",\r
-                     selectLand("wolfg").getWebURI().toString());\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getCgiURI method, of class LandDef.\r
-     */\r
-    @Test\r
-    public void testGetCgiURI(){\r
-        System.out.println("getCgiURI");\r
-\r
-        assertEquals("http://ninjinix.x0.com/wolf/index.rb",\r
-                     selectLand("wolf").getCgiURI().toString());\r
-        assertEquals("http://ninjin002.x0.com/wolff/index.rb",\r
-                     selectLand("wolff").getCgiURI().toString());\r
-        assertEquals("http://www.wolfg.x0.com/index.rb",\r
-                     selectLand("wolfg").getCgiURI().toString());\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getTombFaceIconURI method, of class LandDef.\r
-     */\r
-    @Test\r
-    public void testGetTombFaceIconURI(){\r
-        System.out.println("getTombFaceIconURI");\r
-\r
-        assertEquals("plugin_wolf/img/face99.jpg",\r
-                     selectLand("wolf").getTombFaceIconURI().toString());\r
-        assertEquals("../img/face99.jpg",\r
-                     selectLand("wolf0").getTombFaceIconURI().toString());\r
-        assertEquals("plugin_wolf/img/face99.jpg",\r
-                     selectLand("wolff").getTombFaceIconURI().toString());\r
-        assertEquals("plugin_wolf/img/face99.jpg",\r
-                     selectLand("wolfg").getTombFaceIconURI().toString());\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getTombBodyIconURI method, of class LandDef.\r
-     */\r
-    @Test\r
-    public void testGetTombBodyIconURI(){\r
-        System.out.println("getTombBodyIconURI");\r
-\r
-        assertEquals("plugin_wolf/img/body99.jpg",\r
-                     selectLand("wolf").getTombBodyIconURI().toString());\r
-        assertEquals("../img/body99.jpg",\r
-                     selectLand("wolf0").getTombBodyIconURI().toString());\r
-        assertEquals("plugin_wolf/img/body99.jpg",\r
-                     selectLand("wolff").getTombBodyIconURI().toString());\r
-        assertEquals("plugin_wolf/img/body99.jpg",\r
-                     selectLand("wolfg").getTombBodyIconURI().toString());\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getFaceURITemplate method, of class LandDef.\r
-     */\r
-    @Test\r
-    public void testGetFaceURITemplate(){\r
-        System.out.println("getFaceURITemplate");\r
-\r
-        assertEquals("./plugin_wolf/img/face{0,number,#00}.jpg",\r
-                     selectLand("wolf").getFaceURITemplate());\r
-        assertEquals("../img/face{0,number,#00}.jpg",\r
-                     selectLand("wolf0").getFaceURITemplate());\r
-        assertEquals("./plugin_wolf/img/face{0,number,#00}.jpg",\r
-                     selectLand("wolff").getFaceURITemplate());\r
-        assertEquals("./plugin_wolf/img/face{0,number,#00}.jpg",\r
-                     selectLand("wolfg").getFaceURITemplate());\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getBodyURITemplate method, of class LandDef.\r
-     */\r
-    @Test\r
-    public void testGetBodyURITemplate(){\r
-        System.out.println("getBodyURITemplate");\r
-\r
-        assertEquals("./plugin_wolf/img/body{0,number,#00}.jpg",\r
-                     selectLand("wolf").getBodyURITemplate());\r
-        assertEquals("../img/body{0,number,#00}.jpg",\r
-                     selectLand("wolf0").getBodyURITemplate());\r
-        assertEquals("./plugin_wolf/img/body{0,number,#00}.jpg",\r
-                     selectLand("wolff").getBodyURITemplate());\r
-        assertEquals("./plugin_wolf/img/body{0,number,#00}.jpg",\r
-                     selectLand("wolfg").getBodyURITemplate());\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getLocale method, of class LandDef.\r
-     */\r
-    @Test\r
-    public void testGetLocale(){\r
-        System.out.println("getLocale");\r
-\r
-        assertEquals(Locale.JAPAN, selectLand("wolf").getLocale());\r
-        assertEquals(Locale.JAPAN, selectLand("wolff").getLocale());\r
-        assertEquals(Locale.JAPAN, selectLand("wolfg").getLocale());\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getEncoding method, of class LandDef.\r
-     */\r
-    @Test\r
-    public void testGetEncoding(){\r
-        System.out.println("getEncoding");\r
-\r
-        Charset sj = Charset.forName("Shift_JIS");\r
-\r
-        assertEquals(sj, selectLand("wolf").getEncoding());\r
-        assertEquals(sj, selectLand("wolff").getEncoding());\r
-\r
-        Charset utf8 = Charset.forName("UTF-8");\r
-\r
-        assertEquals(utf8, selectLand("wolfg").getEncoding());\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getTimeZone method, of class LandDef.\r
-     */\r
-    @Test\r
-    public void testGetTimeZone(){\r
-        System.out.println("getTimeZone");\r
-\r
-        TimeZone tz = TimeZone.getTimeZone("GMT+09");\r
-\r
-        assertTrue(tz.hasSameRules(selectLand("wolf0").getTimeZone()));\r
-        assertTrue(tz.hasSameRules(selectLand("wolff").getTimeZone()));\r
-        assertTrue(tz.hasSameRules(selectLand("wolfg").getTimeZone()));\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getStartDateTime method, of class LandDef.\r
-     */\r
-    @Test\r
-    public void testGetStartDateTime(){\r
-        System.out.println("getStartDateTime");\r
-\r
-        TimeZone tz = TimeZone.getTimeZone("GMT+09");\r
-\r
-        GregorianCalendar cal = new GregorianCalendar();\r
-        cal.clear();\r
-        cal.setTimeZone(tz);\r
-\r
-        cal.set(2004, 8-1, 15, 23, 31, 36);\r
-        assertEquals(cal.getTimeInMillis(),\r
-                     selectLand("wolf").getStartDateTime());\r
-\r
-        cal.set(2005, 9-1, 12, 20, 21, 3);\r
-        assertEquals(cal.getTimeInMillis(),\r
-                     selectLand("wolff").getStartDateTime());\r
-\r
-        cal.set(2010, 3-1,  7, 13, 53, 27);\r
-        assertEquals(cal.getTimeInMillis(),\r
-                     selectLand("wolfg").getStartDateTime());\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getEndDateTime method, of class LandDef.\r
-     */\r
-    @Test\r
-    public void testGetEndDateTime(){\r
-        System.out.println("getEndDateTime");\r
-\r
-        TimeZone tz = TimeZone.getTimeZone("GMT+09");\r
-\r
-        GregorianCalendar cal = new GregorianCalendar();\r
-        cal.clear();\r
-        cal.setTimeZone(tz);\r
-\r
-        cal.set(2004, 9-1, 30, 13, 58, 31);\r
-        assertEquals(cal.getTimeInMillis(),\r
-                     selectLand("wolf").getEndDateTime());\r
-\r
-        assertTrue(0 > selectLand("wolfg").getEndDateTime());\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getDescription method, of class LandDef.\r
-     */\r
-    @Test\r
-    public void testGetDescription(){\r
-        System.out.println("getDescription");\r
-\r
-        assertNotNull(selectLand("wolf0").getDescription());\r
-        assertNotNull(selectLand("wolff").getDescription());\r
-        assertNotNull(selectLand("wolfg").getDescription());\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getContactInfo method, of class LandDef.\r
-     */\r
-    @Test\r
-    public void testGetContactInfo(){\r
-        System.out.println("getContactInfo");\r
-\r
-        assertNotNull(selectLand("wolf0").getContactInfo());\r
-        assertNotNull(selectLand("wolff").getContactInfo());\r
-        assertNotNull(selectLand("wolfg").getContactInfo());\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of isValidVillageId method, of class LandDef.\r
-     */\r
-    @Test\r
-    public void testIsValidVillageId(){\r
-        System.out.println("isValidVillageId");\r
-\r
-        assertTrue(selectLand("wolfa").isValidVillageId(339));\r
-        assertFalse(selectLand("wolfa").isValidVillageId(340));\r
-        assertTrue(selectLand("wolfa").isValidVillageId(343));\r
-        assertTrue(selectLand("wolfa").isValidVillageId(366));\r
-        assertFalse(selectLand("wolfa").isValidVillageId(367));\r
-\r
-        assertFalse(selectLand("wolfb").isValidVillageId(149));\r
-\r
-        assertFalse(selectLand("wolfc").isValidVillageId(451));\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of buildLocale method, of class LandDef.\r
-     */\r
-    @Test\r
-    public void testBuildLocale(){\r
-        System.out.println("buildLocale");\r
-        assertEquals(Locale.JAPAN, LandDef.buildLocale("ja-JP"));\r
-        assertEquals(Locale.JAPANESE, LandDef.buildLocale("ja"));\r
-        return;\r
-    }\r
-\r
-}\r
+/*
+ * License : The MIT License
+ * Copyright(c) 2009 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.GregorianCalendar;
+import java.util.List;
+import java.util.Locale;
+import java.util.TimeZone;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.xml.sax.SAXException;
+import static org.junit.Assert.*;
+
+/**
+ */
+public class LandDefTest {
+
+    private DocumentBuilder builder;
+
+    public LandDefTest() {
+    }
+
+    @BeforeClass
+    public static void setUpClass() throws Exception{
+    }
+
+    @AfterClass
+    public static void tearDownClass() throws Exception{
+    }
+
+    @Before
+    public void setUp() {
+        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+        try{
+            this.builder = factory.newDocumentBuilder();
+        }catch(ParserConfigurationException e){
+            fail();
+        }
+        return;
+    }
+
+    @After
+    public void tearDown() {
+    }
+
+    /**
+     * Test of parseIntList method, of class LandDef.
+     */
+    @Test
+    public void testParseIntList(){
+        System.out.println("parseIntList");
+        CharSequence seq;
+        Collection<Integer> coll;
+        List<Integer> result;
+
+        seq = "1,2,3";
+        coll = LandDef.parseIntList(seq);
+        result = new ArrayList<Integer>(coll);
+        assertEquals(3, result.size());
+        assertEquals(Integer.valueOf(1), result.get(0));
+        assertEquals(Integer.valueOf(2), result.get(1));
+        assertEquals(Integer.valueOf(3), result.get(2));
+
+        seq = "\u0020\t1\u0020,2,\u00203\t\u0020";
+        coll = LandDef.parseIntList(seq);
+        result = new ArrayList<Integer>(coll);
+        assertEquals(3, result.size());
+        assertEquals(Integer.valueOf(1), result.get(0));
+        assertEquals(Integer.valueOf(2), result.get(1));
+        assertEquals(Integer.valueOf(3), result.get(2));
+
+        seq = "1-3";
+        coll = LandDef.parseIntList(seq);
+        result = new ArrayList<Integer>(coll);
+        assertEquals(3, result.size());
+        assertEquals(Integer.valueOf(1), result.get(0));
+        assertEquals(Integer.valueOf(2), result.get(1));
+        assertEquals(Integer.valueOf(3), result.get(2));
+
+        seq = "1\u0020\t-\t\u00203";
+        coll = LandDef.parseIntList(seq);
+        result = new ArrayList<Integer>(coll);
+        assertEquals(3, result.size());
+        assertEquals(Integer.valueOf(1), result.get(0));
+        assertEquals(Integer.valueOf(2), result.get(1));
+        assertEquals(Integer.valueOf(3), result.get(2));
+
+        seq = "3,2,1";
+        coll = LandDef.parseIntList(seq);
+        result = new ArrayList<Integer>(coll);
+        assertEquals(3, result.size());
+        assertEquals(Integer.valueOf(1), result.get(0));
+        assertEquals(Integer.valueOf(2), result.get(1));
+        assertEquals(Integer.valueOf(3), result.get(2));
+
+        seq = "3-1";
+        coll = LandDef.parseIntList(seq);
+        result = new ArrayList<Integer>(coll);
+        assertEquals(3, result.size());
+        assertEquals(Integer.valueOf(1), result.get(0));
+        assertEquals(Integer.valueOf(2), result.get(1));
+        assertEquals(Integer.valueOf(3), result.get(2));
+
+        seq = "1,2,3,11-13";
+        coll = LandDef.parseIntList(seq);
+        result = new ArrayList<Integer>(coll);
+        assertEquals(6, result.size());
+        assertEquals(Integer.valueOf(1), result.get(0));
+        assertEquals(Integer.valueOf(2), result.get(1));
+        assertEquals(Integer.valueOf(3), result.get(2));
+        assertEquals(Integer.valueOf(11), result.get(3));
+        assertEquals(Integer.valueOf(12), result.get(4));
+        assertEquals(Integer.valueOf(13), result.get(5));
+
+        seq = "1,2,11-13,3";
+        coll = LandDef.parseIntList(seq);
+        result = new ArrayList<Integer>(coll);
+        assertEquals(6, result.size());
+        assertEquals(Integer.valueOf(1), result.get(0));
+        assertEquals(Integer.valueOf(2), result.get(1));
+        assertEquals(Integer.valueOf(3), result.get(2));
+        assertEquals(Integer.valueOf(11), result.get(3));
+        assertEquals(Integer.valueOf(12), result.get(4));
+        assertEquals(Integer.valueOf(13), result.get(5));
+
+        seq = "1,1";
+        coll = LandDef.parseIntList(seq);
+        result = new ArrayList<Integer>(coll);
+        assertEquals(1, result.size());
+        assertEquals(Integer.valueOf(1), result.get(0));
+
+        seq = "1,2,1";
+        coll = LandDef.parseIntList(seq);
+        result = new ArrayList<Integer>(coll);
+        assertEquals(2, result.size());
+        assertEquals(Integer.valueOf(1), result.get(0));
+        assertEquals(Integer.valueOf(2), result.get(1));
+
+        seq = "1-3,2-4";
+        coll = LandDef.parseIntList(seq);
+        result = new ArrayList<Integer>(coll);
+        assertEquals(4, result.size());
+        assertEquals(Integer.valueOf(1), result.get(0));
+        assertEquals(Integer.valueOf(2), result.get(1));
+        assertEquals(Integer.valueOf(3), result.get(2));
+        assertEquals(Integer.valueOf(4), result.get(3));
+
+        seq = "";
+        coll = LandDef.parseIntList(seq);
+        result = new ArrayList<Integer>(coll);
+        assertEquals(0, result.size());
+
+        seq = "x";
+        try{
+            coll = LandDef.parseIntList(seq);
+            fail();
+        }catch(IllegalArgumentException e){
+        }
+
+        seq = "1,x,3";
+        try{
+            coll = LandDef.parseIntList(seq);
+            fail();
+        }catch(IllegalArgumentException e){
+        }
+
+        seq = "-";
+        try{
+            coll = LandDef.parseIntList(seq);
+            fail();
+        }catch(IllegalArgumentException e){
+        }
+
+        seq = "1-2-3";
+        try{
+            coll = LandDef.parseIntList(seq);
+            fail();
+        }catch(IllegalArgumentException e){
+        }
+
+        seq = "1-x";
+        try{
+            coll = LandDef.parseIntList(seq);
+            fail();
+        }catch(IllegalArgumentException e){
+        }
+
+        seq = "x-3";
+        try{
+            coll = LandDef.parseIntList(seq);
+            fail();
+        }catch(IllegalArgumentException e){
+        }
+
+        seq = "1-";
+        try{
+            coll = LandDef.parseIntList(seq);
+            fail();
+        }catch(IllegalArgumentException e){
+        }
+
+        seq = "-3";
+        try{
+            coll = LandDef.parseIntList(seq);
+            fail();
+        }catch(IllegalArgumentException e){
+        }
+
+        return;
+    }
+
+    /**
+     * Test of buildLandDefList method, of class LandDef.
+     */
+    @Test
+    public void testBuildLandDefList(){
+        System.out.println("buildLandDefList");
+
+        List<LandDef> result;
+        try{
+            result = LandDef.buildLandDefList(this.builder);
+        }catch(SAXException e){
+            fail();
+            return;
+        }catch(IOException e){
+            fail();
+            return;
+        }
+
+        assertEquals(9, result.size());
+
+        assertEquals("wolf", result.get(0).getLandId());
+        assertEquals("wolff", result.get(7).getLandId());
+        assertEquals("wolfg", result.get(8).getLandId());
+
+        return;
+    }
+
+    private List<LandDef> loadList(){
+        List<LandDef> result;
+        try{
+            result = LandDef.buildLandDefList(this.builder);
+        }catch(SAXException e){
+            fail();
+            return null;
+        }catch(IOException e){
+            fail();
+            return null;
+        }
+        return result;
+    }
+
+    private LandDef selectLand(String id){
+        for(LandDef land : loadList()){
+            if(land.getLandId().equals(id)) return land;
+        }
+        return null;
+    }
+
+    /**
+     * Test of getLandName method, of class LandDef.
+     */
+    @Test
+    public void testGetLandName(){
+        System.out.println("getLandName");
+
+        assertEquals("人狼BBS:古国", selectLand("wolf").getLandName());
+        assertEquals("人狼BBS:F国", selectLand("wolff").getLandName());
+        assertEquals("人狼BBS:G国", selectLand("wolfg").getLandName());
+
+        return;
+    }
+
+    /**
+     * Test of getLandId method, of class LandDef.
+     */
+    @Test
+    public void testGetLandId(){
+        System.out.println("getLandId");
+
+        assertEquals("wolf", selectLand("wolf").getLandId());
+        assertEquals("wolf0", selectLand("wolf0").getLandId());
+        assertEquals("wolff", selectLand("wolff").getLandId());
+        assertEquals("wolfg", selectLand("wolfg").getLandId());
+
+        return;
+    }
+
+    /**
+     * Test of getFormalName method, of class LandDef.
+     */
+    @Test
+    public void testGetFormalName(){
+        System.out.println("getFormalName");
+
+        assertEquals("旧人狼BBS 2", selectLand("wolf").getFormalName());
+        assertEquals("人狼BBS:F", selectLand("wolff").getFormalName());
+        assertEquals("人狼BBS:G", selectLand("wolfg").getFormalName());
+
+        return;
+    }
+
+    /**
+     * Test of getLandPrefix method, of class LandDef.
+     */
+    @Test
+    public void testGetLandPrefix(){
+        System.out.println("getLandPrefix");
+
+        assertEquals("", selectLand("wolf").getLandPrefix());
+        assertEquals("", selectLand("wolf0").getLandPrefix());
+        assertEquals("F", selectLand("wolff").getLandPrefix());
+        assertEquals("G", selectLand("wolfg").getLandPrefix());
+
+        return;
+    }
+
+    /**
+     * Test of getLandState method, of class LandDef.
+     */
+    @Test
+    public void testGetLandState(){
+        System.out.println("getLandState");
+
+        assertEquals(LandState.HISTORICAL, selectLand("wolf0").getLandState());
+        assertEquals(LandState.HISTORICAL, selectLand("wolff").getLandState());
+        assertEquals(LandState.ACTIVE,     selectLand("wolfg").getLandState());
+
+        return;
+    }
+
+    /**
+     * Test of getMinMembers method, of class LandDef.
+     */
+    @Test
+    public void testGetMinMembers(){
+        System.out.println("getMinMembers");
+
+        assertEquals(8, selectLand("wolf0").getMinMembers());
+        assertEquals(11, selectLand("wolff").getMinMembers());
+        assertEquals(10, selectLand("wolfg").getMinMembers());
+
+        return;
+    }
+
+    /**
+     * Test of getMaxMembers method, of class LandDef.
+     */
+    @Test
+    public void testGetMaxMembers(){
+        System.out.println("getMaxMembers");
+
+        assertEquals(16, selectLand("wolf0").getMaxMembers());
+        assertEquals(16, selectLand("wolff").getMaxMembers());
+        assertEquals(16, selectLand("wolfg").getMaxMembers());
+
+        return;
+    }
+
+    /**
+     * Test of getWebURI method, of class LandDef.
+     */
+    @Test
+    public void testGetWebURI(){
+        System.out.println("getWebURI");
+
+        assertEquals("http://ninjinix.x0.com/wolf/",
+                     selectLand("wolf").getWebURI().toString());
+        assertEquals("http://ninjin002.x0.com/wolff/",
+                     selectLand("wolff").getWebURI().toString());
+        assertEquals("http://www.wolfg.x0.com/",
+                     selectLand("wolfg").getWebURI().toString());
+
+        return;
+    }
+
+    /**
+     * Test of getCgiURI method, of class LandDef.
+     */
+    @Test
+    public void testGetCgiURI(){
+        System.out.println("getCgiURI");
+
+        assertEquals("http://ninjinix.x0.com/wolf/index.rb",
+                     selectLand("wolf").getCgiURI().toString());
+        assertEquals("http://ninjin002.x0.com/wolff/index.rb",
+                     selectLand("wolff").getCgiURI().toString());
+        assertEquals("http://www.wolfg.x0.com/index.rb",
+                     selectLand("wolfg").getCgiURI().toString());
+
+        return;
+    }
+
+    /**
+     * Test of getTombFaceIconURI method, of class LandDef.
+     */
+    @Test
+    public void testGetTombFaceIconURI(){
+        System.out.println("getTombFaceIconURI");
+
+        assertEquals("plugin_wolf/img/face99.jpg",
+                     selectLand("wolf").getTombFaceIconURI().toString());
+        assertEquals("../img/face99.jpg",
+                     selectLand("wolf0").getTombFaceIconURI().toString());
+        assertEquals("plugin_wolf/img/face99.jpg",
+                     selectLand("wolff").getTombFaceIconURI().toString());
+        assertEquals("plugin_wolf/img/face99.jpg",
+                     selectLand("wolfg").getTombFaceIconURI().toString());
+
+        return;
+    }
+
+    /**
+     * Test of getTombBodyIconURI method, of class LandDef.
+     */
+    @Test
+    public void testGetTombBodyIconURI(){
+        System.out.println("getTombBodyIconURI");
+
+        assertEquals("plugin_wolf/img/body99.jpg",
+                     selectLand("wolf").getTombBodyIconURI().toString());
+        assertEquals("../img/body99.jpg",
+                     selectLand("wolf0").getTombBodyIconURI().toString());
+        assertEquals("plugin_wolf/img/body99.jpg",
+                     selectLand("wolff").getTombBodyIconURI().toString());
+        assertEquals("plugin_wolf/img/body99.jpg",
+                     selectLand("wolfg").getTombBodyIconURI().toString());
+
+        return;
+    }
+
+    /**
+     * Test of getFaceURITemplate method, of class LandDef.
+     */
+    @Test
+    public void testGetFaceURITemplate(){
+        System.out.println("getFaceURITemplate");
+
+        assertEquals("./plugin_wolf/img/face{0,number,#00}.jpg",
+                     selectLand("wolf").getFaceURITemplate());
+        assertEquals("../img/face{0,number,#00}.jpg",
+                     selectLand("wolf0").getFaceURITemplate());
+        assertEquals("./plugin_wolf/img/face{0,number,#00}.jpg",
+                     selectLand("wolff").getFaceURITemplate());
+        assertEquals("./plugin_wolf/img/face{0,number,#00}.jpg",
+                     selectLand("wolfg").getFaceURITemplate());
+
+        return;
+    }
+
+    /**
+     * Test of getBodyURITemplate method, of class LandDef.
+     */
+    @Test
+    public void testGetBodyURITemplate(){
+        System.out.println("getBodyURITemplate");
+
+        assertEquals("./plugin_wolf/img/body{0,number,#00}.jpg",
+                     selectLand("wolf").getBodyURITemplate());
+        assertEquals("../img/body{0,number,#00}.jpg",
+                     selectLand("wolf0").getBodyURITemplate());
+        assertEquals("./plugin_wolf/img/body{0,number,#00}.jpg",
+                     selectLand("wolff").getBodyURITemplate());
+        assertEquals("./plugin_wolf/img/body{0,number,#00}.jpg",
+                     selectLand("wolfg").getBodyURITemplate());
+
+        return;
+    }
+
+    /**
+     * Test of getLocale method, of class LandDef.
+     */
+    @Test
+    public void testGetLocale(){
+        System.out.println("getLocale");
+
+        assertEquals(Locale.JAPAN, selectLand("wolf").getLocale());
+        assertEquals(Locale.JAPAN, selectLand("wolff").getLocale());
+        assertEquals(Locale.JAPAN, selectLand("wolfg").getLocale());
+
+        return;
+    }
+
+    /**
+     * Test of getEncoding method, of class LandDef.
+     */
+    @Test
+    public void testGetEncoding(){
+        System.out.println("getEncoding");
+
+        Charset sj = Charset.forName("Shift_JIS");
+
+        assertEquals(sj, selectLand("wolf").getEncoding());
+        assertEquals(sj, selectLand("wolff").getEncoding());
+
+        Charset utf8 = Charset.forName("UTF-8");
+
+        assertEquals(utf8, selectLand("wolfg").getEncoding());
+
+        return;
+    }
+
+    /**
+     * Test of getTimeZone method, of class LandDef.
+     */
+    @Test
+    public void testGetTimeZone(){
+        System.out.println("getTimeZone");
+
+        TimeZone tz = TimeZone.getTimeZone("GMT+09");
+
+        assertTrue(tz.hasSameRules(selectLand("wolf0").getTimeZone()));
+        assertTrue(tz.hasSameRules(selectLand("wolff").getTimeZone()));
+        assertTrue(tz.hasSameRules(selectLand("wolfg").getTimeZone()));
+
+        return;
+    }
+
+    /**
+     * Test of getStartDateTime method, of class LandDef.
+     */
+    @Test
+    public void testGetStartDateTime(){
+        System.out.println("getStartDateTime");
+
+        TimeZone tz = TimeZone.getTimeZone("GMT+09");
+
+        GregorianCalendar cal = new GregorianCalendar();
+        cal.clear();
+        cal.setTimeZone(tz);
+
+        cal.set(2004, 8-1, 15, 23, 31, 36);
+        assertEquals(cal.getTimeInMillis(),
+                     selectLand("wolf").getStartDateTime());
+
+        cal.set(2005, 9-1, 12, 20, 21, 3);
+        assertEquals(cal.getTimeInMillis(),
+                     selectLand("wolff").getStartDateTime());
+
+        cal.set(2010, 3-1,  7, 13, 53, 27);
+        assertEquals(cal.getTimeInMillis(),
+                     selectLand("wolfg").getStartDateTime());
+
+        return;
+    }
+
+    /**
+     * Test of getEndDateTime method, of class LandDef.
+     */
+    @Test
+    public void testGetEndDateTime(){
+        System.out.println("getEndDateTime");
+
+        TimeZone tz = TimeZone.getTimeZone("GMT+09");
+
+        GregorianCalendar cal = new GregorianCalendar();
+        cal.clear();
+        cal.setTimeZone(tz);
+
+        cal.set(2004, 9-1, 30, 13, 58, 31);
+        assertEquals(cal.getTimeInMillis(),
+                     selectLand("wolf").getEndDateTime());
+
+        assertTrue(0 > selectLand("wolfg").getEndDateTime());
+
+        return;
+    }
+
+    /**
+     * Test of getDescription method, of class LandDef.
+     */
+    @Test
+    public void testGetDescription(){
+        System.out.println("getDescription");
+
+        assertNotNull(selectLand("wolf0").getDescription());
+        assertNotNull(selectLand("wolff").getDescription());
+        assertNotNull(selectLand("wolfg").getDescription());
+
+        return;
+    }
+
+    /**
+     * Test of getContactInfo method, of class LandDef.
+     */
+    @Test
+    public void testGetContactInfo(){
+        System.out.println("getContactInfo");
+
+        assertNotNull(selectLand("wolf0").getContactInfo());
+        assertNotNull(selectLand("wolff").getContactInfo());
+        assertNotNull(selectLand("wolfg").getContactInfo());
+
+        return;
+    }
+
+    /**
+     * Test of isValidVillageId method, of class LandDef.
+     */
+    @Test
+    public void testIsValidVillageId(){
+        System.out.println("isValidVillageId");
+
+        assertTrue(selectLand("wolfa").isValidVillageId(339));
+        assertFalse(selectLand("wolfa").isValidVillageId(340));
+        assertTrue(selectLand("wolfa").isValidVillageId(343));
+        assertTrue(selectLand("wolfa").isValidVillageId(366));
+        assertFalse(selectLand("wolfa").isValidVillageId(367));
+
+        assertFalse(selectLand("wolfb").isValidVillageId(149));
+
+        assertFalse(selectLand("wolfc").isValidVillageId(451));
+
+        return;
+    }
+
+    /**
+     * Test of buildLocale method, of class LandDef.
+     */
+    @Test
+    public void testBuildLocale(){
+        System.out.println("buildLocale");
+        assertEquals(Locale.JAPAN, LandDef.buildLocale("ja-JP"));
+        assertEquals(Locale.JAPANESE, LandDef.buildLocale("ja"));
+        return;
+    }
+
+}
index 2d33cfb..c1cca27 100644 (file)
@@ -1,69 +1,69 @@
-/*\r
- * License : The MIT License\r
- * Copyright(c) 2009 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-import org.junit.After;\r
-import org.junit.AfterClass;\r
-import org.junit.Before;\r
-import org.junit.BeforeClass;\r
-import org.junit.Test;\r
-import static org.junit.Assert.*;\r
-\r
-/**\r
- */\r
-public class LandStateTest {\r
-\r
-    public LandStateTest() {\r
-    }\r
-\r
-    @BeforeClass\r
-    public static void setUpClass() throws Exception{\r
-    }\r
-\r
-    @AfterClass\r
-    public static void tearDownClass() throws Exception{\r
-    }\r
-\r
-    @Before\r
-    public void setUp() {\r
-    }\r
-\r
-    @After\r
-    public void tearDown() {\r
-    }\r
-\r
-    /**\r
-     * Test of values method, of class LandState.\r
-     */\r
-    @Test\r
-    public void testValues(){\r
-        System.out.println("values");\r
-        LandState[] values = LandState.values();\r
-        assertEquals(3, values.length);\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of valueOf method, of class LandState.\r
-     */\r
-    @Test\r
-    public void testValueOf(){\r
-        // NOTHING\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getXmlName method, of class LandState.\r
-     */\r
-    @Test\r
-    public void testGetXmlName(){\r
-        System.out.println("getXmlName");\r
-        assertEquals("closed", LandState.CLOSED.getXmlName());\r
-        assertEquals("historical", LandState.HISTORICAL.getXmlName());\r
-        assertEquals("active", LandState.ACTIVE.getXmlName());\r
-    }\r
-\r
-}\r
+/*
+ * License : The MIT License
+ * Copyright(c) 2009 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+/**
+ */
+public class LandStateTest {
+
+    public LandStateTest() {
+    }
+
+    @BeforeClass
+    public static void setUpClass() throws Exception{
+    }
+
+    @AfterClass
+    public static void tearDownClass() throws Exception{
+    }
+
+    @Before
+    public void setUp() {
+    }
+
+    @After
+    public void tearDown() {
+    }
+
+    /**
+     * Test of values method, of class LandState.
+     */
+    @Test
+    public void testValues(){
+        System.out.println("values");
+        LandState[] values = LandState.values();
+        assertEquals(3, values.length);
+        return;
+    }
+
+    /**
+     * Test of valueOf method, of class LandState.
+     */
+    @Test
+    public void testValueOf(){
+        // NOTHING
+        return;
+    }
+
+    /**
+     * Test of getXmlName method, of class LandState.
+     */
+    @Test
+    public void testGetXmlName(){
+        System.out.println("getXmlName");
+        assertEquals("closed", LandState.CLOSED.getXmlName());
+        assertEquals("historical", LandState.HISTORICAL.getXmlName());
+        assertEquals("active", LandState.ACTIVE.getXmlName());
+    }
+
+}
index 23602af..beafd04 100644 (file)
@@ -1,70 +1,70 @@
-/*\r
- * License : The MIT License\r
- * Copyright(c) 2009 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-import org.junit.After;\r
-import org.junit.AfterClass;\r
-import org.junit.Before;\r
-import org.junit.BeforeClass;\r
-import org.junit.Test;\r
-import static org.junit.Assert.*;\r
-\r
-/**\r
- */\r
-public class PeriodTypeTest {\r
-\r
-    public PeriodTypeTest() {\r
-    }\r
-\r
-    @BeforeClass\r
-    public static void setUpClass() throws Exception{\r
-    }\r
-\r
-    @AfterClass\r
-    public static void tearDownClass() throws Exception{\r
-    }\r
-\r
-    @Before\r
-    public void setUp() {\r
-    }\r
-\r
-    @After\r
-    public void tearDown() {\r
-    }\r
-\r
-    /**\r
-     * Test of values method, of class PeriodType.\r
-     */\r
-    @Test\r
-    public void testValues(){\r
-        System.out.println("values");\r
-        PeriodType[] values = PeriodType.values();\r
-        assertEquals(3, values.length);\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of valueOf method, of class PeriodType.\r
-     */\r
-    @Test\r
-    public void testValueOf(){\r
-        // NOTHING\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getXmlName method, of class PeriodType.\r
-     */\r
-    @Test\r
-    public void testGetXmlName(){\r
-        System.out.println("getXmlName");\r
-        assertEquals("prologue", PeriodType.PROLOGUE.getXmlName());\r
-        assertEquals("progress", PeriodType.PROGRESS.getXmlName());\r
-        assertEquals("epilogue", PeriodType.EPILOGUE.getXmlName());\r
-        return;\r
-    }\r
-\r
-}\r
+/*
+ * License : The MIT License
+ * Copyright(c) 2009 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+/**
+ */
+public class PeriodTypeTest {
+
+    public PeriodTypeTest() {
+    }
+
+    @BeforeClass
+    public static void setUpClass() throws Exception{
+    }
+
+    @AfterClass
+    public static void tearDownClass() throws Exception{
+    }
+
+    @Before
+    public void setUp() {
+    }
+
+    @After
+    public void tearDown() {
+    }
+
+    /**
+     * Test of values method, of class PeriodType.
+     */
+    @Test
+    public void testValues(){
+        System.out.println("values");
+        PeriodType[] values = PeriodType.values();
+        assertEquals(3, values.length);
+        return;
+    }
+
+    /**
+     * Test of valueOf method, of class PeriodType.
+     */
+    @Test
+    public void testValueOf(){
+        // NOTHING
+        return;
+    }
+
+    /**
+     * Test of getXmlName method, of class PeriodType.
+     */
+    @Test
+    public void testGetXmlName(){
+        System.out.println("getXmlName");
+        assertEquals("prologue", PeriodType.PROLOGUE.getXmlName());
+        assertEquals("progress", PeriodType.PROGRESS.getXmlName());
+        assertEquals("epilogue", PeriodType.EPILOGUE.getXmlName());
+        return;
+    }
+
+}
index 560a4bf..02c7701 100644 (file)
-/*\r
- * License : The MIT License\r
- * Copyright(c) 2009 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-import java.io.IOException;\r
-import java.util.List;\r
-import javax.xml.parsers.DocumentBuilder;\r
-import javax.xml.parsers.DocumentBuilderFactory;\r
-import javax.xml.parsers.ParserConfigurationException;\r
-import org.junit.After;\r
-import org.junit.AfterClass;\r
-import org.junit.Before;\r
-import org.junit.BeforeClass;\r
-import org.junit.Test;\r
-import org.xml.sax.SAXException;\r
-import static org.junit.Assert.*;\r
-\r
-/**\r
- */\r
-public class PreDefAvatarTest {\r
-\r
-    private DocumentBuilder builder;\r
-\r
-    public PreDefAvatarTest() {\r
-    }\r
-\r
-    @BeforeClass\r
-    public static void setUpClass() throws Exception{\r
-    }\r
-\r
-    @AfterClass\r
-    public static void tearDownClass() throws Exception{\r
-    }\r
-\r
-    @Before\r
-    public void setUp() {\r
-        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();\r
-        try{\r
-            this.builder = factory.newDocumentBuilder();\r
-        }catch(ParserConfigurationException e){\r
-            fail();\r
-        }\r
-        return;\r
-    }\r
-\r
-    @After\r
-    public void tearDown() {\r
-    }\r
-\r
-    /**\r
-     * Test of buildPreDefAvatarList method, of class PreDefAvatar.\r
-     */\r
-    @Test\r
-    public void testBuildPreDefAvatarList(){\r
-        System.out.println("buildPreDefAvatarList");\r
-\r
-        List<PreDefAvatar> result;\r
-        try{\r
-            result = PreDefAvatar.buildPreDefAvatarList(this.builder);\r
-        }catch(SAXException e){\r
-            fail();\r
-            return;\r
-        }catch(IOException e){\r
-            fail();\r
-            return;\r
-        }\r
-\r
-        assertEquals(20, result.size());\r
-\r
-        assertEquals("gerd", result.get(0).getAvatarId());\r
-        assertEquals("simon", result.get(19).getAvatarId());\r
-\r
-        return;\r
-    }\r
-\r
-    private List<PreDefAvatar> loadList(){\r
-        List<PreDefAvatar> result;\r
-        try{\r
-            result = PreDefAvatar.buildPreDefAvatarList(this.builder);\r
-        }catch(SAXException e){\r
-            fail();\r
-            return null;\r
-        }catch(IOException e){\r
-            fail();\r
-            return null;\r
-        }\r
-        return result;\r
-    }\r
-\r
-    /**\r
-     * Test of getAvatarId method, of class PreDefAvatar.\r
-     */\r
-    @Test\r
-    public void testGetAvatarId(){\r
-        System.out.println("getAvatarId");\r
-\r
-        List<PreDefAvatar> list = loadList();\r
-\r
-        assertEquals("gerd", list.get(0).getAvatarId());\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getFullName method, of class PreDefAvatar.\r
-     */\r
-    @Test\r
-    public void testGetFullName(){\r
-        System.out.println("getFullName");\r
-\r
-        List<PreDefAvatar> list = loadList();\r
-\r
-        assertEquals("楽天家\u0020ゲルト", list.get(0).getFullName());\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getJobTitle method, of class PreDefAvatar.\r
-     */\r
-    @Test\r
-    public void testGetJobTitle(){\r
-        System.out.println("getJobTitle");\r
-\r
-        List<PreDefAvatar> list = loadList();\r
-\r
-        assertEquals("楽天家", list.get(0).getJobTitle());\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getShortName method, of class PreDefAvatar.\r
-     */\r
-    @Test\r
-    public void testGetShortName(){\r
-        System.out.println("getShortName");\r
-\r
-        List<PreDefAvatar> list = loadList();\r
-\r
-        assertEquals("ゲルト", list.get(0).getShortName());\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getSerialNo method, of class PreDefAvatar.\r
-     */\r
-    @Test\r
-    public void testGetSerialNo(){\r
-        System.out.println("getSerialNo");\r
-\r
-        List<PreDefAvatar> list = loadList();\r
-\r
-        assertEquals(1, list.get(0).getSerialNo());\r
-\r
-        return;\r
-    }\r
-\r
-}\r
+/*
+ * License : The MIT License
+ * Copyright(c) 2009 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+import java.io.IOException;
+import java.util.List;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.xml.sax.SAXException;
+import static org.junit.Assert.*;
+
+/**
+ */
+public class PreDefAvatarTest {
+
+    private DocumentBuilder builder;
+
+    public PreDefAvatarTest() {
+    }
+
+    @BeforeClass
+    public static void setUpClass() throws Exception{
+    }
+
+    @AfterClass
+    public static void tearDownClass() throws Exception{
+    }
+
+    @Before
+    public void setUp() {
+        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+        try{
+            this.builder = factory.newDocumentBuilder();
+        }catch(ParserConfigurationException e){
+            fail();
+        }
+        return;
+    }
+
+    @After
+    public void tearDown() {
+    }
+
+    /**
+     * Test of buildPreDefAvatarList method, of class PreDefAvatar.
+     */
+    @Test
+    public void testBuildPreDefAvatarList(){
+        System.out.println("buildPreDefAvatarList");
+
+        List<PreDefAvatar> result;
+        try{
+            result = PreDefAvatar.buildPreDefAvatarList(this.builder);
+        }catch(SAXException e){
+            fail();
+            return;
+        }catch(IOException e){
+            fail();
+            return;
+        }
+
+        assertEquals(20, result.size());
+
+        assertEquals("gerd", result.get(0).getAvatarId());
+        assertEquals("simon", result.get(19).getAvatarId());
+
+        return;
+    }
+
+    private List<PreDefAvatar> loadList(){
+        List<PreDefAvatar> result;
+        try{
+            result = PreDefAvatar.buildPreDefAvatarList(this.builder);
+        }catch(SAXException e){
+            fail();
+            return null;
+        }catch(IOException e){
+            fail();
+            return null;
+        }
+        return result;
+    }
+
+    /**
+     * Test of getAvatarId method, of class PreDefAvatar.
+     */
+    @Test
+    public void testGetAvatarId(){
+        System.out.println("getAvatarId");
+
+        List<PreDefAvatar> list = loadList();
+
+        assertEquals("gerd", list.get(0).getAvatarId());
+
+        return;
+    }
+
+    /**
+     * Test of getFullName method, of class PreDefAvatar.
+     */
+    @Test
+    public void testGetFullName(){
+        System.out.println("getFullName");
+
+        List<PreDefAvatar> list = loadList();
+
+        assertEquals("楽天家\u0020ゲルト", list.get(0).getFullName());
+
+        return;
+    }
+
+    /**
+     * Test of getJobTitle method, of class PreDefAvatar.
+     */
+    @Test
+    public void testGetJobTitle(){
+        System.out.println("getJobTitle");
+
+        List<PreDefAvatar> list = loadList();
+
+        assertEquals("楽天家", list.get(0).getJobTitle());
+
+        return;
+    }
+
+    /**
+     * Test of getShortName method, of class PreDefAvatar.
+     */
+    @Test
+    public void testGetShortName(){
+        System.out.println("getShortName");
+
+        List<PreDefAvatar> list = loadList();
+
+        assertEquals("ゲルト", list.get(0).getShortName());
+
+        return;
+    }
+
+    /**
+     * Test of getSerialNo method, of class PreDefAvatar.
+     */
+    @Test
+    public void testGetSerialNo(){
+        System.out.println("getSerialNo");
+
+        List<PreDefAvatar> list = loadList();
+
+        assertEquals(1, list.get(0).getSerialNo());
+
+        return;
+    }
+
+}
index ccdeadd..25dab7f 100644 (file)
-/*\r
- * License : The MIT License\r
- * Copyright(c) 2009 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-import org.junit.After;\r
-import org.junit.AfterClass;\r
-import org.junit.Before;\r
-import org.junit.BeforeClass;\r
-import org.junit.Test;\r
-import static org.junit.Assert.*;\r
-\r
-/**\r
- */\r
-public class SysEventTypeTest {\r
-\r
-    public SysEventTypeTest() {\r
-    }\r
-\r
-    @BeforeClass\r
-    public static void setUpClass() throws Exception{\r
-    }\r
-\r
-    @AfterClass\r
-    public static void tearDownClass() throws Exception{\r
-    }\r
-\r
-    @Before\r
-    public void setUp() {\r
-    }\r
-\r
-    @After\r
-    public void tearDown() {\r
-    }\r
-\r
-    /**\r
-     * Test of values method, of class SysEventType.\r
-     */\r
-    @Test\r
-    public void testValues(){\r
-        System.out.println("values");\r
-        SysEventType[] values = SysEventType.values();\r
-        assertEquals(29, values.length);\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of valueOf method, of class SysEventType.\r
-     */\r
-    @Test\r
-    public void testValueOf(){\r
-        // NOTHING\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getEventFamily method, of class SysEventType.\r
-     */\r
-    @Test\r
-    public void testGetEventFamily(){\r
-        System.out.println("getEventFamily");\r
-\r
-        SysEventType[] values = SysEventType.values();\r
-\r
-        for(SysEventType type : values){\r
-            switch(type){\r
-            case STARTENTRY:\r
-            case ONSTAGE:\r
-            case STARTMIRROR:\r
-            case OPENROLE:\r
-            case MURDERED:\r
-            case STARTASSAULT:\r
-            case SURVIVOR:\r
-            case COUNTING:\r
-            case SUDDENDEATH:\r
-            case NOMURDER:\r
-            case WINVILLAGE:\r
-            case WINWOLF:\r
-            case WINHAMSTER:\r
-            case PLAYERLIST:\r
-            case PANIC:\r
-            case EXECUTION:\r
-            case VANISH:\r
-            case CHECKOUT:\r
-            case SHORTMEMBER:\r
-                assertEquals(EventFamily.ANNOUNCE, type.getEventFamily());\r
-                break;\r
-            case ASKENTRY:\r
-            case ASKCOMMIT:\r
-            case NOCOMMENT:\r
-            case STAYEPILOGUE:\r
-            case GAMEOVER:\r
-                assertEquals(EventFamily.ORDER, type.getEventFamily());\r
-                break;\r
-            case JUDGE:\r
-            case GUARD:\r
-            case COUNTING2:\r
-                assertEquals(EventFamily.EXTRA, type.getEventFamily());\r
-                break;\r
-            case ASSAULT:\r
-            case UNKNOWN:\r
-                assertNull(type.getEventFamily());\r
-                break;\r
-            default:\r
-                fail();\r
-                break;\r
-            }\r
-        }\r
-\r
-        return;\r
-    }\r
-\r
-}\r
+/*
+ * License : The MIT License
+ * Copyright(c) 2009 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+/**
+ */
+public class SysEventTypeTest {
+
+    public SysEventTypeTest() {
+    }
+
+    @BeforeClass
+    public static void setUpClass() throws Exception{
+    }
+
+    @AfterClass
+    public static void tearDownClass() throws Exception{
+    }
+
+    @Before
+    public void setUp() {
+    }
+
+    @After
+    public void tearDown() {
+    }
+
+    /**
+     * Test of values method, of class SysEventType.
+     */
+    @Test
+    public void testValues(){
+        System.out.println("values");
+        SysEventType[] values = SysEventType.values();
+        assertEquals(29, values.length);
+        return;
+    }
+
+    /**
+     * Test of valueOf method, of class SysEventType.
+     */
+    @Test
+    public void testValueOf(){
+        // NOTHING
+        return;
+    }
+
+    /**
+     * Test of getEventFamily method, of class SysEventType.
+     */
+    @Test
+    public void testGetEventFamily(){
+        System.out.println("getEventFamily");
+
+        SysEventType[] values = SysEventType.values();
+
+        for(SysEventType type : values){
+            switch(type){
+            case STARTENTRY:
+            case ONSTAGE:
+            case STARTMIRROR:
+            case OPENROLE:
+            case MURDERED:
+            case STARTASSAULT:
+            case SURVIVOR:
+            case COUNTING:
+            case SUDDENDEATH:
+            case NOMURDER:
+            case WINVILLAGE:
+            case WINWOLF:
+            case WINHAMSTER:
+            case PLAYERLIST:
+            case PANIC:
+            case EXECUTION:
+            case VANISH:
+            case CHECKOUT:
+            case SHORTMEMBER:
+                assertEquals(EventFamily.ANNOUNCE, type.getEventFamily());
+                break;
+            case ASKENTRY:
+            case ASKCOMMIT:
+            case NOCOMMENT:
+            case STAYEPILOGUE:
+            case GAMEOVER:
+                assertEquals(EventFamily.ORDER, type.getEventFamily());
+                break;
+            case JUDGE:
+            case GUARD:
+            case COUNTING2:
+                assertEquals(EventFamily.EXTRA, type.getEventFamily());
+                break;
+            case ASSAULT:
+            case UNKNOWN:
+                assertNull(type.getEventFamily());
+                break;
+            default:
+                fail();
+                break;
+            }
+        }
+
+        return;
+    }
+
+}
index 84721f8..88f0799 100644 (file)
@@ -1,71 +1,71 @@
-/*\r
- * License : The MIT License\r
- * Copyright(c) 2009 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-import org.junit.After;\r
-import org.junit.AfterClass;\r
-import org.junit.Before;\r
-import org.junit.BeforeClass;\r
-import org.junit.Test;\r
-import static org.junit.Assert.*;\r
-\r
-/**\r
- */\r
-public class TalkTypeTest {\r
-\r
-    public TalkTypeTest() {\r
-    }\r
-\r
-    @BeforeClass\r
-    public static void setUpClass() throws Exception{\r
-    }\r
-\r
-    @AfterClass\r
-    public static void tearDownClass() throws Exception{\r
-    }\r
-\r
-    @Before\r
-    public void setUp() {\r
-    }\r
-\r
-    @After\r
-    public void tearDown() {\r
-    }\r
-\r
-    /**\r
-     * Test of values method, of class TalkType.\r
-     */\r
-    @Test\r
-    public void testValues(){\r
-        System.out.println("values");\r
-        TalkType[] values = TalkType.values();\r
-        assertEquals(4, values.length);\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of valueOf method, of class TalkType.\r
-     */\r
-    @Test\r
-    public void testValueOf(){\r
-        // NOTHING\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getXmlName method, of class TalkType.\r
-     */\r
-    @Test\r
-    public void testGetXmlName(){\r
-        System.out.println("getXmlName");\r
-        assertEquals("public", TalkType.PUBLIC.getXmlName());\r
-        assertEquals("wolf", TalkType.WOLFONLY.getXmlName());\r
-        assertEquals("private", TalkType.PRIVATE.getXmlName());\r
-        assertEquals("grave", TalkType.GRAVE.getXmlName());\r
-        return;\r
-    }\r
-\r
-}\r
+/*
+ * License : The MIT License
+ * Copyright(c) 2009 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+/**
+ */
+public class TalkTypeTest {
+
+    public TalkTypeTest() {
+    }
+
+    @BeforeClass
+    public static void setUpClass() throws Exception{
+    }
+
+    @AfterClass
+    public static void tearDownClass() throws Exception{
+    }
+
+    @Before
+    public void setUp() {
+    }
+
+    @After
+    public void tearDown() {
+    }
+
+    /**
+     * Test of values method, of class TalkType.
+     */
+    @Test
+    public void testValues(){
+        System.out.println("values");
+        TalkType[] values = TalkType.values();
+        assertEquals(4, values.length);
+        return;
+    }
+
+    /**
+     * Test of valueOf method, of class TalkType.
+     */
+    @Test
+    public void testValueOf(){
+        // NOTHING
+        return;
+    }
+
+    /**
+     * Test of getXmlName method, of class TalkType.
+     */
+    @Test
+    public void testGetXmlName(){
+        System.out.println("getXmlName");
+        assertEquals("public", TalkType.PUBLIC.getXmlName());
+        assertEquals("wolf", TalkType.WOLFONLY.getXmlName());
+        assertEquals("private", TalkType.PRIVATE.getXmlName());
+        assertEquals("grave", TalkType.GRAVE.getXmlName());
+        return;
+    }
+
+}
index 3ba4835..96ea6a5 100644 (file)
@@ -1,82 +1,82 @@
-/*\r
- * License : The MIT License\r
- * Copyright(c) 2009 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-import org.junit.After;\r
-import org.junit.AfterClass;\r
-import org.junit.Before;\r
-import org.junit.BeforeClass;\r
-import org.junit.Test;\r
-import static org.junit.Assert.*;\r
-\r
-/**\r
- */\r
-public class TeamTest {\r
-\r
-    public TeamTest() {\r
-    }\r
-\r
-    @BeforeClass\r
-    public static void setUpClass() throws Exception{\r
-    }\r
-\r
-    @AfterClass\r
-    public static void tearDownClass() throws Exception{\r
-    }\r
-\r
-    @Before\r
-    public void setUp() {\r
-    }\r
-\r
-    @After\r
-    public void tearDown() {\r
-    }\r
-\r
-    /**\r
-     * Test of values method, of class Team.\r
-     */\r
-    @Test\r
-    public void testValues(){\r
-        System.out.println("values");\r
-        Team[] values = Team.values();\r
-        assertEquals(3, values.length);\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of valueOf method, of class Team.\r
-     */\r
-    @Test\r
-    public void testValueOf(){\r
-        // NOTHING\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getTeamName method, of class Team.\r
-     */\r
-    @Test\r
-    public void testGetTeamName(){\r
-        System.out.println("getTeamName");\r
-        assertEquals("村陣営",       Team.VILLAGE.getTeamName());\r
-        assertEquals("狼陣営",       Team.WOLF.getTeamName());\r
-        assertEquals("ハムスター人間", Team.HAMSTER.getTeamName());\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getXmlName method, of class Team.\r
-     */\r
-    @Test\r
-    public void testGetXmlName(){\r
-        System.out.println("getXmlName");\r
-        assertEquals("village", Team.VILLAGE.getXmlName());\r
-        assertEquals("wolf", Team.WOLF.getXmlName());\r
-        assertEquals("hamster", Team.HAMSTER.getXmlName());\r
-        return;\r
-    }\r
-\r
-}\r
+/*
+ * License : The MIT License
+ * Copyright(c) 2009 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+/**
+ */
+public class TeamTest {
+
+    public TeamTest() {
+    }
+
+    @BeforeClass
+    public static void setUpClass() throws Exception{
+    }
+
+    @AfterClass
+    public static void tearDownClass() throws Exception{
+    }
+
+    @Before
+    public void setUp() {
+    }
+
+    @After
+    public void tearDown() {
+    }
+
+    /**
+     * Test of values method, of class Team.
+     */
+    @Test
+    public void testValues(){
+        System.out.println("values");
+        Team[] values = Team.values();
+        assertEquals(3, values.length);
+        return;
+    }
+
+    /**
+     * Test of valueOf method, of class Team.
+     */
+    @Test
+    public void testValueOf(){
+        // NOTHING
+        return;
+    }
+
+    /**
+     * Test of getTeamName method, of class Team.
+     */
+    @Test
+    public void testGetTeamName(){
+        System.out.println("getTeamName");
+        assertEquals("村陣営",       Team.VILLAGE.getTeamName());
+        assertEquals("狼陣営",       Team.WOLF.getTeamName());
+        assertEquals("ハムスター人間", Team.HAMSTER.getTeamName());
+        return;
+    }
+
+    /**
+     * Test of getXmlName method, of class Team.
+     */
+    @Test
+    public void testGetXmlName(){
+        System.out.println("getXmlName");
+        assertEquals("village", Team.VILLAGE.getXmlName());
+        assertEquals("wolf", Team.WOLF.getXmlName());
+        assertEquals("hamster", Team.HAMSTER.getXmlName());
+        return;
+    }
+
+}
index 54c99f4..7f61251 100644 (file)
@@ -1,72 +1,72 @@
-/*\r
- * License : The MIT License\r
- * Copyright(c) 2009 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-import org.junit.After;\r
-import org.junit.AfterClass;\r
-import org.junit.Before;\r
-import org.junit.BeforeClass;\r
-import org.junit.Test;\r
-import static org.junit.Assert.*;\r
-\r
-/**\r
- */\r
-public class VillageStateTest {\r
-\r
-    public VillageStateTest() {\r
-    }\r
-\r
-    @BeforeClass\r
-    public static void setUpClass() throws Exception{\r
-    }\r
-\r
-    @AfterClass\r
-    public static void tearDownClass() throws Exception{\r
-    }\r
-\r
-    @Before\r
-    public void setUp() {\r
-    }\r
-\r
-    @After\r
-    public void tearDown() {\r
-    }\r
-\r
-    /**\r
-     * Test of values method, of class VillageState.\r
-     */\r
-    @Test\r
-    public void testValues(){\r
-        System.out.println("values");\r
-        VillageState[] values = VillageState.values();\r
-        assertEquals(5, values.length);\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of valueOf method, of class VillageState.\r
-     */\r
-    @Test\r
-    public void testValueOf(){\r
-        // NOTHING\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getXmlName method, of class VillageState.\r
-     */\r
-    @Test\r
-    public void testGetXmlName(){\r
-        System.out.println("getXmlName");\r
-        assertEquals("prologue", VillageState.PROLOGUE.getXmlName());\r
-        assertEquals("progress", VillageState.PROGRESS.getXmlName());\r
-        assertEquals("epilogue", VillageState.EPILOGUE.getXmlName());\r
-        assertEquals("gameover", VillageState.GAMEOVER.getXmlName());\r
-        assertEquals("unknown", VillageState.UNKNOWN.getXmlName());\r
-        return;\r
-    }\r
-\r
-}\r
+/*
+ * License : The MIT License
+ * Copyright(c) 2009 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+/**
+ */
+public class VillageStateTest {
+
+    public VillageStateTest() {
+    }
+
+    @BeforeClass
+    public static void setUpClass() throws Exception{
+    }
+
+    @AfterClass
+    public static void tearDownClass() throws Exception{
+    }
+
+    @Before
+    public void setUp() {
+    }
+
+    @After
+    public void tearDown() {
+    }
+
+    /**
+     * Test of values method, of class VillageState.
+     */
+    @Test
+    public void testValues(){
+        System.out.println("values");
+        VillageState[] values = VillageState.values();
+        assertEquals(5, values.length);
+        return;
+    }
+
+    /**
+     * Test of valueOf method, of class VillageState.
+     */
+    @Test
+    public void testValueOf(){
+        // NOTHING
+        return;
+    }
+
+    /**
+     * Test of getXmlName method, of class VillageState.
+     */
+    @Test
+    public void testGetXmlName(){
+        System.out.println("getXmlName");
+        assertEquals("prologue", VillageState.PROLOGUE.getXmlName());
+        assertEquals("progress", VillageState.PROGRESS.getXmlName());
+        assertEquals("epilogue", VillageState.EPILOGUE.getXmlName());
+        assertEquals("gameover", VillageState.GAMEOVER.getXmlName());
+        assertEquals("unknown", VillageState.UNKNOWN.getXmlName());
+        return;
+    }
+
+}
index 8c93ad9..588367f 100644 (file)
-/*\r
- * License : The MIT License\r
- * Copyright(c) 2009 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-import java.util.regex.Matcher;\r
-import java.util.regex.Pattern;\r
-import org.junit.After;\r
-import org.junit.AfterClass;\r
-import org.junit.Before;\r
-import org.junit.BeforeClass;\r
-import org.junit.Test;\r
-import static org.junit.Assert.*;\r
-\r
-/**\r
- */\r
-public class VillageTagTest {\r
-\r
-    public VillageTagTest() {\r
-    }\r
-\r
-    @BeforeClass\r
-    public static void setUpClass() throws Exception{\r
-    }\r
-\r
-    @AfterClass\r
-    public static void tearDownClass() throws Exception{\r
-    }\r
-\r
-    @Before\r
-    public void setUp() {\r
-    }\r
-\r
-    @After\r
-    public void tearDown() {\r
-    }\r
-\r
-    /**\r
-     * Test of values method, of class VillageTag.\r
-     */\r
-    @Test\r
-    public void testValues(){\r
-        System.out.println("values");\r
-        VillageTag[] values = VillageTag.values();\r
-        assertEquals(42, values.length);\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of valueOf method, of class VillageTag.\r
-     */\r
-    @Test\r
-    public void testValueOf(){\r
-        // NOTHING\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of tagNameToVillageTag method, of class VillageTag.\r
-     */\r
-    @Test\r
-    public void testTagNameToVillageTag(){\r
-        System.out.println("tagNameToVillageTag");\r
-\r
-        for(VillageTag tag : VillageTag.values()){\r
-            String tagName = tag.getTagName();\r
-            assertEquals(tag, VillageTag.tagNameToVillageTag(tagName));\r
-        }\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getTagName method, of class VillageTag.\r
-     */\r
-    @Test\r
-    public void testGetTagName(){\r
-        System.out.println("getTagName");\r
-        assertEquals("平凡な村", VillageTag.HEIBON.getTagName());\r
-        assertEquals("星狩りの村", VillageTag.HOSHIKARI.getTagName());\r
-        assertEquals("日の差さぬ村", VillageTag.HINOSASANU.getTagName());\r
-        assertEquals("隠された村", VillageTag.KAKUSARETA.getTagName());\r
-        assertEquals("日の沈まぬ村", VillageTag.HINOSHIZUMANU.getTagName());\r
-        assertEquals("消え行く村", VillageTag.KIEYUKU.getTagName());\r
-        assertEquals("怪しげな村", VillageTag.AYASHIGE.getTagName());\r
-        assertEquals("山影の村", VillageTag.YAMAKAGE.getTagName());\r
-        assertEquals("平和な村", VillageTag.HEIWA.getTagName());\r
-        assertEquals("嘘つきの村", VillageTag.USOTSUKI.getTagName());\r
-        assertEquals("悲しみの村", VillageTag.KANASHIMI.getTagName());\r
-        assertEquals("恐ろしい村", VillageTag.OSOROSHII.getTagName());\r
-        assertEquals("盆地の村", VillageTag.BONCHI.getTagName());\r
-        assertEquals("幻の村", VillageTag.MABOROSHI.getTagName());\r
-        assertEquals("謀略の村", VillageTag.BOURYAKU.getTagName());\r
-        assertEquals("最果ての村", VillageTag.SAIHATE.getTagName());\r
-        assertEquals("封印の村", VillageTag.HUUIN.getTagName());\r
-        assertEquals("海辺の村", VillageTag.UMIBE.getTagName());\r
-        assertEquals("開拓者の村", VillageTag.KAITAKUSHA.getTagName());\r
-        assertEquals("断崖の村", VillageTag.DANGAI.getTagName());\r
-        assertEquals("出会いの村", VillageTag.DEAI.getTagName());\r
-        assertEquals("ふもとの村", VillageTag.HUMOTO.getTagName());\r
-        assertEquals("峠の村", VillageTag.TOUGE.getTagName());\r
-        assertEquals("血塗られた村", VillageTag.CHINURARETA.getTagName());\r
-        assertEquals("僻地の村", VillageTag.HEKICHI.getTagName());\r
-        assertEquals("安らぎの村", VillageTag.YASURAGI.getTagName());\r
-        assertEquals("最後の村", VillageTag.SAIGO.getTagName());\r
-        assertEquals("疑心暗鬼の村", VillageTag.GISHINANKI.getTagName());\r
-        assertEquals("呪われた村", VillageTag.NOROWARETA.getTagName());\r
-        assertEquals("新緑の村", VillageTag.SHINRYOKU.getTagName());\r
-        assertEquals("荒地の村", VillageTag.ARECHI.getTagName());\r
-        assertEquals("残された村", VillageTag.NOKOSARETA.getTagName());\r
-        assertEquals("小さな村", VillageTag.CHIISANA.getTagName());\r
-        assertEquals("極寒の村", VillageTag.GOKUKAN.getTagName());\r
-        assertEquals("見捨てられた村", VillageTag.MISUTERARETA.getTagName());\r
-        assertEquals("希望の村", VillageTag.KIBOU.getTagName());\r
-        assertEquals("裏切りの村", VillageTag.URAGIRI.getTagName());\r
-        assertEquals("沈黙の村", VillageTag.CHINMOKU.getTagName());\r
-        assertEquals("雨の止まぬ村", VillageTag.AMENOYAMANU.getTagName());\r
-        assertEquals("辺境の村", VillageTag.HENKYOU.getTagName());\r
-        assertEquals("忘れられた村", VillageTag.WASURERARETA.getTagName());\r
-        assertEquals("谷底の村", VillageTag.TANIZOKO.getTagName());\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getNextVillageTag method, of class VillageTag.\r
-     */\r
-    @Test\r
-    public void testGetNextVillageTag(){\r
-        System.out.println("getNextVillageTag");\r
-\r
-        VillageTag[] values = VillageTag.values();\r
-        for(int idx=0; idx <= values.length-1-1; idx++){\r
-            VillageTag tag = values[idx];\r
-            VillageTag next = values[idx+1];\r
-            assertEquals(next, tag.getNextVillageTag());\r
-        }\r
-\r
-        VillageTag last = values[values.length-1];\r
-        assertEquals(values[0], last.getNextVillageTag());\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of getPrevVillageTag method, of class VillageTag.\r
-     */\r
-    @Test\r
-    public void testGetPrevVillageTag(){\r
-        System.out.println("getPrevVillageTag");\r
-\r
-        VillageTag[] values = VillageTag.values();\r
-        for(int idx=1; idx <= values.length-1; idx++){\r
-            VillageTag tag = values[idx];\r
-            VillageTag prev = values[idx-1];\r
-            assertEquals(prev, tag.getPrevVillageTag());\r
-        }\r
-\r
-        VillageTag top = values[0];\r
-        assertEquals(values[values.length-1], top.getPrevVillageTag());\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of lookingAtVillageTag method, of class VillageTag.\r
-     */\r
-    @Test\r
-    public void testLookingAtVillageTag(){\r
-        System.out.println("lookingAtVillageTag");\r
-\r
-        Pattern pattern = Pattern.compile("");\r
-\r
-        Matcher matcher;\r
-\r
-        matcher = pattern.matcher("平凡な村");\r
-        assertEquals(VillageTag.HEIBON, VillageTag.lookingAtVillageTag(matcher));\r
-\r
-        matcher = pattern.matcher("谷底の村");\r
-        assertEquals(VillageTag.TANIZOKO, VillageTag.lookingAtVillageTag(matcher));\r
-\r
-        matcher = pattern.matcher("x平凡な村");\r
-        assertNull(VillageTag.lookingAtVillageTag(matcher));\r
-\r
-        matcher = pattern.matcher("x平凡な村x");\r
-        assertNull(VillageTag.lookingAtVillageTag(matcher));\r
-\r
-        matcher = pattern.matcher("平");\r
-        assertNull(VillageTag.lookingAtVillageTag(matcher));\r
-\r
-        matcher = pattern.matcher("平凡な村x");\r
-        assertEquals(VillageTag.HEIBON, VillageTag.lookingAtVillageTag(matcher));\r
-\r
-        matcher = pattern.matcher("");\r
-        assertNull(VillageTag.lookingAtVillageTag(matcher));\r
-\r
-        matcher = pattern.matcher("xxx");\r
-        assertNull(VillageTag.lookingAtVillageTag(matcher));\r
-\r
-        return;\r
-    }\r
-\r
-}\r
+/*
+ * License : The MIT License
+ * Copyright(c) 2009 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+/**
+ */
+public class VillageTagTest {
+
+    public VillageTagTest() {
+    }
+
+    @BeforeClass
+    public static void setUpClass() throws Exception{
+    }
+
+    @AfterClass
+    public static void tearDownClass() throws Exception{
+    }
+
+    @Before
+    public void setUp() {
+    }
+
+    @After
+    public void tearDown() {
+    }
+
+    /**
+     * Test of values method, of class VillageTag.
+     */
+    @Test
+    public void testValues(){
+        System.out.println("values");
+        VillageTag[] values = VillageTag.values();
+        assertEquals(42, values.length);
+        return;
+    }
+
+    /**
+     * Test of valueOf method, of class VillageTag.
+     */
+    @Test
+    public void testValueOf(){
+        // NOTHING
+        return;
+    }
+
+    /**
+     * Test of tagNameToVillageTag method, of class VillageTag.
+     */
+    @Test
+    public void testTagNameToVillageTag(){
+        System.out.println("tagNameToVillageTag");
+
+        for(VillageTag tag : VillageTag.values()){
+            String tagName = tag.getTagName();
+            assertEquals(tag, VillageTag.tagNameToVillageTag(tagName));
+        }
+
+        return;
+    }
+
+    /**
+     * Test of getTagName method, of class VillageTag.
+     */
+    @Test
+    public void testGetTagName(){
+        System.out.println("getTagName");
+        assertEquals("平凡な村", VillageTag.HEIBON.getTagName());
+        assertEquals("星狩りの村", VillageTag.HOSHIKARI.getTagName());
+        assertEquals("日の差さぬ村", VillageTag.HINOSASANU.getTagName());
+        assertEquals("隠された村", VillageTag.KAKUSARETA.getTagName());
+        assertEquals("日の沈まぬ村", VillageTag.HINOSHIZUMANU.getTagName());
+        assertEquals("消え行く村", VillageTag.KIEYUKU.getTagName());
+        assertEquals("怪しげな村", VillageTag.AYASHIGE.getTagName());
+        assertEquals("山影の村", VillageTag.YAMAKAGE.getTagName());
+        assertEquals("平和な村", VillageTag.HEIWA.getTagName());
+        assertEquals("嘘つきの村", VillageTag.USOTSUKI.getTagName());
+        assertEquals("悲しみの村", VillageTag.KANASHIMI.getTagName());
+        assertEquals("恐ろしい村", VillageTag.OSOROSHII.getTagName());
+        assertEquals("盆地の村", VillageTag.BONCHI.getTagName());
+        assertEquals("幻の村", VillageTag.MABOROSHI.getTagName());
+        assertEquals("謀略の村", VillageTag.BOURYAKU.getTagName());
+        assertEquals("最果ての村", VillageTag.SAIHATE.getTagName());
+        assertEquals("封印の村", VillageTag.HUUIN.getTagName());
+        assertEquals("海辺の村", VillageTag.UMIBE.getTagName());
+        assertEquals("開拓者の村", VillageTag.KAITAKUSHA.getTagName());
+        assertEquals("断崖の村", VillageTag.DANGAI.getTagName());
+        assertEquals("出会いの村", VillageTag.DEAI.getTagName());
+        assertEquals("ふもとの村", VillageTag.HUMOTO.getTagName());
+        assertEquals("峠の村", VillageTag.TOUGE.getTagName());
+        assertEquals("血塗られた村", VillageTag.CHINURARETA.getTagName());
+        assertEquals("僻地の村", VillageTag.HEKICHI.getTagName());
+        assertEquals("安らぎの村", VillageTag.YASURAGI.getTagName());
+        assertEquals("最後の村", VillageTag.SAIGO.getTagName());
+        assertEquals("疑心暗鬼の村", VillageTag.GISHINANKI.getTagName());
+        assertEquals("呪われた村", VillageTag.NOROWARETA.getTagName());
+        assertEquals("新緑の村", VillageTag.SHINRYOKU.getTagName());
+        assertEquals("荒地の村", VillageTag.ARECHI.getTagName());
+        assertEquals("残された村", VillageTag.NOKOSARETA.getTagName());
+        assertEquals("小さな村", VillageTag.CHIISANA.getTagName());
+        assertEquals("極寒の村", VillageTag.GOKUKAN.getTagName());
+        assertEquals("見捨てられた村", VillageTag.MISUTERARETA.getTagName());
+        assertEquals("希望の村", VillageTag.KIBOU.getTagName());
+        assertEquals("裏切りの村", VillageTag.URAGIRI.getTagName());
+        assertEquals("沈黙の村", VillageTag.CHINMOKU.getTagName());
+        assertEquals("雨の止まぬ村", VillageTag.AMENOYAMANU.getTagName());
+        assertEquals("辺境の村", VillageTag.HENKYOU.getTagName());
+        assertEquals("忘れられた村", VillageTag.WASURERARETA.getTagName());
+        assertEquals("谷底の村", VillageTag.TANIZOKO.getTagName());
+        return;
+    }
+
+    /**
+     * Test of getNextVillageTag method, of class VillageTag.
+     */
+    @Test
+    public void testGetNextVillageTag(){
+        System.out.println("getNextVillageTag");
+
+        VillageTag[] values = VillageTag.values();
+        for(int idx=0; idx <= values.length-1-1; idx++){
+            VillageTag tag = values[idx];
+            VillageTag next = values[idx+1];
+            assertEquals(next, tag.getNextVillageTag());
+        }
+
+        VillageTag last = values[values.length-1];
+        assertEquals(values[0], last.getNextVillageTag());
+
+        return;
+    }
+
+    /**
+     * Test of getPrevVillageTag method, of class VillageTag.
+     */
+    @Test
+    public void testGetPrevVillageTag(){
+        System.out.println("getPrevVillageTag");
+
+        VillageTag[] values = VillageTag.values();
+        for(int idx=1; idx <= values.length-1; idx++){
+            VillageTag tag = values[idx];
+            VillageTag prev = values[idx-1];
+            assertEquals(prev, tag.getPrevVillageTag());
+        }
+
+        VillageTag top = values[0];
+        assertEquals(values[values.length-1], top.getPrevVillageTag());
+
+        return;
+    }
+
+    /**
+     * Test of lookingAtVillageTag method, of class VillageTag.
+     */
+    @Test
+    public void testLookingAtVillageTag(){
+        System.out.println("lookingAtVillageTag");
+
+        Pattern pattern = Pattern.compile("");
+
+        Matcher matcher;
+
+        matcher = pattern.matcher("平凡な村");
+        assertEquals(VillageTag.HEIBON, VillageTag.lookingAtVillageTag(matcher));
+
+        matcher = pattern.matcher("谷底の村");
+        assertEquals(VillageTag.TANIZOKO, VillageTag.lookingAtVillageTag(matcher));
+
+        matcher = pattern.matcher("x平凡な村");
+        assertNull(VillageTag.lookingAtVillageTag(matcher));
+
+        matcher = pattern.matcher("x平凡な村x");
+        assertNull(VillageTag.lookingAtVillageTag(matcher));
+
+        matcher = pattern.matcher("平");
+        assertNull(VillageTag.lookingAtVillageTag(matcher));
+
+        matcher = pattern.matcher("平凡な村x");
+        assertEquals(VillageTag.HEIBON, VillageTag.lookingAtVillageTag(matcher));
+
+        matcher = pattern.matcher("");
+        assertNull(VillageTag.lookingAtVillageTag(matcher));
+
+        matcher = pattern.matcher("xxx");
+        assertNull(VillageTag.lookingAtVillageTag(matcher));
+
+        return;
+    }
+
+}
index 17b1028..93b47f6 100644 (file)
@@ -1,97 +1,97 @@
-/*\r
- * License : The MIT License\r
- * Copyright(c) 2009 olyutorskii\r
- */\r
-\r
-package jp.sourceforge.jindolf.corelib;\r
-\r
-import java.io.IOException;\r
-import java.net.URI;\r
-import java.util.Map;\r
-import org.junit.After;\r
-import org.junit.AfterClass;\r
-import org.junit.Before;\r
-import org.junit.BeforeClass;\r
-import org.junit.Test;\r
-import static org.junit.Assert.*;\r
-\r
-/**\r
- */\r
-public class XmlResourceTest {\r
-\r
-    public XmlResourceTest() {\r
-    }\r
-\r
-    @BeforeClass\r
-    public static void setUpClass() throws Exception{\r
-    }\r
-\r
-    @AfterClass\r
-    public static void tearDownClass() throws Exception{\r
-    }\r
-\r
-    @Before\r
-    public void setUp() {\r
-    }\r
-\r
-    @After\r
-    public void tearDown() {\r
-    }\r
-\r
-    /**\r
-     * Test of static field.\r
-     */\r
-    @Test\r
-    public void testStaticField(){\r
-        System.out.println("staticfields");\r
-        Map<URI, URI> map = XmlResource.RESOLVE_MAP;\r
-        assertNotNull(map);\r
-\r
-        assertEquals(XmlResource.I_URI_EXTXML, map.get(XmlResource.O_URI_EXTXML));\r
-        assertEquals(XmlResource.I_URI_CORETYPE, map.get(XmlResource.O_URI_CORETYPE));\r
-        assertEquals(XmlResource.I_URI_COREXML, map.get(XmlResource.O_URI_COREXML));\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of resource.\r
-     */\r
-    @Test\r
-    public void testResource(){\r
-        System.out.println("resource");\r
-        Map<URI, URI> map = XmlResource.RESOLVE_MAP;\r
-\r
-        for(Map.Entry<URI,URI> entry : map.entrySet()){\r
-            URI in = entry.getValue();\r
-            try{\r
-                in.toURL().openStream();\r
-            }catch(IOException e){\r
-                fail();\r
-            }\r
-        }\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * Test of net resource.\r
-     */\r
-//  @Test\r
-    public void nettestNetResource(){\r
-        System.out.println("netresource");\r
-        Map<URI, URI> map = XmlResource.RESOLVE_MAP;\r
-\r
-        for(Map.Entry<URI,URI> entry : map.entrySet()){\r
-            URI out = entry.getKey();\r
-            try{\r
-                out.toURL().openStream();\r
-            }catch(IOException e){\r
-                fail();\r
-            }\r
-        }\r
-\r
-        return;\r
-    }\r
-\r
-}\r
+/*
+ * License : The MIT License
+ * Copyright(c) 2009 olyutorskii
+ */
+
+package jp.sourceforge.jindolf.corelib;
+
+import java.io.IOException;
+import java.net.URI;
+import java.util.Map;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+/**
+ */
+public class XmlResourceTest {
+
+    public XmlResourceTest() {
+    }
+
+    @BeforeClass
+    public static void setUpClass() throws Exception{
+    }
+
+    @AfterClass
+    public static void tearDownClass() throws Exception{
+    }
+
+    @Before
+    public void setUp() {
+    }
+
+    @After
+    public void tearDown() {
+    }
+
+    /**
+     * Test of static field.
+     */
+    @Test
+    public void testStaticField(){
+        System.out.println("staticfields");
+        Map<URI, URI> map = XmlResource.RESOLVE_MAP;
+        assertNotNull(map);
+
+        assertEquals(XmlResource.I_URI_EXTXML, map.get(XmlResource.O_URI_EXTXML));
+        assertEquals(XmlResource.I_URI_CORETYPE, map.get(XmlResource.O_URI_CORETYPE));
+        assertEquals(XmlResource.I_URI_COREXML, map.get(XmlResource.O_URI_COREXML));
+
+        return;
+    }
+
+    /**
+     * Test of resource.
+     */
+    @Test
+    public void testResource(){
+        System.out.println("resource");
+        Map<URI, URI> map = XmlResource.RESOLVE_MAP;
+
+        for(Map.Entry<URI,URI> entry : map.entrySet()){
+            URI in = entry.getValue();
+            try{
+                in.toURL().openStream();
+            }catch(IOException e){
+                fail();
+            }
+        }
+
+        return;
+    }
+
+    /**
+     * Test of net resource.
+     */
+//  @Test
+    public void nettestNetResource(){
+        System.out.println("netresource");
+        Map<URI, URI> map = XmlResource.RESOLVE_MAP;
+
+        for(Map.Entry<URI,URI> entry : map.entrySet()){
+            URI out = entry.getKey();
+            try{
+                out.toURL().openStream();
+            }catch(IOException e){
+                fail();
+            }
+        }
+
+        return;
+    }
+
+}