/* * RHQ Management Platform * Copyright (C) 2005-2008 Red Hat, Inc. * All rights reserved. * * 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 version 2 of the License. * * 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, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ package org.rhq.enterprise.gui.legacy.action; import java.util.Calendar; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionMapping; import org.rhq.enterprise.gui.legacy.beans.OptionItem; /** * A subclass of <code>BaseValidatorForm</code> that contains all of the properties for scheduling an action. */ public class ScheduleForm extends CalendarForm { //------------------------------------- instance variables /** * A flag to indicate whether or not this should be scheduled immediately. Valid values: "now" "onDate" * * @see web/common/components/Schedule.jsp */ private String startTime; public static final String START_NOW = "now"; public static final String START_ON_DATE = "onDate"; private String endTime; public static final String END_NEVER = "none"; public static final String END_ON_DATE = "onDate"; private String recurInterval; public static final String RECUR_NEVER = "recurNever"; public static final String RECUR_DAILY = "recurDaily"; public static final String RECUR_WEEKLY = "recurWeekly"; public static final String RECUR_MONTHLY = "recurMonthly"; private String recurrenceFrequencyDaily; public static final String EVERY_DAY = "everyDay"; public static final String EVERY_WEEKDAY = "everyWeekday"; // all of these are used to set the interval - i.e. every 3 weeks private String numDays; private String numWeeks; private String numMonths; private java.lang.Integer[] recurrenceDay; private String recurrenceFrequencyMonthly; public static final String ON_EACH = "onEach"; public static final String ON_DAY = "onDay"; private Integer recurrenceWeek; private Integer monthlyRecurrenceDay; private Integer eachDay; private List<OptionItem> controlActions; private Integer numControlActions; //-------------------------------------public methods // /** // * This method constructs a schedule time value object // * from the form. // * It assumes that validate() has already been called. // */ // public ScheduleValue createSchedule() // throws IllegalArgumentException { // // this assumes that validate has already been called // Date start; // Date end = null; // int occur = 0; // // // when to start // if (startTime.equals(START_NOW)) { // start = new Date(); // } else { // start = getStartDate(); // } // // // when to end // if (endTime.equals(END_ON_DATE)) { // this.setWantEndDate(true); // end = getEndDate(); // } else { // end = null; // } // // // never end // if (recurInterval.equals(RECUR_NEVER)) { // return new ScheduleSingleValue(start); // } // else if (recurInterval.equals(RECUR_DAILY)) { // if (recurrenceFrequencyDaily.equals(EVERY_DAY)) { // return new ScheduleDailyValue(start, end, Integer.parseInt(numDays)); // } else if (recurrenceFrequencyDaily.equals(EVERY_WEEKDAY)) { // ScheduleDailyValue sdv = new ScheduleDailyValue(start, end, 0); // sdv.setEveryWeekDay(true /* only on weekdays */); // return sdv; // } else { // // shouldnt get here. // return new ScheduleDailyValue(start, end, 0); // } // } // else if (recurInterval.equals(RECUR_WEEKLY)) { // int intNumWeeks = Integer.parseInt(numWeeks); // ScheduleWeeklyValue swv = new ScheduleWeeklyValue(start, end, intNumWeeks); // for (int i = 0; i < recurrenceDay.length; i++) { // swv.setDay(recurrenceDay[i].intValue()); // } // return swv; // } // else if (recurInterval.equals(RECUR_MONTHLY)){ // int intNumMonths = Integer.parseInt(numMonths); // ScheduleMonthlyValue smv // = new ScheduleMonthlyValue(start, end, intNumMonths); // // // which day of the month to run this on // if (ON_EACH.equals(recurrenceFrequencyMonthly)) { // // "1st of November" // smv.setDay(eachDay.intValue()); // } else if (ON_DAY.equals(recurrenceFrequencyMonthly)) { // // "3rd Sunday" // smv.setWeekOfMonth(recurrenceWeek.intValue()); // smv.setDayOfWeek(monthlyRecurrenceDay.intValue()); // } else { // // shouldnt get here // smv.setDay(1); // } // return smv; // } else { // throw new IllegalArgumentException("recurInterval had invalid value"); // } // } // // /** // * This method populates the form from a schedule time value object. // * // * @param sv The ScheduleValue object to populate the form from. // */ // public void populateFromSchedule(ScheduleValue sv, Locale userLocale) // throws IllegalArgumentException { // // this.populateStartDate(sv.getStart(), userLocale); // Date end = sv.getEnd(); // int ival = sv.getInterval(); // if (null != end && ival > 0) { // this.setWantEndDate(true); // performs validation on end date // this.populateEndDate(sv.getEnd(), userLocale); // endTime = END_ON_DATE; // } else { // endTime = END_NEVER; // } // // // won't ever be editing an "immediate" // this.startTime = START_ON_DATE; // // if (sv instanceof ScheduleSingleValue) { // ScheduleSingleValue ssv = (ScheduleSingleValue)sv; // recurInterval = RECUR_NEVER; // return; // } // else if (sv instanceof ScheduleDailyValue) { // ScheduleDailyValue sdv = (ScheduleDailyValue)sv; // this.recurInterval = RECUR_DAILY; // this.numDays = new Integer(sdv.getInterval()).toString(); // if (sdv.getEveryWeekDay()) { // recurrenceFrequencyDaily = EVERY_WEEKDAY; // } else { // recurrenceFrequencyDaily = EVERY_DAY; // } // return; // } // else if (sv instanceof ScheduleWeeklyValue) { // ScheduleWeeklyValue swv = (ScheduleWeeklyValue)sv; // this.recurInterval = RECUR_WEEKLY; // this.numWeeks = new Integer(swv.getInterval()).toString(); // ArrayList tmpDays = new ArrayList(); // for (int i = Calendar.SUNDAY; i <= Calendar.SATURDAY; i++) { // if (swv.isDaySet(i)) { // tmpDays.add(new Integer(i)); // } // } // recurrenceDay = new Integer[tmpDays.size()]; // recurrenceDay = (Integer[])tmpDays.toArray(recurrenceDay); // return; // } // else if (sv instanceof ScheduleMonthlyValue) { // ScheduleMonthlyValue smv = (ScheduleMonthlyValue)sv; // this.recurInterval = RECUR_MONTHLY; // this.numMonths = new Integer(smv.getInterval()).toString(); // // if (smv.isOffset()) { // // "3rd Sunday" // this.recurrenceWeek = new Integer(smv.getWeekOfMonth()); // this.monthlyRecurrenceDay = new Integer(smv.getDayOfWeek()); // this.recurrenceFrequencyMonthly = ON_DAY; // } else { // // "31st of October" // this.recurrenceFrequencyMonthly = ON_EACH; // this.eachDay = new Integer(smv.getDay()); // } // return; // } // } public boolean getIsNow() { return startTime.equals(START_NOW); } private String fmtTime(int s) { if (s < 10) { return "0" + s; } else { return new Integer(s).toString(); } } @Override public void reset(ActionMapping mapping, HttpServletRequest request) { this.startTime = START_NOW; Calendar cal = Calendar.getInstance(); this.recurInterval = ""; this.recurrenceFrequencyDaily = EVERY_DAY; this.recurrenceFrequencyMonthly = ON_EACH; this.numMonths = "1"; this.setEndTime(END_NEVER); this.eachDay = new Integer(1); this.numDays = "1"; this.numWeeks = "1"; this.recurrenceDay = new Integer[0]; /* for everyWeekday enumeration 1-7 */ this.monthlyRecurrenceDay = null; this.controlActions = null; this.numControlActions = new Integer(0); super.reset(mapping, request); } @Override public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { if (!shouldValidate(mapping, request)) { // A special case, BaseValidatorForm will return // null if Ok is clicked and input is null, indicating // a PrepareForm action is occurring. This is tricky. return null; } ActionErrors errs = super.validate(mapping, request); if (errs == null) { errs = new ActionErrors(); } if ((startTime == null) || startTime.equals(START_NOW)) { return errs.isEmpty() ? null : errs; } if (null != recurInterval) { // now check whichever is appropriate: numDays numWeeks numMonths, the // interval (every X days/weeks/months) that the user enters. if (recurInterval.equals(RECUR_DAILY)) { if ((recurrenceFrequencyDaily != null) && recurrenceFrequencyDaily.equals(EVERY_DAY)) { Integer tmpNumDays = null; try { tmpNumDays = new Integer(Integer.parseInt(numDays)); } catch (NumberFormatException nfe) { errs.add("numDays", new ActionError("resource.autodiscovery.ScheduleTab.error.numDays", numDays)); } } } else if (recurInterval.equals(RECUR_WEEKLY)) { Integer tmpNumWeeks = null; try { tmpNumWeeks = new Integer(Integer.parseInt(numWeeks)); } catch (NumberFormatException nfe) { errs .add("numWeeks", new ActionError("resource.autodiscovery.ScheduleTab.error.numWeeks", numWeeks)); } // check that the user clicked at least one day of the week to occurr on if (recurrenceDay.length == 0) { errs .add("recurrenceDay", new ActionError("resource.autodiscovery.ScheduleTab.error.recurrenceDay")); } } else if (recurInterval.equals(RECUR_MONTHLY)) { Integer tmpNumMonths = null; try { tmpNumMonths = new Integer(Integer.parseInt(numMonths)); } catch (NumberFormatException nfe) { errs.add("numMonths", new ActionError("resource.autodiscovery.ScheduleTab.error.numMonths", numMonths)); } } } /* if (null != recurInterval) { */ return errs.isEmpty() ? null : errs; } @Override public String toString() { StringBuffer buf = new StringBuffer(super.toString()); buf.append(" startTime=").append(startTime); buf.append(" recurInterval=").append(recurInterval); buf.append(" recurrenceFrequencyDaily=").append(recurrenceFrequencyDaily); buf.append(" numDays=").append(numDays); buf.append(" numWeeks=").append(numWeeks); buf.append(" recurrenceDay=").append(recurrenceDay); buf.append(" recurrenceFrequencyMonthly=").append(recurrenceFrequencyMonthly); buf.append(" numMonths=").append(numMonths); buf.append(" recurrenceWeek=").append(recurrenceWeek); buf.append(" monthlyRecurrenceDay=").append(monthlyRecurrenceDay); buf.append(" eachDay=").append(eachDay); buf.append(" endTime=").append(endTime); return buf.toString(); } /** * Getter for property eachDay. * * @return Value of property eachDay. */ public java.lang.Integer getEachDay() { return eachDay; } /** * Setter for property eachDay. * * @param eachDay New value of property eachDay. */ public void setEachDay(java.lang.Integer eachDay) { this.eachDay = eachDay; } /** * Getter for property endTime. * * @return Value of property endTime. */ public java.lang.String getEndTime() { return endTime; } /** * Setter for property endTime. Also sets wantEndDate to true if endTime equals END_ON_DATE * * @param endTime New value of property endTime. */ public void setEndTime(java.lang.String endTime) { this.endTime = endTime; setWantEndDate(endTime.equals(END_ON_DATE) ? true : false); } /** * Getter for property numDays. * * @return Value of property numDays. */ public java.lang.String getNumDays() { return numDays; } /** * Setter for property numDays. * * @param numDays New value of property numDays. */ public void setNumDays(java.lang.String numDays) { this.numDays = numDays; } /** * Getter for property numMonths. * * @return Value of property numMonths. */ public java.lang.String getNumMonths() { return numMonths; } /** * Setter for property numMonths. * * @param numMonths New value of property numMonths. */ public void setNumMonths(java.lang.String numMonths) { this.numMonths = numMonths; } /** * Getter for property numWeeks. * * @return Value of property numWeeks. */ public java.lang.String getNumWeeks() { return numWeeks; } /** * Setter for property numWeeks. * * @param numWeeks New value of property numWeeks. */ public void setNumWeeks(java.lang.String numWeeks) { this.numWeeks = numWeeks; } /** * Getter for property recurrenceDay. * * @return Value of property recurrenceDay. */ public java.lang.Integer[] getRecurrenceDay() { return recurrenceDay; } /** * Setter for property recurrenceDay. * * @param recurrenceDay New value of property recurrenceDay. */ public void setRecurrenceDay(java.lang.Integer[] recurrenceDay) { this.recurrenceDay = recurrenceDay; } /** * Getter for property recurrenceFrequencyDaily. * * @return Value of property recurrenceFrequencyDaily. */ public java.lang.String getRecurrenceFrequencyDaily() { return recurrenceFrequencyDaily; } /** * Setter for property recurrenceFrequencyDaily. * * @param recurrenceFrequencyDaily New value of property recurrenceFrequencyDaily. */ public void setRecurrenceFrequencyDaily(java.lang.String recurrenceFrequencyDaily) { this.recurrenceFrequencyDaily = recurrenceFrequencyDaily; } /** * Getter for property recurrenceFrequencyMonthly. * * @return Value of property recurrenceFrequencyMonthly. */ public java.lang.String getRecurrenceFrequencyMonthly() { return recurrenceFrequencyMonthly; } /** * Setter for property recurrenceFrequencyMonthly. * * @param recurrenceFrequencyMonthly New value of property recurrenceFrequencyMonthly. */ public void setRecurrenceFrequencyMonthly(java.lang.String recurrenceFrequencyMonthly) { this.recurrenceFrequencyMonthly = recurrenceFrequencyMonthly; } /** * Getter for property recurrenceWeek. * * @return Value of property recurrenceWeek. */ public java.lang.Integer getRecurrenceWeek() { return recurrenceWeek; } /** * Setter for property recurrenceWeek. * * @param recurrenceWeek New value of property recurrenceWeek. */ public void setRecurrenceWeek(java.lang.Integer recurrenceWeek) { this.recurrenceWeek = recurrenceWeek; } /** * Getter for property recurrenceWeek. * * @return Value of property recurrenceWeek. */ public java.lang.Integer getMonthlyRecurrenceDay() { return monthlyRecurrenceDay; } /** * Setter for property monthlyRecurrenceDay. * * @param monthlyRecurrenceDay New value of property monthlyRecurrenceDay. */ public void setMonthlyRecurrenceDay(java.lang.Integer monthlyRecurrenceDay) { this.monthlyRecurrenceDay = monthlyRecurrenceDay; } /** * Getter for property recurInterval. * * @return Value of property recurInterval. */ public java.lang.String getRecurInterval() { return recurInterval; } /** * Setter for property recurInterval. * * @param recurInterval New value of property recurInterval. */ public void setRecurInterval(java.lang.String recurInterval) { this.recurInterval = recurInterval; } /** * Getter for property startTime. * * @return Value of property startTime. */ public java.lang.String getStartTime() { return startTime; } /** * Setter for property startTime. * * @param now New value of property startTime. */ public void setStartTime(java.lang.String st) { this.startTime = st; } public List<OptionItem> getControlActions() { return controlActions; } public void setControlActions(List<OptionItem> controlActions) { this.controlActions = controlActions; } public Integer getNumControlActions() { return (this.controlActions == null) ? 0 : this.controlActions.size(); } }