package com.hundsun.jresplus.web.contain.async;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import java.util.HashSet;
import java.util.Set;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.velocity.context.InternalContextAdapter;
import org.apache.velocity.exception.MethodInvocationException;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.ResourceNotFoundException;
import org.apache.velocity.runtime.Renderable;
import com.alibaba.fastjson.JSON;
import com.hundsun.jresplus.common.util.ArrayUtil;
import com.hundsun.jresplus.web.contain.ResponseStringWriterWrapper;
import com.hundsun.jresplus.web.velocity.eventhandler.DirectOutput;
/**
*
* @author LeoHu copy by sagahl copy by eyeieye
*
*/
public class AsynchronContainTask implements DirectOutput, Renderable {
public static final String AsynchronContainTaskName = "asyncContainContext";
private String divId;
private ResponseStringWriterWrapper responseStringWriter;
private Set<String> js;
private StringBuilder jsCode = new StringBuilder();
private Set<String> css;
private boolean hasCss = false;
public boolean hasCss() {
return this.hasCss;
}
public AsynchronContainTask(String divId,
ResponseStringWriterWrapper responseStringWriter) {
super();
this.divId = divId;
this.responseStringWriter = responseStringWriter;
}
public String getDivPlaceholder() {
return "<div id=\"" + divId + "\"></div>";
}
public void writeTo(Writer writer) throws IOException {
String result = responseStringWriter.getStringWriter().toString();
writer.write("{\"html\":\"");
StringEscapeUtils.escapeJavaScript(writer, result);
writer.write("\",\"id\":\"");
writer.write(this.getDivId());
writer.write("\",\"css\":");
if (ArrayUtil.isEmpty(css)) {
writer.write("[]");
} else {
writer.write(JSON.toJSONString(css));
}
writer.write(",\"js\":");
if (ArrayUtil.isEmpty(js)) {
writer.write("[]");
} else {
writer.write(JSON.toJSONString(js));
}
writer.write(",\"jsCode\":\"");
if (this.jsCode.length() < 1) {
writer.write("");
} else {
writer.write(this.jsCode.toString());
}
writer.write("\"}");
}
public void addJsCode(String jsCode) throws IOException {
StringWriter sw = new StringWriter();
StringEscapeUtils.escapeJavaScript(sw, jsCode);
this.jsCode.append(sw);
}
public AsynchronContainTask addJs(String js) {
if (this.js == null) {
this.js = new HashSet<String>();
}
this.js.add(js);
return this;
}
public AsynchronContainTask addCss(String css) {
if (this.css == null) {
this.css = new HashSet<String>();
}
this.css.add(css);
this.hasCss = true;
return this;
}
public boolean render(InternalContextAdapter arg0, Writer writer)
throws IOException, MethodInvocationException, ParseErrorException,
ResourceNotFoundException {
writer.write("");
return true;
}
public Set<String> getJs() {
return js;
}
public Set<String> getCss() {
return css;
}
public String getDivId() {
return divId;
}
public void setDivId(String divId) {
this.divId = divId;
}
public ResponseStringWriterWrapper getResponseStringWriter() {
return responseStringWriter;
}
public void setResponseStringWriter(
ResponseStringWriterWrapper responseStringWriter) {
this.responseStringWriter = responseStringWriter;
}
}