Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * JBoss, Home of Professional Open Source
   * Copyright 2010, Red Hat, Inc. and/or its affiliates, and individual contributors
   * by the @authors tag. See the copyright.txt in the distribution for a
   * full listing of individual contributors.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
  * http://www.apache.org/licenses/LICENSE-2.0
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 package org.hibernate.validator.messageinterpolation;
 
 
A message interpolator which can interpolate the validated value and format this value using the syntax from java.util.Formatter. Check the Formatter documentation for formatting syntax and options. If no formatting string is specified String.valueOf(validatedValue)} is called.

To interpolate the validated value add {validatedValue} into the message. To specify a format pattern use ${validatedValue:[format string]}, e.g. ${validatedValue:%1$ty}.

Author(s):
Hardy Ferentschik
 
 	private static final Log log = LoggerFactory.make();
 
 	public static final String VALIDATED_VALUE_KEYWORD = "validatedValue";
 	public static final String VALIDATED_VALUE_FORMAT_SEPARATOR = ":";
 
 	private static final Pattern VALIDATED_VALUE_START_PATTERN = Pattern.compile"\\$\\{" +  );
 	private final MessageInterpolator delegate;
 	private final Locale defaultLocale;
 
 		thisnull );
 	}
 
 	public ValueFormatterMessageInterpolator(MessageInterpolator userMessageInterpolator) {
 		 = Locale.getDefault();
 		if ( userMessageInterpolator == null ) {
 		}
 		else {
 			this. = userMessageInterpolator;
 		}
 	}
 
 	public String interpolate(String messageContext context) {
 		return interpolatemessagecontext );
 	}
 
 	public String interpolate(String messageContext contextLocale locale) {
 		String tmp = .interpolatemessagecontextlocale );
 		return interpolateMessagetmpcontext.getValidatedValue(), locale );
 	}

Interpolate the validated value in the given message.

Parameters:
message the message where validated value have to be interpolated
validatedValue the value of the object being validated
locale the Locale to use for message interpolation
Returns:
the interpolated message
 
 	private String interpolateMessage(String messageObject validatedValueLocale locale) {
 		String interpolatedMessage = message;
 		Matcher matcher = .matchermessage );
 
 		while ( matcher.find() ) {
 			int nbOpenCurlyBrace = 1;
 			boolean isDoubleQuoteBloc = false;
 			boolean isSimpleQuoteBloc = false;
 			int lastIndex = matcher.end();
 
 			do {
 				char current = message.charAtlastIndex );
 
 				if ( current == '\'' ) {
 					if ( !isDoubleQuoteBloc && !isEscapedmessagelastIndex ) ) {
 						isSimpleQuoteBloc = !isSimpleQuoteBloc;
 					}
 				}
 				else if ( current == '"' ) {
 					if ( !isSimpleQuoteBloc && !isEscapedmessagelastIndex ) ) {
						isDoubleQuoteBloc = !isDoubleQuoteBloc;
					}
				}
				else if ( !isDoubleQuoteBloc && !isSimpleQuoteBloc ) {
					if ( current == '{' ) {
						nbOpenCurlyBrace++;
					}
					else if ( current == '}' ) {
						nbOpenCurlyBrace--;
					}
				}
				lastIndex++;
while ( nbOpenCurlyBrace > 0 && lastIndex < message.length() );
			// The validated value expression seems correct
			if ( nbOpenCurlyBrace == 0 ) {
				String expression = message.substringmatcher.start(), lastIndex );
				String expressionValue = interpolateValidatedValueexpressionvalidatedValuelocale );
				interpolatedMessage = interpolatedMessage.replaceFirst(
						Pattern.quoteexpression ), Matcher.quoteReplacementexpressionValue )
				);
			}
		}
		return interpolatedMessage;
	}

Returns if the character at the given index in the String is an escaped character (preceded by a backslash character).

Parameters:
enclosingString the string which contain the given character
charIndex the index of the character
Returns:
true if the given character is escaped false otherwise
	private boolean isEscaped(String enclosingStringint charIndex) {
		if ( charIndex < 0 || charIndex > enclosingString.length() ) {
			throw .getInvalidIndexException"0""enclosingString.length() - 1" );
		}
		return charIndex > 0 && enclosingString.charAtcharIndex - 1 ) == '\\';
	}

Returns the value of the interpolated validated value.

Parameters:
expression the expression to interpolate
validatedValue the value of the object being validated
locale the Locale to be used
Returns:
the interpolated value
	private String interpolateValidatedValue(String expressionObject validatedValueLocale locale) {
		String interpolatedValue;
		int separatorIndex = expression.indexOf );
		if ( separatorIndex == -1 ) {
			interpolatedValue = String.valueOfvalidatedValue );
		}
		else {
			String format = expression.substringseparatorIndex + 1, expression.length() - 1 );
			if ( format.length() == 0 ) {
			}
			try {
				interpolatedValue = String.formatlocaleformatvalidatedValue );
			}
			catch ( IllegalFormatException e ) {
				throw .throwInvalidFormate.getMessage(), e );
			}
		}
		return interpolatedValue;
	}
New to GrepCode? Check out our FAQ X