package com.andreiolar.abms.client.widgets;
import java.util.ArrayList;
import java.util.List;
import com.andreiolar.abms.shared.Validator;
import com.google.gwt.user.client.ui.TextBox;
public class CustomTexBox extends TextBox {
private static final String TEXTBOX_VALIDATION_ERROR_STYLE = "error-text-box";
private static final String TEXTBOX_VALIDATION_NO_ERROR = "no-error-text-box";
private String errorMessage = "";
private List<Validator> validators = new ArrayList<Validator>();
@Override
public void setStyleName(String style) {
super.setStyleName(TEXTBOX_VALIDATION_NO_ERROR);
}
public CustomTexBox() {
}
public CustomTexBox(String name) {
setName(name);
}
public String getErrorMessage() {
return errorMessage;
}
public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
}
public void addValidator(Validator validator) {
validators.add(validator);
}
public boolean validate() {
boolean validationResult = true;
for (Validator validator : validators) {
validationResult = validator.validate(getValue().trim());
if (!validationResult) {
errorMessage = validator.getErrorMessage();
break;
}
errorMessage = validator.getErrorMessage();
}
setErrorStyles(validationResult);
return validationResult;
}
public void setErrorStyles(boolean validationResult) {
if (validationResult) {
removeStyleName(TEXTBOX_VALIDATION_ERROR_STYLE);
setTitle("");
} else {
addStyleName(TEXTBOX_VALIDATION_ERROR_STYLE);
setTitle(errorMessage);
}
}
@Override
public void setValue(String s) {
removeStyleDependentName(TEXTBOX_VALIDATION_ERROR_STYLE);
super.setValue(s);
}
@Override
public String getValue() {
return super.getValue().trim();
}
}