Uploaded image for project: 'Tapestry 5'
  1. Tapestry 5
  2. TAP5-1947

BigDecimal Validator

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Minor
    • Resolution: Incomplete
    • 5.3.3
    • None
    • tapestry-core

    Description

      Tapestry should offer the ability to validate BigDecimal max length's for currency/amounts. I'm donating the following code which validates maxScale and maxPrecision. Unfortunately, I haven't written anything to handle the clientside validation.

      //app.properties

      maximum-precision=You may provide at most %d numbers for %s.
      maximum-scale=You may provide at most %d decimal digits for %s.

      //MaxScale

      public class MaxScale extends AbstractValidator<Integer, BigDecimal> {

      public MaxScale()

      { super(Integer.class, BigDecimal.class, "maximum-scale"); }

      @Override
      public void validate(Field field, Integer constraintValue, MessageFormatter formatter, BigDecimal value)
      throws ValidationException

      { if (value.scale() > constraintValue) throw new ValidationException(buildMessage(formatter, field, constraintValue)); }

      private String buildMessage(MessageFormatter formatter, Field field, Integer constraintValue)

      { return formatter.format(constraintValue, field.getLabel()); }

      @Override
      public void render(Field field, Integer constraintValue, MessageFormatter formatter, MarkupWriter writer,
      FormSupport formSupport) { formSupport.addValidation(field, "maxscale", buildMessage(formatter, field, constraintValue), constraintValue); }

      }

      //MaxPrecision

      public class MaxPrecision extends AbstractValidator<Integer, BigDecimal> {

      public MaxPrecision() { super(Integer.class, BigDecimal.class, "maximum-precision"); }

      @Override
      public void validate(Field field, Integer constraintValue, MessageFormatter formatter, BigDecimal value)
      throws ValidationException
      { if (value.precision() > constraintValue) throw new ValidationException(buildMessage(formatter, field, constraintValue)); }

      private String buildMessage(MessageFormatter formatter, Field field, Integer constraintValue) { return formatter.format(constraintValue, field.getLabel()); }

      @Override
      public void render(Field field, Integer constraintValue, MessageFormatter formatter, MarkupWriter writer,
      FormSupport formSupport)

      { formSupport.addValidation(field, "maxprecision", buildMessage(formatter, field, constraintValue), constraintValue); }

      }

      //AppModule

      @SuppressWarnings("rawtypes")
      public static void contributeFieldValidatorSource(MappedConfiguration<String, Validator> configuration)

      { configuration.add("maxScale", new MaxScale()); configuration.add("maxPrecision", new MaxPrecision()); }

      Attachments

        Activity

          People

            Unassigned Unassigned
            gchristman George Christman
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: