KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > celtix > bus > busimpl > BusEventCacheImpl


1 package org.objectweb.celtix.bus.busimpl;
2
3 import java.util.*;
4 import java.util.logging.Level JavaDoc;
5 import java.util.logging.Logger JavaDoc;
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 JavaDoc MAX_BUS_EVENTS = "bus:events:cache:size";
15     private static final Logger JavaDoc 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         /* TODO read the EventCache configuration */
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 JavaDoc 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 JavaDoc<?> 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 JavaDoc 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