package org.jboss.seam.rest.templating;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;
/**
* Wraps TemplatingModel to allow objects to be referenced via EL in templates.
*
* @author <a href="http://community.jboss.org/people/jharting">Jozef Hartinger</a>
*/
public class ModelWrapper extends HashMap<String, Object> {
private static final long serialVersionUID = -4511289530418970162L;
private BeanManager manager;
public ModelWrapper(Map<String, Object> model, BeanManager manager) {
super(model);
this.manager = manager;
}
@Override
public Object get(Object key) {
if (containsKey(key)) {
return super.get(key);
}
if (key instanceof String) {
String name = (String) key;
Set<Bean<?>> beans = manager.getBeans(name);
if (!beans.isEmpty()) {
Bean<?> bean = manager.resolve(beans);
if (bean != null) {
CreationalContext<?> ctx = manager.createCreationalContext(bean);
return manager.getReference(bean, bean.getBeanClass(), ctx);
}
}
}
return null;
}
}