package net.techreadiness.el;
import java.beans.FeatureDescriptor;
import java.util.Iterator;
import javax.el.ELContext;
import javax.el.ELResolver;
import com.google.common.collect.Multimap;
public class MultimapELResolver extends ELResolver {
@SuppressWarnings("unchecked")
@Override
public Object getValue(ELContext context, Object base, Object property) {
if (isResolvable(context, base)) {
context.setPropertyResolved(true);
@SuppressWarnings({ "rawtypes" })
Multimap multimap = (Multimap) base;
return multimap.get(property);
}
return null;
}
@Override
public Class<?> getType(ELContext context, Object base, Object property) {
if (isResolvable(context, base)) {
context.setPropertyResolved(true);
return Object.class;
}
return null;
}
@SuppressWarnings("unchecked")
@Override
public void setValue(ELContext context, Object base, Object property, Object value) {
if (isResolvable(context, base)) {
context.setPropertyResolved(true);
@SuppressWarnings({ "rawtypes" })
Multimap multimap = (Multimap) base;
multimap.put(property, value);
}
}
@Override
public boolean isReadOnly(ELContext context, Object base, Object property) {
if (isResolvable(context, base)) {
context.setPropertyResolved(true);
return false;
}
return false;
}
@Override
public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context, Object base) {
return null;
}
@Override
public Class<?> getCommonPropertyType(ELContext context, Object base) {
if (isResolvable(context, base)) {
return Object.class;
}
return null;
}
private static boolean isResolvable(ELContext context, Object base) {
return context != null && base instanceof Multimap;
}
}