1 23 package com.scalagent.joram.mom.dest.scheduler; 24 25 import java.util.Date ; 26 import java.util.Enumeration ; 27 import java.util.Properties ; 28 29 import org.objectweb.joram.mom.dest.QueueImpl; 30 import org.objectweb.joram.mom.messages.Message; 31 import org.objectweb.joram.mom.notifications.ClientMessages; 32 import org.objectweb.util.monolog.api.BasicLevel; 33 import org.objectweb.util.monolog.api.Logger; 34 35 import com.scalagent.scheduler.AddConditionListener; 36 import com.scalagent.scheduler.Condition; 37 import com.scalagent.scheduler.RemoveConditionListener; 38 import com.scalagent.scheduler.ScheduleEvent; 39 import com.scalagent.scheduler.Scheduler; 40 41 import fr.dyade.aaa.agent.AgentId; 42 import fr.dyade.aaa.agent.Debug; 43 44 public class SchedulerQueueImpl extends QueueImpl { 45 public static Logger logger = 46 Debug.getLogger("com.scalagent.joram.scheduler.SchedulerQueueImpl"); 47 48 public static final String SCHEDULE_DATE = "scheduleDate"; 49 50 public static final String SCHEDULED = "scheduled"; 51 52 59 public SchedulerQueueImpl(AgentId destId, AgentId adminId, Properties prop) { 60 super(destId, adminId, prop); 61 if (logger.isLoggable(BasicLevel.DEBUG)) 62 logger.log(BasicLevel.DEBUG, 63 "SchedulerQueueImpl.<init>(" + destId + ',' + adminId + ')'); 64 } 65 66 public void postProcess(ClientMessages not) { 67 if (logger.isLoggable(BasicLevel.DEBUG)) 68 logger.log(BasicLevel.DEBUG, "SchedulerQueueImpl.postProcess(" + not + ')'); 69 70 org.objectweb.joram.shared.messages.Message msg; 71 for (Enumeration msgs = not.getMessages().elements(); msgs.hasMoreElements();) { 72 msg = (org.objectweb.joram.shared.messages.Message) msgs.nextElement(); 73 long scheduleDate = getScheduleDate(msg); 74 if (scheduleDate < 0) return; 75 forward(Scheduler.getDefault(), new AddConditionListener(msg.id)); 78 forward(Scheduler.getDefault(), new ScheduleEvent(msg.id, new Date (scheduleDate))); 79 } 80 } 81 82 private static long getScheduleDate(org.objectweb.joram.shared.messages.Message msg) { 83 Object scheduleDateValue = msg.getProperty(SCHEDULE_DATE); 84 if (scheduleDateValue == null) return -1; 85 try { 86 return ((Long )scheduleDateValue).longValue(); 87 } catch (Exception exc) { 88 if (logger.isLoggable(BasicLevel.WARN)) 89 logger.log(BasicLevel.WARN, "Scheduled message error", exc); 90 return -1; 91 } 92 } 93 94 public void condition(Condition not) { 95 String msgId = not.name; 96 for (int i = 0; i < messages.size(); i++) { 97 Message msg = (Message) messages.elementAt(i); 98 if (msg.getIdentifier().equals(msgId)) { 99 try { 100 msg.setObjectProperty(SCHEDULED, "" + System.currentTimeMillis()); 101 } catch (Exception exc) {} 102 forward(Scheduler.getDefault(), 104 new RemoveConditionListener(msg.getIdentifier())); 105 break; 106 } 107 } 108 deliverMessages(0); 109 } 110 111 protected boolean checkDelivery(org.objectweb.joram.shared.messages.Message msg) { 112 if (logger.isLoggable(BasicLevel.DEBUG)) 113 logger.log(BasicLevel.DEBUG, 114 "SchedulerQueueImpl.checkDelivery(" + msg + ')'); 115 long scheduleDate = getScheduleDate(msg); 116 if (scheduleDate < 0) { 117 return true; 118 } else { 119 long currentTime = System.currentTimeMillis(); 120 return !(scheduleDate > currentTime); 121 122 } 123 } 124 } 125 | Popular Tags |