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.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 org.apache.struts2.ServletActionContext;
import com.norteksoft.product.util.FtlUtils;
import com.norteksoft.product.util.WebContextUtils;
import com.norteksoft.task.base.enumeration.TaskState;
import com.norteksoft.task.entity.WorkflowTask;
import com.norteksoft.task.service.WorkflowTaskManager;
import com.norteksoft.wf.engine.entity.WorkflowAttachment;
import com.norteksoft.wf.engine.service.WorkflowInstanceManager;
import com.norteksoft.wf.engine.service.WorkflowRightsManager;
@Deprecated
public class UploadAttachmentTag extends TagSupport {
private static final long serialVersionUID = 2L;
private Log log = LogFactory.getLog(UploadAttachmentTag.class);
private String webRoot;
//必填的信息
private Long taskId;
private Long companyId;
//可选的信息(有默认值)
private String fileSizeLimit = "10";
private String fileTypes = "*.*";
private String fileTypesDescription = "所有文件";
private String fileUploadLimit = "0";
private Boolean deleteRight=false;
private Boolean addRight=false;
private Boolean downloadRight=false;
//功能路径
private String moduleUrl = "/widgets/workflow-swfupload/";
private String imageUrl = "/images/annex.gif";
public String getFileSizeLimit() {
return fileSizeLimit;
}
public void setFileSizeLimit(String fileSizeLimit) {
if(Integer.valueOf(fileSizeLimit.trim()) <= 10 || Integer.valueOf(fileSizeLimit.trim()) >= 0) {
this.fileSizeLimit = fileSizeLimit;
} else {
this.fileSizeLimit = "10";
}
}
public String getFileTypes() {
return fileTypes;
}
public void setFileTypes(String fileTypes) {
this.fileTypes = fileTypes;
}
public String getFileTypesDescription() {
return fileTypesDescription;
}
public void setFileTypesDescription(String fileTypesDescription) {
this.fileTypesDescription = fileTypesDescription;
}
public String getFileUploadLimit() {
return fileUploadLimit;
}
public void setFileUploadLimit(String fileUploadLimit) {
if(Integer.valueOf(fileUploadLimit.trim()) >= 0) {
this.fileUploadLimit = fileUploadLimit;
} else {
this.fileUploadLimit = "0";
}
}
public String getImageUrl() {
return imageUrl;
}
public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}
public String getModuleUrl() {
return moduleUrl;
}
public void setModuleUrl(String moduleUrl) {
this.moduleUrl = moduleUrl;
}
public String getWebRoot() {
return webRoot;
}
public Long getTaskId() {
return taskId;
}
public void setTaskId(Long taskId) {
this.taskId = taskId;
}
public Long getCompanyId() {
return companyId;
}
public void setCompanyId(Long companyId) {
this.companyId = companyId;
}
public Boolean getDeleteRight() {
return deleteRight;
}
public Boolean getAddRight() {
return addRight;
}
public Boolean getDownloadRight() {
return downloadRight;
}
@Override
public int doStartTag() throws JspException {
log.debug("***doStartTag开始***");
log.debug(new StringBuilder("*** veriable:[")
.append("taskId:").append(taskId)
.append("]").toString());
webRoot = ServletActionContext.getRequest().getContextPath();
JspWriter out=pageContext.getOut();
List<WorkflowAttachment> attachments = null;
WorkflowRightsManager workflowRightsManager = (WorkflowRightsManager) WebContextUtils.getBean("workflowRightsManager");
if(taskId != null && taskId!=0) {
WorkflowTaskManager workflowTaskManager = (WorkflowTaskManager) WebContextUtils.getBean("workflowTaskManager");
WorkflowInstanceManager workflowInstanceManager = (WorkflowInstanceManager) WebContextUtils.getBean("workflowInstanceManager");
WorkflowTask task = workflowTaskManager.getTask(taskId);
String workflowId = task.getProcessInstanceId();
attachments = workflowInstanceManager.getAttachments(workflowId,getCompanyId());
if(TaskState.COMPLETED.getIndex().equals(task.getActive())||TaskState.CANCELLED.getIndex().equals(task.getActive())){
deleteRight=false;
addRight=false;
downloadRight=false;
}else{
deleteRight=workflowRightsManager.attachmentDeleteRight(task);
addRight=workflowRightsManager.attachmentAddRight(task);
downloadRight=workflowRightsManager.attachmentDownloadRight(task);
}
}
try {
out.print(readTemplet(attachments));
} catch (Exception e) {
log.error(e);
throw new JspException(e);
}
log.debug("***doStartTag结束***");
return Tag.EVAL_PAGE;
}
private String readTemplet(List<WorkflowAttachment> attachments) throws Exception {
// String templetCode =JarFileUtil.readFile(getClass(), "template/tags/uploadattachment.ftl");
String file = WorkflowHistoryTag.class.getResource("/template/tags/uploadattachment.ftl").getFile();
String templetCode=FileUtils.readFileToString(new File(file),"utf-8");
Map<String, Object> root = new HashMap<String, Object>();
root.put("attachments", attachments);
root.put("ctx", webRoot);
root.put("fileSizeLimit", fileSizeLimit);
root.put("fileTypes", fileTypes);
root.put("fileTypesDescription", fileTypesDescription);
root.put("fileUploadLimit", fileUploadLimit);
root.put("moduleUrl", moduleUrl);
root.put("imageUrl", imageUrl);
root.put("taskId", taskId.toString());
root.put("companyId", companyId.toString());
root.put("deleteRight", deleteRight);
root.put("addRight", addRight.toString());
root.put("downloadRight", downloadRight);
String result = FtlUtils.renderFile(root, templetCode);
return result;
}
@Override
public int doEndTag() throws JspException {
return Tag.EVAL_PAGE;
}
}