/* * Hibernate Validator, declare and validate application constraints * * License: Apache License, Version 2.0 * See the license.txt file in the root directory or <http://www.apache.org/licenses/LICENSE-2.0>. */ package org.hibernate.validator; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; import java.util.PropertyResourceBundle; import java.util.ResourceBundle; import org.hibernate.validator.internal.util.logging.Log; import org.hibernate.validator.internal.util.logging.LoggerFactory; /** * Allows us to proxy the Hibernate Validator built-in {@code ValidationMessages.properties}. * This way parts of the message interpolation algorithm becomes testable. * * @author Hardy Ferentschik */ public class ValidationMessages extends ResourceBundle { private static final Log log = LoggerFactory.make(); private static final String DEFAULT_PROPERTIES_FILE_NAME = "/org/hibernate/validator/ValidationMessages.properties"; private Map<String, String> messages = new HashMap<String, String>(); public ValidationMessages() throws Exception { log.info( "For test purposes are we proxying the built-in messages!" ); addTestPropertiesToBundle(); log.infof( "Adding the following properties to default properties %s", messages ); loadDefaultValidationProperties(); } private void addTestPropertiesToBundle() { // see ResourceBundleMessageInterpolatorTest#testRecursiveMessageInterpolation messages.put( "replace.in.default.bundle1", "{replace.in.default.bundle2}" ); messages.put( "replace.in.default.bundle2", "foobar" ); } private void loadDefaultValidationProperties() throws IOException { InputStream in = this.getClass() .getResourceAsStream( DEFAULT_PROPERTIES_FILE_NAME ); PropertyResourceBundle propertyBundle = new PropertyResourceBundle( in ); setParent( propertyBundle ); } @Override protected Object handleGetObject(String key) { return messages.get( key ); } @Override public Enumeration<String> getKeys() { throw new RuntimeException( "Not needed for testing purposes." ); } }