Sample Validators

These examples of validators use the NumberFormat.getInstance() method to retrieve a formatter. Each validator also makes sure that the field being validated has been filled.

To validate a string as a number

FORMATTEDNUMBERVALIDATOR.JAVA

package com.interactive.intviewer.util.validators;
import java.text.NumberFormat;
import java.text.ParsePosition;
import org.netbeans.validation.api.Problems;
import org.netbeans.validation.api.Validator;
public class FormattedNumberValidator implements Validator<String> {
    public FormattedNumberValidator() {
    }
    @Override
    public boolean validate(Problems problems, String compName, String model) {
        if ((model != null) && (model.length() > 0)) {
            NumberFormat numberFormat1 = NumberFormat.getInstance();
            ParsePosition position = new ParsePosition(0);
            numberFormat1.parseObject(model, position);
            if (position.getIndex() < model.length()) {
                problems.add("'" + model + "' is not a number");
                return false;
            } else {
                return true;
            }
        } else {
            return true; // should be handled by another validator
        }
    }
}

To validate a string as an integer

FORMATTEDINTEGERVALIDATOR.JAVA

package com.interactive.intviewer.util.validators;
import java.text.NumberFormat;
import java.text.ParseException;
import java.text.ParsePosition;
import org.netbeans.validation.api.Problems;
import org.netbeans.validation.api.Validator;
public class FormattedIntegerValidator implements Validator<String> {
    public FormattedIntegerValidator() {
    }
    @Override
    public boolean validate(Problems problems, String compName, String model) {
        if ((model != null) && (model.length() > 0)) {
            NumberFormat numberFormat1 = NumberFormat.getInstance();
            ParsePosition position = new ParsePosition(0);
            Object result = numberFormat1.parseObject(model, position);
            if (position.getIndex() < model.length()) {
                problems.add("'" + model + "' is not an integer");
                return false;
            } else {
                try {
                    String resultString = result.toString();
                    Integer.parseInt(resultString);
                    return true;
                } catch (NumberFormatException ex2) {
                    problems.add("'" + model + "' is not an integer");
                    return false;
                }
            }
        } else {
            return true; // should be handled by another validator
        }
    }
}

To validate a string as a number within a range

FORMATTEDNUMBERRANGEVALIDATOR.JAVA

package com.interactive.intviewer.util.validators;
import com.interactive.intviewer.util.NumberUtils;
import java.text.NumberFormat;
import java.text.ParseException;
import org.netbeans.validation.api.Problems;
import org.netbeans.validation.api.Validator;
public class FormattedNumberRangeValidator implements Validator<String> {
    private Number max;
    private Number min;
    public FormattedNumberRangeValidator(Number min, Number max) {
        this.min = min;
        this.max = max;
    }
    @Override
    public boolean validate(Problems problems, String compName, String model) {
        if ((model != null) && (model.length() > 0)) {
            NumberFormat formatter = NumberFormat.getInstance();
            try {
                Number val = formatter.parse(model);
                double minn = min.doubleValue();
                double maxx = max.doubleValue();
                boolean result = val.doubleValue() >= minn && val.doubleValue() <= maxx;
                if (!result) {
                    NumberFormat formatterMin = NumberUtils.getDoubleNumberFormat(minn);
                    NumberFormat formatterMax = NumberUtils.getDoubleNumberFormat(maxx);
                    problems.add(compName + " must be between " + formatterMin.format(minn) + " and " + formatterMax.format(maxx));
                }
                return result;
            } catch (ParseException ex) {
                return true; //should be handled by another validator
            }
        } else {
            return true; //should be handled by another validator
        }
    }
}

To validate a string as a number greater than another number entered in a different field

FORMATTEDBOUNDARIESVALIDATOR.JAVA

package com.interactive.intviewer.util.validators;
import java.text.NumberFormat;
import java.text.ParseException;
import javax.swing.JTextField;
import org.netbeans.validation.api.Problems;
import org.netbeans.validation.api.Validator;
public class FormattedBoundariesValidator implements Validator<String> {
    private JTextField lowerBoundaryField;
    public FormattedBoundariesValidator(JTextField lowerBoundaryField) {
        this.lowerBoundaryField = lowerBoundaryField;
    }
    @Override
    public boolean validate(Problems problems, String compName, String model) {
        if ((model != null) && (model.length() > 0)) {
            NumberFormat formatter = NumberFormat.getInstance();
            try {
                double lowerBoundary = formatter.parse(lowerBoundaryField.getText()).doubleValue();
                double upperBoundary = formatter.parse(model).doubleValue();
                if (upperBoundary < lowerBoundary) {
                    String message = compName + " must be greater than " + lowerBoundaryField.getName();
                    problems.add(message);
                    return false;
                } else {
                    return true;
                }
            } catch (ParseException ex) {
                return true; // should be taken care of by another validator
            }
        } else {
            return true; // should be taken care of by another validator
        }
    }
}