KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > lucane > applications > reminder > lookup > calendar > CalendarLookup


1 /*
2  * Lucane - a collaborative platform
3  * Copyright (C) 2004 Vincent Fiack <vfiack@mail15.com>
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18  */

19
20 package org.lucane.applications.reminder.lookup.calendar;
21
22 import java.sql.*;
23 import java.util.*;
24
25 import org.lucane.common.ConnectInfo;
26 import org.lucane.common.Logging;
27 import org.lucane.common.net.ObjectConnection;
28 import org.lucane.applications.reminder.*;
29 import org.lucane.applications.reminder.lookup.Lookup;
30 import org.lucane.server.ConnectInfoManager;
31 import org.lucane.server.Server;
32
33 public class CalendarLookup implements Lookup
34 {
35 //show reminder for events occuring in the next 15 minutes
36
public static final int LOOKUP_TIME = 15;
37                     
38     //caches events id to avoid sending multiple reminders for an event
39
private ArrayList remindedEvents;
40     
41     public CalendarLookup()
42     {
43         this.remindedEvents = new ArrayList();
44     }
45     
46     public void lookup()
47     {
48         long start, end;
49         
50         Calendar cal = Calendar.getInstance();
51         start = cal.getTimeInMillis();
52         cal.add(Calendar.MINUTE, LOOKUP_TIME);
53         end = cal.getTimeInMillis();
54                 
55         ArrayList events = new ArrayList();
56         
57         try {
58             events = getEvents(start, end);
59         } catch(Exception JavaDoc e) {
60             Logging.getLogger().severe("Unable to get events !");
61             e.printStackTrace();
62         }
63         
64         for(int i=0;i<events.size();i++)
65         {
66             Event event = (Event)events.get(i);
67             Integer JavaDoc id = new Integer JavaDoc(event.getId());
68             if(this.remindedEvents.contains(id))
69                 continue;
70             
71             this.remindedEvents.add(id);
72             
73             ReminderInfos infos = new ReminderInfos("org.lucane.applications.calendar", event.getTitle(),
74                     event.getDescription());
75             
76             //send reminder to organizer
77
try {
78                 ConnectInfo ci = ConnectInfoManager.getInstance().getConnectInfo(event.getOrganizer());
79                 if(ci != null)
80                 {
81                     ObjectConnection oc = Server.getInstance().sendMessageTo(ci, "org.lucane.applications.reminder", "");
82                     oc.write(infos);
83                     //oc.close();
84
}
85             } catch(Exception JavaDoc e) {
86                 Logging.getLogger().warning("Unable to send reminder to organizer : " +event.getOrganizer());
87                 e.printStackTrace();
88             }
89             
90             //send reminder to attendees
91
Iterator attendees = event.getAttendees();
92             while(attendees.hasNext())
93             {
94                 Attendee a = (Attendee)attendees.next();
95                 try {
96                     ConnectInfo ci = ConnectInfoManager.getInstance().getConnectInfo(a.getUser());
97                     if(ci != null)
98                     {
99                         ObjectConnection oc = Server.getInstance().sendMessageTo(ci, "org.lucane.applications.reminder", "");
100                         oc.write(infos);
101                         oc.close();
102                     }
103                 } catch(Exception JavaDoc e) {
104                     Logging.getLogger().warning("Unable to send reminder to attendee : " + a.getUser());
105                     e.printStackTrace();
106                 }
107             }
108         }
109     }
110     
111     private ArrayList getEvents(long start, long end)
112     throws Exception JavaDoc
113     {
114         ArrayList events = new ArrayList();
115         
116         Connection c = Server.getInstance().getDBLayer().getConnection();
117         Statement s = c.createStatement();
118         
119         String JavaDoc query = "SELECT * FROM CalEvents WHERE "
120             + "startTime >= " + start + " AND startTime <= " + end;
121         addEventsFromQuery(c, s, query, events);
122                 
123         s.close();
124         c.close();
125
126         return events;
127     }
128     
129     private void addEventsFromQuery(Connection c, Statement s, String JavaDoc query, ArrayList events)
130     throws Exception JavaDoc
131     {
132         ResultSet r = s.executeQuery(query);
133         while(r.next())
134         {
135             int id = r.getInt(1);
136             String JavaDoc title = r.getString(2);
137             String JavaDoc type = r.getString(3);
138             String JavaDoc organizer = r.getString(4);
139             boolean isPublic = (r.getInt(5) == 1);
140             boolean isEditable = (r.getInt(6) == 1);
141             long mystart = r.getLong(7);
142             long myend = r.getLong(8);
143             int recurrence = r.getInt(9);
144             String JavaDoc description = r.getString(10);
145
146             Event event = new Event(id, type, title, organizer, isPublic,
147                         mystart, myend, recurrence, description);
148             loadAttendees(c, event);
149             events.add(event);
150         }
151     }
152
153     private void loadAttendees(Connection c, Event event)
154     throws Exception JavaDoc
155     {
156         ArrayList attendees = new ArrayList();
157         Statement s = c.createStatement();
158         
159         String JavaDoc query = "SELECT * FROM CalAttendees WHERE eventId = "
160             + event.getId();
161
162         ResultSet r = s.executeQuery(query);
163         while(r.next())
164         {
165             String JavaDoc user = r.getString(2);
166             boolean mandatory = (r.getInt(3) == 1);
167             int status = r.getInt(4);
168             
169             Attendee attendee = new Attendee(user, mandatory, status);
170             attendees.add(attendee);
171         }
172         
173         event.setAttendees(attendees);
174         
175         r.close();
176         s.close();
177     }
178 }
179
Popular Tags