/* * Copyright 2010-2012 Amazon Technologies, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://aws.amazon.com/apache2.0 * * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES * OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and * limitations under the License. */ package com.amazonaws.eclipse.elasticbeanstalk.server.ui.databinding; import java.util.regex.Pattern; import org.eclipse.core.databinding.validation.IValidator; import org.eclipse.core.databinding.validation.ValidationStatus; import org.eclipse.core.runtime.IStatus; import com.amazonaws.services.elasticbeanstalk.model.ConfigurationOptionDescription; /** * Validates a text-based config option */ public class ConfigurationSettingValidator implements IValidator { private ConfigurationOptionDescription configOption; public ConfigurationSettingValidator(ConfigurationOptionDescription configOption) { this.configOption = configOption; } public IStatus validate(Object value) { String s = (String) value; if (s == null || s.length() == 0) { return ValidationStatus.ok(); } if ( configOption.getMaxValue() != null ) { try { Integer i = Integer.parseInt(s); if ( i > configOption.getMaxValue() ) { return ValidationStatus.error(configOption.getName() + " must be at most " + configOption.getMaxValue()); } } catch ( NumberFormatException e ) { return ValidationStatus.error(s + " isn't an integer (" + configOption.getNamespace() + ":" + configOption.getName() + ")"); } } if ( configOption.getMinValue() != null ) { try { Integer i = Integer.parseInt(s); if ( i < configOption.getMinValue() ) { return ValidationStatus.error(configOption.getName() + " must be at least " + configOption.getMinValue()); } } catch ( NumberFormatException e ) { return ValidationStatus.error(s + " isn't an integer (" + configOption.getNamespace() + ":" + configOption.getName() + ")"); } } if ( configOption.getMaxLength() != null ) { if ( s.length() > configOption.getMaxLength() ) { return ValidationStatus.error(s + " is too long (max length " + configOption.getMaxLength() + ")"); } } if ( configOption.getRegex() != null && s != null && s.length() > 0 ) { Pattern regex = Pattern.compile(configOption.getRegex().getPattern()); if ( !regex.matcher(s).matches() ) { return ValidationStatus.error(configOption.getName() + " must match the regular expression " + configOption.getRegex().getPattern()); } } return ValidationStatus.ok(); } }