OSDN Git Service

Systemクラスの隠蔽
authorOlyutorskii <olyutorskii@users.osdn.me>
Fri, 15 Apr 2011 12:33:41 +0000 (21:33 +0900)
committerOlyutorskii <olyutorskii@users.osdn.me>
Fri, 15 Apr 2011 12:33:41 +0000 (21:33 +0900)
Maven風バージョン管理

src/main/java/jp/sourceforge/jindolf/archiver/JinArchiver.java

index c5a3b04..d2cb172 100644 (file)
@@ -11,11 +11,13 @@ import java.io.BufferedWriter;
 import java.io.File;\r
 import java.io.FileOutputStream;\r
 import java.io.IOException;\r
+import java.io.InputStream;\r
 import java.io.OutputStream;\r
 import java.io.OutputStreamWriter;\r
 import java.io.Writer;\r
 import java.text.MessageFormat;\r
 import java.util.List;\r
+import java.util.Properties;\r
 import javax.xml.parsers.DocumentBuilder;\r
 import javax.xml.parsers.DocumentBuilderFactory;\r
 import jp.sourceforge.jindolf.corelib.LandDef;\r
@@ -26,11 +28,32 @@ import jp.sourceforge.jindolf.parser.HtmlParseException;
  * メインエントリ。\r
  */\r
 public final class JinArchiver{\r
+\r
+    /** このClass。 */\r
+    private static final Class<?> SELF_KLASS;\r
+    /** このPackage。 */\r
+    private static final Package  SELF_PACKAGE;\r
+    /** タイトル。 */\r
+    private static final String TITLE;\r
+    /** バージョン。 */\r
+    private static final String VERSION;\r
     /** Generator. */\r
-    public static final String GENERATOR = "JinArchiver 1.401.2";\r
+    private static final String GENERATOR;\r
+\r
     private static final List<LandDef> LANDDEF_LIST;\r
 \r
+    /** バージョン定義リソース。 */\r
+    private static final String RES_VERDEF = "resources/version.properties";\r
+\r
     static{\r
+        SELF_KLASS   = JinArchiver.class;\r
+        SELF_PACKAGE = SELF_KLASS.getPackage();\r
+\r
+        Properties verProp = loadVersionDefinition(SELF_KLASS);\r
+        TITLE   = getPackageInfo(verProp, "pkg-title.",   "Unknown");\r
+        VERSION = getPackageInfo(verProp, "pkg-version.", "0");\r
+        GENERATOR = TITLE + " " + VERSION;\r
+\r
         DocumentBuilderFactory factory =\r
                 DocumentBuilderFactory.newInstance();\r
         try{\r
@@ -44,6 +67,83 @@ public final class JinArchiver{
     }\r
 \r
     /**\r
+     * リソース上のパッケージ定義プロパティをロードする。\r
+     * MANIFEST.MFが参照できない実行環境での代替品。\r
+     * @param klass パッケージを構成する任意のクラス\r
+     * @return プロパティ\r
+     */\r
+    private static Properties loadVersionDefinition(Class klass){\r
+        Properties result = new Properties();\r
+\r
+        InputStream istream = klass.getResourceAsStream(RES_VERDEF);\r
+        try{\r
+            result.load(istream);\r
+        }catch(IOException e){\r
+            return result;\r
+        }finally{\r
+            try{\r
+                istream.close();\r
+            }catch(IOException e){\r
+                return result;\r
+            }\r
+        }\r
+\r
+        return result;\r
+    }\r
+\r
+    /**\r
+     * リソース上のプロパティから\r
+     * このクラスのパッケージのパッケージ情報を取得する。\r
+     * MANIFEST.MFが参照できない実行環境での代替品。\r
+     * @param prop プロパティ\r
+     * @param prefix 接頭辞\r
+     * @param defValue 見つからなかった場合のデフォルト値\r
+     * @return パッケージ情報\r
+     */\r
+    private static String getPackageInfo(Properties prop,\r
+                                          String prefix,\r
+                                          String defValue){\r
+        return getPackageInfo(prop, SELF_PACKAGE, prefix, defValue);\r
+    }\r
+\r
+    /**\r
+     * リソース上のプロパティからパッケージ情報を取得する。\r
+     * MANIFEST.MFが参照できない実行環境での代替品。\r
+     * @param prop プロパティ\r
+     * @param pkg 任意のパッケージ\r
+     * @param prefix 接頭辞\r
+     * @param defValue デフォルト値\r
+     * @return 見つからなかった場合のパッケージ情報\r
+     */\r
+    private static String getPackageInfo(Properties prop,\r
+                                          Package pkg,\r
+                                          String prefix,\r
+                                          String defValue){\r
+        String propName = prefix + pkg.getName();\r
+        String result = prop.getProperty(propName, defValue);\r
+        return result;\r
+    }\r
+\r
+    /**\r
+     * System.err.println()のWrapper。\r
+     * @param text 出力テキスト\r
+     */\r
+    private static void errprintln(CharSequence text){\r
+        System.err.println(text);\r
+        return;\r
+    }\r
+\r
+    /**\r
+     * プログラムの終了。\r
+     * @param code プロセスコード。\r
+     */\r
+    private static void exit(int code){\r
+        System.exit(code);\r
+        assert false;\r
+        return;\r
+    }\r
+\r
+    /**\r
      * 国IDから国情報を得る。\r
      * @param landId 国ID\r
      * @return 国情報\r
@@ -59,7 +159,7 @@ public final class JinArchiver{
      * ヘルプメッセージ出力。\r
      */\r
     private static void helpMessage(){\r
-        System.err.println(\r
+        errprintln(\r
                 "\n" + GENERATOR + " 人狼BBS アーカイブ作成ツール\n\n"\r
                 +"-h, -help, -?\n\tヘルプメッセージ\n"\r
                 +"-land 国識別子\n"\r
@@ -72,9 +172,8 @@ public final class JinArchiver{
         for(LandDef landDef : LANDDEF_LIST){\r
             landList.append(landDef.getLandId()).append(' ');\r
         }\r
-        System.err.print("利用可能な国識別子は ");\r
-        System.err.println(landList);\r
-        System.err.println();\r
+        errprintln("利用可能な国識別子は " + landList + "\n");\r
+\r
         return;\r
     }\r
 \r
@@ -85,7 +184,7 @@ public final class JinArchiver{
     private static void parseOption(String[] args){\r
         if(args.length <= 0){\r
             helpMessage();\r
-            System.exit(0);\r
+            exit(0);\r
             return;\r
         }\r
 \r
@@ -98,14 +197,14 @@ public final class JinArchiver{
             String arg = args[pos];\r
 \r
             if( ! arg.startsWith("-") ){\r
-                System.err.println("不正なオプションです。 " + arg);\r
-                System.exit(1);\r
+                errprintln("不正なオプションです。 " + arg);\r
+                exit(1);\r
                 return;\r
             }\r
 \r
             if(arg.equals("-h") || arg.equals("-help") || arg.equals("-?")){\r
                 helpMessage();\r
-                System.exit(0);\r
+                exit(0);\r
                 return;\r
             }\r
 \r
@@ -116,9 +215,9 @@ public final class JinArchiver{
             }\r
 \r
             if(++pos >= args.length){\r
-                System.err.println(\r
+                errprintln(\r
                         "オプション " + arg + " に引数がありません。");\r
-                System.exit(1);\r
+                exit(1);\r
                 return;\r
             }\r
 \r
@@ -126,46 +225,46 @@ public final class JinArchiver{
             if(arg.equals("-land")){\r
                 landDef = getLandDef(val);\r
                 if(landDef == null){\r
-                    System.err.println("不正な国識別子です。 " + val);\r
-                    System.exit(1);\r
+                    errprintln("不正な国識別子です。 " + val);\r
+                    exit(1);\r
                     return;\r
                 }\r
             }else if(arg.equals("-vid")){\r
                 vid = Integer.parseInt(val);\r
                 if(vid < 0){\r
-                    System.err.println("不正な村番号です。 " + vid);\r
-                    System.exit(1);\r
+                    errprintln("不正な村番号です。 " + vid);\r
+                    exit(1);\r
                     return;\r
                 }\r
             }else if(arg.equals("-outdir")){\r
                 outdir = val;\r
                 stdout = false;\r
             }else{\r
-                System.err.println("不正なオプションです。 " + arg);\r
-                System.exit(1);\r
+                errprintln("不正なオプションです。 " + arg);\r
+                exit(1);\r
                 return;\r
             }\r
         }\r
 \r
         if(landDef == null){\r
-            System.err.println(\r
+            errprintln(\r
                     "-land オプションで国識別子を指定してください。");\r
-            System.exit(1);\r
+            exit(1);\r
             return;\r
         }\r
 \r
         if(vid < 0){\r
-            System.err.println(\r
+            errprintln(\r
                     "-vid オプションで村番号を指定してください。");\r
-            System.exit(1);\r
+            exit(1);\r
             return;\r
         }\r
 \r
         if(   (outdir == null && stdout == false)\r
            || (outdir != null && stdout == true)  ){\r
-            System.err.println(\r
+            errprintln(\r
                     "-outdir か -stdout のどちらか一方を指定してください。");\r
-            System.exit(1);\r
+            exit(1);\r
             return;\r
         }\r
 \r
@@ -184,8 +283,8 @@ public final class JinArchiver{
             throw e;\r
         }catch(Exception e){\r
             e.printStackTrace(System.err);\r
-            System.err.println("処理を続行できません。");\r
-            System.exit(1);\r
+            errprintln("処理を続行できません。");\r
+            exit(1);\r
             return;\r
         }\r
 \r
@@ -225,9 +324,9 @@ public final class JinArchiver{
             writer = new OutputStreamWriter(ostream, "UTF-8");\r
             writer = new BufferedWriter(writer, 4 * 1024);\r
         }catch(IOException e){\r
-            System.err.println(\r
+            errprintln(\r
                     "標準出力に書き込めません。");\r
-            System.exit(1);\r
+            exit(1);\r
             return null;\r
         }\r
         return writer;\r
@@ -245,21 +344,21 @@ public final class JinArchiver{
                                          int vid ){\r
             File outFile = new File(outdir);\r
             if( ! outFile.exists() ){\r
-                System.err.println(\r
+                errprintln(\r
                         outdir + " が存在しません。");\r
-                System.exit(1);\r
+                exit(1);\r
                 return null;\r
             }\r
             if( ! outFile.isDirectory() ){\r
-                System.err.println(\r
+                errprintln(\r
                         outdir + " はディレクトリではありません。");\r
-                System.exit(1);\r
+                exit(1);\r
                 return null;\r
             }\r
             if( ! outFile.canWrite() ){\r
-                System.err.println(\r
+                errprintln(\r
                         outdir + " に書き込めません。");\r
-                System.exit(1);\r
+                exit(1);\r
                 return null;\r
             }\r
             String fname = MessageFormat.format(\r
@@ -269,15 +368,15 @@ public final class JinArchiver{
             try{\r
                 created = xmlFile.createNewFile();\r
             }catch(IOException e){\r
-                System.err.println(\r
+                errprintln(\r
                         xmlFile.getName() + " が作成できません。");\r
-                System.exit(1);\r
+                exit(1);\r
                 return null;\r
             }\r
             if( ! created ){\r
-                System.err.println(\r
+                errprintln(\r
                         fname + " が既に" + outdir + "に存在します。");\r
-                System.exit(1);\r
+                exit(1);\r
                 return null;\r
             }\r
             /* JRE 1.6 only\r
@@ -293,9 +392,9 @@ public final class JinArchiver{
                 writer = new OutputStreamWriter(ostream, "UTF-8");\r
                 writer = new BufferedWriter(writer, 4 * 1024);\r
             }catch(IOException e){\r
-                System.err.println(\r
+                errprintln(\r
                         xmlFile.getName() + " に書き込めません。");\r
-                System.exit(1);\r
+                exit(1);\r
                 return null;\r
             }\r
 \r
@@ -308,7 +407,7 @@ public final class JinArchiver{
      */\r
     public static void main(String[] args){\r
         parseOption(args);\r
-        System.exit(0);\r
+        exit(0);\r
         return;\r
     }\r
 \r