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