001: package com.sun.portal.app.sharedtasks.faces.models;
002:
003: import com.sun.comclient.calendar.CalendarSession;
004: import com.sun.comclient.calendar.CalendarStore;
005: import com.sun.comclient.calendar.ICalendar;
006: import com.sun.comclient.calendar.RecurrencePattern;
007: import com.sun.comclient.calendar.VTodo;
008: import com.sun.comclient.calendar.socs.SOCSCalendar;
009: import com.sun.comclient.calendar.socs.SOCSTodo;
010: import com.sun.comclient.calendar.CalendarException;
011: import com.sun.comclient.calendar.OperationNotSupportedException;
012:
013: import com.sun.portal.app.sharedtasks.faces.beans.TaskUserSessionBackingBean;
014: import com.sun.portal.app.sharedtasks.util.CalTask;
015: import com.sun.portal.app.sharedtasks.util.SharedConstants;
016: import com.sun.portal.app.sharedtasks.util.SharedTaskException;
017:
018: import java.util.Properties;
019:
020: import com.sun.portal.log.common.PortalLogger;
021: import java.util.logging.Logger;
022: import java.util.logging.Level;
023:
024: /**
025: *
026: * @author ashwin.mathew@sun.com
027: */
028: public class TaskModel {
029: private CalTask calTask;
030:
031: private boolean applyToAllInstances = false;
032:
033: private boolean isModifyRecurrence = false;
034:
035: private TaskUserSessionBackingBean userSession = null;
036:
037: private static Logger logger = PortalLogger
038: .getLogger(TaskModel.class);
039:
040: private static final String PROP_CAL_SOCS_COMPRESSED = "cal.socs.compressed";
041: private static final String TRUE = "true";
042:
043: /** Creates a new instance of EventModel */
044: public TaskModel(TaskUserSessionBackingBean userSession) {
045: this .userSession = userSession;
046: calTask = new CalTask();
047: calTask.setTimeZone(userSession.getTimeZone());
048: }
049:
050: public CalTask getTask() {
051: return calTask;
052: }
053:
054: public void save() throws SharedTaskException {
055: if (logger.isLoggable(Level.FINEST)) {
056: logger.finest("Saving new task, " + calTask.toString());
057: }
058:
059: try {
060: ICalendar cal = userSession.getCalendar();
061:
062: VTodo task = cal.createTodo();
063:
064: calTask.copyToVTodo(task);
065:
066: cal.addTodo(task, false);
067: //find the id of the task and set it in the Bean
068: calTask.setId(task.getID());
069: } catch (CalendarException cex) {
070: logger.log(Level.SEVERE, "Error saving task", cex);
071: throw new SharedTaskException(
072: SharedTaskException.CALENDAR_ERROR, cex);
073: } catch (OperationNotSupportedException onex) {
074: logger.log(Level.SEVERE, "Error saving task", onex);
075: throw new SharedTaskException(
076: SharedTaskException.CALENDAR_ERROR, onex);
077: } catch (Exception ex) {
078: logger.log(Level.SEVERE, "Error saving task", ex);
079: throw new SharedTaskException(
080: SharedTaskException.APPLICATION_ERROR, ex);
081: }
082: }
083:
084: public void retrieve(String taskId, String taskRid)
085: throws SharedTaskException {
086: if (logger.isLoggable(Level.FINEST)) {
087: logger.finest("Retrieving task, id [" + taskId + "], rid ["
088: + taskRid + "]");
089: }
090:
091: try {
092: SOCSCalendar socsCal = (SOCSCalendar) userSession
093: .getCalendar();
094:
095: Properties parsingProperties = new Properties();
096: parsingProperties.put(PROP_CAL_SOCS_COMPRESSED, TRUE);
097:
098: VTodo[] tasks = socsCal.fetchTodos(taskId, taskRid,
099: RecurrencePattern.THIS_INSTANCE, parsingProperties);
100: calTask.load(tasks[0]);
101: } catch (CalendarException cex) {
102: logger.log(Level.SEVERE, "Error retrieving task id ["
103: + taskId + "], rid [" + taskRid + "]", cex);
104: throw new SharedTaskException(
105: SharedTaskException.CALENDAR_ERROR, cex);
106: } catch (OperationNotSupportedException onex) {
107: logger.log(Level.SEVERE, "Error retrieving task id ["
108: + taskId + "], rid [" + taskRid + "]", onex);
109: throw new SharedTaskException(
110: SharedTaskException.CALENDAR_ERROR, onex);
111: } catch (Exception ex) {
112: logger.log(Level.SEVERE, "Error retrieving task id ["
113: + taskId + "], rid [" + taskRid + "]", ex);
114: throw new SharedTaskException(
115: SharedTaskException.APPLICATION_ERROR, ex);
116: }
117:
118: logger.finest("Retrieved task " + calTask.toString());
119: }
120:
121: public void update() throws SharedTaskException {
122: if (logger.isLoggable(Level.FINEST)) {
123: logger.finest("Updating task " + calTask.toString());
124: }
125:
126: try {
127: ICalendar cal = userSession.getCalendar();
128:
129: VTodo task = cal.createTodo();
130:
131: calTask.copyToVTodo(task);
132:
133: String modifier = RecurrencePattern.THIS_INSTANCE;
134: if (applyToAllInstances) {
135: modifier = RecurrencePattern.THIS_AND_ALL;
136: }
137:
138: if (isModifyRecurrence) {
139: ((SOCSTodo) task).setRecurrenceRuleChange(true);
140: }
141:
142: cal.modifyTodo(task, modifier, false);
143: } catch (CalendarException cex) {
144: logger.log(Level.SEVERE, "Error updating task id ["
145: + calTask.getId() + "], rid [" + calTask.getRid(),
146: cex);
147: throw new SharedTaskException(
148: SharedTaskException.CALENDAR_ERROR, cex);
149: } catch (OperationNotSupportedException onex) {
150: logger.log(Level.SEVERE, "Error updating task id ["
151: + calTask.getId() + "], rid [" + calTask.getRid(),
152: onex);
153: throw new SharedTaskException(
154: SharedTaskException.CALENDAR_ERROR, onex);
155: } catch (Exception ex) {
156: logger.log(Level.SEVERE, "Error updating task id ["
157: + calTask.getId() + "], rid [" + calTask.getRid(),
158: ex);
159: throw new SharedTaskException(
160: SharedTaskException.APPLICATION_ERROR, ex);
161: }
162: }
163:
164: public void delete() throws SharedTaskException {
165: if (logger.isLoggable(Level.FINEST)) {
166: logger.finest("Deleting task, id [" + calTask.getId()
167: + "], rid [" + calTask.getRid() + "]");
168: }
169:
170: try {
171: ICalendar cal = userSession.getCalendar();
172:
173: VTodo task = cal.createTodo();
174:
175: calTask.copyToVTodo(task);
176:
177: String modifier = RecurrencePattern.THIS_INSTANCE;
178: if (applyToAllInstances) {
179: modifier = RecurrencePattern.THIS_AND_ALL;
180: }
181:
182: cal.deleteTodo(task, modifier, false);
183: } catch (CalendarException cex) {
184: logger.log(Level.SEVERE, "Error deleting task id ["
185: + calTask.getId() + "], rid [" + calTask.getRid(),
186: cex);
187: throw new SharedTaskException(
188: SharedTaskException.CALENDAR_ERROR, cex);
189: } catch (OperationNotSupportedException onex) {
190: logger.log(Level.SEVERE, "Error deleting task id ["
191: + calTask.getId() + "], rid [" + calTask.getRid(),
192: onex);
193: throw new SharedTaskException(
194: SharedTaskException.CALENDAR_ERROR, onex);
195: } catch (Exception ex) {
196: logger.log(Level.SEVERE, "Error deleting task id ["
197: + calTask.getId() + "], rid [" + calTask.getRid(),
198: ex);
199: throw new SharedTaskException(
200: SharedTaskException.APPLICATION_ERROR, ex);
201: }
202: }
203:
204: public boolean getApplyToAllInstances() {
205: return applyToAllInstances;
206: }
207:
208: public void setApplyToAllInstances(boolean applyToAllInstances) {
209: this .applyToAllInstances = applyToAllInstances;
210: }
211:
212: public void modifyRecurrence() {
213: this .isModifyRecurrence = true;
214: }
215:
216: }
|