001: /*
002: * Lucane - a collaborative platform
003: * Copyright (C) 2004 Vincent Fiack <vfiack@mail15.com>
004: *
005: * This library is free software; you can redistribute it and/or
006: * modify it under the terms of the GNU Lesser General Public
007: * License as published by the Free Software Foundation; either
008: * version 2.1 of the License, or (at your option) any later version.
009: *
010: * This library is distributed in the hope that it will be useful,
011: * but WITHOUT ANY WARRANTY; without even the implied warranty of
012: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
013: * Lesser General Public License for more details.
014: *
015: * You should have received a copy of the GNU Lesser General Public
016: * License along with this library; if not, write to the Free Software
017: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
018: */
019:
020: package org.lucane.applications.reminder.lookup.calendar;
021:
022: import java.sql.*;
023: import java.util.*;
024:
025: import org.lucane.common.ConnectInfo;
026: import org.lucane.common.Logging;
027: import org.lucane.common.net.ObjectConnection;
028: import org.lucane.applications.reminder.*;
029: import org.lucane.applications.reminder.lookup.Lookup;
030: import org.lucane.server.ConnectInfoManager;
031: import org.lucane.server.Server;
032:
033: public class CalendarLookup implements Lookup {
034: //show reminder for events occuring in the next 15 minutes
035: public static final int LOOKUP_TIME = 15;
036:
037: //caches events id to avoid sending multiple reminders for an event
038: private ArrayList remindedEvents;
039:
040: public CalendarLookup() {
041: this .remindedEvents = new ArrayList();
042: }
043:
044: public void lookup() {
045: long start, end;
046:
047: Calendar cal = Calendar.getInstance();
048: start = cal.getTimeInMillis();
049: cal.add(Calendar.MINUTE, LOOKUP_TIME);
050: end = cal.getTimeInMillis();
051:
052: ArrayList events = new ArrayList();
053:
054: try {
055: events = getEvents(start, end);
056: } catch (Exception e) {
057: Logging.getLogger().severe("Unable to get events !");
058: e.printStackTrace();
059: }
060:
061: for (int i = 0; i < events.size(); i++) {
062: Event event = (Event) events.get(i);
063: Integer id = new Integer(event.getId());
064: if (this .remindedEvents.contains(id))
065: continue;
066:
067: this .remindedEvents.add(id);
068:
069: ReminderInfos infos = new ReminderInfos(
070: "org.lucane.applications.calendar", event
071: .getTitle(), event.getDescription());
072:
073: //send reminder to organizer
074: try {
075: ConnectInfo ci = ConnectInfoManager.getInstance()
076: .getConnectInfo(event.getOrganizer());
077: if (ci != null) {
078: ObjectConnection oc = Server.getInstance()
079: .sendMessageTo(ci,
080: "org.lucane.applications.reminder",
081: "");
082: oc.write(infos);
083: //oc.close();
084: }
085: } catch (Exception e) {
086: Logging.getLogger().warning(
087: "Unable to send reminder to organizer : "
088: + event.getOrganizer());
089: e.printStackTrace();
090: }
091:
092: //send reminder to attendees
093: Iterator attendees = event.getAttendees();
094: while (attendees.hasNext()) {
095: Attendee a = (Attendee) attendees.next();
096: try {
097: ConnectInfo ci = ConnectInfoManager.getInstance()
098: .getConnectInfo(a.getUser());
099: if (ci != null) {
100: ObjectConnection oc = Server
101: .getInstance()
102: .sendMessageTo(
103: ci,
104: "org.lucane.applications.reminder",
105: "");
106: oc.write(infos);
107: oc.close();
108: }
109: } catch (Exception e) {
110: Logging.getLogger().warning(
111: "Unable to send reminder to attendee : "
112: + a.getUser());
113: e.printStackTrace();
114: }
115: }
116: }
117: }
118:
119: private ArrayList getEvents(long start, long end) throws Exception {
120: ArrayList events = new ArrayList();
121:
122: Connection c = Server.getInstance().getDBLayer()
123: .getConnection();
124: Statement s = c.createStatement();
125:
126: String query = "SELECT * FROM CalEvents WHERE "
127: + "startTime >= " + start + " AND startTime <= " + end;
128: addEventsFromQuery(c, s, query, events);
129:
130: s.close();
131: c.close();
132:
133: return events;
134: }
135:
136: private void addEventsFromQuery(Connection c, Statement s,
137: String query, ArrayList events) throws Exception {
138: ResultSet r = s.executeQuery(query);
139: while (r.next()) {
140: int id = r.getInt(1);
141: String title = r.getString(2);
142: String type = r.getString(3);
143: String organizer = r.getString(4);
144: boolean isPublic = (r.getInt(5) == 1);
145: boolean isEditable = (r.getInt(6) == 1);
146: long mystart = r.getLong(7);
147: long myend = r.getLong(8);
148: int recurrence = r.getInt(9);
149: String description = r.getString(10);
150:
151: Event event = new Event(id, type, title, organizer,
152: isPublic, mystart, myend, recurrence, description);
153: loadAttendees(c, event);
154: events.add(event);
155: }
156: }
157:
158: private void loadAttendees(Connection c, Event event)
159: throws Exception {
160: ArrayList attendees = new ArrayList();
161: Statement s = c.createStatement();
162:
163: String query = "SELECT * FROM CalAttendees WHERE eventId = "
164: + event.getId();
165:
166: ResultSet r = s.executeQuery(query);
167: while (r.next()) {
168: String user = r.getString(2);
169: boolean mandatory = (r.getInt(3) == 1);
170: int status = r.getInt(4);
171:
172: Attendee attendee = new Attendee(user, mandatory, status);
173: attendees.add(attendee);
174: }
175:
176: event.setAttendees(attendees);
177:
178: r.close();
179: s.close();
180: }
181: }
|