1 package org.columba.core.backgroundtask; 17 18 import java.awt.EventQueue ; 19 import java.awt.Toolkit ; 20 import java.awt.event.ActionEvent ; 21 import java.awt.event.ActionListener ; 22 import java.util.List ; 23 import java.util.Vector ; 24 import java.util.logging.Level ; 25 import java.util.logging.Logger ; 26 27 import javax.swing.Timer ; 28 29 import org.columba.api.backgroundtask.IBackgroundTaskManager; 30 import org.columba.core.command.TaskManager; 31 32 40 public class BackgroundTaskManager implements ActionListener , 41 IBackgroundTaskManager { 42 43 private static final Logger LOG = Logger 44 .getLogger("org.columba.api.backgroundtask"); 46 private static final int ONE_SECOND = 1000; 48 49 private static final int SLEEP_TIME = ONE_SECOND * 60 * 5; 51 52 private Timer timer; 53 54 private List <Runnable > list; 55 56 private static BackgroundTaskManager instance = new BackgroundTaskManager(); 57 58 public BackgroundTaskManager() { 59 super(); 60 this.list = new Vector <Runnable >(); 64 65 this.timer = new Timer (SLEEP_TIME, this); 66 this.timer.start(); 67 } 68 69 public static BackgroundTaskManager getInstance() { 70 return instance; 71 } 72 73 76 public void register(Runnable runnable) { 77 this.list.add(runnable); 78 } 79 80 85 public void actionPerformed(ActionEvent event) { 86 EventQueue queue = Toolkit.getDefaultToolkit().getSystemEventQueue(); 88 89 if ((queue.peekEvent() == null) 90 && (TaskManager.getInstance().count() == 0)) { 91 if (LOG.isLoggable(Level.FINE)) { 93 LOG.fine("Starting background tasks..."); } 95 runTasks(); 96 } 97 } 98 99 public void runTasks() { 100 for (Runnable task : this.list) { 101 task.run(); 102 } 103 } 104 105 public void stop() { 106 this.timer.stop(); 107 } 108 } 109 | Popular Tags |