/*
 * Copyright 2002-2018 the original author or authors.
 *
 * 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.springframework.context.support;

import java.io.Serializable;

import org.springframework.context.MessageSourceResolvable;
import org.springframework.lang.Nullable;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;

Spring's default implementation of the MessageSourceResolvable interface. Offers an easy way to store all the necessary values needed to resolve a message via a MessageSource.
Author:Juergen Hoeller
See Also:
Since:13.02.2004
/** * Spring's default implementation of the {@link MessageSourceResolvable} interface. * Offers an easy way to store all the necessary values needed to resolve * a message via a {@link org.springframework.context.MessageSource}. * * @author Juergen Hoeller * @since 13.02.2004 * @see org.springframework.context.MessageSource#getMessage(MessageSourceResolvable, java.util.Locale) */
@SuppressWarnings("serial") public class DefaultMessageSourceResolvable implements MessageSourceResolvable, Serializable { @Nullable private final String[] codes; @Nullable private final Object[] arguments; @Nullable private final String defaultMessage;
Create a new DefaultMessageSourceResolvable.
Params:
  • code – the code to be used to resolve this message
/** * Create a new DefaultMessageSourceResolvable. * @param code the code to be used to resolve this message */
public DefaultMessageSourceResolvable(String code) { this(new String[] {code}, null, null); }
Create a new DefaultMessageSourceResolvable.
Params:
  • codes – the codes to be used to resolve this message
/** * Create a new DefaultMessageSourceResolvable. * @param codes the codes to be used to resolve this message */
public DefaultMessageSourceResolvable(String[] codes) { this(codes, null, null); }
Create a new DefaultMessageSourceResolvable.
Params:
  • codes – the codes to be used to resolve this message
  • defaultMessage – the default message to be used to resolve this message
/** * Create a new DefaultMessageSourceResolvable. * @param codes the codes to be used to resolve this message * @param defaultMessage the default message to be used to resolve this message */
public DefaultMessageSourceResolvable(String[] codes, String defaultMessage) { this(codes, null, defaultMessage); }
Create a new DefaultMessageSourceResolvable.
Params:
  • codes – the codes to be used to resolve this message
  • arguments – the array of arguments to be used to resolve this message
/** * Create a new DefaultMessageSourceResolvable. * @param codes the codes to be used to resolve this message * @param arguments the array of arguments to be used to resolve this message */
public DefaultMessageSourceResolvable(String[] codes, Object[] arguments) { this(codes, arguments, null); }
Create a new DefaultMessageSourceResolvable.
Params:
  • codes – the codes to be used to resolve this message
  • arguments – the array of arguments to be used to resolve this message
  • defaultMessage – the default message to be used to resolve this message
/** * Create a new DefaultMessageSourceResolvable. * @param codes the codes to be used to resolve this message * @param arguments the array of arguments to be used to resolve this message * @param defaultMessage the default message to be used to resolve this message */
public DefaultMessageSourceResolvable( @Nullable String[] codes, @Nullable Object[] arguments, @Nullable String defaultMessage) { this.codes = codes; this.arguments = arguments; this.defaultMessage = defaultMessage; }
Copy constructor: Create a new instance from another resolvable.
Params:
  • resolvable – the resolvable to copy from
/** * Copy constructor: Create a new instance from another resolvable. * @param resolvable the resolvable to copy from */
public DefaultMessageSourceResolvable(MessageSourceResolvable resolvable) { this(resolvable.getCodes(), resolvable.getArguments(), resolvable.getDefaultMessage()); }
Return the default code of this resolvable, that is, the last one in the codes array.
/** * Return the default code of this resolvable, that is, * the last one in the codes array. */
@Nullable public String getCode() { return (this.codes != null && this.codes.length > 0 ? this.codes[this.codes.length - 1] : null); } @Override @Nullable public String[] getCodes() { return this.codes; } @Override @Nullable public Object[] getArguments() { return this.arguments; } @Override @Nullable public String getDefaultMessage() { return this.defaultMessage; }
Build a default String representation for this MessageSourceResolvable: including codes, arguments, and default message.
/** * Build a default String representation for this MessageSourceResolvable: * including codes, arguments, and default message. */
protected final String resolvableToString() { StringBuilder result = new StringBuilder(); result.append("codes [").append(StringUtils.arrayToDelimitedString(this.codes, ",")); result.append("]; arguments [").append(StringUtils.arrayToDelimitedString(this.arguments, ",")); result.append("]; default message [").append(this.defaultMessage).append(']'); return result.toString(); }
The default implementation exposes the attributes of this MessageSourceResolvable.

To be overridden in more specific subclasses, potentially including the resolvable content through resolvableToString().

See Also:
/** * The default implementation exposes the attributes of this MessageSourceResolvable. * <p>To be overridden in more specific subclasses, potentially including the * resolvable content through {@code resolvableToString()}. * @see #resolvableToString() */
@Override public String toString() { return getClass().getName() + ": " + resolvableToString(); } @Override public boolean equals(Object other) { if (this == other) { return true; } if (!(other instanceof MessageSourceResolvable)) { return false; } MessageSourceResolvable otherResolvable = (MessageSourceResolvable) other; return (ObjectUtils.nullSafeEquals(getCodes(), otherResolvable.getCodes()) && ObjectUtils.nullSafeEquals(getArguments(), otherResolvable.getArguments()) && ObjectUtils.nullSafeEquals(getDefaultMessage(), otherResolvable.getDefaultMessage())); } @Override public int hashCode() { int hashCode = ObjectUtils.nullSafeHashCode(getCodes()); hashCode = 29 * hashCode + ObjectUtils.nullSafeHashCode(getArguments()); hashCode = 29 * hashCode + ObjectUtils.nullSafeHashCode(getDefaultMessage()); return hashCode; } }