1 16 package org.quartz.listeners; 17 18 import java.util.Iterator ; 19 import java.util.LinkedList ; 20 import java.util.List ; 21 22 import org.quartz.JobExecutionContext; 23 import org.quartz.Trigger; 24 import org.quartz.TriggerListener; 25 26 49 public class FilterAndBroadcastTriggerListener implements TriggerListener { 50 51 private String name; 52 private List listeners; 53 private List namePatterns = new LinkedList (); 54 private List groupPatterns = new LinkedList (); 55 56 63 public FilterAndBroadcastTriggerListener(String name) { 64 if(name == null) 65 throw new IllegalArgumentException ("Listener name cannot be null!"); 66 this.name = name; 67 listeners = new LinkedList (); 68 } 69 70 76 public FilterAndBroadcastTriggerListener(String name, List listeners) { 77 this(name); 78 this.listeners.addAll(listeners); 79 } 80 81 public String getName() { 82 return name; 83 } 84 85 public void addListener(TriggerListener listener) { 86 listeners.add(listener); 87 } 88 89 public boolean removeListener(TriggerListener listener) { 90 return listeners.remove(listener); 91 } 92 93 public boolean removeListener(String listenerName) { 94 Iterator itr = listeners.iterator(); 95 while(itr.hasNext()) { 96 TriggerListener l = (TriggerListener) itr.next(); 97 if(l.getName().equals(listenerName)) { 98 itr.remove(); 99 return true; 100 } 101 } 102 return false; 103 } 104 105 public List getListeners() { 106 return java.util.Collections.unmodifiableList(listeners); 107 } 108 109 116 public void addTriggerNamePattern(String regularExpression) { 117 if(regularExpression == null) 118 throw new IllegalArgumentException ("Expression cannot be null!"); 119 120 namePatterns.add(regularExpression); 121 } 122 123 public List getTriggerNamePatterns() { 124 return namePatterns; 125 } 126 127 134 public void addTriggerGroupPattern(String regularExpression) { 135 if(regularExpression == null) 136 throw new IllegalArgumentException ("Expression cannot be null!"); 137 138 groupPatterns.add(regularExpression); 139 } 140 141 public List getTriggerGroupPatterns() { 142 return namePatterns; 143 } 144 145 protected boolean shouldDispatch(Trigger trigger) { 146 147 if(namePatterns.size() == 0 && groupPatterns.size() == 0) 148 return true; 149 150 Iterator itr = groupPatterns.iterator(); 151 while(itr.hasNext()) { 152 String pat = (String ) itr.next(); 153 if(trigger.getGroup().matches(pat)) 154 return true; 155 } 156 157 itr = namePatterns.iterator(); 158 while(itr.hasNext()) { 159 String pat = (String ) itr.next(); 160 if(trigger.getName().matches(pat)) 161 return true; 162 } 163 164 return false; 165 } 166 167 public void triggerFired(Trigger trigger, JobExecutionContext context) { 168 169 if(!shouldDispatch(trigger)) 170 return; 171 172 Iterator itr = listeners.iterator(); 173 while(itr.hasNext()) { 174 TriggerListener l = (TriggerListener) itr.next(); 175 l.triggerFired(trigger, context); 176 } 177 } 178 179 public boolean vetoJobExecution(Trigger trigger, JobExecutionContext context) { 180 181 if(!shouldDispatch(trigger)) 182 return false; 183 184 Iterator itr = listeners.iterator(); 185 while(itr.hasNext()) { 186 TriggerListener l = (TriggerListener) itr.next(); 187 if(l.vetoJobExecution(trigger, context)) 188 return true; 189 } 190 return false; 191 } 192 193 public void triggerMisfired(Trigger trigger) { 194 195 if(!shouldDispatch(trigger)) 196 return; 197 198 Iterator itr = listeners.iterator(); 199 while(itr.hasNext()) { 200 TriggerListener l = (TriggerListener) itr.next(); 201 l.triggerMisfired(trigger); 202 } 203 } 204 205 public void triggerComplete(Trigger trigger, JobExecutionContext context, int triggerInstructionCode) { 206 207 if(!shouldDispatch(trigger)) 208 return; 209 210 Iterator itr = listeners.iterator(); 211 while(itr.hasNext()) { 212 TriggerListener l = (TriggerListener) itr.next(); 213 l.triggerComplete(trigger, context, triggerInstructionCode); 214 } 215 } 216 217 } 218 | Popular Tags |