KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > calendar > store > StoreEventDelegator


1 // The contents of this file are subject to the Mozilla Public License Version
2
// 1.1
3
//(the "License"); you may not use this file except in compliance with the
4
//License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
5
//
6
//Software distributed under the License is distributed on an "AS IS" basis,
7
//WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
8
//for the specific language governing rights and
9
//limitations under the License.
10
//
11
//The Original Code is "The Columba Project"
12
//
13
//The Initial Developers of the Original Code are Frederik Dietz and Timo
14
// Stich.
15
//Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003.
16
//
17
//All Rights Reserved.
18
package org.columba.calendar.store;
19
20 import java.awt.event.ActionEvent JavaDoc;
21 import java.awt.event.ActionListener JavaDoc;
22 import java.util.ArrayList JavaDoc;
23 import java.util.Collections JavaDoc;
24 import java.util.List JavaDoc;
25 import java.util.logging.Logger JavaDoc;
26
27 import javax.swing.Timer JavaDoc;
28
29 import org.columba.calendar.model.api.IComponent;
30 import org.columba.calendar.model.api.IComponentInfo;
31 import org.columba.calendar.model.api.IEvent;
32 import org.columba.calendar.model.api.IEventInfo;
33 import org.columba.calendar.store.api.ICalendarStore;
34 import org.columba.calendar.store.api.IStoreListener;
35 import org.columba.calendar.store.api.StoreEvent;
36 import org.columba.calendar.store.api.StoreException;
37 import org.columba.calendar.ui.base.CalendarHelper;
38 import org.columba.core.base.Mutex;
39
40 import com.miginfocom.calendar.activity.Activity;
41 import com.miginfocom.calendar.activity.ActivityDepository;
42 import com.miginfocom.calendar.category.CategoryStructureEvent;
43
44 /**
45  * StoreEventDelegator class
46  * @author fdietz
47  */

