001    // Copyright 2006, 2007, 2008 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    
015    package org.apache.tapestry5.validator;
016    
017    import org.apache.tapestry5.Field;
018    import org.apache.tapestry5.MarkupWriter;
019    import org.apache.tapestry5.ValidationException;
020    import org.apache.tapestry5.ioc.MessageFormatter;
021    import org.apache.tapestry5.ioc.internal.util.InternalUtils;
022    import org.apache.tapestry5.services.FormSupport;
023    
024    /**
025     * A validator that enforces that the value is not null and not the empty string. This validator is not configurable.
026     */
027    public final class Required extends AbstractValidator<Void, Object>
028    {
029        public Required()
030        {
031            super(null, Object.class, "required");
032        }
033    
034        public void validate(Field field, Void constraintValue, MessageFormatter formatter, Object value)
035                throws ValidationException
036        {
037            if (value == null || InternalUtils.isEmptyCollection(value) || InternalUtils.isBlank(value.toString()))
038                throw new ValidationException(buildMessage(formatter, field));
039        }
040    
041        private String buildMessage(MessageFormatter formatter, Field field)
042        {
043            return formatter.format(field.getLabel());
044        }
045    
046        /**
047         * The exception to the rule.
048         */
049        public boolean isRequired()
050        {
051            return true;
052        }
053    
054        public void render(Field field, Void constraintValue, MessageFormatter formatter, MarkupWriter writer,
055                           FormSupport formSupport)
056        {
057            formSupport.addValidation(field, "required", buildMessage(formatter, field), null);
058        }
059    }