org.springframework.context.support.DefaultMessageSourceResolvable Maven / Gradle / Ivy
/*
* Copyright 2002-2005 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.util.ObjectUtils;
import org.springframework.util.StringUtils;
/**
* 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
* @since 13.02.2004
* @see org.springframework.context.MessageSource#getMessage(MessageSourceResolvable, java.util.Locale)
*/
public class DefaultMessageSourceResolvable implements MessageSourceResolvable, Serializable {
private final String[] codes;
private final Object[] arguments;
private final String defaultMessage;
/**
* 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.
* @param codes the codes to be used to resolve this message
*/
public DefaultMessageSourceResolvable(String[] codes) {
this(codes, null, null);
}
/**
* 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.
* @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.
* @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(String[] codes, Object[] arguments, String defaultMessage) {
this.codes = codes;
this.arguments = arguments;
this.defaultMessage = defaultMessage;
}
/**
* 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());
}
public String[] getCodes() {
return codes;
}
/**
* Return the default code of this resolvable, that is,
* the last one in the codes array.
*/
public String getCode() {
return (this.codes != null && this.codes.length > 0) ? this.codes[this.codes.length - 1] : null;
}
public Object[] getArguments() {
return arguments;
}
public String getDefaultMessage() {
return defaultMessage;
}
/**
* Build a default String representation for this MessageSourceResolvable:
* including codes, arguments, and default message.
*/
protected final String resolvableToString() {
StringBuffer buf = new StringBuffer();
buf.append("codes [").append(StringUtils.arrayToDelimitedString(this.codes, ","));
buf.append("]; arguments [" + StringUtils.arrayToDelimitedString(this.arguments, ","));
buf.append("]; default message [").append(this.defaultMessage).append(']');
return buf.toString();
}
/**
* Default implementation exposes the attributes of this MessageSourceResolvable.
* To be overridden in more specific subclasses, potentially including the
* resolvable content through resolvableToString()
.
* @see #resolvableToString()
*/
public String toString() {
return getClass().getName() + ": " + resolvableToString();
}
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());
}
public int hashCode() {
return ObjectUtils.nullSafeHashCode(getCodes());
}
}