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.taglib;
017
018 import org.opengion.hayabusa.common.HybsSystem;
019 import org.opengion.hayabusa.common.HybsSystemException;
020 import org.opengion.fukurou.util.StringUtil;
021
022 import static org.opengion.fukurou.util.StringUtil.nval ;
023
024 import org.opengion.fukurou.util.Shell;
025
026 import 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 * ●形式ï¼?lt;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】環å¢?¤‰数のキーをC?³?¶形式でæŒ?®šしまã�?初期値:現状のJava仮想マシンの環å¢?
070 * envVals 【TAG】環å¢?¤‰数の値をC?³?¶形式でæŒ?®šしまã�?初期値:現状の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 */
094 public 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】環å¢?¤‰数のキーをC?³?¶形式でæŒ?®šしまã�?初期値:現状のJava仮想マシンの環å¢?ã€?
580 *
581 * @og.tag
582 * シェル実行時の環å¢?¤‰数のキーをã??£?³?¶V形式でæŒ?®šしますã?
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】環å¢?¤‰数の値をC?³?¶形式でæŒ?®šしまã�?初期値:現状のJava仮想マシンの環å¢?ã€?
599 *
600 * @og.tag
601 * シェル実行時の環å¢?¤‰数の値をã??£?³?¶V形式でæŒ?®šしますã?
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 }