@Override
public List<JavaClassSource> generateFrom(DaoGenerationContext context)
throws Exception
{
JavaClassSource entity = context.getEntity();
String idType = JPAEntityUtil.resolveIdType(entity);
String persistenceUnitName = context.getPersistenceUnitName();
String entityTable = JPAEntityUtil.getEntityTable(entity);
String selectExpression = JPAEntityUtil.getSelectExpression(entity, entityTable);
String orderClause = JPAEntityUtil.getOrderClause(entity,
JPAEntityUtil.getJpqlEntityVariable(entityTable));
Map<Object, Object> map = new HashMap<>();
map.put("entity", entity);
map.put("idType", idType);
map.put("persistenceUnitName", persistenceUnitName);
map.put("selectExpression", selectExpression);
map.put("orderClause", orderClause);
Resource<URL> templateResource = resourceFactory.create(getClass().getResource("Dao.jv"));
Template processor = templateFactory.create(templateResource, FreemarkerTemplate.class);
String output = processor.process(map);
JavaClassSource resource = Roaster.parse(JavaClassSource.class, output);
resource.addImport(entity.getQualifiedName());
resource.setPackage(context.getTargetPackageName());
return Arrays.asList(resource);
}