package com.taobao.easyweb.core.code;
import com.taobao.easyweb.core.Configuration;
import com.taobao.easyweb.core.context.Context;
import com.taobao.easyweb.core.context.ThreadContext;
import com.taobao.easyweb.core.groovy.GroovyEngine;
import com.taobao.easyweb.core.velocity.VelocityEngine;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
/**
* groovy����ִ�����
*
* @author jimmey
*/
@Component("ewCodeRender")
public class CodeRender {
@Resource(name = "ewGroovyEngine")
private GroovyEngine groovyEngine;
@Resource(name = "ewVelocityEngine")
private VelocityEngine velocityEngine;
/**
* ��Ⱦҳ�棬�����layoutҲ�����������Ⱦ
*
* @return
* @throws IOException
*/
public String render(File file, String method) throws Exception {
StringWriter writer = new StringWriter();
render(file, method, writer);
// String content = writer.toString();
// Context context = ThreadContext.getContext();
//
// String layout = context.getLayout();
// if (layout != null && layout.endsWith(".vm") && context.getCurrentPath() != null) {
// String layoutFile = DirectoryUtil.getDirectory(context.getCurrentPath(), layout).replace(Configuration.getDeployPath(), "");
// context.putContext("screen_placeholder", content);
// int i = layoutFile.lastIndexOf("/");
// context.setCurrentPath(layoutFile.substring(0, i));
// return velocityEngine.renderTemplate(layoutFile, context.getContextMap());
// }
return writer.toString();
}
// public String renderWithLayout(File file, String method) throws Exception {
// StringWriter writer = new StringWriter();
// render(file, method, writer);
// String content = writer.toString();
// Context context = ThreadContext.getContext();
//
// String layout = context.getLayout();
// if (layout != null && layout.endsWith(".vm") && context.getCurrentPath() != null) {
// String layoutFile = DirectoryUtil.getDirectory(context.getCurrentPath(), layout).replace(Configuration.getDeployPath(), "");
// context.putContext("screen_placeholder", content);
// int i = layoutFile.lastIndexOf("/");
// context.setCurrentPath(layoutFile.substring(0, i));
// return velocityEngine.renderTemplate(layoutFile, context.getContextMap());
// }
// return content;
// }
public void render(File groovyFile, String method, Writer writer) throws Exception {
Context context = ThreadContext.getContext();
context.setCurrentPath(DirectoryUtil.getFileParentPath(groovyFile));
Object obj = groovyEngine.execute(groovyFile, method);
if (obj instanceof String) {
writer.write((String) obj);
return;
}
velocityEngine.renderTemplate(getTemplateName(groovyFile), context.getContextMap(), writer);
}
private String getTemplateName(File groovyFile) {
String p = DirectoryUtil.getFilePath(groovyFile);
int i = p.indexOf(Configuration.getDeployPath());
if (i >= 0) {
p = p.substring(i + Configuration.getDeployPath().length());
}
return p.replace(".groovy", ".vm");
}
}