package org.fireflow.demo.common.servlet;
import java.io.IOException;
import java.util.Date;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.fireflow.client.WorkflowQuery;
import org.fireflow.client.WorkflowSession;
import org.fireflow.client.WorkflowSessionFactory;
import org.fireflow.demo.biztrip.dao.IBusinessTripBasicInfoDao;
import org.fireflow.demo.common.dao.ICommonApprovalInfoDao;
import org.fireflow.demo.common.entity.CommonApprovalInfo;
import org.fireflow.demo.fireflow_ext.WorkflowUtil;
import org.fireflow.engine.context.RuntimeContext;
import org.fireflow.engine.entity.runtime.WorkItem;
import org.fireflow.engine.entity.runtime.WorkItemProperty;
import org.fireflow.engine.modules.ousystem.User;
import org.fireflow.web_client.util.Constants;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallback;
import org.springframework.transaction.support.TransactionTemplate;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
/**
* Servlet implementation class CommonApprovalInfoServlet
*/
public class CommonApprovalInfoServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public static final String APPROVE_ACTION = "APPROVE_ACTION";
protected WebApplicationContext springCtx = null;
protected RuntimeContext fireContext = null;
protected TransactionTemplate tramsactionTemplate = null;
protected ICommonApprovalInfoDao commonApprovalInfoDao = null;
protected IBusinessTripBasicInfoDao businessTripBasicInfoDao = null;
/**
* @see HttpServlet#HttpServlet()
*/
public CommonApprovalInfoServlet() {
super();
// TODO Auto-generated constructor stub
}
public void init(ServletConfig config) throws ServletException {
super.init(config);
springCtx = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
fireContext = (RuntimeContext)springCtx.getBean("fireflowRuntimeContext");
tramsactionTemplate = (TransactionTemplate)springCtx.getBean("transactionTemplate");
commonApprovalInfoDao = (ICommonApprovalInfoDao)springCtx.getBean("commonApprovalInfoDao");
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
approve(request,response);
}
/**
* 通用审批动作,该动作结束后,导航到WorkflowOperationServlet.completeWorkItem(...)
*
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
@SuppressWarnings("unchecked")
protected void approve(final HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String workItemId = request.getParameter(Constants.WORKITEM_ID);
final User u = getCurrentUser(request);
final WorkflowSession workflowSession = WorkflowSessionFactory
.createWorkflowSession(fireContext, u);
WorkflowQuery<WorkItem> workItemQuery = workflowSession.createWorkflowQuery(WorkItem.class);
WorkItem workItem = workItemQuery.get(workItemId);
final CommonApprovalInfo approveInfo = new CommonApprovalInfo();
approveInfo.setBizId(workItem.getBizId());
approveInfo.setStepName(workItem.getWorkItemName());
approveInfo.setBizSubject(workItem.getSubject());
approveInfo.setApprover(u.getName());
approveInfo.setLastUpdateTime(new Date());
approveInfo.setDecision(Integer.parseInt(request.getParameter("decision")));
approveInfo.setDetailInfo(request.getParameter("detailInfo"));
tramsactionTemplate.execute(new TransactionCallback(){
public Object doInTransaction(TransactionStatus status) {
commonApprovalInfoDao.create(approveInfo);
return null;
}
});
request.setAttribute(WorkItemProperty.ATTACHMENT_ID.getPropertyName(), approveInfo.getId());
request.setAttribute(WorkItemProperty.NOTE.getPropertyName(), approveInfo.getDetailInfo());
//导航到WorkflowOperationServlet.completeWorkItem(...)继续处理
RequestDispatcher dispatcher = request.getRequestDispatcher("/servlet/WorkflowOperationServlet");
dispatcher.forward(request, response);
}
protected User getCurrentUser(HttpServletRequest request){
HttpSession session = request.getSession(true);
return WorkflowUtil.getCurrentWorkflowUser(session);
}
}