package net.techreadiness.el;
import java.beans.FeatureDescriptor;
import java.util.Iterator;
import java.util.ResourceBundle;
import javax.el.ELContext;
import javax.el.ELResolver;
import javax.el.PropertyNotWritableException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class IndirectResourceBundleELResolver extends ELResolver {
private Logger log = LoggerFactory.getLogger(IndirectResourceBundleELResolver.class);
private ResourceBundle bundle;
public IndirectResourceBundleELResolver(ResourceBundle bundle) {
this.bundle = bundle;
}
@Override
public Class<?> getCommonPropertyType(ELContext context, Object base) {
return null;
}
@Override
public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context, Object base) {
// TODO Auto-generated method stub
return null;
}
@Override
public Class<?> getType(ELContext context, Object base, Object property) {
if (isResolvable(base, property)) {
return ResourceBundle.class;
}
return null;
}
@Override
public Object getValue(ELContext context, Object base, Object property) {
if (isResolvable(base, property)) {
context.setPropertyResolved(true);
return bundle;
}
return null;
}
@Override
public boolean isReadOnly(ELContext context, Object base, Object property) {
if (isResolvable(base, property)) {
context.setPropertyResolved(true);
return true;
}
return false;
}
@Override
public void setValue(ELContext context, Object base, Object property, Object value) {
if (isResolvable(base, property)) {
throw new PropertyNotWritableException("resolver is read-only");
}
}
private boolean isResolvable(Object base, Object property) {
log.debug("Base: {}, Property: {}", base, property);
boolean resolvable = base == null && property != null && property instanceof String && property.equals("msg");
log.debug("Resolvable: {}", resolvable);
return resolvable;
}
}