package in.partake.controller.action.calendar; import in.partake.base.CalendarUtil; import in.partake.base.PartakeException; import in.partake.controller.action.AbstractPartakeAction; import in.partake.model.IPartakeDAOs; import in.partake.model.access.DBAccess; import in.partake.model.dao.DAOException; import in.partake.model.dao.PartakeConnection; import in.partake.model.daofacade.CalendarDAOFacade; import in.partake.resource.ServerErrorCode; import java.io.IOException; import net.fortuna.ical4j.model.Calendar; import net.fortuna.ical4j.model.ValidationException; import org.apache.commons.lang.StringUtils; import play.mvc.Result; public abstract class AbstractCalendarAction extends AbstractPartakeAction { protected Result showByCategory(String categoryName) throws DAOException, PartakeException { assert(!StringUtils.isEmpty(categoryName)); byte[] body = new CalendarActionTransaction(categoryName).execute(); return render(body, "text/calendar; charset=utf-8", "inline"); } } class CalendarActionTransaction extends DBAccess<byte[]> { private String categoryName; CalendarActionTransaction(String categoryName) { this.categoryName = categoryName; } @Override protected byte[] doExecute(PartakeConnection con, IPartakeDAOs daos) throws DAOException, PartakeException { try { Calendar calendar = CalendarUtil.createCalendarSkeleton(); CalendarDAOFacade.addCalendarByCategoryName(con, daos, categoryName, calendar); return CalendarUtil.outputCalendar(calendar); } catch (IOException e) { throw new PartakeException(ServerErrorCode.CALENDAR_CREATION_FAILURE, e); } catch (ValidationException e) { throw new PartakeException(ServerErrorCode.CALENDAR_INVALID_FORMAT, e); } } }