001    /*
002     * Copyright (c) 2009 The openGion Project.
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     *     http://www.apache.org/licenses/LICENSE-2.0
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
013     * either express or implied. See the License for the specific language
014     * governing permissions and limitations under the License.
015     */
016    package org.opengion.hayabusa.common;
017    
018    import org.opengion.fukurou.util.LogWriter;
019    import org.opengion.fukurou.util.StringUtil;
020    import org.opengion.fukurou.util.HybsEntry;
021    import org.opengion.fukurou.util.HybsDateUtil;
022    
023    // import java.util.Date;
024    import java.util.Calendar;
025    import java.util.Set;
026    import java.util.Map;
027    import java.util.HashMap;
028    import java.util.List;
029    import java.util.ArrayList;
030    import java.util.Iterator;
031    import java.util.Arrays;
032    // import java.util.Locale ;
033    
034    // import java.text.DateFormat;
035    // import java.text.SimpleDateFormat;
036    import java.net.InetAddress;
037    import java.net.UnknownHostException;
038    
039    /**
040     * 共通的に、使用されるシスãƒ?ƒ 関連メソãƒ?ƒ‰を集ç´?�—たクラスですã?
041     *
042     * 全変数は、public static final 宣è¨?�•れてã�?�¾すã?
043     * メソãƒ?ƒ‰は、日付取得,エラーメãƒ?‚»ージ処ç�?を行ってã�?�¾すã?
044     *
045     * @og.group 初期åŒ?
046     *
047     * @version  4.0
048     * @author       Kazuhiko Hasegawa
049     * @since    JDK5.0,
050     */
051    public final class HybsSystem {
052    
053            /** バッファの初期容量を通常より若干多い目に設定しますã?  {@value}  */
054            public static final int BUFFER_SMALL = 50;
055    
056            /** バッファの初期容量を通常より多い目に設定しますã?  {@value}  */
057            public static final int BUFFER_MIDDLE = 200;
058    
059            /** バッファの初期容量を通常より大å¹?�«多い目に設定しますã?  {@value} */
060            public static final int BUFFER_LARGE  = 500;
061    
062            /** シスãƒ?ƒ 依存ã?改行記号をセãƒ?ƒˆしますã?     */
063            public static final String CR = System.getProperty("line.separator");
064    
065            /** HTMLでの改行記号( <br /> )をセãƒ?ƒˆしますã? */
066            public static final String BR = "<br />" + CR ;
067    
068            /** シスãƒ?ƒ 依存ã?ファイルセパレーターæ–?­—をセãƒ?ƒˆしますã?      */
069            public static final char FS = (System.getProperty("file.separator")).charAt(0);
070    
071            /** シスãƒ?ƒ 設定D?¢のキーと値をã?Map に読み込みますã?  */
072            // 4.0.0 (2005/01/31) シスãƒ?ƒ パラメータの管ç�?‚ªブジェクãƒ?
073            private static Map<String,String> sysParam = null;
074    
075            // 4.3.1.0 (2008/09/03) リクエストでのみ生æ?できる設定å?のキャãƒ?‚·ュ
076            private static Map<String, String> reqCache = new HashMap<String, String>();
077    
078            /** URL の /(ルーãƒ?に対応する物ç�?ƒ‡ィレクトリ  */
079            private static String  realPath = null; // 4.0.0 (2005/01/31)
080    
081            /** リクエスト関係パラメータの初期設定フラグ */
082            private static boolean paramSetFlag = false;    // 4.0.0 (2005/11/30)
083    
084            /**
085             * ãƒ??ブル表示時ã?チェãƒ?‚¯ボックスのname属æ?  {@value}
086             * ãƒ??ブル表示時にチェãƒ?‚¯ボックスを表示しておき、どの行が選ばれたかを
087             * æŒ?®šするå?合に、その name 属æ?にæŒ?®šするキーの値ですã?
088             * 受け取る側は、このキーで、request æƒ??より選ばれた行番号を知ることができますã?
089             */
090            public static final String ROW_SEL_KEY = "h_rowSel";
091    
092            /**
093             * ãƒ??ブル表示のチェãƒ?‚¯ボックスを特定すã‚?id の 名称( id は、この名称?‹行番号)   {@value}
094             */
095            public static final String ROW_ID_KEY = "cb";   // 3.6.0.0 (2004/09/17)
096    
097            /** session オブジェクトに関連付けã‚?DBTableModel インスタンスのãƒ?ƒ•ォルトキー {@value} */
098            public static final String TBL_MDL_KEY = "h_tblmdl" ;
099    
100            // 3.8.1.1 (2005/11/21) ExcelOut の整合æ?を取る為の仕掛ã�?
101            /** session オブジェクトに関連付けã‚?ExcelOut の整合æ?チェãƒ?‚¯用のキー */
102            public static final String TBL_MDL_CONKEY = "h_tblmdlCon" ;
103    
104            /** session オブジェクトに関連付けã‚?Viewform インスタンスのãƒ?ƒ•ォルトキー {@value} */
105            public static final String VIEWFORM_KEY = "h_vform" ;
106    
107            /** session オブジェクトに関連付けã‚?ViewLink インスタンスのãƒ?ƒ•ォルトキー {@value} */
108            public static final String VIEWLINK_KEY = "h_vlink" ;
109    
110            /** session オブジェクトに関連付けã‚?ViewMark インスタンスのãƒ?ƒ•ォルトキー {@value} */
111            public static final String VIEW_MARK_KEY = "h_vmark" ;
112    
113            // 3.8.6.1 (2006/10/20) 編é›?™‚にカラãƒ?‚’置き換える 機è?に対å¿?
114            /** session オブジェクトに関連付けã‚?ViewMark:editor インスタンスのãƒ?ƒ•ォルトキー */
115            public static final String EDIT_MARK_KEY = "h_emark" ;
116    
117            /** session オブジェクトに関連付けã‚?UserInfo インスタンスのキー {@value} */
118            public static final String USERINFO_KEY = "h_uInfo" ;
119    
120            /** session オブジェクトに関連付けã‚?GUIInfo インスタンスのキー {@value} */
121            public static final String GUIINFO_KEY = "h_gInfo" ;
122    
123            /** session オブジェクトに関連付けã‚?リクエスト情報キャãƒ?‚·ュのキー {@value} */
124            public static final String REQ_CACHE_KEY = "h_req" ;
125    
126            /** session オブジェクトに関連付けã‚?エラーメãƒ?‚»ージæƒ??キャãƒ?‚·ュのキー {@value} */
127            public static final String ERR_MSG_KEY = "h_errMsg" ;
128    
129            // 2.3.1.0 (2002/12/20) 管ç�??がå?てのユーザーにメãƒ?‚»ージを同報できるタグを追åŠ?
130            /** session 管ç�??がスãƒ??タスバã?に設定するオブジェクトã?キー {@value} */
131            public static final String ST_BAR_OBJ_KEY = "h_stBar" ;
132    
133            // 3.0.0.0 (2002/12/25) SceduleTag 追åŠ??伴ã�??Timerオブジェクトã?管ç�?”¨キー追åŠ?
134            /** Timerオブジェクトã?管ç�?”¨キー {@value} */
135            public static final String SCEDULE_KEY = "h_timer" ;
136    
137            // 3.0.0.0 (2002/12/25) SceduleTag 追åŠ??伴ã�??Timerオブジェクトã?管ç�?”¨キー追åŠ?
138            /** TimerTaskオブジェクトã?管ç�?”¨キー {@value} */
139            public static final String SCEDULE_TASK_KEY = "h_timer_task" ;
140    
141            // 3.1.2.0 (2003/04/07) ソースコード中の固定å?をã?定義ファイルを使用するように変更するã€?
142            /** Forward時ã?転送å?ペã?ジ名をセãƒ?‚·ョンに登録するときã?キー {@value} */
143            public static final String FORWARD_PAGE_KEY = "h_fpg" ;
144    
145            // 3.1.2.0 (2003/04/07) ソースコード中の固定å?をã?定義ファイルを使用するように変更するã€?
146            /** Forward時ã?転送å?ペã?ジ名をセãƒ?‚·ョンに登録するときã?キー {@value} */
147            public static final String REVIEW_PAGE_KEY = "h_rpg" ;
148    
149            // 3.1.8.0 (2003/05/16) BACK_GAMENID のキャãƒ?‚·ュ方法をã€??常のリクエスト情報とåˆ?›¢して、管ç�?�™るã?
150            /** BACK_GAMENIDæƒ??をセãƒ?‚·ョンに登録するときã?キー {@value} */
151            public static final String BACK_GAMENID_KEY = "h_bgid" ;
152    
153            // 4.0.1.0 (2007/12/17) BACK_ADDRESS のキャãƒ?‚·ュ方法をã€??常のリクエスト情報とåˆ?›¢して、管ç�?�™るã?
154            /** BACK_GAMENIDæƒ??をセãƒ?‚·ョンに登録するときã?キー {@value} */
155            public static final String BACK_ADDRESS_KEY = "h_bgadrs" ;
156    
157            // 3.7.0.3 (2005/03/01) 戻るリンクで戻る行番号を指定しますã?(BACK_GAMENIDとセãƒ?ƒˆ)
158            /** BACK_ROWæƒ??をセãƒ?‚·ョンに登録するときã?キー {@value} */
159            public static final String BACK_ROW_KEY = "h_brow" ;
160    
161            // 3.1.9.0 (2003/05/16) ShellTag で、Shell オブジェクトをキープする為のキーを作æ?ã€?
162            /** Shell オブジェクトをセãƒ?‚·ョンに登録するときã?キー {@value} */
163            public static final String SHELL_KEEP_KEY = "h_shKeepKey" ;
164    
165            // 3.5.0.0 (2003/09/17) ユーザー変更時ã?、旧ユーザーIDのをキープする為のキーを作æ?ã€?
166            /** oldUserId æ–?­—å?をセãƒ?‚·ョンに登録するときã?キー {@value} */
167            public static final String OLD_USERID_KEY = "h_oldID" ;
168    
169            // 3.5.4.7 (2004/02/06) DBTableModelのソート時のカラãƒ?��の受け渡しキーã€?
170            /** sortColumns æ–?­—å?をリクエスト情報より取得するときã?キー {@value} */
171            public static final String SORT_COLUMNS = "h_sortClmns" ;
172    
173            // 3.5.4.7 (2004/02/06) DBTableModelのソート時のソート方向ã?受け渡しキーã€?
174            /** sortAscending をリクエスト情報より取得するときã?キー {@value} */
175            public static final String SORT_ASCENDING = "h_sortAsc" ;
176    
177            // 3.5.5.0 (2004/03/12) キー?‹行番号の連結文字å?(例:__)を設定しますã?
178            /** カラãƒ?D(連結文字å?)行番号の連結文字å?を定義 {@value} */
179            public static final String JOINT_STRING = "__" ;
180    
181            // 3.5.5.3 (2004/04/09) synchronized 用のロãƒ?‚¯オブジェクトを作æ?しますã?
182            private static final Object lock = new Object();
183    
184            // 3.5.5.5 (2004/04/23) DBTableModel の整合æ?パラメータã‚?hidden で出力しますã?
185            /** DBTableModel の整合æ?パラメータをリクエスト情報より取得するときã?キー {@value} */
186            public static final String CONSISTENCY_KEY = "h_consisKey" ;
187    
188            // 3.5.5.5 (2004/04/23) 転送不要パラメータの先é?に付けるキーワードですã?
189            /** SubmitTag で出力されるボタンパラメータは、次ペã?ジへ転送しませんã€?{@value} */
190            public static final String NO_XFER_KEY = "hX_" ;
191    
192            // 3.8.0.0 (2005/06/07) 同ä¸?‚»ãƒ?‚·ョンでのマルチ起動対策用キーワードですã?
193            /** 同ä¸?‚»ãƒ?‚·ョンでのマルチ起動された場合に、前に開かれた画面からのアクセスを禁止しますã? */
194            public static final String MULTI_SESSION_CHECK = "MSC" ;
195    
196            /** 3.8.9.1 (2005/07/29) JFreeChart オブジェクトã?キャãƒ?‚·ュ {@value}  */
197            public static final String JF_CHART_CACHE_KEY = "h_chartKey" ;
198    
199            // 3.8.0.8 (2005/10/03) GET時ã?URL に使用可能なæ–?­—数制é™?
200            /** URL に使用可能なæ–?­—数はæœ?¤§ 2,083 æ–?­?
201             * http://support.microsoft.com/default.aspx?scid=kb;ja;208427
202             */
203            public static final int MAX_GET_LENGTH = 2083 ;
204    
205            /** 4.0.0 (2005/01/31) GUIのロールを区åˆ?‚‹、区åˆ?‚Šæ–?­?      {@value}  */
206            public static final char GUI_DELIMITER = '|' ;
207    
208            /** 4.0.0 (2005/01/31) ローカルリソースのオブジェクト保存時のキー {@value}  */
209            public static final String LOCAL_RES_KEY = "h_lclRes" ;
210    
211            /** 4.0.0 (2005/02/28) Tomcat起動時エラーが発生したå?合ã?エラーキー  {@value}  */
212            public static final String LOCAL_CONTX_ERR_KEY = "h_lclConErr" ;
213    
214            /** 4.0.0 (2005/08/31) グループメニューのキャãƒ?‚·ュキー    {@value} */
215            public static final String GUI_GR_MENU_CACHE_KEY = "h_grpCache" ;
216    
217            /** 4.0.0 (2005/09/30) 個人別お気に入りメニューの GE16 登録キーワーãƒ?{@value} */
218            public static final String GUI_FAV_MENU_KEY = "GUI_FAV_MENU_KEY" ;
219    
220            /** 4.0.0 (2005/06/04) DBTableWriter の columns 属æ?のセãƒ?‚·ョン登録キーワーãƒ?{@value} */
221            public static final String TBL_WRITER_CLMS = "TBL_WRITER_CLMS" ;
222    
223            /** 4.1.2.1 (2008/03/13) must 属æ?をrequest変数にセãƒ?ƒˆする場合ã? キー {@value} */
224            public static final String MUST_KEY = "h_must_" ;
225    
226            /** 4.3.0.0 (2008/07/04) æœ?¾Œに Queryを実行した情報の保存時のキー {@value} */
227            public static final String DB_LAST_SQL_KEY = "h_lastSql" ;
228    
229            /** 4.3.3.0 (2008/10/01) ペã?ジå†?�§画面遷移なしモードをæŒ?®šしようする場合ã?キー {@value}  */
230            public static final String NO_TRANSITION_MODE_KEY = "h_noTrnsKey" ;
231    
232            /** 4.3.6.0 (2009/04/01) イベントカラãƒ?‚’利用したかどã�?�‹のチェãƒ?‚¯キー {@value}  */
233            public static final String USE_EVENT_COLUMN_KEY = "h_eventColumn" ;
234    
235            /** 5.1.7.0 (2010/06/01) イベントカラãƒ?‚’ラãƒ??するspanタグのクラス  {@value}  */
236            public static final String EVENT_COLUMN_CLASS = "h_evElm";
237    
238            /** 5.1.7.0 (2010/06/01) イベントカラãƒ?‚’ラãƒ??するspanタグで、子カラãƒ??書き込み可/不可を設定する属æ?å�?{@value}  */
239            public static final String EVENT_COLUMN_WRITABLE = "h_evWrtbl";
240    
241            /** 5.1.7.0 (2010/06/01) イベントカラãƒ?‚’ラãƒ??するspanタグで、子カラãƒ??IDを設定する属æ?å�?{@value}  */
242            public static final String EVENT_COLUMN_ID = "h_evCid";
243    
244            /** 5.1.7.0 (2010/06/01) イベントカラãƒ?‚’ラãƒ??するspanタグで、子カラãƒ??初期値を設定する属æ?å�?{@value}  */
245            public static final String EVENT_COLUMN_INITVAL = "h_evVal";
246    
247            /** 4.3.7.0 (2009/06/01) linkタグのurlCheckキーをå?力する際のパラメーターキー       {@value}  */
248            public static final String URL_CHECK_KEY = "h_urlCheck" ;
249    
250            /** 4.3.7.5 (2009/07/08) ペã?ジå†?�§ajaxSubmitを利用する場合ã?キー    {@value}  */
251            public static final String USE_AJAX_SUBMIT_KEY = "h_ajaxSubmit" ;
252    
253            /** 5.1.6.0 (2010/05/01) Viewでソート済みかどã�?�‹を判定する際のキー   {@value} */
254            public static final String VIEW_SORT_KEY = "h_viewSrt";
255    
256            /** 5.1.9.0 (2010/08/01) トランザクションを実現する際ã?キー {@value} */
257            public static final String TRANSACTION_KEY = "h_tran";
258    
259            /** 5.2.2.0 (2010/11/01) URLの引数部をハãƒ?‚·ュする際ã?リクエストキー  {@value} */
260            public static final String URL_HASH_REQ_KEY = "h_r";
261    
262            /** 5.3.2.0 (2011/02/01) リクエストパラメーターのキーä¸?¦§を保存する際のキー        {@value} */
263            public static final String PARAM_NAMES_KEY = "h_prmNms";
264    
265            /** 5.3.6.0 (2011/06/01) クエリを呼び出し時のフォーカスを制御するためのキー   {@value} */
266            public static final String QUERY_FOCUS_KEY = "h_qryFcs";
267    
268            // 5.5.9.1 (2012/12/07) セãƒ?‚·ョン作æ?時に、セãƒ?‚·ョンIDを保存しておく、規定ã?キー
269            public static final String SESSION_KEY = "h_session_key";
270    
271            /**
272             * 帳票エンコーãƒ?‚£ング  {@value}
273             * 設定されてã�?�ªã�??合ã?、UTF-8 に設定されますã?
274             */
275            public static final String REPORT_ENCODE = "UTF-8" ;
276    
277            /** 実行してã�?‚‹サーバã?の名称 */
278            public static final String HOST_NAME ;
279            /** 実行してã�?‚‹サーバã?のIPアドレス */
280            public static final String HOST_ADRS ;
281    
282            static {
283                    String dmnHost ;
284                    String dnmAdrs ;
285                    try {
286                            InetAddress address = InetAddress.getLocalHost();
287                            dmnHost = address.getHostName() ;
288                            dnmAdrs = address.getHostAddress() ;
289                    }
290                    catch( UnknownHostException ex ) {
291                            dmnHost = "Unknown";
292                            dnmAdrs = "Unknown";
293                    }
294                    HOST_NAME = dmnHost;
295                    HOST_ADRS = dnmAdrs;
296            }
297    
298            /**
299             * ãƒ?ƒ•ォルトコンストラクターをprivateにしてã€?
300             * オブジェクトã?生æ?をさせなã�?‚ˆã�?�«するã€?
301             *
302             */
303            private HybsSystem() {}
304    
305            /**
306             * å†?ƒ¨シスãƒ?ƒ リソースマップオブジェクトを設定しますã?
307             *
308             * @og.rev 3.5.3.1 (2003/10/31) 新規作æ?
309             * @og.rev 4.0.0.0 (2005/01/31) Ver4 のシスãƒ?ƒ パラメータæƒ??の取得å?ç�?‚’追åŠ?�—ますã?
310             * @og.rev 4.3.1.0 (2008/09/03) SERVER_NAME,SERVER_URL,CONTEXT_URLをキャãƒ?‚·ュから復å…?
311             *
312             * @param       param   シスãƒ?ƒ リソースマッãƒ?
313             */
314            public static void setInitialData( final Map<String,String> param ) {
315                    synchronized( lock ) {
316                            sysParam        = param;
317                            realPath        = param.get( "REAL_PATH" );     // 4.0.0 (2005/01/31)
318                            // 4.3.1.0 (2008/09/03) SERVER_NAME,SERVER_URL,CONTEXT_URLをキャãƒ?‚·ュから復å…?
319                            if( paramSetFlag ) {
320                                    sysParam.putAll( reqCache );
321                            }
322                    }
323    
324                    System.out.println( "    [" + sysParam.get( "CONTEXT_NAME" ) + "] のシスãƒ?ƒ パラメータがã?[" + sysParam.size() + "] 件設定されましたã€? );
325            }
326    
327            /**
328             * シスãƒ?ƒ パラメータæƒ??を取得しますã?
329             * Ver3 では、ã?ロパティーファイルでリソースを提供してã�?‚‹為ã€?
330             * 立ち上げタイミングとの関係で始めて使用する場合にãƒ??タを取得しますã?
331             *
332             * @og.rev 4.0.0.0 (2005/01/31) 新規作æ?
333             *
334             * @param       key     シスãƒ?ƒ パラメータのキー
335             *
336             * @return      シスãƒ?ƒ パラメータ の値
337             */
338            private static String getParam( final String key ) {
339                    synchronized( lock ) {
340                            return sysParam.get( key );
341                    }
342            }
343    
344            /**
345             * シスãƒ?ƒ パラメータの追åŠ?ƒ…報セãƒ?ƒˆが終äº?�—てã�?‚‹かどã�?�‹を取得しますã?
346             * 設定å?ç�?‚’行うかどã�?�‹の判定に使用しますã?
347             *
348             * @og.rev 4.0.0.0 (2005/11/30) 新規作æ?
349             *
350             * @return      true:設定完äº?/ false:未完äº?設定可能)
351             * @see #setRequestParam( String,String,int,String )
352             */
353            public static boolean isParamSet() {
354                    return paramSetFlag;
355            }
356    
357            /**
358             * シスãƒ?ƒ パラメータæƒ??を追åŠ?¨­定しますã?
359             * これは、SERVER_NAME、SERVER_URL、CONTEXT_URL などのリクエストオブジェクトかã‚?
360             * しか取得できなã�??有情報をã?登録する場合に使用しますã?
361             * これらã?値は、taglib/JspInitTag タグでセãƒ?ƒˆされますã?
362             * セãƒ?ƒˆする前に、isParamSet() で設定済みかどã�?�‹判断してくださいã€?
363             * こã?メソãƒ?ƒ‰は、isParamSet() の値に関係なくã?セãƒ?ƒˆしますã?
364             *
365             * @og.rev 4.0.0.0 (2005/01/31) 新規作æ?
366             * @og.rev 4.3.1.0 (2008/09/03) SERVER_NAME,SERVER_URL,CONTEXT_URLのキャãƒ?‚·ュ処ç�?¿½åŠ?
367             *
368             * @param       serverName      サーバã?å�?
369             * @param       scheme  スキーãƒ?
370             * @param       port    ポã?ト番号
371             * @param       path    コンãƒ?‚­ストパス
372             * @see #isParamSet()
373             */
374            public static void setRequestParam( final String serverName,final String scheme,
375                                                                                    final int port,final String path ) {
376                    synchronized( lock ) {
377                            sysParam.put( "SERVER_NAME",serverName );
378    
379                            String portStr = ( port == 80 ) ? "" : ":" + port ;
380                            String serverURL = scheme + "://" + serverName + portStr ;
381                            sysParam.put( "SERVER_URL",serverURL + "/" );
382    
383                            String contextURL = serverURL + path + "/" ;
384                            sysParam.put( "CONTEXT_URL",contextURL );
385                            // 4.3.1.0 (2008/09/03) SERVER_NAME,SERVER_URL,CONTEXT_URLをキャãƒ?‚·ュして置ã�?
386                            reqCache.put( "SERVER_NAME",serverName );
387                            reqCache.put( "SERVER_URL",serverURL + "/" );
388                            reqCache.put( "CONTEXT_URL",contextURL );
389                            paramSetFlag = true;
390                    }
391            }
392    
393            /**
394             * 現在日付ã?時刻を所得しますã?
395             * 出力フォーマットã?、シスãƒ?ƒ パラメータ の SYS_TIME の
396             * 設定を適用しますã?( "yyyy/MM/dd HH:mm:ss" )
397             *
398             * @og.rev 4.0.0.0 (2005/01/31) getSystemResource() â‡?sysParam に変更
399             *
400             * @return      現在日付ã?時刻 ( ä¾?2001/04/17 15:48:22 )
401             */
402            public static String getDate() {
403                    return getDate( getParam( "SYS_TIME" ) );
404            }
405    
406            /**
407             * æŒ?®š時刻をデフォルトã?フォーマットで、所得しますã?
408             * フォーマットã?æŒ?®š方法ã?、java.text.SimpleDateFormat のæŒ?®š方法と同ä¸?�§すã?
409             * 出力フォーマットã?、シスãƒ?ƒ パラメータ の SYS_TIME の
410             * 設定を適用しますã?( "yyyy/MM/dd HH:mm:ss" )
411             *
412             * @og.rev 4.0.0.0 (2005/01/31) getSystemResource() â‡?sysParam に変更
413             * @og.rev 5.5.7.2 (2012/10/09) HybsDateUtil を利用するように修正しますã?
414             *
415             * @param       time æŒ?®šã?カレントタイãƒ?
416             *
417             * @return      現在日付ã?時刻( ä¾?2001/04/17 15:48:22 )
418             */
419            public static String getDate( final long time ) {
420                    String form = getParam( "SYS_TIME" );
421                    return HybsDateUtil.getDate( time , form );
422    //              DateFormat formatter = new SimpleDateFormat( form,Locale.JAPAN );
423    //              return formatter.format(new Date( time ));
424            }
425    
426            /**
427             * 現在日付ã?時刻をフォーマットをæŒ?®šして、所得しますã?
428             * フォーマットã?æŒ?®š方法ã?、java.text.SimpleDateFormat のæŒ?®š方法と同ä¸?�§すã?
429             *
430             * @og.rev 5.5.7.2 (2012/10/09) HybsDateUtil を利用するように修正しますã?
431             * ※ こã?メソãƒ?ƒ‰をå»?­¢して、直接 HybsDateUtil を使ってもよã�?�Œ、とりあえず残しておきますã?
432             *
433             * @param       form フォーãƒ?–‡字å? ( ä¾?"yyyy/MM/dd HH:mm:ss.SSS" )
434             *
435             * @return      現在日付ã?時刻
436             */
437            public static String getDate( final String form ) {
438                    return HybsDateUtil.getDate( form );
439    //              DateFormat formatter = new SimpleDateFormat( form,Locale.JAPAN );
440    //              return formatter.format(new Date());
441            }
442    
443            /**
444             * æŒ?®š時刻をデフォルトã?フォーマットで、所得しますã?
445             * フォーマットã?æŒ?®š方法ã?、java.text.SimpleDateFormat のæŒ?®š方法と同ä¸?�§すã?
446             * 出力フォーマットã?、シスãƒ?ƒ パラメータ の SYS_TIME の
447             * 設定を適用しますã?( "yyyy/MM/dd HH:mm:ss" )
448             *
449             * @og.rev 4.0.0.0 (2005/01/31) 新規追åŠ?
450             * @og.rev 5.5.7.2 (2012/10/09) HybsDateUtil を利用するように修正しますã?
451             * ※ こã?メソãƒ?ƒ‰をå»?­¢して、直接 HybsDateUtil を使ってもよã�?�Œ、とりあえず残しておきますã?
452             *
453             * @param       time æŒ?®šã?カレントタイãƒ?
454             * @param       form フォーãƒ?–‡字å? ( ä¾?"yyyy/MM/dd HH:mm:ss.SSS" )
455             *
456             * @return      現在日付ã?時刻( ä¾?2001/04/17 15:48:22 )
457             */
458            public static String getDate( final long time,final String form ) {
459                    return HybsDateUtil.getDate( time,form );
460    //              DateFormat formatter = new SimpleDateFormat( form,Locale.JAPAN );
461    //              return formatter.format(new Date( time ));
462            }
463    
464            /**
465             * 現在の月に、指定ã?月数をã?ラスした日付文字å?を返しますã?
466             * 日付文字å?のフォーマットã?ã€?yyyyMM" ですã?
467             * æŒ?®šする月数にマイナスを指定すると、減算できますã?
468             *
469             * @og.rev 5.5.7.2 (2012/10/09) HybsDateUtil.getMonthPlus( plus ) に移動ã?現時点で利用してã�?�ªã�??で削除しますã?
470             *
471             * @param       plus  プラスする月数
472             *
473             * @return      æŒ?®šã?月数をã?ラスした日付文字å?(YYYYMM)
474             */
475    //      public static String getYMDate( final int plus ) {
476    //              Calendar rightNow = Calendar.getInstance();
477    //              rightNow.set( Calendar.DATE, 1 );               // 当月の 1 日に設å®?
478    //              rightNow.add( Calendar.MONTH , plus );
479    
480    //              DateFormat formatter = new SimpleDateFormat( "yyyyMM",Locale.JAPAN );
481    //              return formatter.format( rightNow.getTime() );
482    //      }
483    
484            /**
485             * シスãƒ?ƒ 設定ファイルのãƒ??タを所得しますã?
486             * キーが存在しなã�??合ã?、null を返しますã?
487             * キーがnullの場合ã?、HybsSystemException をスローしますã?
488             *
489             * @og.rev 3.5.5.0 (2004/03/12) {&#064;SYS.XXXX} で使用できる変数を増やしますã?
490             * @og.rev 3.5.5.3 (2004/04/09) {&#064;SYS.XXXX} に、DATE とã�?�†キーを追åŠ?�—ますã?
491             * @og.rev 4.0.0.0 (2005/01/31) getSystemResource() â‡?sysParam に変更
492             *
493             * @param       key シスãƒ?ƒ 設å®?キー
494             *
495             * @return      シスãƒ?ƒ 設定å?
496             * @throws HybsSystemException キーã�?null の場合ã?
497             */
498            public static String sys( final String key ) throws HybsSystemException {
499                    if( key == null ) {
500                            String errMsg = "キーã�?null ですã?";
501                            throw new HybsSystemException( errMsg );                // 3.5.5.4 (2004/04/15) 引数の並びé ?¤‰更
502                    }
503    
504                    if( "DATE".equals( key ) ) { return getDate() ; }       // 3.5.5.3 (2004/04/09)
505    
506                    String rtn = getParam( key );
507                    if( rtn == null && ! key.startsWith( "h_" ) ) {
508                            String errMsg = CR + "シスãƒ?ƒ リソースキーが存在しません。key = " + key;
509                            LogWriter.log( errMsg );
510                    }
511                    return rtn;
512            }
513    
514            /**
515             * シスãƒ?ƒ 設定ファイルから、è¤?•°のãƒ??タを所得しますã?
516             * キーã�?"ABC" とすれば、それで始まるデータ( ABCD, ABC_01 など)
517             * をé?列で取得できますã?
518             * リターン配å?は、ソートされてã�?�¾すã?
519             *
520             * @og.rev 4.0.0.0 (2005/01/31) getSystemResource() â‡?sysParam に変更
521             *
522             * @param       key シスãƒ?ƒ 設å®?キー(の先é?の部åˆ?–‡字å?)
523             *
524             * @return      シスãƒ?ƒ 設定é?åˆ?HybsEntry
525             */
526            public static HybsEntry[] sysEntry( final String key ) {
527    
528                    List<HybsEntry> vals = new ArrayList<HybsEntry>();
529    
530                    synchronized( lock ) {
531                            Iterator<String> keyIte = sysParam.keySet().iterator();           // 4.3.3.6 (2008/11/15) Generics警告対å¿?
532                            while( keyIte.hasNext() ) {
533                                    String tempKey = keyIte.next();         // 4.3.3.6 (2008/11/15) Generics警告対å¿?
534                                    if( tempKey != null && tempKey.startsWith( key ) ) {
535                                            HybsEntry entry = new HybsEntry( tempKey,sysParam.get( tempKey ) );
536                                            vals.add( entry );
537                                    }
538                            }
539                    }
540                    HybsEntry[] entrys = vals.toArray( new HybsEntry[vals.size()] ) ;
541                    Arrays.sort( entrys );
542    
543                    return entrys;
544            }
545    
546            /**
547             * シスãƒ?ƒ 設定ファイルのãƒ??タを所得しますã?
548             * 特別に,int 型にãƒ??タを変換して,渡しますã?
549             * 変換できなã�??合ã?,NumberFormatException がスローされますã?
550             *
551             * @og.rev 3.5.3.1 (2003/10/31) エラー時に、判るよã�?�«メãƒ?‚»ージをå?しますã?
552             * @og.rev 4.0.0.0 (2005/01/31) getSystemResource() â‡?sysParam に変更
553             *
554             * @param       key シスãƒ?ƒ 設å®?キー
555             *
556             * @return      シスãƒ?ƒ 設定å?
557             */
558            public static int sysInt( final String key ) {
559                    if( key == null ) {
560                            String errMsg = "キーã�?null ですã?";
561                            throw new HybsSystemException( errMsg );                // 3.5.5.4 (2004/04/15) 引数の並びé ?¤‰更
562                    }
563    
564                    String tmp = getParam( key );
565                    int rtn ;
566                    try {
567                            rtn = Integer.parseInt( tmp );
568                    }
569                    catch( NumberFormatException ex2 ) {
570                            String errMsg = "シスãƒ?ƒ リソース の値が数字ではありませんã€? + CR
571                                            + "  Resource key=[" + key + "] val=[" + tmp + "]"  ;
572                            throw new HybsSystemException( errMsg,ex2 );            // 3.5.5.4 (2004/04/15) 引数の並びé ?¤‰更
573                    }
574    
575                    return rtn;
576            }
577    
578            /**
579             * シスãƒ?ƒ 設定ファイルのãƒ??タを所得しますã?
580             * 特別に,boolean 型にãƒ??タを変換して,渡しますã?
581             * 変換できなã�??合ã?,NumberFormatException がスローされますã?
582             *
583             * @og.rev 3.5.6.0 (2004/06/18) Booleanのコンストラクタの代わりに、Boolean.valueOf(...) を使用しますã?
584             *
585             * @param       key シスãƒ?ƒ 設å®?キー
586             *
587             * @return      シスãƒ?ƒ 設定å?
588             */
589            public static boolean sysBool( final String key ) {
590                    return Boolean.valueOf( HybsSystem.sys( key ) ).booleanValue();
591            }
592    
593            /**
594             * シスãƒ?ƒ 依存ã?URLæ–?­—å?から?Œ実際のãƒ?‚£レクトリ名をæ‰?¾—しますã?
595             * UNIX と Windows ã‚?URL パス名から判断して、実ディレクトリを返しますã?
596             * æŒ?®š方法ã?ã€??常の fileURL 属æ?と同様に、å?頭がã?'/' (UNIX) またã?ã€?¼’文字目がã?
597             * ":" (Windows)の場合ã?、指定ã?URLそã?ままのãƒ?‚£レクトリに、そã�?�§なã�??合ã?ã€?
598             * シスãƒ?ƒ パラメータ の FILE_URL 属æ?でæŒ?®šã?フォルãƒ??下に、作æ?されますã?
599             * 相対パス、またã?、URL の場合ã?ã€??に / をå?れなã�?�§ください。UNIX の
600             * 絶対パスと判断されますã?
601             * またã?絶対パスのæœ?¾Œにはã€? をå?れておいてくださいã€?
602             *
603             * @og.rev 4.0.0.0 (2005/01/31) StringUtil.urlAppend メソãƒ?ƒ‰の利用
604             *
605             * @param       url URLæ–?­—å?
606             *
607             * @return      ãƒ?‚£レクトリæ–?­—å?
608             */
609            public static String url2dir( final String url ) {
610                    return StringUtil.urlAppend( realPath,url ).replace( '/',FS );
611            }
612    
613            /**
614             * シスãƒ?ƒ リソースæƒ??を取得しますã?
615             * 形式ã?、キー([0])、å?([1])の?’次å…??列ですã?
616             * キーでソートされてã�?�¾すã?
617             *
618             * @og.rev 3.5.3.1 (2003/10/31) 新規追åŠ?
619             * @og.rev 4.0.0.0 (2005/01/31) getSystemResource() â‡?sysParam に変更
620             *
621             * @return      シスãƒ?ƒ リソースæƒ??:キー([0])、å?([1])の?’次å…??åˆ?
622             */
623            public static String[][] getSystemResourceData() {
624                    String[][] rtn ;
625    
626                    synchronized( lock ) {
627                            Set<Map.Entry<String,String>> entrSet = sysParam.entrySet();
628                            int size = entrSet.size();
629                            rtn = new String[2][size];
630    
631                            Iterator<Map.Entry<String,String>> entrIte = entrSet.iterator();
632                            for( int i=0; i<size; i++ ) {
633                                    Map.Entry<String,String> entry = entrIte.next();
634                                    rtn[0][i] = entry.getKey();
635                                    rtn[1][i] = entry.getValue();
636                            }
637                    }
638                    return rtn ;
639            }
640    
641            /**
642             * シスãƒ?ƒ のコンãƒ?‚­スト名を取得しますã?
643             * コンãƒ?‚­スト名は、Tomcat の servr.xml でæŒ?®šする仮想フォルãƒ?��ですã?
644             *
645             * @og.rev 3.5.4.3 (2004/01/05) 新規追åŠ?
646             *
647             * @return      コンãƒ?‚­スト名(仮想フォルãƒ?��)
648             */
649            public static String getContextName() {
650                    return sys( "CONTEXT_NAME" );   // 4.0.0 (2005/01/31)
651            }
652    
653            /**
654             * æŒ?®šã?引数の日付けæ–?­—å?(YYYYMMDDHHMMSS)より、カレンãƒ?‚ªブジェクトを作æ?しますã?
655             * 引数は、YYYYMMDD の?˜文字か、YYYYMMDDHHMMSS の?‘4文字ã?どちらかですã?
656             *
657             * @og.rev 3.5.4.8 (2004/02/23) 新規作æ?
658             * @og.rev 5.5.7.2 (2012/10/09) HybsDateUtil を利用するように修正しますã?
659             *
660             * @param value 日付けæ–?­—å?(YYYYMMDD またã? YYYYMMDDHHMMSS)
661             *
662             * @return      カレンãƒ?‚ªブジェクãƒ?
663             */
664            public static Calendar getCalendar( final String value ) {
665                    return HybsDateUtil.getCalendar( value );
666    
667    //              if ( value == null || ( value.length() != 8 && value.length() != 14 ) ) {
668    //                      String errMsg = "引数は、YYYYMMDD またã? YYYYMMDDHHMMSS 形式ã?日付けæ–?­—å?のみですã?"
669    //                                      + " value=[" + value + "]" ;
670    //                      throw new HybsSystemException( errMsg );
671    //              }
672    // 
673    //              Calendar cal = Calendar.getInstance();
674    //              cal.clear();
675    // 
676    //              int hour=0,minute=0,second=0;
677    // 
678    //              int year   = Integer.parseInt( value.substring( 0,4 ) );
679    //              int month  = Integer.parseInt( value.substring( 4,6 ) ) - 1;
680    //              int date   = Integer.parseInt( value.substring( 6,8 ) );
681    // 
682    //              if( value.length() == 14 ) {
683    //                      hour   = Integer.parseInt( value.substring( 8,10 ) );
684    //                      minute = Integer.parseInt( value.substring( 10,12 ) );
685    //                      second = Integer.parseInt( value.substring( 12,14 ) );
686    //              }
687    // 
688    //              cal.set( year,month,date,hour,minute,second );
689    // 
690    //              return cal;
691            }
692    
693            /**
694             * æŒ?®šã?引数の日付けæ–?­—å?(YYYYMMDD)より、差åˆ??日付を計算して返しますã?
695             * 引数は、YYYYMMDD と 差åˆ??日数ã€?
696             *
697             * @og.rev 4.1.1.0 (2008/01/30) 新規作æ?
698             * @og.rev 5.5.7.2 (2012/10/09) HybsDateUtil を利用するように修正しますã?
699             *
700             * @param baseDate 日付けæ–?­—å?(YYYYMMDD)
701             * @param diff     差åˆ??日数(過去の日付[+]、å°?�¥の日付ã?[-])
702             *
703             * @return      結果の日ä»?YYYYMMDD)
704             */
705            public static String getDate( final String baseDate,final int diff ) {
706                    return HybsDateUtil.getDatePlus( baseDate,diff );
707    
708    //              if ( baseDate == null || ( baseDate.length() != 8 ) ) {
709    //                      String errMsg = "引数 baseDate は、YYYYMMDD 形式ã?日付けæ–?­—å?のみですã?"
710    //                                      + " baseDate=[" + baseDate + "]" ;
711    //                      throw new HybsSystemException( errMsg );
712    //              }
713    // 
714    //              Calendar cal = getCalendar( baseDate );
715    //              cal.add( Calendar.DATE,diff );
716    //              String rtn = null;
717    // 
718    //              int calYear             = cal.get( Calendar.YEAR );
719    //              int calMonth    = cal.get( Calendar.MONTH ) + 1;
720    //              int calDay              = cal.get( Calendar.DATE );
721    //              rtn = String.valueOf( calYear );
722    //              if( calMonth < 10 ) {
723    // //                   rtn = rtn + "0" + String.valueOf( calMonth );
724    //                      rtn = rtn + "0" + calMonth;
725    //              }
726    //              else {
727    // //                   rtn = rtn + String.valueOf( calMonth );
728    //                      rtn = rtn + calMonth;
729    //              }
730    //              if( calDay < 10 ) {
731    // //                   rtn = rtn + "0" + String.valueOf( calDay );
732    //                      rtn = rtn + "0" + calDay;
733    //              }
734    //              else {
735    // //                   rtn = rtn + String.valueOf( calDay );
736    //                      rtn = rtn + calDay;
737    //              }
738    //              return rtn;
739            }
740    
741            /**
742             * æŒ?®šされたクラスローãƒ?‚’使って、識別id に応じã�?オブジェクトを作æ?しますã?
743             * 作æ?するには、デフォルトコンストラクターがå¿?¦�ですã?
744             * initialize パラメータは true 相å½?それまでに初期化されてã�?�ªã�??合だけå?期化)ですã?
745             *
746             * @param       cls     作æ?するクラスのフルネã?ãƒ?
747             *
748             * @return      オブジェクãƒ?
749             * @throws RuntimeException 何らかã?エラーが発生したå?å�?
750             */
751            public static Object newInstance( final String cls ) {
752                    try {
753                            return Class.forName( cls ).newInstance();
754                    }
755                    catch( ClassNotFoundException ex1 ) {
756                            String errMsg = "クラスが見つかりません。class=[" + cls + "]" + CR
757                                                    + ex1.getMessage() ;
758                            throw new RuntimeException( errMsg,ex1 );
759                    }
760                    catch( LinkageError ex2 ) {
761                            String errMsg = "リンケージが失敗しました。class=[" + cls + "]" + CR
762                                                    + ex2.getMessage();
763                            throw new RuntimeException( errMsg,ex2 );
764                    }
765                    catch( InstantiationException ex3 ) {
766                            String errMsg = "インスタンスの生æ?が失敗しました。class=[" + cls + "]" + CR
767                                                    + ex3.getMessage() ;
768                            throw new RuntimeException( errMsg,ex3 );
769                    }
770                    catch( IllegalAccessException ex4 ) {
771                            String errMsg = "クラスまたã?初期化子にアクセスできません。class=[" + cls + "]" + CR
772                                                    + ex4.getMessage();
773                            throw new RuntimeException( errMsg,ex4 );
774                    }
775                    catch( RuntimeException ex5 ) {         // 3.6.0.0 (2004/09/17)
776                            String errMsg = "予期せぬエラー class=[" + cls + "]" + CR
777                                                    + ex5.getMessage() ;
778                            throw new RuntimeException( errMsg,ex5 );
779                    }
780            }
781    }