48 public class StoreEventDelegator implements IStoreListener, ActionListener JavaDoc {
49
50     /** JDK 1.4+ logging framework logger, used for logging. */
51     private static final Logger JavaDoc LOG = Logger
52             .getLogger("org.columba.calendar.store.event");
53     private static final int UPDATE_DELAY = 50;
54     private static StoreEventDelegator instance;
55     private Timer JavaDoc timer;
56     private Mutex mutex;
57     private int swap = 0;
58     private List JavaDoc[] itemRemovedList;
59     private List JavaDoc[] itemChangedList;
60     private List JavaDoc[] itemAddedList;
61
62     /**
63      * StoreEventDelegator method
64      */

65     public StoreEventDelegator() {
66         super();
67
68         itemRemovedList = new List JavaDoc[] { new ArrayList JavaDoc(500), new ArrayList JavaDoc(500) };
69         itemChangedList = new List JavaDoc[] { new ArrayList JavaDoc(500), new ArrayList JavaDoc(500) };
70         itemAddedList = new List JavaDoc[] { new ArrayList JavaDoc(500), new ArrayList JavaDoc(500) };
71
72         mutex = new Mutex();
73
74         timer = new Timer JavaDoc(UPDATE_DELAY, this);
75         timer.start();
76     }
77
78     /**
79      * getInstance method
80      * @return instance
81      */

82     public static StoreEventDelegator getInstance() {
83         if (instance == null)
84             instance = new StoreEventDelegator();
85
86         return instance;
87     }
88
89     /**
90      * clearAllLists method
91      */

92     private void clearAllLists() {
93         itemAddedList[swap].clear();
94         itemRemovedList[swap].clear();
95         itemChangedList[swap].clear();
96     }
97
98     /**
99      * processCalendarEvents method
100      */

101     public void processCalendarEvents() {
102         StoreEventComparator instance2 = StoreEventComparator
103                             .getInstance();
104         StoreEventComparator storeEventComparator = instance2;
105         StoreEventComparator storeEventComparator2 = storeEventComparator;
106         List JavaDoc list = itemAddedList[swap];
107         if (list.size() > 0) {
108             LOG.info("process item added calendar events");
109
110             Collections.sort(list, storeEventComparator2);
111
112             // Process the events
113
for (int i = 0; i < list.size(); i++) {
114                 StoreEvent next = (StoreEvent) list.get(i);
115
116                 ICalendarStore store = (ICalendarStore) next.getSource();
117                 try {
118                     IComponentInfo model = store.get(next.getChanges());
119                     // we only update changes for events currently
120
if (model.getType() == IComponent.TYPE.EVENT) {
121                         Activity act = CalendarHelper
122                                 .createActivity((IEventInfo) model);
123
124                         ActivityDepository.getInstance().addBrokedActivity(act,
125                                 this, CategoryStructureEvent.ADDED_CREATED);
126                     }
127                 } catch (StoreException e) {
128                     // TODO Auto-generated catch block
129
e.printStackTrace();
130                 }
131             }
132         }
133         if (itemRemovedList[swap].size() > 0) {
134             Collections.sort(itemRemovedList[swap], storeEventComparator2);
135
136             // Process the events
137
for (int i = 0; i < itemRemovedList[swap].size(); i++) {
138                 StoreEvent next = (StoreEvent) itemRemovedList[swap].get(i);
139                 //ICalendarStore store = (ICalendarStore) next.getSource();
140
String JavaDoc activityId = (String JavaDoc) next.getChanges();
141
142                 // remove old activity
143
ActivityDepository.getInstance().removeBrokedActivityById(
144                         activityId);
145             }
146         }
147         if (itemChangedList[swap].size() > 0) {
148             Collections.sort(itemChangedList[swap], storeEventComparator2);
149
150             // Process the events
151
for (int i = 0; i < itemChangedList[swap].size(); i++) {
152                 StoreEvent next = (StoreEvent) itemChangedList[swap].get(i);
153
154                 ICalendarStore store = (ICalendarStore) next.getSource();
155                 try {
156                     IComponentInfo model = store.get(next.getChanges());
157                     // we only update changes for events currently
158
if (model.getType() == IComponent.TYPE.EVENT) {
159
160                         String JavaDoc activityId = model.getId();
161                         // remove old activity
162
ActivityDepository.getInstance()
163                                 .removeBrokedActivityById(activityId);
164
165                         // create new activity
166
Activity act = CalendarHelper
167                                 .createActivity((IEventInfo) model);
168                         ActivityDepository.getInstance().addBrokedActivity(act,
169                                 this, CategoryStructureEvent.ADDED_CREATED);
170                     }
171                 } catch (StoreException e) {
172                     // TODO Auto-generated catch block
173
e.printStackTrace();
174                 }
175             }
176         }
177     }
178
179     /* (non-Javadoc)
180      * @see org.columba.calendar.store.api.IStoreListener#itemAdded(org.columba.calendar.store.api.StoreEvent)
181      */

182     public void itemAdded(StoreEvent e) {
183         LOG.info(e.toString());
184
185         mutex.lock();
186
187         itemAddedList[1 - swap].add(e);
188
189         mutex.release();
190     }
191
192     /* (non-Javadoc)
193      * @see org.columba.calendar.store.api.IStoreListener#itemRemoved(org.columba.calendar.store.api.StoreEvent)
194      */

195     public void itemRemoved(StoreEvent e) {
196         LOG.info(e.toString());
197
198         mutex.lock();
199
200         itemRemovedList[1 - swap].add(e);
201
202         mutex.release();
203     }
204
205     /* (non-Javadoc)
206      * @see org.columba.calendar.store.api.IStoreListener#itemChanged(org.columba.calendar.store.api.StoreEvent)
207      */

208     public void itemChanged(StoreEvent e) {
209         LOG.info(e.toString());
210
211         mutex.lock();
212
213         itemChangedList[1 - swap].add(e);
214
215         mutex.release();
216     }
217
218     /* (non-Javadoc)
219      * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
220      */

221     public void actionPerformed(ActionEvent JavaDoc e) {
222
223         // process all events collected until now
224
mutex.lock();
225
226         swap = 1 - swap;
227
228         mutex.release();
229
230         processCalendarEvents();
231
232         clearAllLists();
233     }
234 }
235
Popular Tags