    001// Copyright 2007, 2008, 2012, 2014 The Apache Software Foundation
    002//
    003// Licensed under the Apache License, Version 2.0 (the "License");
    004// you may not use this file except in compliance with the License.
    005// You may obtain a copy of the License at
    006//
    007//     http://www.apache.org/licenses/LICENSE-2.0
    008//
    009// Unless required by applicable law or agreed to in writing, software
    010// distributed under the License is distributed on an "AS IS" BASIS,
    011// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    012// See the License for the specific language governing permissions and
    013// limitations under the License.
    014
    015package org.apache.tapestry5.validator;
    016
    017import org.apache.tapestry5.Field;
    018import org.apache.tapestry5.MarkupWriter;
    019import org.apache.tapestry5.ValidationException;
    020import org.apache.tapestry5.commons.MessageFormatter;
    021import org.apache.tapestry5.services.FormSupport;
    022import org.apache.tapestry5.services.Html5Support;
    023import org.apache.tapestry5.services.javascript.DataConstants;
    024import org.apache.tapestry5.services.javascript.JavaScriptSupport;
    025
    026/* A vaidator that enforces that a number is greater than some minimum integer value. */
    027public class Min extends AbstractValidator<Long, Number>
    028{
    029    final private Html5Support html5Support;
    030
    031    public Min(JavaScriptSupport javaScriptSupport, Html5Support html5Support)
    032    {
    033        super(Long.class, Number.class, "min-integer", javaScriptSupport);
    034        this.html5Support = html5Support;
    035    }
    036
    037    public void validate(Field field, Long constraintValue, MessageFormatter formatter, Number value)
    038            throws ValidationException
    039    {
    040        if (value.longValue() < constraintValue)
    041            throw new ValidationException(buildMessage(formatter, field, constraintValue));
    042    }
    043
    044    private String buildMessage(MessageFormatter formatter, Field field, Long constraintValue)
    045    {
    046        return formatter.format(constraintValue, field.getLabel());
    047    }
    048
    049    public void render(Field field, Long constraintValue, MessageFormatter formatter, MarkupWriter writer,
    050                       FormSupport formSupport)
    051    {
    052        if (formSupport.isClientValidationEnabled())
    053        {
    054            javaScriptSupport.require("t5/core/validation");
    055            writer.attributes(DataConstants.VALIDATION_ATTRIBUTE, true,
    056                    "data-validate-min", constraintValue.toString(),
    057                    "data-min-message", buildMessage(formatter, field, constraintValue));
    058        }
    059        if (html5Support.isHtml5SupportEnabled())
    060        {
    061            writer.getElement().forceAttributes("type", "number", "min", String.valueOf(constraintValue));
    062        }
    063    }
    064}