package com.norteksoft.wf.base.tags;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.Tag;
import javax.servlet.jsp.tagext.TagSupport;
import org.apache.commons.io.FileUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.norteksoft.product.util.FtlUtils;
import com.norteksoft.product.util.WebContextUtils;
import com.norteksoft.task.entity.WorkflowTask;
import com.norteksoft.wf.engine.entity.InstanceHistory;
import com.norteksoft.wf.engine.entity.WorkflowInstance;
import com.norteksoft.wf.engine.service.InstanceHistoryManager;
import com.norteksoft.wf.engine.service.TaskService;
import com.norteksoft.wf.engine.service.WorkflowInstanceManager;
import com.norteksoft.wf.engine.service.WorkflowRightsManager;
@Deprecated
public class WorkflowHistoryTag extends TagSupport{
private static final long serialVersionUID = 1L;
private Log log = LogFactory.getLog(WorkflowHistoryTag.class);
private String url;
private String webRoot;
private Long companyId;
private String workflowId;
private String locale;
private Long taskId;
private Boolean view =false;
private WorkflowInstanceManager workflowInstanceManager;
private TaskService taskService;
public int doStartTag() throws JspException{
try {
workflowInstanceManager = (WorkflowInstanceManager)WebContextUtils.getBean("workflowInstanceManager");
WorkflowRightsManager workflowRightsManager = (WorkflowRightsManager)WebContextUtils.getBean("workflowRightsManager");
taskService = (TaskService)WebContextUtils.getBean("taskService");
webRoot = ((HttpServletRequest)this.pageContext.getRequest()).getContextPath();
((HttpServletRequest)this.pageContext.getRequest()).setCharacterEncoding("utf-8");
locale = this.pageContext.getRequest().getLocale().toString();
JspWriter out=pageContext.getOut();
if(taskId!=0){
WorkflowTask task = taskService.getTask(taskId);
workflowId = task.getProcessInstanceId();
view=workflowRightsManager.viewFlowHistoryRight(task);
out.print(readScriptTemplet());
}else{
out.print("taskId没有值");
}
} catch (Exception e) {
log.error(e);
throw new JspException(e);
}
return Tag.EVAL_PAGE;
}
//读取脚本模板
private String readScriptTemplet() throws Exception{
// String templetCode =JarFileUtil.readFile(getClass(), "template/tags/workflowHistory.ftl");
String file = WorkflowHistoryTag.class.getResource("/template/tags/workflowHistory.ftl").getFile();
String templetCode=FileUtils.readFileToString(new File(file),"utf-8");
InstanceHistoryManager instanceHistoryManager=(InstanceHistoryManager)WebContextUtils.getBean("instanceHistoryManager");
List<InstanceHistory> ihs=instanceHistoryManager.getHistorysByWorkflowId(companyId, workflowId);
for(int i=0;i<ihs.size();i++){
InstanceHistory ih=ihs.get(i);
String result=ih.getTransactionResult();
if(result.contains("[")){
String temp=result.substring(result.indexOf("[")+1,result.indexOf("]"));
if(temp.equals("transition.approval.result.agree")){
result=result.substring(0, result.indexOf("[")) + "[同意]" + result.substring(result.lastIndexOf("]") + 1, result.length());
ih.setTransactionResult(result);
ihs.set(i, ih);
}else if (temp .equals( "transition.approval.result.disagree")){
result=result.substring(0, result.indexOf("[")) + "[不同意]" + result.substring(result.lastIndexOf("]") + 1, result.length());
ih.setTransactionResult(result);
ihs.set(i, ih);
}else if(temp.contains("_")){
WorkflowInstance workflowInstance = workflowInstanceManager.getWorkflowInstance(workflowId);
result=result.substring(0, result.indexOf("[")) + "["+workflowInstance.getProcessName()+"]" + result.substring(result.lastIndexOf("]") + 1, result.length());
ih.setTransactionResult(result);
ihs.set(i, ih);
}
}
}
Map<String, Object> root=new HashMap<String, Object>();
root.put("ctx", webRoot);
root.put("url", url);
root.put("companyId", companyId.toString());
root.put("workflowId", workflowId);
root.put("view", view);
root.put("locale", locale);
root.put("textContent", "列表视图");
root.put("flashContent", "图形视图");
root.put("instanceHistory",ihs);
root.put("sequence","序号");
root.put("name","名称");
root.put("history","流转操作");
root.put("start","流程开始");
root.put("end","流程结束");
root.put("opinion","办理意见");
String result = FtlUtils.renderFile(root, templetCode);
return result;
}
public int doEndTag() throws JspException{
return Tag.EVAL_PAGE;
}
public void setUrl(String url) {
this.url = url;
}
public void setCompanyId(Long companyId) {
this.companyId = companyId;
}
public void setWorkflowId(String workflowId) {
this.workflowId = workflowId;
}
public String getWebRoot() {
return webRoot;
}
public void setTaskId(Long taskId) {
this.taskId = taskId;
}
}