package org.mef.sprig;
import java.util.Map;
import org.springframework.beans.BeanWrapperImpl;
import play.Logger;
import play.db.ebean.Model;
/**
* Loads Play models or other Java beans. Uses Spring's BeanWrapperImpl
* to set property values in the model object.
*
* Sprig uses this loader if a custom loader is not provided.
*/
@SuppressWarnings("rawtypes")
public class DefaultSprigLoader implements SprigLoader<Object>
{
private Class clazz;
public DefaultSprigLoader(Class clazz)
{
this.clazz = clazz;
}
@Override
public void parse(Object obj, Map<String,Object> map)
{
//log("A");
BeanWrapperImpl w = new BeanWrapperImpl(obj);
for(String propName : map.keySet())
{
Object val = map.get(propName);
w.setPropertyValue(propName, val);
}
}
@Override
public void save(Object obj)
{
if (obj instanceof Model)
{
Model m = (Model)obj;
m.save();
}
else
{
log("not an play.Model object. you must use a custom loader.");
}
}
@Override
public void resolve(Object obj, String fieldName, Object targetObj)
{
log(fieldName);
BeanWrapperImpl w = new BeanWrapperImpl(obj);
w.setPropertyValue(fieldName, targetObj);
}
@Override
public Class getClassBeingLoaded()
{
return clazz;
}
@Override
public void close()
{
}
//--helper--
protected void log(String s)
{
SprigLogger.log(s);
}
}