/* * This file is part of LibrePlan * * Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e * Desenvolvemento Tecnolóxico de Galicia * Copyright (C) 2010-2011 Igalia, S.L. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.libreplan.web.calendars; import java.util.Date; import java.util.List; import java.util.Set; import org.joda.time.LocalDate; import org.libreplan.business.calendars.entities.BaseCalendar; import org.libreplan.business.calendars.entities.CalendarAvailability; import org.libreplan.business.calendars.entities.CalendarData; import org.libreplan.business.calendars.entities.CalendarData.Days; import org.libreplan.business.calendars.entities.CalendarException; import org.libreplan.business.calendars.entities.CalendarExceptionType; import org.libreplan.business.calendars.entities.Capacity; import org.libreplan.business.common.exceptions.ValidationException; import org.libreplan.business.workingday.EffortDuration; import org.libreplan.web.common.IIntegrationEntityModel; /** * This interface contains the operations to create/edit a {@link BaseCalendar}. * The creation/edition process of a {@link BaseCalendar} is conversational. * * <strong>Conversation state</strong>: the {@link BaseCalendar} instance. * * <strong>Non conversational steps</strong>: <code>getBaseCalendars</code> (to * return all base calendars). * * <strong>Conversation protocol:</strong> * <ul> * <li> * Initial conversation steps: <code>initCreate</code> (to create a * {@link BaseCalendar}) or (exclusive) <code>initEdit</code> (to edit an * existing {@link BaseCalendar}).</li> * <li> * Intermediate conversation steps: <code>getBaseCalendar</code> (to return the * {@link BaseCalendar} being edited/created).</li> * <li> * Final conversational steps: <code>confirmSave</code> (to save the * {@link BaseCalendar} being edited/created), <code>confirmRemove</code> (to * remove the {@link BaseCalendarModel}) or (exclusive) <code>cancel</code> (to * discard changes).</li> * </ul> * * @author Manuel Rego Casasnovas <mrego@igalia.com> * @author Diego Pino Garcia <dpino@igalia.com> */ public interface IBaseCalendarModel extends IIntegrationEntityModel { /* * Non conversational steps */ List<BaseCalendar> getBaseCalendars(); void checkInvalidValuesCalendar(BaseCalendar entity) throws ValidationException; boolean isDefaultCalendar(BaseCalendar baseCalendar); List<CalendarExceptionType> getCalendarExceptionTypes(); /* * Initial conversation steps */ void initCreate(); void initEdit(BaseCalendar baseCalendar); void initRemove(BaseCalendar baseCalendar); void initCreateDerived(BaseCalendar baseCalendar); void initCreateCopy(BaseCalendar baseCalendar); /* * Intermediate conversation steps */ BaseCalendar getBaseCalendar(); boolean isEditing(); void setSelectedDay(LocalDate date); LocalDate getSelectedDay(); EffortDuration getWorkableTime(); Capacity getWorkableCapacity(); void createException(CalendarExceptionType type, LocalDate startDate, LocalDate endDate, Capacity capacity); Boolean isDefault(Days day); void setDefault(Days day); void unsetDefault(Days day); boolean isExceptional(); void removeException(); boolean isDerived(); List<BaseCalendar> getPossibleParentCalendars(); BaseCalendar getParent(); void setParent(BaseCalendar parent); boolean isParent(BaseCalendar calendar); LocalDate getDateValidFrom(); void setDateValidFrom(LocalDate date); List<CalendarData> getHistoryVersions(); void createNewVersion(LocalDate startDate, LocalDate expiringDate, BaseCalendar baseCalendar); boolean isLastVersion(LocalDate selectedDate); boolean isFirstVersion(LocalDate selectedDate); String getName(); LocalDate getValidFrom(CalendarData calendarData); Set<CalendarException> getCalendarExceptions(); void removeException(LocalDate date); CalendarExceptionType getCalendarExceptionType(); CalendarExceptionType getCalendarExceptionType(LocalDate date); void updateException(CalendarExceptionType type, LocalDate startDate, LocalDate endDate, Capacity capacity); void removeCalendarData(CalendarData calendarData); CalendarData getLastCalendarData(); CalendarData getCalendarData(); boolean isResourceCalendar(); List<CalendarAvailability> getCalendarAvailabilities(); void removeCalendarAvailability(CalendarAvailability calendarAvailability); void createCalendarAvailability(); void setStartDate(CalendarAvailability calendarAvailability, LocalDate startDate) throws IllegalArgumentException; void setEndDate(CalendarAvailability calendarAvailability, LocalDate endDate) throws IllegalArgumentException; /* * Final conversation steps */ void confirmSave() throws ValidationException; void confirmSaveAndContinue() throws ValidationException; void confirmRemove(BaseCalendar calendar); void cancel(); Capacity getCapacityAt(Days day); void setCapacityAt(Days day, Capacity capacity); void generateCalendarCodes(); boolean isLastActivationPeriod(CalendarAvailability calendarAvailability); boolean isOwnException(CalendarException exception); void checkIsReferencedByOtherEntities(BaseCalendar calendar) throws ValidationException; BaseCalendar getCurrentParent(); Date getCurrentStartDate(); Date getCurrentExpiringDate(); void checkChangeExpiringDate(CalendarData version, Date date) throws ValidationException; void checkAndChangeStartDate(CalendarData version, Date date) throws ValidationException; boolean isOwnExceptionDay(); boolean isVirtualWorker(); Integer getCapacity(); void setCapacity(Integer capacity); }