OSDN Git Service

flattened boot logging.
[jindolf/Jindolf.git] / src / main / java / jp / sfjp / jindolf / VerInfo.java
1 /*
2  * version information
3  *
4  * License : The MIT License
5  * Copyright(c) 2011 olyutorskii
6  */
7
8 package jp.sfjp.jindolf;
9
10 import java.text.MessageFormat;
11 import java.util.Properties;
12
13 /**
14  * バージョンその他アプリに関する各種情報。
15  */
16 public final class VerInfo {
17
18     /** タイトル。 */
19     public static final String TITLE;
20     /** バージョン。 */
21     public static final String VERSION;
22     /** 作者名。 */
23     public static final String AUTHOR;
24     /** 著作権表記。 */
25     public static final String COPYRIGHT;
26     /** ライセンス表記。 */
27     public static final String LICENSE;
28     /** 連絡先。 */
29     public static final String CONTACT;
30     /** 初出。 */
31     public static final String INCEPTION;
32     /** その他、何でも書きたいこと。 */
33     public static final String COMMENT;
34     /** クレジット。 */
35     public static final String ID;
36
37     private static final String RES_VERDEF = "resources/version.properties";
38
39     private static final String PFX_TITLE     = "pkg-title.";
40     private static final String PFX_VERSION   = "pkg-version.";
41     private static final String PFX_AUTHOR    = "pkg-author.";
42     private static final String PFX_LICENSE   = "pkg-license.";
43     private static final String PFX_CONTACT   = "pkg-contact.";
44     private static final String PFX_INCEPTION = "pkg-inception.";
45     private static final String PFX_COMMENT   = "pkg-comment.";
46
47     static{
48         Properties verProp = ResourceManager.getProperties(RES_VERDEF);
49         if(verProp == null) verProp = new Properties();
50
51         TITLE     = getPackageInfo(verProp, PFX_TITLE,     "Jindolf");
52         VERSION   = getPackageInfo(verProp, PFX_VERSION,   "0.0.1");
53         AUTHOR    = getPackageInfo(verProp, PFX_AUTHOR,    "nobody");
54         LICENSE   = getPackageInfo(verProp, PFX_LICENSE,   "Unknown");
55         CONTACT   = getPackageInfo(verProp, PFX_CONTACT,   "Where?");
56         INCEPTION = getPackageInfo(verProp, PFX_INCEPTION, "2008");
57         COMMENT   = getPackageInfo(verProp, PFX_COMMENT,   "");
58
59         COPYRIGHT = MessageFormat.format(
60                 "Copyright(c) {0} {1}",
61                 INCEPTION, AUTHOR );
62
63         ID = MessageFormat.format(
64                 "{0} Ver.{1} {2} ({3})",
65                 TITLE, VERSION, COPYRIGHT, LICENSE );
66     }
67
68
69     /**
70      * 隠しコンストラクタ。
71      */
72     private VerInfo(){
73         assert false;
74     }
75
76
77     /**
78      * プロパティからルートパッケージのパッケージ情報を取得する。
79      *
80      * @param prop プロパティ
81      * @param prefix 接頭辞
82      * @param defValue 見つからなかった場合のデフォルト値
83      * @return パッケージ情報
84      */
85     static String getPackageInfo(Properties prop,
86                                    String prefix,
87                                    String defValue ){
88         String result = getPackageInfo(prop, prefix,
89                                        ResourceManager.DEF_ROOT_PACKAGE,
90                                        defValue );
91         return result;
92     }
93
94     /**
95      * プロパティからパッケージに紐づけられたパッケージ情報を取得する。
96      *
97      * @param prop プロパティ
98      * @param prefix 接頭辞
99      * @param pkg 任意のパッケージ
100      * @param defValue 見つからなかった場合のデフォルト値
101      * @return パッケージ情報
102      */
103     static String getPackageInfo(Properties prop,
104                                    String prefix,
105                                    Package pkg,
106                                    String defValue ){
107         String propKeyName = prefix + pkg.getName();
108         String result = prop.getProperty(propKeyName, defValue);
109
110         // ignore Maven macro filtering
111         if(isMavenMacro(result)){
112             result = defValue;
113         }
114
115         return result;
116     }
117
118     /**
119      * 文字列がMavenのマクロフィルタ置換子でありうるか判定する。
120      *
121      * <p>「${」で始まり「}」で終わる文字列を置換子とみなす。
122      *
123      * <p>マクロ展開結果がさらに偶然引っかかった場合はあきらめる。
124      *
125      * @param text 文字列
126      * @return 置換子でありうるならtrue
127      */
128     public static boolean isMavenMacro(String text){
129         if(text.startsWith("$" + "{") && text.endsWith("}")){
130             return true;
131         }
132         return false;
133     }
134
135     /**
136      * ウィンドウタイトル名を生成する。
137      *
138      * <p>各ウィンドウタイトルには、他のアプリとの区別のため
139      * アプリ名が付加される。
140      *
141      * @param base タイトル基本部
142      * @return アプリ名が付加されたウィンドウタイトル。
143      */
144     public static String getFrameTitle(String base){
145         StringBuilder result = new StringBuilder();
146
147         if(base != null){
148             result.append(base).append("\u0020-\u0020");
149         }
150         result.append(TITLE);
151
152         String message = result.toString();
153         return message;
154     }
155
156     /**
157      * About画面用メッセージを生成する。
158      * @return About画面用メッセージ
159      */
160     public static String getAboutMessage(){
161         StringBuilder result = new StringBuilder();
162
163         result.append(MessageFormat.format(
164                   "{0}\u0020\u0020\u0020Version {1}\n"
165                 + "{2}\n"
166                 + "ライセンス: {3}\n"
167                 + "連絡先: {4}",
168                 TITLE, VERSION, COPYRIGHT, LICENSE, CONTACT )
169         );
170
171         if(COMMENT.length() > 0){
172             result.append('\n').append(COMMENT);
173         }
174
175         String message = result.toString();
176         return message;
177     }
178
179 }