package edu.ualberta.med.biobank.mvp.view.item;
import org.eclipse.jface.fieldassist.ControlDecoration;
import org.eclipse.jface.fieldassist.FieldDecoration;
import org.eclipse.jface.fieldassist.FieldDecorationRegistry;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Control;
import com.pietschy.gwt.pectin.client.form.validation.Severity;
import com.pietschy.gwt.pectin.client.form.validation.ValidationResult;
import com.pietschy.gwt.pectin.client.form.validation.component.ValidationDisplay;
import com.pietschy.gwt.pectin.client.form.validation.message.ValidationMessage;
public class AbstractValidationField extends AbstractControlField
implements ValidationDisplay {
private static final FieldDecoration ERROR_FIELD_DECORATION =
FieldDecorationRegistry.getDefault()
.getFieldDecoration(FieldDecorationRegistry.DEC_ERROR);
private ValidationResult validationResult;
private ControlDecoration controlDecoration;
public void setValidationControl(Control control) {
disposeOldControlDecoration();
controlDecoration = createControlDecoration(control);
updateControlDecoration();
}
@Override
public void setValidationResult(ValidationResult result) {
validationResult = result;
updateControlDecoration();
}
private void disposeOldControlDecoration() {
if (controlDecoration != null) {
controlDecoration.dispose();
}
}
private void updateControlDecoration() {
if (controlDecoration != null) {
if (validationResult != null
&& validationResult.contains(Severity.ERROR)) {
controlDecoration.setDescriptionText(getDescriptionText());
controlDecoration.show();
} else {
controlDecoration.hide();
}
}
}
private String getDescriptionText() {
ValidationMessage message = validationResult
.getMessages(Severity.ERROR).iterator().next();
return message.getMessage();
}
private ControlDecoration createControlDecoration(Control control) {
ControlDecoration controlDecoration = new ControlDecoration(control,
SWT.RIGHT | SWT.TOP);
controlDecoration.setImage(ERROR_FIELD_DECORATION.getImage());
return controlDecoration;
}
}