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.SystemManager;
020 import org.opengion.hayabusa.db.DBColumn;
021 import org.opengion.hayabusa.db.DBTableModel;
022 import org.opengion.hayabusa.db.DBTableModelUtil;
023 import org.opengion.hayabusa.html.ViewForm;
024 import org.opengion.hayabusa.html.ViewFormFactory;
025 import org.opengion.hayabusa.resource.ResourceManager;
026
027 import static org.opengion.fukurou.util.StringUtil.nval ;
028
029 import org.opengion.fukurou.util.HybsTimerTask;
030 import org.opengion.fukurou.util.HybsTimerTaskManager;
031
032 import java.util.Timer;
033 import java.util.Map;
034 import java.util.HashMap;
035 import java.util.Iterator;
036
037 /**
038 * アプリケーション共有?タイマ?機?を用?、繰り返しスケジュールを設定するタグです?
039 *
040 * タイマ?スケジュールは、帳票??モン??再編成???定期??処?ど、エンジン上?
041 * スレ?で動作するスケジュールを登録します?
042 * スケジュールすべきクラスは、HybsTimerTask を拡張(extends)しておく?があります?
043 *
044 * @og.formSample
045 * ●形式?lt;og:schedule timerTask="???" name="???" command="[SET|VIEW|REMOVE|CANCEL]" ??? />
046 * ●body?あ?EVAL_BODY_BUFFERED:BODYを評価し?{@XXXX} を解析しま?
047 *
048 * ●Tag定義??
049 * <og:schedule
050 * command 【TAG】コマン?SET,VIEW,REMOVE,CANCEL)をセ?しま?初期値:SET)
051 * timerTask ○?TAG】??実行するクラス?HybsTimerTask のサブクラス)を指定しま???)?
052 * name ○?TAG】名称(ユニ?クキー)を設定しま???)?
053 * comment 【TAG】タイマ?タスクの説明を設定しま?
054 * singleton 【TAG】Name属?が同??タスクを2重登録出来な??true/false]にしま?初期値:true[出来ない])
055 * delay 【TAG】ミリ秒単位??時間を設定しま?初期値:0)
056 * period 【TAG】ミリ秒単位?繰り返し間隔を設定しま?初期値:60000)
057 * fixedDelay 【TAG】固定遅延実行を?するかど?[true:固定遅延実?false:固定?度実行]を設定しま?初期値:true)
058 * keys 【TAG】HybsTimerTask に渡す為のキー??、CSV形式で??しま?
059 * vals 【TAG】HybsTimerTask に渡す為の値を?CSV形式で??しま?
060 * startTime 【TAG?4時間制(YYMMDD)の開始時刻を設定しま?初期値:000000)
061 * stopTime 【TAG?4時間制(YYMMDD)の終?刻を設定しま?初期値:000000)
062 * scope 【TAG】キャ?ュする場合?スコー?local,request,page,session,applicaton)を指定しま?初期値:local)
063 * tableId 【TAG?通常は使?せん)結果をDBTableModelに書き込んで、sessionに登録するとき?キーを指定しま?
064 * debug 【TAG】デバッグ??を?力するかど?[true/false]を指定しま?初期値:false)
065 * > ... Body ...
066 * </og:schedule>
067 *
068 * ●使用?
069 * 帳票??モンスケジュール登録
070 * period は?s単位で?する?があるため?000?して?す?
071 * <og:schedule
072 * command = "{@CMD}"
073 * scope = "request"
074 * timerTask = "org.opengion.hayabusa.report.ReportDaemon"
075 * name = "{@NAME}"
076 * comment = "Start-up By {@USER.INFO}"
077 * singleton = "true"
078 * delay = "0"
079 * period = "{@PERIOD}000"
080 * fixedDelay = "true"
081 * keys = "SYSTEM_ID,DMN_GRP"
082 * vals = "{@SYSTEM_ID},{@DMN_GRP}"
083 * />
084 *
085 * @og.group そ?他部?
086 *
087 * @version 4.0
088 * @author Kazuhiko Hasegawa
089 * @since JDK5.0,
090 */
091 public class ScheduleTag extends CommonTagSupport {
092 //* こ?プログラ??VERSION??を設定します? {@value} */
093 private static final String VERSION = "4.0.0.0 (2007/10/18)" ;
094
095 private static final long serialVersionUID = 400020071018L ;
096
097 /** command 引数に渡す事?出来?コマン? セ? {@value} */
098 public static final String CMD_SET = "SET";
099 /** command 引数に渡す事?出来?コマン? ビュー {@value} */
100 public static final String CMD_VIEW = "VIEW";
101 /** command 引数に渡す事?出来?コマン? リ???{@value} */
102 public static final String CMD_REMOVE = "REMOVE";
103 /** command 引数に渡す事?出来?コマン? キャンセル {@value} */
104 public static final String CMD_CANCEL = "CANCEL";
105
106 /** command 引数に渡す事?出来?コマン?リス? */
107 private static final String[] COMMAND_LIST = new String[] {
108 CMD_SET , CMD_VIEW , CMD_REMOVE , CMD_CANCEL };
109
110 // 3.5.2.0 (2003/10/20) 結果?DBTableModel として、scope 属?に登録する?
111 private String tableId = HybsSystem.TBL_MDL_KEY;
112
113 private String command = CMD_SET;
114 private String timerTask = null; // 処?実行す?HybsTimerTask のクラス名を?します?
115 private String name = null; // タイマ?タスクの名称(ユニ?クキー)
116 private String comment = null; // タイマ?タスクの説?
117 private long delay = 0l; // タスクが実行される前?ミリ秒単位??(初期値:0)
118 private long period = 60000l; // 連続するタスク実行?ミリ秒単位?時間(初期値:60000 mS)
119 private boolean fixedDelay = true; // 固定遅延実?true)/固定?度実?false) (初期値:true)
120 private int uniqKey = -1; // ありえな??を?期設定しておく?
121 private boolean singleton = true; // Name属?が同??タスクを2重登録出来な??する(初期値:true)
122
123 private static final long FIXED_RATE_MIN_TIME = 1000; // 固定?度実行時の?繰り返し時間
124
125 private static final String TIMER_KEY = HybsSystem.SCEDULE_KEY;
126 private static final String TIMERTASK_KEY = HybsSystem.SCEDULE_TASK_KEY;
127
128 // 3.2.2.0 (2003/05/31) HybsTimerTask に対して、設定?を渡せるように変更?
129 private String[] keys = null; // タイマ?タスクへ渡すキー配?
130 private String[] vals = null; // タイマ?タスクへ渡すバリュー配?
131 private String body = null; // タイマ?タスクへ渡す??ー要?
132 private String startTime = "000000"; // 24時間制の開始時刻
133 private String stopTime = "000000"; // 24時間制の終?刻
134
135 // 3.5.2.0 (2003/10/20) 結果?DBTableModel として、scope 属?に登録する?
136 private String scope = "local"; // local は互換性のため?request","page","session","applicaton"
137
138 // 3.7.0.4 (2005/03/14) 帳票??モンに、エラー時にスリープして?する機?を追?
139 private final int ERROR_SLEEP_TIME = HybsSystem.sysInt( "REPORT_DAEMON_ERROR_SLEEP_TIME" );
140
141 // 4.0.0 (2006/11/17) HybsTimerTaskManager ?static クラスから通常オブジェクトとして管??
142 private static final HybsTimerTaskManager taskManager ;
143
144 // 4.0.0 (2005/01/31) Cleanable インターフェースによる初期化??
145 // 4.3.6.2 (2009/04/15) コン?スト終?のみclear()されるよ?対?
146 static {
147 taskManager = new HybsTimerTaskManager();
148 // 4.3.6.2 (2009/04/15)
149 // SystemManager.addCleanable( taskManager );
150 SystemManager.addCleanable( taskManager, true );
151 }
152
153 /**
154 * Taglibの開始タグが見つかったときに処??doStartTag() ?オーバ?ライドします?
155 *
156 * @og.rev 3.2.2.0 (2003/05/31) HybsTimerTask に対して、設定?を渡せるように変更?
157 *
158 * @return 後続????( EVAL_BODY_BUFFERED )
159 */
160 @Override
161 public int doStartTag() {
162 return( EVAL_BODY_BUFFERED ); // Body を評価する? extends BodyTagSupport ?
163 }
164
165 /**
166 * Taglibのタグ本体を処??doAfterBody() ?オーバ?ライドします?
167 *
168 * @og.rev 3.2.2.0 (2003/05/31) HybsTimerTask に対して、設定?を渡せるように変更?
169 *
170 * @return 後続????(SKIP_BODY)
171 */
172 @Override
173 public int doAfterBody() {
174 body = getBodyString();
175
176 return(SKIP_BODY);
177 }
178
179 /**
180 * Taglibの終?グが見つかったときに処??doEndTag() ?オーバ?ライドします?
181 *
182 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応?release2() ?doEndTag()で呼ぶ?
183 * @og.rev 3.6.0.8 (2004/11/19) DBTableModel をセーブする時に、トランザクションチェ?を行います?
184 *
185 * @return 後続????
186 */
187 @Override
188 public int doEndTag() {
189 debugPrint(); // 4.0.0 (2005/02/28)
190 if( !check( command, COMMAND_LIST ) ) { return( EVAL_PAGE ); }
191
192 if( "session".equals( scope ) ) {
193 startQueryTransaction( tableId ); // 3.6.0.8 (2004/11/19)
194 }
195
196 // 3.6.0.8 (2004/11/19) トランザクションチェ?を行います?
197 if( commandExec( command ) ) {
198 return(EVAL_PAGE); // ペ?ジの残りを評価する?
199 }
200 else {
201 jspPrint( "ScheduleTag Query処?割り込まれました?BTableModel は登録しません? );
202 return (SKIP_PAGE);
203 }
204 }
205
206 /**
207 * タグリブオブジェクトをリリースします?
208 * キャ?ュされて再利用される?で、フィールド?初期設定を行います?
209 *
210 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応?release2() ?doEndTag()で呼ぶ?
211 * @og.rev 3.2.2.0 (2003/05/31) HybsTimerTask に対して、設定?を渡せるように変更?
212 * @og.rev 3.5.2.0 (2003/10/20) 結果?DBTableModel として、scope 属?に登録する?
213 */
214 @Override
215 protected void release2() {
216 super.release2();
217 command = CMD_SET;
218 timerTask = null; // 処?実行す?HybsTimerTask のクラス名を?します?
219 name = null; // タイマ?タスクの名称(ユニ?クキー)
220 comment = null; // タイマ?タスクの説?
221 delay = 0; // タスクが実行される前?ミリ秒単位??(初期値:0)
222 period = 60000; // 連続するタスク実行?ミリ秒単位?時間(初期値:60000 mS)
223 fixedDelay = true; // 固定遅延実?true)/固定?度実?false) (初期値:true)
224 uniqKey = -1; // ありえな??を?期設定しておく?
225 singleton = true; // Name属?が同??タスクを2重登録出来な??する(初期値:true)
226 keys = null; // タイマ?タスクへ渡すキー配?
227 vals = null; // タイマ?タスクへ渡すバリュー配?
228 startTime = "000000"; // 24時間制の開始時刻
229 stopTime = "000000"; // 24時間制の終?刻
230 tableId = HybsSystem.TBL_MDL_KEY; //
231 scope = "local"; // local は互換性のため?request","page","session","applicaton"
232 }
233
234 /**
235 * コマンドを実行します?
236 *
237 * コマンド?,HTMLから(SET/VIEW/REMOVE/CANCEL)?されます?で,setCommand()メソ?で
238 * 登録します?
239 * コマンドを登録すると同時に,実行も行な?す?
240 *
241 * @og.rev 3.5.2.0 (2003/10/20) viewAttribute()メソ?を?全てで実行します?
242 * @og.rev 3.6.0.8 (2004/11/19) 正常に登録できたかど?を?返します?
243 * @og.rev 4.0.0.0 (2007/10/18) メ?ージリソース統? setMsg() ?setLbl )
244 *
245 * @param command コマン?public static final 宣?れて???)
246 * @see <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.ScheduleTag.CMD_SET">コマンド定数</a>
247 *
248 * @return 正常かど?(true:正常/false:異常)
249 */
250 protected boolean commandExec( final String command ) {
251 if( CMD_SET.equals( command ) ) {
252 setAttribute();
253 // setMsg( "MSG0059" ); // 登録しました?
254 setLbl( "MSG0059" ); // 登録しました?
255 jspPrint( getMsglbl() );
256 }
257 else if( CMD_VIEW.equals( command ) ) {
258 jspPrint( String.valueOf( taskManager.size() ) );
259 // setMsg( "MSG0033" ); // ?検索しました?
260 setLbl( "MSG0033" ); // ?検索しました?
261 jspPrint( getMsglbl() );
262 }
263 else if( CMD_REMOVE.equals( command ) ) {
264 removeAttribute();
265 // setMsg( "MSG0061" ); // 削除しました?
266 setLbl( "MSG0061" ); // 削除しました?
267 jspPrint( getMsglbl() );
268 }
269 else if( CMD_CANCEL.equals( command ) ) {
270 cancelAttribute();
271 // setMsg( "MSG0063" ); // 完?ました?
272 setLbl( "MSG0063" ); // 完?ました?
273 jspPrint( getMsglbl() );
274 }
275 return viewAttribute();
276 }
277
278 /**
279 * HybsTimerTask を登録します?
280 *
281 * @og.rev 3.2.2.0 (2003/05/31) HybsTimerTask に対して、設定?を渡せるように変更?
282 * @og.rev 3.6.0.7 (2004/11/06) パラメータをMapで渡すよ?変更?
283 * @og.rev 3.7.0.4 (2005/03/14) HybsTimerTask に setErrorSleepSec メソ?の追?
284 */
285 @SuppressWarnings(value={"unchecked"})
286 private void setAttribute() {
287 // シングルトンで、かつ、すでに、同?称のタスク?
288 // 含まれて?場合?、セ?しな??
289 if( singleton && taskManager.contains( name ) ) { return ; }
290
291 // 3.6.0.7 (2004/11/06) パラメータをMapで渡すよ?変更
292 Map<String,String> param = null;
293 if( keys != null ) {
294 param = new HashMap<String,String>();
295 for( int i=0; i<keys.length; i++ ) {
296 param.put( keys[i],vals[i] );
297 }
298 }
299
300 HybsTimerTask task = (HybsTimerTask)HybsSystem.newInstance( timerTask );
301 taskManager.addTask( task );
302
303 task.setName( name );
304 task.setComment( comment );
305 task.setParameter( param ); // 3.6.0.7 (2004/11/06)
306 task.setBody( body );
307 task.setStartTime( startTime );
308 task.setStopTime( stopTime );
309 task.setErrorSleepSec( ERROR_SLEEP_TIME ); // 3.7.0.4 (2005/03/14)
310 task.initDaemon();
311
312 // 3.6.1.0 (2005/01/05) Timer 同?レ?のため、?別に作?する?
313 Map<String,Timer> timerMap = (Map<String,Timer>)getContextAttribute( TIMER_KEY );
314 if( timerMap == null ) { timerMap = new HashMap<String,Timer>(); }
315
316 Timer timer = timerMap.get( name );
317 if( timer == null ) { timer = new Timer( true ); }
318
319 if( fixedDelay ) {
320 if( period > 0 ) { timer.schedule( task,delay,period ); }
321 else { timer.schedule( task,delay ); }
322 }
323 else {
324 if( period < FIXED_RATE_MIN_TIME ) { period = FIXED_RATE_MIN_TIME; }
325 timer.scheduleAtFixedRate( task,delay,period );
326 }
327
328 // 3.6.1.0 (2005/01/05) Timer 同?レ?のため、?別に作?する?
329 timerMap.put( name,timer );
330 setContextAttribute( TIMER_KEY,timerMap );
331 }
332
333 /**
334 * HybsTimerTask を?表示します?
335 *
336 * @og.rev 3.5.2.0 (2003/10/20) 結果?DBTableModel として、scope 属?に登録する?
337 * @og.rev 3.5.6.1 (2004/06/25) lang ?コー?属?を削除します?
338 * @og.rev 3.6.0.8 (2004/11/19) DBTableModel をセーブする時に、トランザクションチェ?を行います?
339 * @og.rev 3.6.0.8 (2004/11/19) 正常に登録できたかど?を?返します?
340 *
341 * @return 正常かど?(true:正常/false:異常)
342 */
343 private boolean viewAttribute() {
344 HybsTimerTask[] tasks = taskManager.toArray();
345 DBTableModel table = makeDBTable( tasks );
346
347 if( "local".equals( scope ) ) {
348 if( table != null ) {
349 ViewForm form = ViewFormFactory.newInstance( "HTMLTable" );
350 form.clear();
351 form.init( table );
352 jspPrint( form.create() );
353 }
354 }
355 else {
356 super.setScope( scope ); // 3.6.0.9 (2004/12/03)
357 // 3.6.0.8 (2004/11/19) トランザクションチェ?を行います?
358 return commitTableObject( tableId, table );
359 }
360 return true;
361 }
362
363 /**
364 * HybsTimerTask を削除します?
365 *
366 * @og.rev 3.2.2.0 (2003/05/31) キャンセルを名前でもできる様にロジ?追??
367 *
368 */
369 private void removeAttribute() {
370 if( uniqKey >= 0 ) {
371 taskManager.cancelTask( uniqKey );
372 }
373 else {
374 taskManager.cancelTask( name );
375 }
376 }
377
378 /**
379 * Timer そ?も?をキャンセルします?
380 *
381 * すべての、HybsTimerTask は、削除されます?
382 *
383 * @og.rev 3.6.1.0 (2005/01/05) Timer 同?レ?のため、?別に作?する?
384 */
385 @SuppressWarnings(value={"unchecked"})
386 private void cancelAttribute() {
387 taskManager.clear();
388
389 // 3.6.1.0 (2005/01/05)
390 Map<String,Timer> timerMap = (Map<String,Timer>)getContextAttribute( TIMER_KEY );
391 if( timerMap != null ) {
392 Iterator<Timer> iterator = timerMap.values().iterator(); // 4.3.3.6 (2008/11/15) Generics警告対?
393 while( iterator.hasNext() ) {
394 // ((Timer)iterator.next()).cancel();
395 (iterator.next()).cancel(); // 4.3.3.6 (2008/11/15) Generics警告対?
396 }
397 timerMap.clear();
398 }
399 removeContextAttribute( TIMER_KEY );
400 }
401
402 /**
403 * 【TAG】コマン?SET,VIEW,REMOVE,CANCEL)をセ?しま?初期値:SET)?
404 *
405 * @og.tag
406 * コマンド?,HTMLから(get/post)?されます?で,CMD_xxx で設定される
407 * フィールド定数値の?れかを??できます?
408 * 何も設定されな??また?、null の場合??SET" が?期?にセ?されます?
409 *
410 * @param cmd コマン?public static final 宣?れて???)
411 * @see <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.ScheduleTag.CMD_SET">コマンド定数</a>
412 */
413 public void setCommand( final String cmd ) {
414 command = nval( getRequestParameter( cmd ),command );
415 }
416
417 /**
418 * 【TAG】??実行するクラス?HybsTimerTask のサブクラス)を指定します?
419 *
420 * @og.tag 処?実行す?HybsTimerTask のクラス名を?します?
421 *
422 * @param val クラス?
423 */
424 public void setTimerTask( final String val ) {
425 timerTask = getRequestParameter( val );
426 }
427
428 /**
429 * 【TAG】名称(ユニ?クキー)を設定します?
430 *
431 * @og.tag タイマ?タスクの名称(ユニ?クキー)を設定します?
432 *
433 * @param nm タイマ?タスクの名称
434 */
435 public void setName( final String nm ) {
436 name = getRequestParameter( nm );
437 }
438
439 /**
440 * 【TAG】タイマ?タスクの説明を設定します?
441 *
442 * @og.tag タイマ?タスクの説明を設定します?
443 *
444 * @param cmt タイマ?タスクの説?
445 */
446 public void setComment( final String cmt ) {
447 comment = getRequestParameter( cmt );
448 }
449
450 /**
451 * 【TAG】ミリ秒単位??時間を設定しま?初期値:0)?
452 *
453 * @og.tag タスクが実行される前?ミリ秒単位??を設定しま?初期値:0)
454 *
455 * @param val ?時間(ms)
456 */
457 public void setDelay( final String val ) {
458 delay = nval( getRequestParameter( val ),delay );
459 }
460
461 /**
462 * 【TAG】ミリ秒単位?繰り返し間隔を設定しま?初期値:60000)?
463 *
464 * @og.tag 連続するタスク実行?ミリ秒単位?時間を設定しま?初期値:60000 mS)
465 *
466 * @param val 繰り返し間隔(ms)
467 */
468 public void setPeriod( final String val ) {
469 period = nval( getRequestParameter( val ),period );
470 }
471
472 /**
473 * 【TAG】固定遅延実行を?するかど?[true:固定遅延実?false:固定?度実行]を設定しま?初期値:true)?
474 *
475 * @og.tag
476 * 固定遅延実行では、前の実行?実際の実行時間を基準にしてそれぞれの実行がスケジュールされます?
477 * 何らか??で実行が?した場?そ?あとの実行も?されます?
478 * ?的に、実行?頻度は通常、指定した期間?対応する?度よりも若干?なりま?
479 *
480 * 固定?度実行では、最初?実行?スケジュールされた実行時間を基準にしてそれぞれの実行が
481 * スケジュールされます?何らか??で実行が?した場合?「遅れを取り戻す?ために
482 * 2 つ以上?実行が連続して行われます??的に実行?頻度は、指定した期間?対応する?度と
483 * 同じになりま?
484 * 初期値は、true:固定遅延実?です?
485 *
486 * @param flag [true:固定遅延実?false:固定?度実行]
487 */
488 public void setFixedDelay( final String flag ) {
489 fixedDelay = nval( getRequestParameter( flag ),fixedDelay );
490 }
491
492 /**
493 * 【TAG】スケジュールを?に決めるためのユニ?ク番号を指定しま?初期値:-1)?
494 *
495 * @og.tag
496 * スケジュールを削除したりする?合に、?なユニ?ク番号を指定します?
497 * 初期値は?1:あり得な?? です?
498 *
499 * @param no ユニ?ク番号
500 */
501 public void setUniqKey( final String no ) {
502 uniqKey = nval( getRequestParameter( no ),uniqKey );
503 }
504
505 /**
506 * 【TAG】Name属?が同??タスクを2重登録出来な??true/false]にしま?初期値:true[出来ない])?
507 *
508 * @og.tag
509 * 同?類?タスクを?同時立上げしたくな??合に、利用します?
510 * ?に、タイマ?タスクそ?も?が?繰り返し実行されます?で?
511 * 初期値は?重登録禁止にして?す?
512 *
513 * @param flag Name属?が同??タスクを2重登録出来な??する(初期値:true)
514 */
515 public void setSingleton( final String flag ) {
516 singleton = nval( getRequestParameter( flag ),singleton );
517 }
518
519 /**
520 * 【TAG】HybsTimerTask に渡す為のキー??、CSV形式で??します?
521 *
522 * @og.tag
523 * HybsTimerTask に渡す為の、キー??をカンマ区?で??できます?
524 * vals 属?には、キーに対応する?を?設定してください?
525 * ?方法?、CSV変数を?に?してから、getRequestParameter で値を取得します?
526 * こうしな???タ自身にカンマを持って?場合に?をミスる為です?
527 *
528 * @og.rev 3.2.2.0 (2003/05/31) 新規追?
529 * @og.rev 3.5.6.2 (2004/07/05) CommonTagSupport#getCSVParameter を使用
530 *
531 * @param key キー??(CSV形?
532 */
533 public void setKeys( final String key ) {
534 keys = getCSVParameter( key );
535 }
536
537 /**
538 * 【TAG】HybsTimerTask に渡す為の値を?CSV形式で??します?
539 *
540 * @og.tag
541 * キーに設定した?を?カンマ区??で?して出来ます?
542 * ??序?、キーと同じにしておいて下さ??
543 * ?方法?、CSV変数を?に?してから、getRequestParameter で値を取得します?
544 * こうしな???タ自身にカンマを持って?場合に?をミスる為です?
545 *
546 * @og.rev 3.2.2.0 (2003/05/31) 新規追?
547 * @og.rev 3.5.6.2 (2004/07/05) CommonTagSupport#getCSVParameter を使用
548 *
549 * @param val 値(CSV形?
550 */
551 public void setVals( final String val ) {
552 vals = getCSVParameter( val );
553 }
554
555 /**
556 * 【TAG?4時間制(YYMMDD)の開始時刻を設定しま?初期値:000000)?
557 *
558 * @og.tag
559 * ?時刻??の実行?み許可するように開始時刻を設定します?
560 * これは、タイマ?で?した間隔ごとにチェ?を?れるので、チェ?時間?
561 * 長??合?、正確に開始時刻から始まると?も?ではありません?
562 * 初期値は?000000" です?
563 *
564 * @og.rev 3.2.2.0 (2003/05/31) 新規追?
565 *
566 * @param st 開始時刻
567 */
568 public void setStartTime( final String st ) {
569 startTime = nval( getRequestParameter( st ),startTime ) ;
570 }
571
572 /**
573 * 【TAG?4時間制(YYMMDD)の終?刻を設定しま?初期値:000000)?
574 *
575 * @og.tag
576 * ?時刻??の実行?み許可するように終?刻を設定します?
577 * これは、タイマ?で?した間隔ごとにチェ?を?れるので、チェ?時間?
578 * 長??合?、正確に終?刻で終?ると?も?ではありません?
579 * (終?刻を越えてからの新規実行?ありません?
580 * 初期値は?000000" です?
581 *
582 * @og.rev 3.2.2.0 (2003/05/31) 新規追?
583 *
584 * @param st 終?刻
585 */
586 public void setStopTime( final String st ) {
587 stopTime = nval( getRequestParameter( st ),stopTime ) ;
588 }
589
590 /**
591 * HybsTimerTask オブジェクト?列より?DBTableModel を作?して返します?
592 * カラ?は?TaskName","UniqKey","Comment","CreateTime","scheduledTime" です?
593 *
594 * @param tasks タイマ?タスクオブジェクト??
595 *
596 * @return タイマ?タスクオブジェクト???ブルモ??無ければ null
597 */
598 private DBTableModel makeDBTable( final HybsTimerTask[] tasks ) {
599 if( tasks == null || tasks.length == 0 ) { return null; }
600
601 ResourceManager resource = getResource();
602
603 String[] names = new String[] {
604 "TaskName","UniqKey","Comment","CreateTime","scheduledTime"
605 };
606
607 DBTableModel table = DBTableModelUtil.newDBTable();
608 table.init( names.length );
609 for( int i=0; i<names.length; i++ ) {
610 DBColumn dbColumn = resource.makeDBColumn( names[i] );
611 table.setDBColumn( i,dbColumn );
612 }
613
614 for( int i=0; i<tasks.length; i++ ) {
615 String[] clmVals = new String[names.length];
616 clmVals[0] = tasks[i].getName() ;
617 clmVals[1] = String.valueOf( tasks[i].getUniqKey() );
618 clmVals[2] = tasks[i].getComment() ;
619 clmVals[3] = HybsSystem.getDate( tasks[i].getCreateTime() );
620 clmVals[4] = HybsSystem.getDate( tasks[i].scheduledExecutionTime() );
621 table.addColumnValues( clmVals );
622 }
623
624 return table ;
625 }
626
627 /**
628 * 【TAG?通常は使?せん)結果のDBTableModelを?sessionに登録するとき?キーを指定しま?
629 * (初期値:HybsSystem#TBL_MDL_KEY[={@og.value org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY}])?
630 *
631 * @og.tag
632 * 検索結果より、DBTableModelオブジェクトを作?します?これを?下流?viewタグ等に
633 * 渡す?合に??常は、session を利用します?そ?場合?登録キーです?
634 * query タグを同時に実行して、結果を求める?合?同?モリに配置される為?
635 * こ? tableId 属?を利用して、メモリ空間を?ます?
636 * (初期値:HybsSystem#TBL_MDL_KEY[={@og.value org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY}])?
637 *
638 * @param id sessionに登録する時? ID
639 */
640 public void setTableId( final String id ) {
641 tableId = nval( getRequestParameter( id ),tableId );
642 }
643
644 /**
645 * 【TAG】キャ?ュする場合?スコー?local,request,page,session,applicaton)を指定しま?初期値:local)?
646 *
647 * @og.tag
648 * "local","request","page","session","applicaton" が指定できます?
649 * "local" は?去のバ?ジョンとの互換性を保つ為の特殊な値です?
650 * 初期値は?local" です?
651 *
652 * @og.rev 3.5.2.0 (2003/10/20) 新規作?
653 *
654 * @param scp スコー?
655 */
656 @Override
657 public void setScope( final String scp ) {
658 scope = nval( getRequestParameter( scp ),scope );
659 }
660
661 /**
662 * こ?オブジェクト???表現を返します?
663 * 基本???目?使用します?
664 *
665 * @return こ?クラスの??表現
666 */
667 @Override
668 public String toString() {
669 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
670 .println( "VERSION" ,VERSION )
671 .println( "tableId" ,tableId )
672 .println( "command" ,command )
673 .println( "timerTask" ,timerTask )
674 .println( "name" ,name )
675 .println( "comment" ,comment )
676 .println( "delay" ,delay )
677 .println( "period" ,period )
678 .println( "fixedDelay" ,fixedDelay )
679 .println( "uniqKey" ,uniqKey )
680 .println( "singleton" ,singleton )
681 .println( "FIXED_RATE_MIN_TIME" ,FIXED_RATE_MIN_TIME)
682 .println( "TIMER_KEY" ,TIMER_KEY )
683 .println( "TIMERTASK_KEY" ,TIMERTASK_KEY )
684 .println( "keys" ,keys )
685 .println( "vals" ,vals )
686 .println( "body" ,body )
687 .println( "startTime" ,startTime )
688 .println( "stopTime" ,stopTime )
689 .println( "scope" ,scope )
690 .println( "ERROR_SLEEP_TIME" ,ERROR_SLEEP_TIME)
691 .println( "COMMAND_LIST" ,COMMAND_LIST )
692 .println( "Other..." ,getAttributes().getAttribute() )
693 .fixForm().toString() ;
694 }
695 }