/* * Copyright (C) 2010 - 2012 Interactive Media Management * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package dk.i2m.converge.ejb.facades; import dk.i2m.converge.core.DataNotFoundException; import dk.i2m.converge.core.calendar.Event; import dk.i2m.converge.core.calendar.EventCategory; import dk.i2m.converge.ejb.services.ConfigurationServiceLocal; import dk.i2m.converge.ejb.services.DaoServiceLocal; import dk.i2m.converge.ejb.services.QueryBuilder; import java.net.SocketException; import java.util.Calendar; import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import javax.ejb.EJB; import javax.ejb.Stateless; import net.fortuna.ical4j.model.Date; import net.fortuna.ical4j.model.DateTime; import net.fortuna.ical4j.model.component.VEvent; import net.fortuna.ical4j.model.property.*; import net.fortuna.ical4j.util.UidGenerator; /** * Facade for accessing the calendar. * * @author Allan Lykke Christensen */ @Stateless public class CalendarFacadeBean implements CalendarFacadeLocal { @EJB private DaoServiceLocal daoService; @EJB private ConfigurationServiceLocal cfgService; private static final Logger LOG = Logger.getLogger(CalendarFacadeBean.class.getName()); /** * {@inheritDoc} */ @Override public Event create(Event event) { return daoService.create(event); } /** * {@inheritDoc} */ @Override public Event update(Event event) { return daoService.update(event); } /** * {@inheritDoc} */ @Override public void delete(Long id) { daoService.delete(Event.class, id); } /** * {@inheritDoc} */ @Override public Event findById(Long id) throws DataNotFoundException { return daoService.findById(Event.class, id); } /** * {@inheritDoc} */ @Override public List<Event> findAll() { return daoService.findAll(Event.class); } /** * {@inheritDoc} */ @Override public List<Event> findByDate(Calendar start, Calendar end) { Map params = QueryBuilder.with(Event.QUERY_PARAM_START, start).and(Event.QUERY_PARAM_END, end).parameters(); return daoService.findWithNamedQuery(Event.FIND_BY_DATE, params); } /** * {@inheritDoc} */ @Override public List<Event> findByStartDate(Calendar start) { Map params = QueryBuilder.with(Event.QUERY_PARAM_START, start).parameters(); return daoService.findWithNamedQuery(Event.FIND_BY_START_DATE, params); } /** * {@inheritDoc} */ @Override public List<Event> findUpcoming() { return findByStartDate(Calendar.getInstance()); } /** * {@inheritDoc} */ @Override public List<Event> findTodaysEvents() { Calendar now = Calendar.getInstance(); Map params = QueryBuilder.with(Event.QUERY_PARAM_DATE, now).parameters(); return daoService.findWithNamedQuery(Event.FIND_BY_BETWEEN, params); } /** * {@inheritDoc} */ @Override public List<Event> findUpcomingEvents(int days) { Calendar now = Calendar.getInstance(); Calendar endDate = Calendar.getInstance(); endDate.add(Calendar.DAY_OF_MONTH, days); Map params = QueryBuilder.with(Event.QUERY_PARAM_START, now). and(Event.QUERY_PARAM_END, endDate).parameters(); return daoService.findWithNamedQuery(Event.FIND_BY_DATE, params); } /** * {@inheritDoc} */ @Override public String generateVCal() { net.fortuna.ical4j.model.Calendar vcal = new net.fortuna.ical4j.model.Calendar(); String calendarName = "Converge"; String appId = cfgService.getLongVersion(); vcal.getProperties().add(new ProdId("-//" + calendarName + "//" + appId + "//EN")); vcal.getProperties().add(Version.VERSION_2_0); vcal.getProperties().add(CalScale.GREGORIAN); UidGenerator ug; try { ug = new UidGenerator("1"); } catch (SocketException ex) { LOG.log(Level.SEVERE, "Could not initialise UidGenerator for calendar", ex); return vcal.toString(); } for (Event event : findAll()) { VEvent vevent; if (event.isAllDayEvent()) { vevent = new VEvent(new Date(event.getStartDate().getTime()), event. getSummary()); } else { vevent = new VEvent(new DateTime(event.getStartDate().getTime()), new DateTime(event. getEndDate().getTime()), event.getSummary()); } vevent.getProperties().add(new Description(event.getDescription())); vevent.getProperties().add(new Location(event.getLocation())); vevent.getProperties().add(ug.generateUid()); vcal.getComponents().add(vevent); } return vcal.toString(); } /** * {@inheritDoc} */ @Override public EventCategory create(EventCategory category) { return daoService.create(category); } /** * {@inheritDoc} */ @Override public EventCategory update(EventCategory category) { return daoService.update(category); } /** * {@inheritDoc} */ @Override public void deleteEventCategory(Long id) { daoService.delete(EventCategory.class, id); } /** * {@inheritDoc} */ @Override public EventCategory findEventCategoryById(Long id) throws DataNotFoundException { return daoService.findById(EventCategory.class, id); } /** * {@inheritDoc} */ @Override public List<EventCategory> findAllCategories() { return daoService.findAll(EventCategory.class); } }