1 package org.objectweb.celtix.bus.busimpl; 2 3 import java.util.*; 4 import java.util.logging.Level ; 5 import java.util.logging.Logger ; 6 7 import org.objectweb.celtix.Bus; 8 import org.objectweb.celtix.BusEvent; 9 import org.objectweb.celtix.BusEventCache; 10 11 12 public class BusEventCacheImpl implements BusEventCache { 13 14 public static final String MAX_BUS_EVENTS = "bus:events:cache:size"; 15 private static final Logger LOG = Logger.getLogger(BusEventCacheImpl.class.getName()); 16 17 private List<BusEvent> events; 18 19 private int maxEventsCache = 100; 20 21 22 public BusEventCacheImpl(Bus b) { 23 24 initCache(); 25 } 26 27 private void initCache() { 28 29 events = new ArrayList<BusEvent>(maxEventsCache); 30 } 31 32 33 public synchronized void addEvent(BusEvent e) { 34 if (events.size() == maxEventsCache) { 35 BusEvent event = (BusEvent)events.get(0); 36 LOG.log(Level.FINE, "Event " 37 + event.getID() 38 + " is removed because the event cache is full." 39 + " Maximum number of events stored : " 40 + maxEventsCache); 41 42 events.remove(event); 43 } 44 45 events.add(e); 46 } 47 48 49 public synchronized List<BusEvent> flushEvents() { 50 List<BusEvent> result = new ArrayList<BusEvent>(events.size()); 51 result.addAll(events); 52 events.clear(); 53 return result; 54 } 55 56 57 public synchronized List<BusEvent> flushEvents(String eventID) { 58 List<BusEvent> result = new ArrayList<BusEvent>(); 59 for (Iterator<BusEvent> i = events.iterator(); i.hasNext();) { 60 BusEvent event = i.next(); 61 if (eventID.equals(event.getID())) { 62 result.add(event); 63 i.remove(); 64 } 65 } 66 67 68 return result; 69 } 70 71 public synchronized List<BusEvent> flushEvents(Class <?> eventClass) { 72 List<BusEvent> result = new ArrayList<BusEvent>(); 73 for (Iterator<BusEvent> i = events.iterator(); i.hasNext();) { 74 BusEvent event = i.next(); 75 if (eventClass.isAssignableFrom(event.getClass())) { 76 result.add(event); 77 i.remove(); 78 } 79 } 80 81 82 return result; 83 } 84 85 86 public List<BusEvent> getEvents() { 87 return events; 88 } 89 90 91 public List<BusEvent> getEvents(String eventID) { 92 List<BusEvent> result = new ArrayList<BusEvent>(); 93 94 for (int i = 0; i < events.size(); i++) { 95 BusEvent event = (BusEvent)events.get(i); 96 97 if (eventID.equals(event.getID())) { 98 result.add(event); 99 } 100 } 101 102 return result; 103 } 104 105 106 public void setCacheSize(int size) { 107 maxEventsCache = size; 108 ((ArrayList)events).ensureCapacity(maxEventsCache); 109 } 110 } 111 | Popular Tags |