/*******************************************************************************
* ***** BEGIN LICENSE BLOCK Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (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.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
*
* The Original Code is the OpenCustomer CRM.
*
* The Initial Developer of the Original Code is Thomas Bader (Bader & Jene
* Software-Ingenieurb�ro). Portions created by the Initial Developer are
* Copyright (C) 2005 the Initial Developer. All Rights Reserved.
*
* Contributor(s): Thomas Bader <thomas.bader@bader-jene.de>
*
* ***** END LICENSE BLOCK *****
*/
package org.opencustomer.webapp.module.calendar.event;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.HashSet;
import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Logger;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.opencustomer.db.vo.calendar.EventVO;
import org.opencustomer.framework.util.DateUtility;
import org.opencustomer.framework.util.EnumUtility;
import org.opencustomer.framework.util.FormUtility;
import org.opencustomer.framework.webapp.util.MessageUtil;
import org.opencustomer.webapp.action.EditPageForm;
public final class PageRecurrenceForm extends EditPageForm
{
private static final long serialVersionUID = 3977018439913322801L;
private final static Logger log = Logger.getLogger(PageRecurrenceForm.class);
private boolean recurrence;
private String recurrenceType = EventVO.RecurrenceType.FOREVER.toString();
private int numberOfTimes = 1;
private String untilDate;
private int cycle = 1;
private String cycleUnit = EventVO.RecurrenceUnit.DAY.toString();
private String[] inWeek = new String[0];
private String inMonth = EventVO.RecurrenceInMonth.DAY_OF_WEEK.toString();
public void validate(ActionMapping mapping, ActionMessages errors, HttpServletRequest request)
{
EventVO event = (EventVO)getPanel().getAttribute("event");
untilDate = FormUtility.adjustParameter(untilDate);
EventVO.RecurrenceType type = EnumUtility.valueOf(EventVO.RecurrenceType.class, recurrenceType);
if(recurrence)
{
// add the missing startDate
HashSet<String> newInWeek = new HashSet<String>();
for(String day : inWeek) {
newInWeek.add(day);
}
newInWeek.add(EventVO.RecurrenceInWeek.getForDate(event.getStartDate()).toString());
inWeek = newInWeek.toArray(new String[newInWeek.size()]);
if(cycle < 1)
errors.add("cycle", new ActionMessage("module.calendar.event.error.invalidCycle", MessageUtil.message(request, "entity.calendar.event.recurrence.cycle")));
if(EventVO.RecurrenceType.NUMBER_OF_TIMES.equals(type))
{
if(numberOfTimes < 1)
errors.add("numberOfTimes", new ActionMessage("module.calendar.event.error.invalidNumberOfTimes", MessageUtil.message(request, "entity.calendar.event.recurrence.numberOfTimes")));
}
else if(EventVO.RecurrenceType.UNTIL_DATE.equals(type))
{
if (untilDate == null)
{
errors.add("untilDate", new ActionMessage("default.error.missingInput", MessageUtil.message(request, "entity.calendar.event.recurrence.untilDate")));
}
else
{
String format = MessageUtil.message(request, "default.format.input.date");
try
{
untilDate = DateUtility.adjustDate(format, untilDate);
if(!event.getStartDate().before(DateUtility.getEndOfDay(new SimpleDateFormat(format).parse(untilDate))))
errors.add("untilDate", new ActionMessage("module.calendar.event.error.untilDateBeforeStart", MessageUtil.message(request, "entity.calendar.event.recurrence.untilDate")));
}
catch (ParseException e)
{
errors.add("untilDate", new ActionMessage("default.error.invalidFormat", MessageUtil.message(request, "entity.calendar.event.recurrence.untilDate"), format));
}
}
}
}
}
public int getNumberOfTimes()
{
return numberOfTimes;
}
public void setNumberOfTimes(int numberOfTimes)
{
this.numberOfTimes = numberOfTimes;
}
public String getRecurrenceType()
{
return recurrenceType;
}
public void setRecurrenceType(String recurrenceType)
{
this.recurrenceType = recurrenceType;
}
public boolean isRecurrence()
{
return recurrence;
}
public void setRecurrence(boolean recurrence)
{
this.recurrence = recurrence;
}
public String getUntilDate()
{
return untilDate;
}
public void setUntilDate(String untilDate)
{
this.untilDate = untilDate;
}
public int getCycle()
{
return cycle;
}
public void setCycle(int cycle)
{
this.cycle = cycle;
}
public String getCycleUnit()
{
return cycleUnit;
}
public void setCycleUnit(String cycleUnit)
{
this.cycleUnit = cycleUnit;
}
public String getInMonth()
{
return inMonth;
}
public void setInMonth(String inMonth)
{
this.inMonth = inMonth;
}
public String[] getInWeek()
{
return inWeek;
}
public void setInWeek(String[] inWeek)
{
this.inWeek = inWeek;
}
}