package com.taobao.easyweb.orm.nutz;
import com.taobao.easyweb.core.app.App;
import com.taobao.easyweb.core.bean.BeanFactory;
import com.taobao.easyweb.core.groovy.annotation.AnnotationParser;
import com.taobao.easyweb.orm.datasource.DatasourceFactory;
import groovy.lang.GroovyObject;
import org.nutz.dao.Dao;
import org.nutz.dao.impl.NutDao;
import org.springframework.stereotype.Component;
import javax.sql.DataSource;
import java.io.File;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
/**
* User: jimmey/shantong
* DateTime: 13-3-31 ����2:08
*/
@Component
public class NutzDAOParser extends AnnotationParser {
@Override
public boolean isParse(Annotation annotation) {
return annotation instanceof NutzDAO; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public void parse(App app, Annotation annotation, File file, Object target, GroovyObject groovyObject) {
Field[] fields = groovyObject.getClass().getDeclaredFields();
Field dao = null;
for (Field field : fields) {
if (field.getType() == Dao.class) {
dao = field;
break;
}
}
if (dao == null) {
//û��ע��dao
return;
}
NutzDAO nutzDAO = (NutzDAO) annotation;
dao.setAccessible(true);
DataSource dataSource = DatasourceFactory.getDatasouce(app, nutzDAO.datasource());
if (dataSource == null) {
throw new RuntimeException("datasource "+nutzDAO.datasource()+" not prepared");
}
Dao impl = new NutDao(dataSource);
try {
dao.set(groovyObject, impl);
} catch (IllegalAccessException e) {
}
BeanFactory.regist(app, nutzDAO.name(), groovyObject);
}
}