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.taglib; 017 018import org.opengion.hayabusa.common.HybsSystem; 019import org.opengion.hayabusa.common.HybsSystemException; 020import org.opengion.fukurou.util.StringUtil; 021 022import static org.opengion.fukurou.util.StringUtil.nval ; 023 024import org.opengion.fukurou.util.Shell; 025 026import java.io.File; 027 028/** 029 * ネイティブなプロセスを作成し、バッチファイルやアプリケーションを起動するタグです。 030 * 031 * プロセスの状態に応じて、下記のリターンコードが得られます。 032 * 033 * SHELL.RTN_CODE = 0 : 正常 (ページの残りを評価する。) 034 * SHELL.RTN_CODE = 1 : 処理中 (ページの残りを評価する。) 035 * SHELL.RTN_CODE = 9 : 取消 (ページの残りを評価する。) 036 * SHELL.RTN_CODE = -1 : 異常終了(ページの残りの処理を行わない。) 037 * 038 * 異常終了の場合は、このタグ以降の処理を中止します。 039 040 * wait 属性を使用して、処理の終了を待たずに、復帰することも出来ます。この場合は、 041 * SHELL.RTN_CODE = 1 となり、そのまま、処理は継続されます。このSHELL.RTN_CODE は、 042 * リクエスト変数にセットされていますので、そのまま、value タグで、取得可能です。 043 * 044 * action 属性に指定できるアクション名は、以下のとおりです。 045 * 046 * RUN Shellオブジェクトを生成/実行します。(セッションに登録しません。) 047 * SET Shellオブジェクトを生成/実行し、セッションに登録します。 048 * すでにセッションに登録済みのShellオブジェクトが実行中の場合は、途中経過を報告します。 049 * GET セッションに登録されている Shellオブジェクトを呼び出します。 050 * セッションに登録されていない場合は、異常終了になります。 051 * REMOVE セッションから、Shellオブジェクトを削除します。 052 * Shellが実行中の場合は強制終了します。 053 * 054 * @og.formSample 055 * ●形式:<og:shell program="…" /> 056 * ●body:なし 057 * 058 * ●Tag定義: 059 * <og:shell 060 * program ○【TAG】シェルファイルを実行する時に引き渡すコマンド(必須)。 061 * useBatch 【TAG】BATCHプロセスを実行するのかどうか[true/false]を指定します(初期値:false) 062 * wait 【TAG】プロセスの終了を待つかどうか[true/false]を指定します(初期値:true[待つ]) 063 * timeout 【TAG】プロセスの実行処理のタイムアウトを設定します (初期値:SHELL_TIMEOUT[=3600]) 064 * stdout 【TAG】実行結果を標準出力に出力するかどうか[true/false]を指定します(初期値:false) 065 * stderr 【TAG】実行結果をエラー出力に出力するかどうか[true/false]を指定します(初期値:false) 066 * info 【TAG】インフォメーション情報を出力するかどうか[true/false]を指定します(初期値:false) 067 * action 【TAG】アクション(RUN,SET,GET,REMOVE)をセットします(初期値:RUN) 068 * workDir 【TAG】作業ディレクトリを指定します(初期値:Java仮想マシンの作業ディレクトリ) 069 * envKeys 【TAG】環境変数のキーをCSV形式で指定します(初期値:現状のJava仮想マシンの環境) 070 * envVals 【TAG】環境変数の値をCSV形式で指定します(初期値:現状のJava仮想マシンの環境) 071 * display 【TAG】処理結果を画面に表示するかどうか[true/false]指定します(初期値:true) 072 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) 073 * /> 074 * 075 * ●使用例 076 * <og:shell 077 * program = "プログラム" dir /S や、abc.bat など 078 * action = "アクション" [RUN/SET/GET/REMOVE] 079 * useBatch = "バッチ使用" バッチ:true/false (初期値:false) 080 * wait = "終了待ち" 処理終了まで待つ:true/待たない:false (初期値:true) 081 * stdout = "標準出力使用" 標準出力使用:true/未使用:false (初期値:false) 082 * stderr = "エラー出力使用" エラー出力使用:true/未使用:false (初期値:false) 083 * info = "状態表示" シェルの状態表示:true/未使用:false (初期値:false) 084 * /> 085 * 086 * <og:value command="GET" key="SHELL.RTN_CODE" /> 087 * 088 * @og.group その他部品 089 * 090 * @version 4.0 091 * @author Kazuhiko Hasegawa 092 * @since JDK5.0, 093 */ 094public class ShellTag extends CommonTagSupport { 095 //* このプログラムのVERSION文字列を設定します。 {@value} */ 096 private static final String VERSION = "4.0.0.0 (2007/10/18)" ; 097 098 private static final long serialVersionUID = 400020071018L ; 099 100 /** action 引数に渡す事の出来る コマンド 実行 {@value} */ 101 public static final String ACT_RUN = "RUN" ; 102 /** action 引数に渡す事の出来る コマンド 登録 {@value} */ 103 public static final String ACT_SET = "SET" ; 104 /** action 引数に渡す事の出来る コマンド 取得 {@value} */ 105 public static final String ACT_GET = "GET" ; 106 /** action 引数に渡す事の出来る コマンド 削除 {@value} */ 107 public static final String ACT_REMOVE = "REMOVE" ; 108 109 /** action 引数に渡す事の出来る コマンド リスト */ 110 private static final String[] ACTION_LIST = new String[] { 111 ACT_RUN , ACT_SET , ACT_GET , ACT_REMOVE }; 112 113 private String program = null; 114 private boolean useBatch = false; // BATCHプロセスを実行するのかどうか(初期値:false) 115 private boolean stdout = false; // 標準出を出力するかどうか(初期値:false) 116 private boolean stderr = false; // エラー出力を出力するかどうか(初期値:false) 117 private boolean wait = true; // プロセスの終了を待つ(true)/待たない(false) (初期値:true) 118 private boolean info = false; // インフォメーションを出力するかどうか(初期値:false) 119 private boolean display = true; // 処理結果を画面に表示するかどうか(初期値:true) 120 private String action = ACT_RUN; 121 private File workDir = null; 122 private String[] envKeys = null; 123 private String[] envVals = null; 124 125 private static final String RTN_CODE = "SHELL.RTN_CODE" ; 126 127 // 3.6.1.0 (2005/01/05) タイムアウト時間を設定 128 private int timeout = HybsSystem.sysInt( "SHELL_TIMEOUT" ); 129 130 /** 131 * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。 132 * 133 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 134 * @og.rev 3.1.9.0 (2003/05/16) Shell への stdout と stderr の取得設定は廃止。ShellTag では、有効。 135 * @og.rev 3.3.3.0 (2003/07/09) デバッグ時の表示ロジックを追加。 136 * 137 * @return 後続処理の指示 138 */ 139 @Override 140 public int doEndTag() { 141 debugPrint(); // 4.0.0 (2005/02/28) 142 143 int rtnCode = actionExec( action ); 144 145 if( isDebug() ) { 146 jspPrint( "Return Code=[" + rtnCode + "]" ); 147 } 148 149 setRequestAttribute( RTN_CODE, String.valueOf( rtnCode ) ); 150 151 // rtnCode = 0 : 正常 (ページの残りを評価する。) 152 // rtnCode = 1 : 処理中 (ページの残りを評価する。) 153 // rtnCode = 9 : 取消 (ページの残りを評価する。) 154 // rtnCode = -1 : 異常終了(ページの残りの処理を行わない。) 155 156 if( rtnCode >= 0 ) { 157 return(EVAL_PAGE); // ページの残りを評価する。 158 } 159 else { 160 return(SKIP_PAGE); // ページの残りの処理を行わない。 161 } 162 } 163 164 /** 165 * タグリブオブジェクトをリリースします。 166 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 167 * 168 * @og.rev 2.0.0.4 (2002/09/27) カスタムタグの release() メソッドを、追加 169 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 170 * @og.rev 3.1.9.0 (2003/05/16) action コマンド追加 171 * @og.rev 3.3.3.0 (2003/07/09) action コマンドの動きを修正。 172 * @og.rev 3.6.0.1 (2004/09/29) display 属性を追加 173 * @og.rev 3.6.1.0 (2005/01/05) timeout 属性を追加 174 * 175 */ 176 @Override 177 protected void release2() { 178 super.release2(); 179 program = null; 180 useBatch = false; // BATCHプロセスを実行するのかどうか(初期値:false) 181 stdout = false; // 標準出を出力するかどうか(初期値:false) 182 stderr = false; // エラー出力を出力するかどうか(初期値:false) 183 wait = true; // プロセスの終了を待つ(true)/待たない(false) (初期値:true) 184 action = ACT_RUN; 185 info = false; 186 display = true; // 3.6.0.1 (2004/09/29) 187 timeout = HybsSystem.sysInt( "SHELL_TIMEOUT" ); 188 } 189 190 /** 191 * アクションを実行します。 192 * 193 * アクションは,指定のアクションコマンドに対応する処理を入力データに 194 * 対して行います。[RUN/SET/GET/REMOVE] 195 * 196 * @og.rev 3.1.9.0 (2003/05/16) 新規追加 197 * 198 * @param action アクションコマンド(public static final 宣言されている文字列) 199 * 200 * @return リターンコード 0:正常 1:実行中 9:取消 -1:異常終了 201 */ 202 private int actionExec( final String action ) { 203 int rtnCode = 1; 204 if( ACT_RUN.equals( action ) ) { rtnCode = shellRun(); } 205 else if( ACT_SET.equals( action ) ) { rtnCode = shellSet(); } 206 else if( ACT_GET.equals( action ) ) { rtnCode = shellGet(); } 207 else if( ACT_REMOVE.equals( action ) ) { rtnCode = shellRemove(); } 208 209 return rtnCode ; 210 } 211 212 /** 213 * Shell オブジェクトを新規作成します。 214 * 215 * @og.rev 3.3.3.0 (2003/07/09) 新規追加 216 * @og.rev 3.6.1.0 (2005/01/05) タイムアウト時間を設定 217 * 218 * @return Shellオブジェクト 219 */ 220 private Shell makeShell() { 221 Shell shell = new Shell(); 222 shell.setCommand( program,useBatch ); 223 shell.setWait( wait ); 224 shell.setTimeout( timeout ); // 3.6.1.0 (2005/01/05) 225 shell.setWorkDir( workDir ); 226 shell.setEnvP( makeEnvpArray( envKeys,envVals ) ); 227 228 if( isDebug() ) { 229 jspPrint( shell.getCommand() + HybsSystem.BR ); 230 } 231 232 return shell ; 233 } 234 235 /** 236 * 環境変数設定用の文字列配列を作成します。 237 * これは、キー配列と値配列を、key=value という文字列にして、配列を返します。 238 * 239 * @og.rev 3.3.3.0 (2003/07/09) 新規追加 240 * @og.rev 3.6.0.0 (2004/09/22) 引数のキー、値がnull 等の場合は、長さ0配列を返します。 241 * 242 * @param keys 環境変数のキー配列 243 * @param vals 環境変数の値配列 244 * 245 * @return 環境変数設定用の文字列配列(キー=値の文字列を配列にセット) 246 */ 247 private String[] makeEnvpArray( final String[] keys, final String[] vals ) { 248 if( keys == null || keys.length == 0 || vals == null || vals.length == 0 ) { 249 return new String[0]; 250 } 251 252 if( keys.length != vals.length ) { 253 String errMsg = "キーとバリューの個数が異なります。" 254 + HybsSystem.CR 255 + " keys.length=[" + keys.length + "] vals.length=[" + vals.length + "]" 256 + HybsSystem.CR 257 + " keys=" + StringUtil.array2csv( keys ) 258 + HybsSystem.CR 259 + " vals=" + StringUtil.array2csv( vals ); // 5.1.8.0 (2010/07/01) errMsg 修正 260 throw new HybsSystemException( errMsg ); 261 } 262 263 String[] envp = new String[keys.length]; 264 for( int i=0; i<envp.length; i++ ) { 265 envp[i] = keys[i] + "=" + vals[i] ; 266 } 267 268 return envp ; 269 } 270 271 /** 272 * RUN アクションを実行します。 273 * 274 * Shellオブジェクトを生成/実行します。(セッションに登録しません。) 275 * 276 * @og.rev 3.1.9.0 (2003/05/16) 新規追加 277 * @og.rev 3.3.3.0 (2003/07/09) Shell オブジェクトを、makeShell() メソッドより作成します。 278 * 279 * @return リターンコード 0:正常 1:実行中 9:取消 -1:異常終了 280 */ 281 private int shellRun() { 282 Shell shell = makeShell(); 283 int rtnCode = shell.exec(); // 0 は正常終了を示す 284 shellView( shell ); 285 286 return rtnCode ; 287 } 288 289 /** 290 * SET アクションを実行します。 291 * 292 * Shellオブジェクトを生成/実行し、セッションに登録します。 293 * wait 等でShellの終了を待たない方式では、有用です。 294 * 295 * @og.rev 3.1.9.0 (2003/05/16) 新規追加 296 * 297 * @return リターンコード 0:正常 1:実行中 9:取消 -1:異常終了 298 */ 299 private int shellSet() { 300 final int rtnCode; 301 302 Shell shell = (Shell)getSessionAttribute( HybsSystem.SHELL_KEEP_KEY ); 303 if( shell == null || shell.isEnd() ) { 304 shell = makeShell(); 305 rtnCode = shell.exec(); // 0 は正常終了を示す 306 setSessionAttribute( HybsSystem.SHELL_KEEP_KEY,shell ); 307 } 308 else { 309 rtnCode = shell.exitValue(); 310 } 311 shellView( shell ); 312 313 return rtnCode ; 314 } 315 316 /** 317 * GET アクションを実行します。 318 * 319 * セッションに登録されている Shellオブジェクトを呼び出します。 320 * 321 * @og.rev 3.1.9.0 (2003/05/16) 新規追加 322 * @og.rev 3.3.3.0 (2003/07/09) アクション時の内容を出力します。 323 * 324 * @return リターンコード 0:正常 1:実行中 9:取消 -1:異常終了 325 */ 326 private int shellGet() { 327 int rtnCode = 0; 328 329 Shell shell = (Shell)getSessionAttribute( HybsSystem.SHELL_KEEP_KEY ); 330 if( shell != null ) { rtnCode = shell.exitValue(); } 331 shellView( shell ); 332 333 return rtnCode ; 334 } 335 336 /** 337 * REMOVE アクションを実行します。 338 * 339 * セッションから、Shellオブジェクトを削除します。 340 * Shell が実行中ならば、強制終了させます。 341 * 342 * @og.rev 3.1.9.0 (2003/05/16) 新規追加 343 * @og.rev 3.3.3.0 (2003/07/09) アクション時の内容を出力します。 344 * 345 * @return リターンコード 0:正常 1:実行中 9:取消 -1:異常終了 346 */ 347 private int shellRemove() { 348 int rtnCode = 0; 349 350 Shell shell = (Shell)getSessionAttribute( HybsSystem.SHELL_KEEP_KEY ); 351 if( shell != null ) { 352 shell.destroy(); 353 rtnCode = shell.exitValue(); 354 } 355 shellView( shell ); 356 357 removeSessionAttribute( HybsSystem.SHELL_KEEP_KEY ); 358 359 return rtnCode ; 360 } 361 362 /** 363 * シェルの実行内容を、画面に表示します。 364 * 365 * @og.rev 3.3.3.0 (2003/07/09) 新規追加 366 * @og.rev 3.6.0.1 (2004/09/29) display 属性を考慮 367 * @og.rev 4.0.0.0 (2007/10/18) メッセージリソース統合( getResource().getMessage ⇒ getResource().getLabel ) 368 * 369 * @param shell シェルオブジェクト 370 */ 371 private void shellView( final Shell shell ) { 372 if( shell == null ) { 373 // MSG0066=処理は存在していません。 374// jspPrint( getResource().getMessage( "MSG0066" ) ); 375 jspPrint( getResource().getLabel( "MSG0066" ) ); 376 return ; 377 } 378 379 int rtnCode = shell.exitValue(); 380 381 final String msg ; 382 switch( rtnCode ) { 383 case Shell.OK : msg = "MSG0063"; break; // MSG0063=完了しました。 384 case Shell.RUNNING : msg = "MSG0067"; break; // MSG0067=処理は実行中です。 385 case Shell.CANCEL : msg = "MSG0069"; break; // MSG0069=処理をキャンセルしました。 386 // case Shell.ERROR : msg = "MSG0068"; break; // MSG0068=処理の実行中にエラーが発生しました。 387 default : msg = "MSG0068"; break; // MSG0068=処理の実行中にエラーが発生しました。 388 } 389 390 // 3.6.0.1 (2004/09/29) display 属性を考慮(display=true か、ERROR の場合は表示) 391 if( display || rtnCode == Shell.ERROR ) { 392// jspPrint( getResource().getMessage( msg ) + HybsSystem.BR ); 393 jspPrint( getResource().getLabel( msg ) + HybsSystem.BR ); 394 } 395 396 if( info ) { 397 jspPrint( shell.toString() ); 398 } 399 if( stdout ) { 400 jspPrint( StringUtil.htmlFilter( shell.getStdoutData() ) ); 401 } 402 if( stderr ) { 403 jspPrint( "<div class=\"row_mark\">" ); 404 jspPrint( StringUtil.htmlFilter( shell.getStderrData() ) ); 405 jspPrint( "</div>" ); 406 } 407 } 408 409 /** 410 * 【TAG】シェルファイルを実行する時に引き渡すコマンド。 411 * 412 * @og.tag シェルファイルを実行する時に引き渡すコマンド 413 * 414 * @param val シェルコマンド 415 */ 416 public void setProgram( final String val ) { 417 program = getRequestParameter( val ); 418 } 419 420 /** 421 * 【TAG】BATCHプロセスを実行するのかどうか[true/false]を指定します(初期値:false)。 422 * 423 * @og.tag 424 * BATCHファイルの実行と、EXEファイルの実行では、cmd.exe 経由するか 425 * どうか、判断が必要です。true(BATCHプロセス)では、cmd.exe 経由で実行、 426 * false(EXEファイル)では、直接実行します。 427 * 初期値は、false(EXEファイル)です。 428 * 429 * @param flag BATCHプロセスを実行するのかどうか [true:BATCHプロセス/false:EXEファイル] 430 */ 431 public void setUseBatch( final String flag ) { 432 useBatch = nval( getRequestParameter( flag ),useBatch ); 433 } 434 435 /** 436 * 【TAG】実行結果を標準出力に出力するかどうか[true/false]を指定します(初期値:false)。 437 * 438 * @og.tag 実行結果の標準出力を出力するかどうか(初期値:false) 439 * 440 * @param flag 実行結果の標準出力 [true:出力する/false:しない] 441 */ 442 public void setStdout( final String flag ) { 443 stdout = nval( getRequestParameter( flag ),stdout ); 444 } 445 446 /** 447 * 【TAG】実行結果をエラー出力に出力するかどうか[true/false]を指定します(初期値:false)。 448 * 449 * @og.tag 実行結果のエラー出力を出力するかどうか(初期値:false) 450 * 451 * @param flag 実行結果のエラー出力 [true:出力する/false:しない] 452 */ 453 public void setStderr( final String flag ) { 454 stderr = nval( getRequestParameter( flag ),stderr ); 455 } 456 457 /** 458 * 【TAG】プロセスの終了を待つかどうか[true/false]を指定します(初期値:true[待つ])。 459 * 460 * @og.tag プロセスの終了を待つ(true)/待たない(false) (初期値:true) 461 * 462 * @param flag プロセスの終了(true:待つ/false:待たない) 463 */ 464 public void setWait( final String flag ) { 465 wait = nval( getRequestParameter( flag ),wait ); 466 } 467 468 /** 469 * 【TAG】プロセスの実行処理のタイムアウトを設定します 470 * (初期値:SHELL_TIMEOUT[={@og.value org.opengion.hayabusa.common.SystemData#SHELL_TIMEOUT}])。 471 * 472 * @og.tag 473 * ゼロ(0) の場合は、割り込みが入るまで待ちつづけます。 474 * その場合、確実に終了させる手段を用意しておかないと、いつまで待っても以下の処理が 475 * 実行されない(デッドロック)状態になってしまいます。 476 * (初期値:システム定数のSHELL_TIMEOUT[={@og.value org.opengion.hayabusa.common.SystemData#SHELL_TIMEOUT}])。 477 * 478 * @og.rev 3.6.1.0 (2005/01/05) 新規追加 479 * 480 * @param tout タイムアウト時間(秒) ゼロは、無制限 481 * @see org.opengion.hayabusa.common.SystemData#SHELL_TIMEOUT 482 */ 483 public void setTimeout( final String tout ) { 484 timeout = nval( getRequestParameter( tout ),timeout ); 485 } 486 487 /** 488 * 【TAG】インフォメーション情報を出力するかどうか[true/false]を指定します(初期値:false)。 489 * 490 * @og.tag インフォメーション情報を出力するかどうか(初期値:false) 491 * 492 * @og.rev 3.1.9.0 (2003/05/16) 新規追加 493 * 494 * @param flag インフォメーション情報 [true:出力する/false:しない] 495 */ 496 public void setInfo( final String flag ) { 497 info = nval( getRequestParameter( flag ),info ); 498 } 499 500 /** 501 * 【TAG】処理結果を画面に表示するかどうか[true/false]指定します(初期値:true)。 502 * 503 * @og.tag 504 * 処理結果が、異常でない場合のみ、この機能が有効になります。 505 * 各種処理を連続で行う場合、最後にエラーが発生したにもかかわらず、 506 * 先に正常終了している場合に、不要なメッセージを出すと、紛らわしい為です。 507 * 508 * @og.rev 3.6.0.1 (2004/09/29) 新規追加 509 * 510 * @param flag 処理結果を画面に表示するかどうか [true:出力する/false:しない] 511 */ 512 public void setDisplay( final String flag ) { 513 display = nval( getRequestParameter( flag ),display ); 514 } 515 516 /** 517 * 【TAG】アクション(RUN,SET,GET,REMOVE)をセットします(初期値:RUN)。 518 * 519 * @og.tag 520 * アクションは,HTMLから(get/post)指定されますので,ACT_xxx で設定される 521 * フィールド定数値のいづれかを、指定できます。 522 * 523 * RUN Shellオブジェクトを生成/実行します。(セッションに登録しません。) 524 * SET Shellオブジェクトを生成/実行し、セッションに登録します。 525 * GET セッションに登録されている Shellオブジェクトを呼び出します。 526 * REMOVE セッションから、Shellオブジェクトを削除します。 527 * Shellが実行中の場合は強制終了します。 528 * 529 * @og.rev 3.1.9.0 (2003/05/16) 新規追加 530 * @og.rev 3.5.6.2 (2004/07/05) 文字列の連結にStringBuilderを使用します。 531 * 532 * @param act アクション(初期値は、RUN です。) 533 * @see <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.ShellTag.ACT_RUN">アクション定数</a> 534 */ 535 public void setAction( final String act ) { 536 action = nval( getRequestParameter( act ),action ); 537 if( !check( action, ACTION_LIST ) ) { 538 StringBuilder errMsg = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 539 errMsg.append( "指定のアクションは実行できません。アクションエラー" ); 540 errMsg.append( HybsSystem.CR ); 541 errMsg.append( "action=[" ).append( action ).append( "] " ); 542 errMsg.append( HybsSystem.CR ); 543 for( int i=0; i<ACTION_LIST.length; i++ ) { 544 errMsg.append( " | " ); 545 errMsg.append( ACTION_LIST[i] ); 546 } 547 errMsg.append( " | " ); 548 throw new HybsSystemException( errMsg.toString() ); 549 } 550 } 551 552 /** 553 * 【TAG】作業ディレクトリを指定します(初期値:Java仮想マシンの作業ディレクトリ)。 554 * 555 * @og.tag 556 * シェルを実行する、作業ディレクトリを指定します。 557 * 絶対パスで指定することも、相対パスで指定することも出来ます。 558 * 相対パスの場合は、ドキュメントベースの物理パスが基準になります。 559 * (そのJSPファイル自身のディレクトリが基準ではありません。) 560 * 指定しない場合は、このJava仮想マシンの作業ディレクトリで実行されます。 561 * 562 * @og.rev 3.3.3.0 (2003/07/09) 新規追加 563 * 564 * @param dir 作業ディレクトリ 565 */ 566 public void setWorkDir( final String dir ) { 567 String work = HybsSystem.url2dir( getRequestParameter( dir ) ); 568 workDir = new File( work ); 569 if( ! workDir.isDirectory() ) { 570 String errMsg = "指定の作業ディレクトリは、使用できません。" 571 + HybsSystem.CR 572 + "workDir=[" + workDir + "] " 573 + HybsSystem.CR ; 574 throw new HybsSystemException( errMsg ); 575 } 576 } 577 578 /** 579 * 【TAG】環境変数のキーをCSV形式で指定します(初期値:現状のJava仮想マシンの環境)。 580 * 581 * @og.tag 582 * シェル実行時の環境変数のキーを、CSVV形式で指定します。 583 * 指定がない場合は、現状のJava仮想マシンの環境が引き継がれます。 584 * envVals と対応していなければなりません。 585 * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 586 * こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。 587 * 588 * @og.rev 3.3.3.0 (2003/07/09) 新規追加 589 * @og.rev 3.5.6.2 (2004/07/05) CommonTagSupport#getCSVParameter を使用 590 * 591 * @param keys 環境変数のキー 592 */ 593 public void setEnvKeys( final String keys ) { 594 envKeys = getCSVParameter( keys ); 595 } 596 597 /** 598 * 【TAG】環境変数の値をCSV形式で指定します(初期値:現状のJava仮想マシンの環境)。 599 * 600 * @og.tag 601 * シェル実行時の環境変数の値を、CSVV形式で指定します。 602 * 指定がない場合は、現状のJava仮想マシンの環境が引き継がれます。 603 * envKeys と対応していなければなりません。 604 * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 605 * こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。 606 * 607 * @og.rev 3.3.3.0 (2003/07/09) 新規追加 608 * @og.rev 3.5.6.2 (2004/07/05) CommonTagSupport#getCSVParameter を使用 609 * 610 * @param vals 環境変数のキー 611 */ 612 public void setEnvVals( final String vals ) { 613 envVals = getCSVParameter( vals ); 614 } 615 616 /** 617 * このオブジェクトの文字列表現を返します。 618 * 基本的にデバッグ目的に使用します。 619 * 620 * @return このクラスの文字列表現 621 */ 622 @Override 623 public String toString() { 624 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() ) 625 .println( "VERSION" ,VERSION ) 626 .println( "program" ,program ) 627 .println( "useBatch" ,useBatch ) 628 .println( "stdout" ,stdout ) 629 .println( "stderr" ,stderr ) 630 .println( "wait" ,wait ) 631 .println( "info" ,info ) 632 .println( "display" ,display ) 633 .println( "action" ,action ) 634 .println( "ACTION_LIST" ,ACTION_LIST ) 635 .println( "workDir" ,workDir ) 636 .println( "envKeys" ,envKeys ) 637 .println( "envVals" ,envVals ) 638 .println( "timeout" ,timeout ) 639 .println( "Other..." ,getAttributes().getAttribute() ) 640 .fixForm().toString() ; 641 } 642}