/*!
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* 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 Lesser General Public License for more details.
*
* Copyright (c) 2002-2013 Pentaho Corporation.. All rights reserved.
*/
package org.pentaho.mantle.client.dialogs.scheduling.validators;
import org.pentaho.gwt.widgets.client.utils.StringUtils;
import org.pentaho.gwt.widgets.client.utils.TimeUtil;
import org.pentaho.mantle.client.dialogs.scheduling.RecurrenceEditor;
import org.pentaho.mantle.client.dialogs.scheduling.RecurrenceEditor.DailyRecurrenceEditor;
import org.pentaho.mantle.client.dialogs.scheduling.RecurrenceEditor.HourlyRecurrenceEditor;
import org.pentaho.mantle.client.dialogs.scheduling.RecurrenceEditor.MinutelyRecurrenceEditor;
import org.pentaho.mantle.client.dialogs.scheduling.RecurrenceEditor.MonthlyRecurrenceEditor;
import org.pentaho.mantle.client.dialogs.scheduling.RecurrenceEditor.SecondlyRecurrenceEditor;
import org.pentaho.mantle.client.dialogs.scheduling.RecurrenceEditor.WeeklyRecurrenceEditor;
import org.pentaho.mantle.client.dialogs.scheduling.RecurrenceEditor.YearlyRecurrenceEditor;
/**
*
* @author Steven Barkdull
*
*/
@SuppressWarnings( "deprecation" )
public class RecurrenceEditorValidator implements IUiValidator {
private RecurrenceEditor recurrenceEditor = null;
private DateRangeEditorValidator dateRangeEditorValidator = null;
public RecurrenceEditorValidator( RecurrenceEditor recurrenceEditor ) {
this.recurrenceEditor = recurrenceEditor;
this.dateRangeEditorValidator = new DateRangeEditorValidator( recurrenceEditor.getDateRangeEditor() );
}
public boolean isValid() {
boolean isValid = true;
switch ( recurrenceEditor.getTemporalState() ) {
case SECONDS:
SecondlyRecurrenceEditor sEd = recurrenceEditor.getSecondlyEditor();
String seconds = sEd.getValue();
if ( !StringUtils.isPositiveInteger( seconds ) || ( Integer.parseInt( seconds ) <= 0 ) ) {
isValid = false;
}
if ( Integer.parseInt( seconds ) > TimeUtil.MAX_SECOND_BY_MILLISEC ) {
isValid = false;
}
break;
case MINUTES:
MinutelyRecurrenceEditor mEd = recurrenceEditor.getMinutelyEditor();
String minutes = mEd.getValue();
if ( !StringUtils.isPositiveInteger( minutes ) || ( Integer.parseInt( minutes ) <= 0 ) ) {
isValid = false;
}
if ( Integer.parseInt( minutes ) > TimeUtil.MAX_MINUTE_BY_MILLISEC ) {
isValid = false;
}
break;
case HOURS:
HourlyRecurrenceEditor hEd = recurrenceEditor.getHourlyEditor();
String hours = hEd.getValue();
if ( !StringUtils.isPositiveInteger( hours ) || ( Integer.parseInt( hours ) <= 0 ) ) {
isValid = false;
}
if ( Integer.parseInt( hours ) > TimeUtil.MAX_HOUR_BY_MILLISEC ) {
isValid = false;
}
break;
case DAILY:
DailyRecurrenceEditor dEd = recurrenceEditor.getDailyEditor();
if ( dEd.isEveryNDays() ) {
String days = dEd.getRepeatValue();
if ( !StringUtils.isPositiveInteger( days ) || ( Integer.parseInt( days ) <= 0 ) ) {
isValid = false;
}
}
break;
case WEEKLY:
WeeklyRecurrenceEditor wEd = recurrenceEditor.getWeeklyEditor();
if ( wEd.getNumCheckedDays() < 1 ) {
isValid = false;
}
break;
case MONTHLY:
MonthlyRecurrenceEditor monthlyEd = recurrenceEditor.getMonthlyEditor();
if ( monthlyEd.isDayNOfMonth() ) {
String dayNOfMonth = monthlyEd.getDayOfMonth();
if ( !StringUtils.isPositiveInteger( dayNOfMonth )
|| !TimeUtil.isDayOfMonth( Integer.parseInt( dayNOfMonth ) ) ) {
isValid = false;
}
}
break;
case YEARLY:
YearlyRecurrenceEditor yearlyEd = recurrenceEditor.getYearlyEditor();
if ( yearlyEd.isEveryMonthOnNthDay() ) {
String dayNOfMonth = yearlyEd.getDayOfMonth();
if ( !StringUtils.isPositiveInteger( dayNOfMonth )
|| !TimeUtil.isDayOfMonth( Integer.parseInt( dayNOfMonth ) ) ) {
isValid = false;
}
}
break;
default:
}
isValid &= dateRangeEditorValidator.isValid();
return isValid;
}
public void clear() {
recurrenceEditor.getSecondlyEditor().setValueError( null );
recurrenceEditor.getMinutelyEditor().setValueError( null );
recurrenceEditor.getHourlyEditor().setValueError( null );
recurrenceEditor.getDailyEditor().setRepeatError( null );
recurrenceEditor.getWeeklyEditor().setEveryDayOnError( null );
recurrenceEditor.getMonthlyEditor().setDayNOfMonthError( null );
recurrenceEditor.getYearlyEditor().setDayOfMonthError( null );
dateRangeEditorValidator.clear();
}
}