/*
* 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." );
}
}