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    }