package org.infosec.ismp.agent.winsensor.communication.services;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import org.dom4j.Document;
import org.infosec.ismp.agent.comm.winsensor.model.operation.Problem;
import org.infosec.ismp.agent.winsensor.SensorServer;
import org.infosec.ismp.agent.winsensor.operation.entity.ProblemBO;
import org.infosec.ismp.agent.winsensor.util.FileUploadUtil;
import org.infosec.ismp.agent.winsensor.util.XmlParseUtil;
/**
* @author Rocky
* @version create time: Jan 12, 2011 10:34:56 AM
*
*/
public class OperationWorkOrdersHolder extends HttpServlet {
private static final long serialVersionUID = 6736367710367367552L;
private SensorServer sensorServer;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
handleRequest(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
handleRequest(req, resp);
}
public void handleRequest(HttpServletRequest req, HttpServletResponse resp) {
InputStream inputStream = null;
FileUploadUtil fileUploadUtil = new FileUploadUtil();
XmlParseUtil xmlParseUtil = new XmlParseUtil();
PrintWriter printWriter = null;
try {
inputStream = fileUploadUtil.getCompleteInputStream(req);
printWriter = resp.getWriter();
Document document = xmlParseUtil.parseProblemConnection(inputStream);
if (xmlParseUtil.parseIfCommitProblems(document)) {
List<Problem> problems = xmlParseUtil.parseOperationProblems(document);
if (problems.size() > 0) {
sensorServer.commitOperationProblems(problems);
//Return accept commit problem info.
Document returnDocument = xmlParseUtil.createProblemsCommitSuccessInfo(problems);
printWriter.write(returnDocument.getRootElement().asXML());
}
} else {
String sensorId = xmlParseUtil.parseOperationWorkOrdersSensorId(document);
if (!StringUtils.isBlank(sensorId)) {
List<ProblemBO> problems = sensorServer.getOperationWorkOrdersInfo(sensorId);
Document returnDocument = xmlParseUtil.createOrdersStatusChangedInfo(problems);
printWriter.write(returnDocument.getRootElement().asXML());
sensorServer.workOrdersStatusSendSuccess(problems);
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void setSensorServer(SensorServer sensorServer) {
this.sensorServer = sensorServer;
}
}