/* AbstractCalendarModel.java {{IS_NOTE Purpose: Description: History: Mar 17, 2009 4:45:25 PM , Created by jumperchen Thu Nov 10 9:32:58 TST 2009, Created by Jimmy }}IS_NOTE Copyright (C) 2009 Potix Corporation. All Rights Reserved. {{IS_RIGHT }}IS_RIGHT */ package org.zkoss.calendar.impl; import java.io.Serializable; import java.util.Date; import java.util.LinkedList; import java.util.List; import java.util.TimeZone; import org.zkoss.calendar.api.CalendarEvent; import org.zkoss.calendar.api.CalendarModel; import org.zkoss.calendar.event.CalendarDataEvent; import org.zkoss.calendar.event.CalendarDataListener; import org.zkoss.io.Serializables; /** * A skeletal implementation for {@link CalendarModel} * @author jumperchen,jimmy * */ abstract public class AbstractCalendarModel implements CalendarModel, Serializable { private static final long serialVersionUID = 20090317L; private transient List<CalendarDataListener> _listeners = new LinkedList<CalendarDataListener>(); /** * @deprecated As of release 2.0-RC, replaced with {@link #fireEvent(int type, CalendarEvent e)} * Fires a {@link CalendarDataEvent} for all registered listener * (thru {@link #addCalendarDataListener}. * * @see #fireEvent(int, Date, Date, TimeZone) */ protected void fireEvent(int type, Date begin, Date end) { fireEvent(type, begin, end, null); } /** Fires a {@link CalendarDataEvent} for all registered listener * (thru {@link #addCalendarDataListener}. * * @see #fireEvent(int, Date, Date, TimeZone) */ protected void fireEvent(int type, CalendarEvent e) { fireEvent(type, e, null); } /** * @deprecated As of release 2.0-RC, replaced with {@link #fireEvent(int type, CalendarEvent e, TimeZone timezone)} * Fires a {@link CalendarDataEvent} for all registered listener * (thru {@link #addCalendarDataListener}. * * <p>Note: you can invoke this method only in an event listener. */ protected void fireEvent(int type, Date begin, Date end, TimeZone timezone) { final CalendarDataEvent evt = new CalendarDataEvent(this, type, begin, end, timezone); for (CalendarDataListener listener : _listeners) listener.onChange(evt); } /** Fires a {@link CalendarDataEvent} for all registered listener * (thru {@link #addCalendarDataListener}. * * <p>Note: you can invoke this method only in an event listener. */ protected void fireEvent(int type, CalendarEvent e, TimeZone timezone) { final CalendarDataEvent evt = new CalendarDataEvent(this, type, e, timezone); for (CalendarDataListener listener : _listeners) listener.onChange(evt); } public void addCalendarDataListener(CalendarDataListener l) { if (l == null) throw new NullPointerException(); _listeners.add(l); } public void removeCalendarDataListener(CalendarDataListener l) { _listeners.remove(l); } //Serializable// private synchronized void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException { s.defaultWriteObject(); Serializables.smartWrite(s, _listeners); } private synchronized void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException { s.defaultReadObject(); _listeners = new LinkedList<CalendarDataListener>(); Serializables.smartRead(s, _listeners); } }