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.fukurou.util;
017
018 import java.util.List;
019 import java.util.ArrayList;
020
021 /**
022 * HybsTimerTaskManager.java は、HybsTimerTask オブジェクトを管ç�?�—てã�?‚‹クラスですã?
023 *
024 * HybsTimerTask は、タスクとしてä¸?®š間隔で実行されますã?オブジェクトが生æ?されてからã€?
025 * 実行中のタスクをã?こã?クラスで管ç�?�™ることにより、å?別に削除、生成ã?全件終äº?‰ã?制御ã�?
026 * 可能になりますã?
027 *
028 * @version 4.0
029 * @author Kazuhiko Hasegawa
030 * @since JDK5.0,
031 */
032 public class HybsTimerTaskManager implements Cleanable {
033 private final List<HybsTimerTask> list = new ArrayList<HybsTimerTask>();
034
035 /**
036 * HybsTimerTask クラスの 実オブジェクトを管ç�??ため、登録しますã?
037 *
038 * @param task HybsTimerTaskオブジェクãƒ?
039 */
040 public synchronized void addTask( final HybsTimerTask task ) {
041 list.add( task );
042 }
043
044 /**
045 * こã?タイマã?タスクオブジェクトを削除しますã?
046 * こã?ときã?すでにタイマã?タスク自信でキャンセルされてã�?‚‹オブジェクトã?
047 * 削除も行いますã?
048 *
049 * @param key HybsTimerTask のユニã?クキー
050 *
051 * @return 結果(削除成功 true/ 削除できなかっã�?false )
052 */
053 public synchronized boolean cancelTask( final int key ) {
054 boolean flag = false;
055
056 int size = list.size();
057 for( int i=size-1; i>=0; i-- ) {
058 HybsTimerTask task = list.get( i );
059 if( task != null ) {
060 if( !task.isAlive() || ( task.getUniqKey() == key ) ) {
061 list.remove( i );
062 task.cancel();
063 flag = true;
064 }
065 }
066 else {
067 list.remove( i );
068 }
069 }
070
071 return flag;
072 }
073
074 /**
075 * こã?タイマã?タスクオブジェクトを削除しますã?
076 *
077 * @param name HybsTimerTask の名前
078 *
079 * @return 結果(削除成功 true/ 削除できなかっã�?false )
080 */
081 public synchronized boolean cancelTask( final String name ) {
082 boolean flag = false;
083
084 if( name == null ) { return flag; }
085
086 int size = list.size();
087 for( int i=size-1; i>=0; i-- ) {
088 HybsTimerTask task = list.get( i );
089 if( task != null ) {
090 if( !task.isAlive() || ( name.equals( task.getName() ) ) ) {
091 list.remove( i );
092 task.cancel();
093 flag = true;
094 }
095 }
096 else {
097 list.remove( i );
098 }
099 }
100
101 return flag;
102 }
103
104 /**
105 * 現在実行中の全てのタイマã?タスクオブジェクトを削除しますã?
106 * (org.opengion.fukurou.util.Cleanable の実è£?ã€?
107 *
108 * @og.rev 4.0.0.0 (2005/01/31) 新規追åŠ?
109 */
110 public synchronized void clear() {
111 HybsTimerTask[] tasks = list.toArray( new HybsTimerTask[list.size()] );
112
113 for( int i=0; i<tasks.length; i++ ) {
114 if( tasks[i] != null ) {
115 tasks[i].cancel();
116 tasks[i] = null;
117 }
118 }
119 list.clear();
120 }
121
122 /**
123 * 現在実行中の、タイマã?タスクをã?すべて返しますã?
124 *
125 * @return タイマã?タスクの配å?
126 */
127 public synchronized HybsTimerTask[] toArray() {
128 int size = list.size();
129 for( int i=size-1; i>=0; i-- ) {
130 HybsTimerTask task = list.get( i );
131 if( task != null ) {
132 if( !task.isAlive() ) {
133 list.remove( i );
134 }
135 }
136 else {
137 list.remove( i );
138 }
139 }
140
141 HybsTimerTask[] tasks = list.toArray( new HybsTimerTask[list.size()] );
142
143 return tasks;
144 }
145
146 /**
147 * 現在実行中の、タイマã?タスクの件数を返しますã?
148 *
149 * タスクがすでに 終äº?�—てã�?�Ÿりã?null 化されてã�?‚‹かをチェãƒ?‚¯しã?
150 * 不要なタスクは、削除しますã?
151 *
152 * @return タイマã?タスクの件数
153 */
154 public synchronized int size() {
155 int size = list.size();
156 for( int i=size-1; i>=0; i-- ) {
157 HybsTimerTask task = list.get( i );
158 if( task != null ) {
159 if( !task.isAlive() ) {
160 list.remove( i );
161 }
162 }
163 else {
164 list.remove( i );
165 }
166 }
167
168 return list.size();
169 }
170
171 /**
172 * 現在実行中の、タイマã?タスクに、同ä¸?? Name 属æ?を持ったタスクが存在するかどã�?�‹ã€?
173 *
174 * @param nm タイマã?タスクの、Name 属æ?
175 *
176 * @return 存在する?štrue / 存在しなã�?¼šfalse
177 */
178 public synchronized boolean contains( final String nm ) {
179 if( nm == null ) { return false; }
180
181 HybsTimerTask[] tasks = toArray() ;
182
183 for( int i=0; i<tasks.length; i++ ) {
184 if( tasks[i] != null && nm.equals( tasks[i].getName() ) ) { return true; }
185 }
186 return false;
187 }
188 }