/* * File : $Source: /alkacon/cvs/alkacon/com.alkacon.opencms.v8.calendar/src/com/alkacon/opencms/v8/calendar/CmsCalendarEntryDateSerial.java,v $ * Date : $Date: 2008/04/25 14:50:41 $ * Version: $Revision: 1.1 $ * * This file is part of the Alkacon OpenCms Add-On Module Package * * Copyright (c) 2008 Alkacon Software GmbH (http://www.alkacon.com) * * The Alkacon OpenCms Add-On Module Package 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. * * The Alkacon OpenCms Add-On Module Package 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 the Alkacon OpenCms Add-On Module Package. * If not, see http://www.gnu.org/licenses/. * * For further information about Alkacon Software GmbH, please see the * company website: http://www.alkacon.com. * * For further information about OpenCms, please see the * project website: http://www.opencms.org. */ package com.alkacon.opencms.v8.calendar; import java.util.Calendar; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Stores the serial date information of a single calendar entry.<p> * * @author Andreas Zahner * * @version $Revision: 1.1 $ * * @since 6.0.1 */ public class CmsCalendarEntryDateSerial extends CmsCalendarEntryDate { /** The occurences of a series interval. */ private int m_occurences; /** The end date of a series. */ private Calendar m_serialEndDate; /** The end type of a series. */ private int m_serialEndType; /** The serial date options. */ private I_CmsCalendarSerialDateOptions m_serialOptions; /** * Constructor that initializes the members using the given start and end date.<p> * * @param startDate the start date of the entry * @param endDate the end date of the entry */ public CmsCalendarEntryDateSerial(Calendar startDate, Calendar endDate) { super(startDate, endDate); m_serialEndType = -1; } /** * Constructor that directly initializes the members.<p> * * @param startDay the start day of the entry * @param startTime the start time of the entry * @param endTime the end time of the entry * @param duration the duration of the entry (in days) */ public CmsCalendarEntryDateSerial(long startDay, long startTime, long endTime, int duration) { super(startDay, startTime, endTime, duration); m_serialEndType = -1; } /** * @see java.lang.Object#clone() */ public Object clone() { CmsCalendarEntryDateSerial clone = new CmsCalendarEntryDateSerial(getStartDate(), getEndDate()); clone.setSerialEndType(m_serialEndType); clone.setOccurences(m_occurences); clone.setSerialOptions(m_serialOptions); return clone; } /** * Returns the configuration values for the serial date as Map, including the individual serial options depending on the type.<p> * * This Map can be used to store the configured options as property value on VFS resources.<p> * * @return the configuration values for the serial date as Map */ public Map<String, String> getConfigurationValuesAsMap() { // create the Map containing the date settings Map<String, String> values = new HashMap<String, String>(); // first put the values of serial date fields used by all serial types // fetch the start date and time values.put(I_CmsCalendarSerialDateOptions.CONFIG_STARTDATE, String.valueOf(getStartDate().getTimeInMillis())); // the end date and time (this means the duration of a single entry) values.put(I_CmsCalendarSerialDateOptions.CONFIG_ENDDATE, String.valueOf(getEndDate().getTimeInMillis())); // store the serial type values.put(I_CmsCalendarSerialDateOptions.CONFIG_TYPE, String.valueOf(getSerialOptions().getSerialType())); // set the end type specific values int endType = getSerialEndType(); values.put(I_CmsCalendarSerialDateOptions.CONFIG_END_TYPE, String.valueOf(endType)); if (endType == I_CmsCalendarSerialDateOptions.END_TYPE_TIMES) { // end type: after a number of occurences values.put(I_CmsCalendarSerialDateOptions.CONFIG_OCCURENCES, String.valueOf(getOccurences())); } else if (endType == I_CmsCalendarSerialDateOptions.END_TYPE_DATE) { // end type: ends at a specified date values.put( I_CmsCalendarSerialDateOptions.CONFIG_SERIAL_ENDDATE, String.valueOf(getSerialEndDate().getTimeInMillis())); } // now put the individual serial date options to the Map values.putAll(getSerialOptions().getConfigurationValuesAsMap()); return values; } /** * Returns the occurences of a defined series interval, used for the series end type.<p> * * @return the occurences of a defined series interval, used for the series end type */ public int getOccurences() { return m_occurences; } /** * Returns the serial end date if the series is of type: ending at specific date.<p> * * @return the serial end date if the series is of type: ending at specific date */ public Calendar getSerialEndDate() { return m_serialEndDate; } /** * Returns the end type of the date series (never, n times, specific date).<p> * * @return the end type of the date series */ public int getSerialEndType() { return m_serialEndType; } /** * Returns the serial date options for the date series.<p> * * @return the serial date options for the date series */ public I_CmsCalendarSerialDateOptions getSerialOptions() { return m_serialOptions; } /** * Initializes the serial date options with the given values.<p> * * @param endType the end type of the serial date * @param options the serial date options */ public void initSerialDate(int endType, I_CmsCalendarSerialDateOptions options) { m_serialEndType = endType; m_serialOptions = options; } /** * Initializes the serial date options with the given values.<p> * * @param endType the end type of the serial date * @param occurences the number of occurences for the serial type that defines n occurences of the series * @param options the serial date options */ public void initSerialDate(int endType, int occurences, I_CmsCalendarSerialDateOptions options) { m_serialEndType = endType; m_occurences = occurences; m_serialOptions = options; } /** * Returns if the date entry is a serial date or not.<p> * * @return true if the date entry is a serial date, otherwise false */ public boolean isSerialDate() { return ((m_serialEndType != -1) && (m_serialOptions != null)); } /** * Returns the list of matching entries for the calendar view.<p> * * @param entry the calendar entry to check * @param calendarView the calendar view * @return the matching calendar entries */ public List matchCalendarView(CmsCalendarEntry entry, I_CmsCalendarView calendarView) { return matchCalendarView(entry, calendarView, Integer.MAX_VALUE); } /** * Returns the list of matching entries for the calendar view.<p> * * @param entry the calendar entry to check * @param calendarView the calendar view * @param maxCount the maximum count of returned serial entries * @return the matching calendar entries */ public List matchCalendarView(CmsCalendarEntry entry, I_CmsCalendarView calendarView, int maxCount) { if (isSerialDate()) { return m_serialOptions.matchCalendarView(entry, calendarView, maxCount); } else { return super.matchCalendarView(entry, calendarView); } } /** * Sets the occurences of a defined series interval, used for the series end type.<p> * * @param occurences the occurences of a defined series interval, used for the series end type */ public void setOccurences(int occurences) { m_occurences = occurences; } /** * Sets the serial end date if the series is of type: ending at specific date.<p> * * @param serialEndDate the serial end date if the series is of type: ending at specific date */ public void setSerialEndDate(Calendar serialEndDate) { m_serialEndDate = serialEndDate; } /** * Sets the end type of the date series (never, n times, specific date).<p> * * @param endType the end type of the date series */ public void setSerialEndType(int endType) { m_serialEndType = endType; } /** * Sets the serial date options for the date series.<p> * * @param serialOptions the serial date options for the date series */ public void setSerialOptions(I_CmsCalendarSerialDateOptions serialOptions) { m_serialOptions = serialOptions; } }