/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.wps.validator; import org.hsqldb.lib.Collection; import org.springframework.validation.Errors; /** * Check there are not too many instances of the input * * @author Andrea Aime - GeoSolutions */ public class MultiplicityValidator implements WPSInputValidator { private static final long serialVersionUID = 6088321363424263041L; static final String CODE = "TooManyValues"; int maxInstances; public MultiplicityValidator(int maxInstances) { this.maxInstances = maxInstances; } @Override public boolean supports(Class<?> clazz) { return Collection.class.isAssignableFrom(clazz); } @Override public void validate(Object target, Errors errors) { if (target instanceof Collection && maxInstances > 0) { int size = ((Collection) target).size(); if (size > maxInstances) { errors.reject(CODE, "Input has been provided in too many values, found " + size + " but the maximum accepted amount is " + maxInstances); } } } public int getMaxInstances() { return maxInstances; } public void setMaxInstances(int maxInstancens) { this.maxInstances = maxInstancens; } @Override public String toString() { return "MultiplicityValidator [maxInstancens=" + maxInstances + "]"; } @Override public WPSInputValidator copy() { return new MultiplicityValidator(maxInstances); } @Override public boolean isUnset() { return maxInstances > 0; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + maxInstances; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; MultiplicityValidator other = (MultiplicityValidator) obj; if (maxInstances != other.maxInstances) return false; return true; } }