/* 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.riotfamily.common.i18n;
import java.util.List;
import org.riotfamily.common.beans.property.PropertyUtils;
import org.riotfamily.common.util.Generics;
import org.springframework.util.StringUtils;
/**
* AdvancedMessageCodesResolver implementation used by Riot.
*
* @author Felix Gnass [fgnass at neteye dot de]
*/
public class RiotMessageCodesResolver implements AdvancedMessageCodesResolver {
/**
* error.<objectName>.<code>
* error.<code>
*/
public String[] resolveMessageCodes(String errorCode, String objectName) {
if (errorCode == null) {
return null;
}
if (errorCode.startsWith("error.")) {
return new String[] {
errorCode
};
}
else {
return new String[] {
"error." + objectName + '.' + errorCode,
"error." + errorCode
};
}
}
/**
* error.<objectName>.<field>.<code>
* error.<field>.<code>
* error.<code>
*/
@SuppressWarnings("unchecked")
public String[] resolveMessageCodes(String errorCode, String objectName,
String field, Class fieldType) {
if (errorCode == null) {
return null;
}
if (errorCode.startsWith("error.")) {
return new String[] {
errorCode
};
}
else {
return new String[] {
"error." + objectName + '.' + field + '.' + errorCode,
"error." + field + '.' + errorCode,
"error." + errorCode
};
}
}
/**
* <objectName>
* <objectClass>
*/
public String[] resolveLabelCodes(String objectName, Class<?> objectClass) {
List<String> codes = Generics.newArrayList(2);
if (objectName != null) {
codes.add(objectName);
}
if (objectClass != null) {
codes.add(objectClass.getName());
}
return StringUtils.toStringArray(codes);
}
/**
* <objectName>.<field>
* <declaringClass>.<field>
*/
public String[] resolveLabelCodes(String objectName, Class<?> objectClass,
String field) {
List<String> codes = Generics.newArrayList(2);
if (objectName != null) {
codes.add(objectName + '.' + field);
}
if (objectClass != null) {
codes.add(PropertyUtils.getDeclaringClass(
objectClass, field).getName() + '.' + field);
}
return StringUtils.toStringArray(codes);
}
/**
* <objectName>.<code>
* <objectClass>.<code>
* <elementName>.<code>
*/
public String[] resolveUICodes(String objectName, Class<?> objectClass,
String elementName, String code) {
List<String> codes = Generics.newArrayList(3);
if (objectName != null) {
codes.add(objectName + '.' + code);
}
if (objectClass != null) {
codes.add(objectClass.getName() + '.' + code);
}
if (elementName != null) {
codes.add(elementName + '.' + code);
}
return StringUtils.toStringArray(codes);
}
/**
* <objectName>.<field>.<code>
* <delcaringClass>.<field>.<code>
* label.<elementName>.<code>
*/
public String[] resolveUICodes(String objectName, Class<?> objectClass,
String field, String elementName, String code) {
List<String> codes = Generics.newArrayList(3);
if (objectName != null) {
codes.add(objectName + '.' + field + '.' + code);
}
if (objectClass != null) {
String declaringClassName = PropertyUtils.getDeclaringClass(objectClass, field).getName();
codes.add(declaringClassName + '.' + field + '.' + code);
}
if (elementName != null) {
codes.add("label." + elementName + '.' + code);
}
return StringUtils.toStringArray(codes);
}
}