Comment 2 for bug 475446

Revision history for this message
dirk (australiandeveloper) wrote :

I created a new validation annotation for checking the size of a file that may be useful. It is used like this:

{{{#!java
    public static void updatePicture(Long userId,
            @FileMaxSize(Config.PROFILE_MAX_SIZE_BYTES) File picture) {
        ...
    }
}}}

The code for the annotation and supporting check class is:

{{{#!java
package play.data.validation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import net.sf.oval.configuration.annotation.Constraint;

/**
 * This field size must be lower than.
 * Message key: validation.maxSize
 * $1: field name
 * $2: reference value
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Constraint(checkWith = MaxSizeCheck.class)
public @interface MaxSize {

    String message() default MaxSizeCheck.mes;
    int value();
}

package play.data.validation;

import java.util.HashMap;
import java.util.Map;
import net.sf.oval.Validator;
import net.sf.oval.configuration.annotation.AbstractAnnotationCheck;
import net.sf.oval.context.OValContext;

public class MaxSizeCheck extends AbstractAnnotationCheck<MaxSize> {

    final static String mes = "validation.maxSize";

    int maxSize;

    @Override
    public void configure(MaxSize annotation) {
        this.maxSize = annotation.value();
        setMessage(annotation.message());
    }

    public boolean isSatisfied(Object validatedObject, Object value, OValContext context, Validator validator) {
        requireMessageVariablesRecreation();
        if (value == null || value.toString().length() == 0) {
            return true;
        }
        return value.toString().length() <= maxSize;
    }

    @Override
    public Map<String, String> createMessageVariables() {
        Map<String, String> messageVariables = new HashMap();
        messageVariables.put("maxSize", Integer.toString(maxSize));
        return messageVariables;
    }

}
}}}