2 * Copyright (c) 2009 The openGion Project.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
13 * either express or implied. See the License for the specific language
14 * governing permissions and limitations under the License.
16 package org.opengion.hayabusa.taglib;
18 import org.opengion.hayabusa.common.HybsSystem;
19 import org.opengion.hayabusa.common.HybsSystemException;
20 import org.opengion.fukurou.util.StringUtil;
21 import org.opengion.fukurou.util.ToString; // 6.1.1.0 (2015/01/17)
22 import org.opengion.fukurou.util.Shell;
23 import org.opengion.fukurou.util.ArraySet; // 6.4.3.4 (2016/03/11)
25 import static org.opengion.fukurou.util.StringUtil.nval ;
26 import static org.opengion.fukurou.system.HybsConst.BR; // 6.1.0.0 (2014/12/26) refactoring
29 import java.util.Set; // 6.4.3.4 (2016/03/11)
32 * ネイティブなプロセスを作成し、バッチファイルやアプリケーションを起動するタグです。
34 * プロセスの状態に応じて、下記のリターンコードが得られます。
36 * SHELL.RTN_CODE = 0 : 正常 (ページの残りを評価する。)
37 * SHELL.RTN_CODE = 1 : 処理中 (ページの残りを評価する。)
38 * SHELL.RTN_CODE = 9 : 取消 (ページの残りを評価する。)
39 * SHELL.RTN_CODE = -1 : 異常終了(useStop:true ページの残りの処理を行わない。false:残りを評価する。)
41 * 異常終了の場合は、このタグ以降の処理を中止します。
43 * wait 属性を使用して、処理の終了を待たずに、復帰することも出来ます。この場合は、
44 * SHELL.RTN_CODE = 1 となり、そのまま、処理は継続されます。このSHELL.RTN_CODE は、
45 * リクエスト変数にセットされていますので、そのまま、value タグで、取得可能です。
47 * action 属性に指定できるアクション名は、以下のとおりです。
49 * RUN Shellオブジェクトを生成/実行します。(セッションに登録しません。)
50 * SET Shellオブジェクトを生成/実行し、セッションに登録します。
51 * すでにセッションに登録済みのShellオブジェクトが実行中の場合は、途中経過を報告します。
52 * GET セッションに登録されている Shellオブジェクトを呼び出します。
53 * セッションに登録されていない場合は、異常終了になります。
54 * REMOVE セッションから、Shellオブジェクトを削除します。
55 * Shellが実行中の場合は強制終了します。
58 * ●形式:<og:shell program="…" />
63 * program ○【TAG】シェルファイルを実行する時に引き渡すコマンドを指定します(必須)。
64 * useBatch 【TAG】BATCHプロセスを実行するのかどうか[true/false]を指定します(初期値:false)
65 * wait 【TAG】プロセスの終了を待つかどうか[true/false]を指定します(初期値:true[待つ])
66 * timeout 【TAG】プロセスの実行処理のタイムアウトを設定します (初期値:SHELL_TIMEOUT[=3600])
67 * stdout 【TAG】実行結果を標準出力に出力するかどうか[true/false]を指定します(初期値:false)
68 * stderr 【TAG】実行結果をエラー出力に出力するかどうか[true/false]を指定します(初期値:false)
69 * info 【TAG】インフォメーション情報を出力するかどうか[true/false]を指定します(初期値:false)
70 * action 【TAG】アクション(RUN,SET,GET,REMOVE)をセットします(初期値:RUN)
71 * workDir 【TAG】作業ディレクトリを指定します(初期値:Java仮想マシンの作業ディレクトリ)
72 * envKeys 【TAG】環境変数のキーをCSV形式で指定します(初期値:現状のJava仮想マシンの環境)
73 * envVals 【TAG】環境変数の値をCSV形式で指定します(初期値:現状のJava仮想マシンの環境)
74 * display 【TAG】処理結果を画面に表示するかどうか[true/false]指定します(初期値:true)
75 * useStop 【TAG】エラー時に停止するかどうか[true/false]を指定します(初期値:true) 7.1.0.0 (2020/01/20)
76 * caseKey 【TAG】このタグ自体を利用するかどうかの条件キーを指定します(初期値:null)
77 * caseVal 【TAG】このタグ自体を利用するかどうかの条件値を指定します(初期値:null)
78 * caseNN 【TAG】指定の値が、null/ゼロ文字列 でない場合(Not Null=NN)は、このタグは使用されます(初期値:判定しない)
79 * caseNull 【TAG】指定の値が、null/ゼロ文字列 の場合は、このタグは使用されます(初期値:判定しない)
80 * caseIf 【TAG】指定の値が、true/TRUE文字列の場合は、このタグは使用されます(初期値:判定しない)
81 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false)
86 * program = "プログラム" dir /S や、abc.bat など
87 * action = "アクション" [RUN/SET/GET/REMOVE]
88 * useBatch = "バッチ使用" バッチ:true/false (初期値:false)
89 * wait = "終了待ち" 処理終了まで待つ:true/待たない:false (初期値:true)
90 * stdout = "標準出力使用" 標準出力使用:true/未使用:false (初期値:false)
91 * stderr = "エラー出力使用" エラー出力使用:true/未使用:false (初期値:false)
92 * info = "状態表示" シェルの状態表示:true/未使用:false (初期値:false)
93 * display = "画面表示" 画面に表示する:true/表示しない:false (初期値:true)
94 * useStop = "エラー時停止" エラー時に停止する:true/停止しない:alse (初期値:true) 7.1.0.0 (2020/01/20)
97 * <og:value command="GET" key="SHELL.RTN_CODE" />
102 * @author Kazuhiko Hasegawa
105 public class ShellTag extends CommonTagSupport {
106 /** このプログラムのVERSION文字列を設定します。 {@value} */
107 private static final String VERSION = "7.1.0.0 (2020/01/20)" ;
108 private static final long serialVersionUID = 710020200120L ;
110 /** action 引数に渡す事の出来る コマンド 実行 {@value} */
111 public static final String ACT_RUN = "RUN" ;
112 /** action 引数に渡す事の出来る コマンド 登録 {@value} */
113 public static final String ACT_SET = "SET" ;
114 /** action 引数に渡す事の出来る コマンド 取得 {@value} */
115 public static final String ACT_GET = "GET" ;
116 /** action 引数に渡す事の出来る コマンド 削除 {@value} */
117 public static final String ACT_REMOVE = "REMOVE" ;
119 // 6.4.3.4 (2016/03/11) String配列 から、Setに置き換えます。
120 private static final Set<String> ACTION_SET = new ArraySet<>( ACT_RUN , ACT_SET , ACT_GET , ACT_REMOVE );
122 private static final String RTN_CODE = "SHELL.RTN_CODE" ;
124 private String program ;
125 private boolean useBatch ; // BATCHプロセスを実行するのかどうか(初期値:false)
126 private boolean stdout ; // 標準出を出力するかどうか(初期値:false)
127 private boolean stderr ; // エラー出力を出力するかどうか(初期値:false)
128 private boolean wait = true; // プロセスの終了を待つ(true)/待たない(false) (初期値:true)
129 private boolean info ; // インフォメーションを出力するかどうか(初期値:false)
130 private boolean display = true; // 処理結果を画面に表示するかどうか(初期値:true)
131 private String action = ACT_RUN;
132 private File workDir ;
133 private String[] envKeys ;
134 private String[] envVals ;
136 private boolean useStop = true; // 7.1.0.0 (2020/01/20) エラー時に処理を停止(true)するかどうか
138 // 3.6.1.0 (2005/01/05) タイムアウト時間を設定
139 private int timeout = HybsSystem.sysInt( "SHELL_TIMEOUT" );
144 * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor.
146 public ShellTag() { super(); } // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。
149 * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。
151 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。
152 * @og.rev 3.1.9.0 (2003/05/16) Shell への stdout と stderr の取得設定は廃止。ShellTag では、有効。
153 * @og.rev 3.3.3.0 (2003/07/09) デバッグ時の表示ロジックを追加。
154 * @og.rev 6.3.4.0 (2015/08/01) caseKey,caseVal,caseNN,caseNull,caseIf 属性対応
155 * @og.rev 7.1.0.0 (2020/01/20) useStop 属性を追加
160 public int doEndTag() {
161 debugPrint(); // 4.0.0 (2005/02/28)
162 if( !useTag() ) { return EVAL_PAGE ; } // 6.3.4.0 (2015/08/01)
164 final int rtnCode = actionExec( action );
167 jspPrint( "Return Code=[" + rtnCode + "]" );
170 setRequestAttribute( RTN_CODE, String.valueOf( rtnCode ) );
172 // rtnCode = 0 : 正常 (ページの残りを評価する。)
173 // rtnCode = 1 : 処理中 (ページの残りを評価する。)
174 // rtnCode = 9 : 取消 (ページの残りを評価する。)
175 // rtnCode = -1 : 異常終了(ページの残りの処理を行わない。)
177 // 7.1.0.0 (2020/01/20) useStop 属性を追加。エラー時に処理を停止(true)するかどうか。
178 if( useStop && rtnCode < 0 ) {
179 return SKIP_PAGE ; // ページの残りの処理を行わない。
182 return EVAL_PAGE ; // ページの残りを評価する。
185 // if( rtnCode >= 0 ) {
186 // return EVAL_PAGE ; // ページの残りを評価する。
189 // return SKIP_PAGE ; // ページの残りの処理を行わない。
194 * タグリブオブジェクトをリリースします。
195 * キャッシュされて再利用されるので、フィールドの初期設定を行います。
197 * @og.rev 2.0.0.4 (2002/09/27) カスタムタグの release() メソッドを、追加
198 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。
199 * @og.rev 3.1.9.0 (2003/05/16) action コマンド追加
200 * @og.rev 3.3.3.0 (2003/07/09) action コマンドの動きを修正。
201 * @og.rev 3.6.0.1 (2004/09/29) display 属性を追加
202 * @og.rev 3.6.1.0 (2005/01/05) timeout 属性を追加
203 * @og.rev 7.1.0.0 (2020/01/20) useStop 属性を追加
207 protected void release2() {
210 useBatch = false; // BATCHプロセスを実行するのかどうか(初期値:false)
211 stdout = false; // 標準出を出力するかどうか(初期値:false)
212 stderr = false; // エラー出力を出力するかどうか(初期値:false)
213 wait = true; // プロセスの終了を待つ(true)/待たない(false) (初期値:true)
216 display = true; // 3.6.0.1 (2004/09/29)
217 useStop = true; // 7.1.0.0 (2020/01/20) エラー時に処理を停止(true)するかどうか
218 timeout = HybsSystem.sysInt( "SHELL_TIMEOUT" );
224 * アクションは、指定のアクションコマンドに対応する処理を入力データに
225 * 対して行います。[RUN/SET/GET/REMOVE]
227 * @og.rev 3.1.9.0 (2003/05/16) 新規追加
229 * @param action アクションコマンド (public static final 宣言されている文字列)
231 * @return リターンコード 0:正常 1:実行中 9:取消 -1:異常終了
233 private int actionExec( final String action ) {
235 if( ACT_RUN.equals( action ) ) { rtnCode = shellRun(); }
236 else if( ACT_SET.equals( action ) ) { rtnCode = shellSet(); }
237 else if( ACT_GET.equals( action ) ) { rtnCode = shellGet(); }
238 else if( ACT_REMOVE.equals( action ) ) { rtnCode = shellRemove(); }
244 * Shell オブジェクトを新規作成します。
246 * @og.rev 3.3.3.0 (2003/07/09) 新規追加
247 * @og.rev 3.6.1.0 (2005/01/05) タイムアウト時間を設定
249 * @return Shellオブジェクト
251 private Shell makeShell() {
252 final Shell shell = new Shell();
253 shell.setCommand( program,useBatch );
254 shell.setWait( wait );
255 shell.setTimeout( timeout ); // 3.6.1.0 (2005/01/05)
256 shell.setWorkDir( workDir );
257 shell.setEnvP( makeEnvpArray( envKeys,envVals ) );
260 jspPrint( shell.getCommand() + BR );
267 * 環境変数設定用の文字列配列を作成します。
268 * これは、キー配列と値配列を、key=value という文字列にして、配列を返します。
270 * @og.rev 3.3.3.0 (2003/07/09) 新規追加
271 * @og.rev 3.6.0.0 (2004/09/22) 引数のキー、値がnull 等の場合は、長さ0配列を返します。
273 * @param keys 環境変数のキー配列
274 * @param vals 環境変数の値配列
276 * @return 環境変数設定用の文字列配列(キー=値の文字列を配列にセット)
279 private String[] makeEnvpArray( final String[] keys, final String[] vals ) {
280 if( keys == null || keys.length == 0 || vals == null || vals.length == 0 ) {
281 return new String[0];
284 if( keys.length != vals.length ) {
285 final String errMsg = "キーとバリューの個数が異なります。"
287 + " keys.length=[" + keys.length + "] vals.length=[" + vals.length + "]"
289 + " keys=" + StringUtil.array2csv( keys )
291 + " vals=" + StringUtil.array2csv( vals ); // 5.1.8.0 (2010/07/01) errMsg 修正
292 throw new HybsSystemException( errMsg );
295 String[] envp = new String[keys.length];
296 for( int i=0; i<envp.length; i++ ) {
297 envp[i] = keys[i] + "=" + vals[i] ;
306 * Shellオブジェクトを生成/実行します。(セッションに登録しません。)
308 * @og.rev 3.1.9.0 (2003/05/16) 新規追加
309 * @og.rev 3.3.3.0 (2003/07/09) Shell オブジェクトを、makeShell() メソッドより作成します。
311 * @return リターンコード 0:正常 1:実行中 9:取消 -1:異常終了
313 private int shellRun() {
314 final Shell shell = makeShell();
315 final int rtnCode = shell.exec(); // 0 は正常終了を示す
324 * Shellオブジェクトを生成/実行し、セッションに登録します。
325 * wait 等でShellの終了を待たない方式では、有用です。
327 * @og.rev 3.1.9.0 (2003/05/16) 新規追加
329 * @return リターンコード 0:正常 1:実行中 9:取消 -1:異常終了
331 private int shellSet() {
334 Shell shell = (Shell)getSessionAttribute( HybsSystem.SHELL_KEEP_KEY );
335 if( shell == null || shell.isEnd() ) {
337 rtnCode = shell.exec(); // 0 は正常終了を示す
338 setSessionAttribute( HybsSystem.SHELL_KEEP_KEY,shell );
341 rtnCode = shell.exitValue();
351 * セッションに登録されている Shellオブジェクトを呼び出します。
353 * @og.rev 3.1.9.0 (2003/05/16) 新規追加
354 * @og.rev 3.3.3.0 (2003/07/09) アクション時の内容を出力します。
356 * @return リターンコード 0:正常 1:実行中 9:取消 -1:異常終了
358 private int shellGet() {
361 final Shell shell = (Shell)getSessionAttribute( HybsSystem.SHELL_KEEP_KEY );
362 if( shell != null ) { rtnCode = shell.exitValue(); }
369 * REMOVE アクションを実行します。
371 * セッションから、Shellオブジェクトを削除します。
372 * Shell が実行中ならば、強制終了させます。
374 * @og.rev 3.1.9.0 (2003/05/16) 新規追加
375 * @og.rev 3.3.3.0 (2003/07/09) アクション時の内容を出力します。
377 * @return リターンコード 0:正常 1:実行中 9:取消 -1:異常終了
379 private int shellRemove() {
382 final Shell shell = (Shell)getSessionAttribute( HybsSystem.SHELL_KEEP_KEY );
383 if( shell != null ) {
385 rtnCode = shell.exitValue();
389 removeSessionAttribute( HybsSystem.SHELL_KEEP_KEY );
395 * シェルの実行内容を、画面に表示します。
397 * @og.rev 3.3.3.0 (2003/07/09) 新規追加
398 * @og.rev 3.6.0.1 (2004/09/29) display 属性を考慮
399 * @og.rev 4.0.0.0 (2007/10/18) メッセージリソース統合( getResource().getMessage ⇒ getResource().getLabel )
400 * @og.rev 7.1.0.0 (2020/01/20) display 属性で、info,stdout,stderr のすべてをOFFにする。
402 * @param shell シェルオブジェクト
404 private void shellView( final Shell shell ) {
405 if( shell == null ) {
406 // MSG0066=処理は存在していません。
407 jspPrint( getResource().getLabel( "MSG0066" ) );
411 final int rtnCode = shell.exitValue();
415 case Shell.OK : msg = "MSG0063"; break; // MSG0063=完了しました。
416 case Shell.RUNNING : msg = "MSG0067"; break; // MSG0067=処理は実行中です。
417 case Shell.CANCEL : msg = "MSG0069"; break; // MSG0069=処理をキャンセルしました。
418 // case Shell.ERROR : msg = "MSG0068"; break; // MSG0068=処理の実行中にエラーが発生しました。
419 default : msg = "MSG0068"; break; // MSG0068=処理の実行中にエラーが発生しました。
422 // 3.6.0.1 (2004/09/29) display 属性を考慮(display=true か、ERROR の場合は表示)
423 // if( display || rtnCode == Shell.ERROR ) {
424 // jspPrint( getResource().getLabel( msg ) + BR );
426 // 7.1.0.0 (2020/01/20) display 属性で、info,stdout,stderr のすべてをOFFにする。
428 jspPrint( getResource().getLabel( msg ) + BR );
431 jspPrint( shell.toString() );
434 jspPrint( StringUtil.htmlFilter( shell.getStdoutData() ) );
437 jspPrint( "<div class=\"row_mark\">" );
438 jspPrint( StringUtil.htmlFilter( shell.getStderrData() ) );
439 jspPrint( "</div>" );
445 * 【TAG】シェルファイルを実行する時に引き渡すコマンドを指定します。
447 * @og.tag シェルファイルを実行する時に引き渡すコマンド
451 public void setProgram( final String val ) {
452 program = getRequestParameter( val );
456 * 【TAG】BATCHプロセスを実行するのかどうか[true/false]を指定します(初期値:false)。
459 * BATCHファイルの実行と、EXEファイルの実行では、cmd.exe 経由するか
460 * どうか、判断が必要です。true(BATCHプロセス)では、cmd.exe 経由で実行、
461 * false(EXEファイル)では、直接実行します。
462 * 初期値は、false(EXEファイル)です。
464 * @param flag BATCHプロセスを実行するのかどうか [true:BATCHプロセス/false:EXEファイル]
466 public void setUseBatch( final String flag ) {
467 useBatch = nval( getRequestParameter( flag ),useBatch );
471 * 【TAG】実行結果を標準出力に出力するかどうか[true/false]を指定します(初期値:false)。
473 * @og.tag 実行結果の標準出力を出力するかどうか(初期値:false)
475 * @param flag 実行結果の標準出力 [true:出力する/false:しない]
477 public void setStdout( final String flag ) {
478 stdout = nval( getRequestParameter( flag ),stdout );
482 * 【TAG】実行結果をエラー出力に出力するかどうか[true/false]を指定します(初期値:false)。
484 * @og.tag 実行結果のエラー出力を出力するかどうか(初期値:false)
486 * @param flag 実行結果のエラー出力 [true:出力する/false:しない]
488 public void setStderr( final String flag ) {
489 stderr = nval( getRequestParameter( flag ),stderr );
493 * 【TAG】プロセスの終了を待つかどうか[true:待つ/false:待たない]を指定します(初期値:true[待つ])。
495 * @og.tag プロセスの終了を待つ(true)/待たない(false) (初期値:true)
497 * @param flag 終了待ち [true:待つ/false:待たない]
499 public void setWait( final String flag ) {
500 wait = nval( getRequestParameter( flag ),wait );
504 * 【TAG】プロセスの実行処理のタイムアウトを設定します
505 * (初期値:SHELL_TIMEOUT[={@og.value SystemData#SHELL_TIMEOUT}])。
508 * ゼロ(0) の場合は、割り込みが入るまで待ちつづけます。
509 * その場合、確実に終了させる手段を用意しておかないと、いつまで待っても以下の処理が
510 * 実行されない(デッドロック)状態になってしまいます。
511 * (初期値:システム定数のSHELL_TIMEOUT[={@og.value SystemData#SHELL_TIMEOUT}])。
513 * @og.rev 3.6.1.0 (2005/01/05) 新規追加
515 * @param tout タイムアウト時間(秒) (ゼロは、無制限)
516 * @see org.opengion.hayabusa.common.SystemData#SHELL_TIMEOUT
518 public void setTimeout( final String tout ) {
519 timeout = nval( getRequestParameter( tout ),timeout );
523 * 【TAG】インフォメーション情報を出力するかどうか[true/false]を指定します(初期値:false)。
525 * @og.tag インフォメーション情報を出力するかどうか(初期値:false)
527 * @og.rev 3.1.9.0 (2003/05/16) 新規追加
529 * @param flag インフォメーション情報 [true:出力する/false:しない]
531 public void setInfo( final String flag ) {
532 info = nval( getRequestParameter( flag ),info );
536 * 【TAG】処理結果を画面に表示するかどうか[true/false]指定します(初期値:true)。
539 // * 処理結果が、異常でない場合のみ、この機能が有効になります。
540 // * 各種処理を連続で行う場合、最後にエラーが発生したにもかかわらず、
541 // * 先に正常終了している場合に、不要なメッセージを出すと、紛らわしい為です。
543 * display="false" に設定すると、info,stdout,stderr のすべての出力をOFFにします。
546 * @og.rev 3.6.0.1 (2004/09/29) 新規追加
547 * @og.rev 7.1.0.0 (2020/01/20) display 属性で、info,stdout,stderr のすべてをOFFにする。
549 * @param flag 処理結果を画面に表示するかどうか [true:出力する/false:しない]
551 public void setDisplay( final String flag ) {
552 display = nval( getRequestParameter( flag ),display );
556 * 【TAG】アクション[RUN/SET/GET/REMOVE]をセットします(初期値:RUN)。
559 * アクションは、HTMLから(get/post)指定されますので、ACT_xxx で設定される
560 * フィールド定数値のいづれかを、指定できます。
563 * RUN Shellオブジェクトを生成/実行します。(セッションに登録しません。)
564 * SET Shellオブジェクトを生成/実行し、セッションに登録します。
565 * GET セッションに登録されている Shellオブジェクトを呼び出します。
566 * REMOVE セッションから、Shellオブジェクトを削除します。
567 * Shellが実行中の場合は強制終了します。
569 * @og.rev 3.1.9.0 (2003/05/16) 新規追加
570 * @og.rev 3.5.6.2 (2004/07/05) 文字列の連結にStringBuilderを使用します。
571 * @og.rev 6.3.4.0 (2015/08/01) Arrays.toString から String.join に置き換え。
572 * @og.rev 6.4.3.4 (2016/03/11) String配列 から、Setに置き換えます。
574 * @param act アクション [RUN/SET/GET/REMOVE]
575 * @see <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.ShellTag.ACT_RUN">アクション定数</a>
577 public void setAction( final String act ) {
578 action = nval( getRequestParameter( act ),action );
579 if( !check( action, ACTION_SET ) ) {
580 final String errMsg = "指定のアクションは実行できません。アクションエラー" + CR
581 + "action=[" + action + "] " + CR
582 + "actionList=" + String.join( ", " , ACTION_SET ) ;
583 throw new HybsSystemException( errMsg );
588 * 【TAG】作業ディレクトリを指定します(初期値:Java仮想マシンの作業ディレクトリ)。
591 * シェルを実行する、作業ディレクトリを指定します。
592 * 絶対パスで指定することも、相対パスで指定することも出来ます。
593 * 相対パスの場合は、ドキュメントベースの物理パスが基準になります。
594 * (そのJSPファイル自身のディレクトリが基準ではありません。)
595 * 指定しない場合は、このJava仮想マシンの作業ディレクトリで実行されます。
597 * @og.rev 3.3.3.0 (2003/07/09) 新規追加
599 * @param dir 作業ディレクトリ
601 public void setWorkDir( final String dir ) {
602 final String work = HybsSystem.url2dir( getRequestParameter( dir ) );
603 workDir = new File( work );
604 if( ! workDir.isDirectory() ) {
605 final String errMsg = "指定の作業ディレクトリは、使用できません。"
607 + "workDir=[" + workDir + "] "
609 throw new HybsSystemException( errMsg );
614 * 【TAG】環境変数のキーをCSV形式で指定します(初期値:現状のJava仮想マシンの環境)。
617 * シェル実行時の環境変数のキーを、CSVV形式で指定します。
618 * 指定がない場合は、現状のJava仮想マシンの環境が引き継がれます。
619 * envVals と対応していなければなりません。
620 * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。
621 * こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。
623 * @og.rev 3.3.3.0 (2003/07/09) 新規追加
624 * @og.rev 3.5.6.2 (2004/07/05) CommonTagSupport#getCSVParameter を使用
626 * @param keys 環境変数のキー
628 public void setEnvKeys( final String keys ) {
629 envKeys = getCSVParameter( keys );
633 * 【TAG】環境変数の値をCSV形式で指定します(初期値:現状のJava仮想マシンの環境)。
636 * シェル実行時の環境変数の値を、CSVV形式で指定します。
637 * 指定がない場合は、現状のJava仮想マシンの環境が引き継がれます。
638 * envKeys と対応していなければなりません。
639 * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。
640 * こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。
642 * @og.rev 3.3.3.0 (2003/07/09) 新規追加
643 * @og.rev 3.5.6.2 (2004/07/05) CommonTagSupport#getCSVParameter を使用
645 * @param vals 環境変数のキー
647 public void setEnvVals( final String vals ) {
648 envVals = getCSVParameter( vals );
652 * 【TAG】エラー時に処理を停止するかどうか[true/false]を指定します(初期値:true)。
655 * エラー時に、以下の処理を停止したい場合に、使用します。
658 * SHELL.RTN_CODE = 0 : 正常 (ページの残りを評価する。)
659 * SHELL.RTN_CODE = 1 : 処理中 (ページの残りを評価する。)
660 * SHELL.RTN_CODE = 9 : 取消 (ページの残りを評価する。)
661 * SHELL.RTN_CODE = -1 : 異常終了(useStop:true ページの残りの処理を行わない。false:残りを評価する。)
663 * が取得できますが、異常終了時に、処理を停止するか、継続処理させるかを指定できます。
664 * 互換性の観点から、初期値は、true(エラー時に停止する)です。
666 * @og.rev 7.1.0.0 (2020/01/20) useStop 属性を追加
668 * @param flag エラー時停止 [true:する/それ以外:しない]
670 public void setUseStop( final String flag ) {
671 useStop = nval( getRequestParameter( flag ),useStop );
675 * このオブジェクトの文字列表現を返します。
678 * @return このクラスの文字列表現
682 public String toString() {
683 return ToString.title( this.getClass().getName() )
684 .println( "VERSION" ,VERSION )
685 .println( "program" ,program )
686 .println( "useBatch" ,useBatch )
687 .println( "stdout" ,stdout )
688 .println( "stderr" ,stderr )
689 .println( "wait" ,wait )
690 .println( "info" ,info )
691 .println( "display" ,display )
692 .println( "action" ,action )
693 .println( "workDir" ,workDir )
694 .println( "envKeys" ,envKeys )
695 .println( "envVals" ,envVals )
696 .println( "timeout" ,timeout )
697 .println( "Other..." ,getAttributes().getAttribute() )
698 .fixForm().toString() ;