/* * Copyright 2000-2013 Vaadin Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.vaadin.ui.components.calendar.event; import java.util.ArrayList; import java.util.Date; import java.util.List; import com.vaadin.ui.components.calendar.event.CalendarEvent.EventChangeEvent; import com.vaadin.ui.components.calendar.event.CalendarEventProvider.EventSetChangeNotifier; /** *

* Simple implementation of * {@link com.vaadin.addon.calendar.event.CalendarEventProvider * CalendarEventProvider}. Use {@link #addEvent(CalendarEvent)} and * {@link #removeEvent(CalendarEvent)} to add / remove events. *

* *

* {@link com.vaadin.addon.calendar.event.CalendarEventProvider.EventSetChangeNotifier * EventSetChangeNotifier} and * {@link com.vaadin.addon.calendar.event.CalendarEvent.EventChangeListener * EventChangeListener} are also implemented, so the Calendar is notified when * an event is added, changed or removed. *

* * @since 7.1.0 * @author Vaadin Ltd. */ @SuppressWarnings("serial") public class BasicEventProvider implements CalendarEditableEventProvider, EventSetChangeNotifier, CalendarEvent.EventChangeListener { protected List eventList = new ArrayList(); private List listeners = new ArrayList(); /* * (non-Javadoc) * * @see * com.vaadin.addon.calendar.event.CalendarEventProvider#getEvents(java. * util.Date, java.util.Date) */ @Override public List getEvents(Date startDate, Date endDate) { ArrayList activeEvents = new ArrayList(); for (CalendarEvent ev : eventList) { long from = startDate.getTime(); long to = endDate.getTime(); if (ev.getStart() != null && ev.getEnd() != null) { long f = ev.getStart().getTime(); long t = ev.getEnd().getTime(); // Select only events that overlaps with startDate and // endDate. if ((f <= to && f >= from) || (t >= from && t <= to) || (f <= from && t >= to)) { activeEvents.add(ev); } } } return activeEvents; } /** * Does this event provider container this event * * @param event * The event to check for * @return If this provider has the event then true is returned, else false */ public boolean containsEvent(BasicEvent event) { return eventList.contains(event); } /* * (non-Javadoc) * * @see * com.vaadin.addon.calendar.ui.CalendarComponentEvents.EventSetChangeNotifier * #addListener * (com.vaadin.addon.calendar.ui.CalendarComponentEvents.EventSetChangeListener * ) */ @Override public void addEventSetChangeListener(EventSetChangeListener listener) { listeners.add(listener); } /* * (non-Javadoc) * * @see * com.vaadin.addon.calendar.ui.CalendarComponentEvents.EventSetChangeNotifier * #removeListener * (com.vaadin.addon.calendar.ui.CalendarComponentEvents.EventSetChangeListener * ) */ @Override public void removeEventSetChangeListener(EventSetChangeListener listener) { listeners.remove(listener); } /** * Fires a eventsetchange event. The event is fired when either an event is * added or removed to the event provider */ protected void fireEventSetChange() { EventSetChangeEvent event = new EventSetChangeEvent(this); for (EventSetChangeListener listener : listeners) { listener.eventSetChange(event); } } /* * (non-Javadoc) * * @see * com.vaadin.addon.calendar.ui.CalendarComponentEvents.EventChangeListener * #eventChange * (com.vaadin.addon.calendar.ui.CalendarComponentEvents.EventSetChange) */ @Override public void eventChange(EventChangeEvent changeEvent) { // naive implementation fireEventSetChange(); } /* * (non-Javadoc) * * @see * com.vaadin.addon.calendar.event.CalendarEditableEventProvider#addEvent * (com.vaadin.addon.calendar.event.CalendarEvent) */ @Override public void addEvent(CalendarEvent event) { eventList.add(event); if (event instanceof BasicEvent) { ((BasicEvent) event).addEventChangeListener(this); } fireEventSetChange(); } /* * (non-Javadoc) * * @see * com.vaadin.addon.calendar.event.CalendarEditableEventProvider#removeEvent * (com.vaadin.addon.calendar.event.CalendarEvent) */ @Override public void removeEvent(CalendarEvent event) { eventList.remove(event); if (event instanceof BasicEvent) { ((BasicEvent) event).removeEventChangeListener(this); } fireEventSetChange(); } }