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 */ 016package org.opengion.hayabusa.common; 017 018import org.opengion.fukurou.util.LogWriter; 019import org.opengion.fukurou.util.StringUtil; 020import org.opengion.fukurou.util.HybsEntry; 021import org.opengion.fukurou.util.HybsDateUtil; 022 023import java.util.Calendar; 024import java.util.Set; 025import java.util.Map; 026import java.util.HashMap; 027import java.util.List; 028import java.util.ArrayList; 029import java.util.Iterator; 030import java.util.Arrays; 031import java.io.File; 032import java.net.InetAddress; 033import 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 */ 047public 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 /** システム設定DBのキーと値を、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 /** カラムID(連結文字列)行番号の連結文字列を定義 {@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) {@SYS.XXXX} で使用できる変数を増やします。 463 * @og.rev 3.5.5.3 (2004/04/09) {@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) または、2文字目が、 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 * @og.rev 5.10.9.0 (2019/03/01) クラウドストレージ対応を追加。 578 * 579 * @param url URL文字列 580 * 581 * @return ディレクトリ文字列 582 */ 583 public static String url2dir( final String url ) { 584 // 5.10.9.0 (2019/03/01) DELETE 585 // return StringUtil.urlAppend( realPath,url ).replace( '/',FS ); 586 587 // 5.10.9.0 (2019/03/01) ADD 588 StringBuilder sb = new StringBuilder(HybsSystem.BUFFER_MIDDLE); 589 590 // \を/に変換する処理を追加。 591 String path = StringUtil.urlAppend( realPath,url ).replace('\\','/').replace( '/',FS ); 592 593 // linux環境かつ、2文字目が「:」Windows環境のドライブ指定の場合は、頭に「/」を付与して、絶対パスとして扱う。 594 if(FS == '/' && path.charAt(1) == ':') { 595 sb.append("/").append(path); 596 }else { 597 sb.append(path); 598 } 599 600 return sb.toString(); 601 } 602 603 /** 604 * Windowsの絶対パスと判断されるものは変換せず、それ以外を絶対パスに変換します。 605 * 606 * @og.rev 5.10.9.2 (2019/03/15) クラウドストレージ対応を追加。 607 * 608 * @param url URL文字列 609 * 610 * @return ディレクトリ文字列 611 */ 612 public static String url2absPath( final String url ) { 613 StringBuilder sb = new StringBuilder(HybsSystem.BUFFER_MIDDLE); 614 615 // 2文字目が「:」の場合はそのままWindowsの絶対パスとして扱う。 616 if( url.charAt(1) == ':' ) { 617 sb.append(url); 618 } 619 else { 620 // それ以外は絶対パスに変換する 621 String path = StringUtil.urlAppend( realPath,url ).replace('\\','/').replace( '/',FS ); 622 sb.append( new File( path ).getAbsolutePath().toString() ); 623 } 624 625 return sb.toString(); 626 } 627 628 /** 629 * システムリソース情報を取得します。 630 * 形式は、キー([0])、値([1])の2次元配列です。 631 * キーでソートされています。 632 * 633 * @og.rev 3.5.3.1 (2003/10/31) 新規追加 634 * @og.rev 4.0.0.0 (2005/01/31) getSystemResource() ⇒ sysParam に変更 635 * 636 * @return システムリソース情報:キー([0])、値([1])の2次元配列 637 */ 638 public static String[][] getSystemResourceData() { 639 String[][] rtn ; 640 641 synchronized( lock ) { 642 Set<Map.Entry<String,String>> entrSet = sysParam.entrySet(); 643 int size = entrSet.size(); 644 rtn = new String[2][size]; 645 646 Iterator<Map.Entry<String,String>> entrIte = entrSet.iterator(); 647 for( int i=0; i<size; i++ ) { 648 Map.Entry<String,String> entry = entrIte.next(); 649 rtn[0][i] = entry.getKey(); 650 rtn[1][i] = entry.getValue(); 651 } 652 } 653 return rtn ; 654 } 655 656 /** 657 * システムのコンテキスト名を取得します。 658 * コンテキスト名は、Tomcat の servr.xml で指定する仮想フォルダ名です。 659 * 660 * @og.rev 3.5.4.3 (2004/01/05) 新規追加 661 * 662 * @return コンテキスト名(仮想フォルダ名) 663 */ 664 public static String getContextName() { 665 return sys( "CONTEXT_NAME" ); // 4.0.0 (2005/01/31) 666 } 667 668 /** 669 * 指定の引数の日付け文字列(YYYYMMDDHHMMSS)より、カレンダオブジェクトを作成します。 670 * 引数は、YYYYMMDD の8文字か、YYYYMMDDHHMMSS の14文字のどちらかです。 671 * 672 * @og.rev 3.5.4.8 (2004/02/23) 新規作成 673 * @og.rev 5.5.7.2 (2012/10/09) HybsDateUtil を利用するように修正します。 674 * 675 * @param value 日付け文字列(YYYYMMDD または YYYYMMDDHHMMSS) 676 * 677 * @return カレンダオブジェクト 678 */ 679 public static Calendar getCalendar( final String value ) { 680 return HybsDateUtil.getCalendar( value ); 681 } 682 683 /** 684 * 指定の引数の日付け文字列(YYYYMMDD)より、差分の日付を計算して返します。 685 * 引数は、YYYYMMDD と 差分の日数。 686 * 687 * @og.rev 4.1.1.0 (2008/01/30) 新規作成 688 * @og.rev 5.5.7.2 (2012/10/09) HybsDateUtil を利用するように修正します。 689 * 690 * @param baseDate 日付け文字列(YYYYMMDD) 691 * @param diff 差分の日数(過去の日付[+]、将来の日付は[-]) 692 * 693 * @return 結果の日付(YYYYMMDD) 694 */ 695 public static String getDate( final String baseDate,final int diff ) { 696 return HybsDateUtil.getDatePlus( baseDate,diff ); 697 } 698 699 /** 700 * 指定されたクラスローダを使って、識別id に応じた オブジェクトを作成します。 701 * 作成するには、デフォルトコンストラクターが必要です。 702 * initialize パラメータは true 相当(それまでに初期化されていない場合だけ初期化)です。 703 * 704 * @param cls 作成するクラスのフルネーム 705 * 706 * @return オブジェクト 707 * @throws RuntimeException 何らかのエラーが発生した場合 708 */ 709 public static Object newInstance( final String cls ) { 710 try { 711 return Class.forName( cls ).newInstance(); 712 } 713 catch( ClassNotFoundException ex1 ) { 714 String errMsg = "クラスが見つかりません。class=[" + cls + "]" + CR 715 + ex1.getMessage() ; 716 throw new RuntimeException( errMsg,ex1 ); 717 } 718 catch( LinkageError ex2 ) { 719 String errMsg = "リンケージが失敗しました。class=[" + cls + "]" + CR 720 + ex2.getMessage(); 721 throw new RuntimeException( errMsg,ex2 ); 722 } 723 catch( InstantiationException ex3 ) { 724 String errMsg = "インスタンスの生成が失敗しました。class=[" + cls + "]" + CR 725 + ex3.getMessage() ; 726 throw new RuntimeException( errMsg,ex3 ); 727 } 728 catch( IllegalAccessException ex4 ) { 729 String errMsg = "クラスまたは初期化子にアクセスできません。class=[" + cls + "]" + CR 730 + ex4.getMessage(); 731 throw new RuntimeException( errMsg,ex4 ); 732 } 733 catch( RuntimeException ex5 ) { // 3.6.0.0 (2004/09/17) 734 String errMsg = "予期せぬエラー class=[" + cls + "]" + CR 735 + ex5.getMessage() ; 736 throw new RuntimeException( errMsg,ex5 ); 737 } 738 } 739}