package es.icarto.gvsig.navtableforms;
import java.util.HashMap;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFormattedTextField;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import com.toedter.calendar.JDateChooser;
import es.icarto.gvsig.navtableforms.ormlite.ORMLite;
import es.icarto.gvsig.navtableforms.ormlite.domainvalidator.ValidatorComponent;
import es.icarto.gvsig.navtableforms.ormlite.domainvalidator.ValidatorDomain;
import es.icarto.gvsig.navtableforms.ormlite.domainvalidator.ValidatorForm;
import es.icarto.gvsig.navtableforms.ormlite.domainvalidator.listeners.ValidationHandlerForCheckBoxes;
import es.icarto.gvsig.navtableforms.ormlite.domainvalidator.listeners.ValidationHandlerForComboBoxes;
import es.icarto.gvsig.navtableforms.ormlite.domainvalidator.listeners.ValidationHandlerForFormattedTextFields;
import es.icarto.gvsig.navtableforms.ormlite.domainvalidator.listeners.ValidationHandlerForJDateChooser;
import es.icarto.gvsig.navtableforms.ormlite.domainvalidator.listeners.ValidationHandlerForTextAreas;
import es.icarto.gvsig.navtableforms.ormlite.domainvalidator.listeners.ValidationHandlerForTextFields;
public class ValidationHandler {
private ORMLite ormlite;
private ValidatorForm validatorForm;
private ValidationHandlerForFormattedTextFields validationHandlerForFormattedTextFields;
private ValidationHandlerForTextFields validationHandlerForTextFields;
private ValidationHandlerForComboBoxes validationHandlerForComboBoxes;
private ValidationHandlerForCheckBoxes validationHandlerForCheckBoxes;
private ValidationHandlerForTextAreas validationHandlerForTextAreas;
private ValidationHandlerForJDateChooser validationHandlerForJDateChooser;
private IValidatableForm validatableForm;
public ValidationHandler(ORMLite ormLite, IValidatableForm validatableForm) {
this.ormlite = ormLite;
this.validatableForm = validatableForm;
initValidation();
}
private void initValidation() {
validatorForm = new ValidatorForm();
validationHandlerForFormattedTextFields = new ValidationHandlerForFormattedTextFields(
validatableForm);
validationHandlerForTextFields = new ValidationHandlerForTextFields(
validatableForm);
validationHandlerForComboBoxes = new ValidationHandlerForComboBoxes(
validatableForm);
validationHandlerForCheckBoxes = new ValidationHandlerForCheckBoxes(
validatableForm);
validationHandlerForTextAreas = new ValidationHandlerForTextAreas(
validatableForm);
validationHandlerForJDateChooser = new ValidationHandlerForJDateChooser(validatableForm);
}
public void removeListeners(HashMap<String, JComponent> widgets) {
for (JComponent c : widgets.values()) {
if (c instanceof JFormattedTextField) {
((JFormattedTextField) c)
.removeKeyListener(validationHandlerForFormattedTextFields);
((JFormattedTextField) c)
.removeFocusListener(validationHandlerForFormattedTextFields);
} else if (c instanceof JTextField) {
((JTextField) c)
.removeKeyListener(validationHandlerForTextFields);
((JTextField) c)
.removeFocusListener(validationHandlerForTextFields);
} else if (c instanceof JComboBox) {
((JComboBox) c)
.removeActionListener(validationHandlerForComboBoxes);
} else if (c instanceof JCheckBox) {
((JCheckBox) c)
.removeActionListener(validationHandlerForCheckBoxes);
} else if (c instanceof JTextArea) {
((JTextArea) c)
.removeKeyListener(validationHandlerForTextAreas);
} else if (c instanceof JDateChooser) {
((JDateChooser) c).removePropertyChangeListener("date", validationHandlerForJDateChooser);
}
}
}
public void setListeners(HashMap<String, JComponent> widgets) {
for (JComponent c : widgets.values()) {
if (c instanceof JFormattedTextField) {
((JFormattedTextField) c)
.addKeyListener(validationHandlerForFormattedTextFields);
((JFormattedTextField) c)
.addFocusListener(validationHandlerForFormattedTextFields);
ValidatorDomain dv = ormlite.getAppDomain()
.getDomainValidatorForComponent(c.getName());
if (dv != null) {
ValidatorComponent cv = new ValidatorComponent(c, dv);
validatorForm.addComponentValidator(cv);
}
} else if (c instanceof JTextField) {
((JTextField) c)
.addKeyListener(validationHandlerForTextFields);
((JTextField) c)
.addFocusListener(validationHandlerForTextFields);
ValidatorDomain dv = ormlite.getAppDomain()
.getDomainValidatorForComponent(c.getName());
if (dv != null) {
ValidatorComponent cv = new ValidatorComponent(c, dv);
validatorForm.addComponentValidator(cv);
}
} else if (c instanceof JComboBox) {
((JComboBox) c)
.addActionListener(validationHandlerForComboBoxes);
ValidatorDomain dv = ormlite.getAppDomain()
.getDomainValidatorForComponent(c.getName());
if (dv != null) {
ValidatorComponent cv = new ValidatorComponent(c, dv);
validatorForm.addComponentValidator(cv);
}
} else if (c instanceof JCheckBox) {
((JCheckBox) c)
.addActionListener(validationHandlerForCheckBoxes);
} else if (c instanceof JTextArea) {
((JTextArea) c)
.addKeyListener(validationHandlerForTextAreas);
} else if (c instanceof JDateChooser) {
((JDateChooser) c).addPropertyChangeListener("date", validationHandlerForJDateChooser);
ValidatorDomain dv = ormlite.getAppDomain()
.getDomainValidatorForComponent(c.getName());
if (dv != null) {
ValidatorComponent cv = new ValidatorComponent(c, dv);
validatorForm.addComponentValidator(cv);
}
}
}
}
public boolean hasValidationErrors() {
return validatorForm.hasValidationErrors();
}
public String getMessages() {
return validatorForm.getMessages();
}
public void validate() {
validatorForm.validate();
}
public ValidatorForm getValidatorForm() {
return validatorForm;
}
}