package tes.
jsf;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.el.ELContext;
public class MyELResolver extends javax.el.ELResolver {
@Override
public Class getCommonPropertyType(ELContext context, Object base) {
return null;
}
@Override
public Iterator getFeatureDescriptors(ELContext context, Object base) {
return null;
}
@Override
public Class getType(ELContext context, Object base, Object property) {
return null;
}
@Override
public Object getValue(ELContext context, Object base, Object property) {
if (base instanceof Collection) {
return resolveInCollection(context, (Collection)base, property);
} else if (base instanceof Map) {
return resolveInMap(context, (Map)base, property);
} else {
return null;
}
}
@Override
public boolean isReadOnly(ELContext arg0, Object arg1, Object arg2) {
return true;
}
@Override
public void setValue(ELContext arg0, Object arg1, Object arg2, Object arg3) {
}
private Object resolveInCollection(ELContext context, Collection base, Object property) {
if (property.equals("size")) {
context.setPropertyResolved(true);
return base.size();
} else if (property.equals("toMap")) {
context.setPropertyResolved(true);
return collectionToMap(base);
} else if (property.equals("toList")) {
context.setPropertyResolved(true);
return new ArrayList(base);
}else {
return null;
}
}
private Object resolveInMap(ELContext context, Map base, Object property) {
if (property.equals("size")) {
context.setPropertyResolved(true);
return base.size();
} else if (property.equals("values")) {
context.setPropertyResolved(true);
return base.values();
} else if (property.equals("keySet")) {
context.setPropertyResolved(true);
return base.keySet();
} else if (property.equals("entrySet")) {
context.setPropertyResolved(true);
return base.entrySet();
} else {
return null;
}
}
private Map<object> collectionToMap(Collection col) {
Map</object><object> map = new HashMap</object><object>();
for (Object obj : col) {
map.put(obj, obj);
}
return map;
}
}