package com.amazonaws.eclipse.codedeploy.deploy.wizard.page.validator;
import org.eclipse.core.databinding.validation.IValidator;
import org.eclipse.core.databinding.validation.ValidationStatus;
import org.eclipse.core.runtime.IStatus;
import com.amazonaws.eclipse.codedeploy.appspec.model.AppspecTemplateParameter;
import com.amazonaws.eclipse.codedeploy.appspec.model.AppspecTemplateParameter.ParameterConstraints;
import com.amazonaws.eclipse.codedeploy.appspec.model.AppspecTemplateParameter.ParameterType;
public class GenericTemplateParameterValidator implements IValidator {
private final AppspecTemplateParameter parameterModel;
public GenericTemplateParameterValidator(AppspecTemplateParameter parameterModel) {
this.parameterModel = parameterModel;
}
public AppspecTemplateParameter getParameterModel() {
return parameterModel;
}
public IStatus validate(Object value) {
String input = (String)value;
if (input == null) {
return error("value must not be null.");
}
ParameterConstraints constraints = parameterModel.getConstraints();
if (parameterModel.getType() == ParameterType.STRING) {
String stringRegex = constraints.getValidationRegex();
if (stringRegex != null && !input.matches(stringRegex)) {
return error("value doesn't match regex \"" + stringRegex + "\"");
}
} else if (parameterModel.getType() == ParameterType.INTEGER) {
try {
int intValue = Integer.parseInt(input.trim());
if (constraints.getMinValue() != null && intValue < constraints.getMinValue()) {
return error("minimum is " + constraints.getMinValue());
}
if (constraints.getMaxValue() != null && intValue > constraints.getMaxValue()) {
return error("maximum is " + constraints.getMaxValue());
}
} catch (NumberFormatException e) {
return error("a number is expected");
}
}
return ValidationStatus.ok();
}
private IStatus error(String message) {
return ValidationStatus.error(String.format("Invalid value for %s (%s)",
parameterModel.getSubstitutionAnchorText(), message));
}
}