|
package com.secSrv.webApp.action.netlog;
import java.awt.Color;
import java.io.ByteArrayOutputStream;
import java.util.Date;
import java.util.List;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import com.lowagie.text.BadElementException;
import com.lowagie.text.Cell;
import com.lowagie.text.Document;
import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.FontFactory;
import com.lowagie.text.HeaderFooter;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Phrase;
import com.lowagie.text.Rectangle;
import com.lowagie.text.Table;
import com.lowagie.text.html.HtmlWriter;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfWriter;
import com.lowagie.text.rtf.RtfWriter;
import com.secSrv.webApp.action.baseinfo.BaseAction;
import com.secSrv.webApp.beans.cache.Pages;
import com.secSrv.webApp.business.netlog.NetlogBusiness;
import com.secSrv.webApp.form.netlog.LogPage;
import com.secSrv.webApp.hibernate.po.TblNetlog;
import com.secSrv.webApp.hibernate.po.TdSysOperator;
import com.secSrv.webApp.status.TdSysOperatorConst;
import com.secSrv.webApp.utils.Constants;
import com.secSrv.webApp.utils.SignOnCheck;
public class DownLoadDataAction extends BaseAction{
// --------------------------------------------------------- Instance
// --------------------------------------------------------- Methods
/**
* Method execute
*
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
ActionMessages messages = new ActionMessages();
//检验该客户是否有权限
ActionForward returnForward = SignOnCheck.checkPrivilege(request,response);
if(returnForward != null){
return returnForward;
}
HttpSession session = request.getSession();
//取得用户信息
TdSysOperator tdUser = (TdSysOperator) session.getAttribute(Constants.SysOperator);
if (tdUser == null){
messages.add(ActionMessages.GLOBAL_MESSAGE,new ActionMessage("sys.login.sessionerror", "session失效,"+
"请重新登陆"));
saveMessages(request, messages);
return new ActionForward("/sessionerror.do");
}
String hqlSearch = (String)request.getSession().getAttribute("netloghql");
String hqlCount = (String)request.getSession().getAttribute("netlogcount");
String queryType = request.getParameter("type");
try {
String usertype = "";
if (tdUser.getPriority().equals(
TdSysOperatorConst.LANGCHAO_ADMIN_USER)) {
usertype = TdSysOperatorConst.COMPANY_ADMIN_USER;
} else {
usertype = TdSysOperatorConst.COMMON_USER;
}
Document document = new Document();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
if(queryType.equals("html"))
{
response.setContentType("text/html");
//其中attachment是保存, inline是在网页中打开
response.setHeader( "Content-disposition", "attachment; filename=foobar.htm" );
HtmlWriter.getInstance(document, baos);
}
//用PdfWriter来监听,输出流为response.getOutputStream,
else if(queryType.equals("pdf"))
{
response.setContentType("application/pdf");//可以在网页中用pdf reader打开
PdfWriter.getInstance(document, baos);
//其中attachment是保存, inline是在网页中打开
response.setHeader( "Content-disposition", "attachment; filename=foobar.pdf" );
}
else if(queryType.equals("rtf"))
{
response.setContentType("application/msword");
response.setHeader( "Content-disposition", "attachment; filename=foobar.rtf" );
RtfWriter.getInstance(document, baos);
}
//下面是添写数据
// 如果变量多不等于上面3个,则用reponse。sedredircet
document.open();
BaseFont bfChinese = BaseFont.createFont("STSong-Light",
"UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font FontChineseTitle = new Font(bfChinese, 24, Font.BOLD);
Font fontContent = new Font(bfChinese, 9, Font.NORMAL);
Font fontHeader = new Font(bfChinese, 9, Font.BOLD);
//标题
Paragraph paraTitle = new Paragraph("网 络 日 志 表", FontChineseTitle);
paraTitle.setAlignment(Element.ALIGN_CENTER);
document.add(paraTitle);
//header 和 footer
HeaderFooter footer = new HeaderFooter(new Phrase("页号: ",fontContent), true);
document.setFooter(footer);
// we add a Header that will show up on PAGE 1
HeaderFooter header = new HeaderFooter(new Phrase("版权:浪潮",fontContent),false);
document.setHeader(header);
// step 4
Table datatable = new Table(13);
datatable.setPadding(4);
datatable.setSpacing(0);
//datatable.setBorder(Rectangle.NO_BORDER);
int headerwidths[] = {5, 5, 9, 8, 8, 8, 12, 6, 12, 6, 5, 4, 11};
datatable.setWidths(headerwidths);
datatable.setWidth(100);
// the first cell spans 10 columns
/* Cell cell = new Cell(new Phrase("网 络 日 志 表", FontChineseTitle));
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setLeading(30);
cell.setColspan(13);
cell.setBorder(Rectangle.NO_BORDER);
cell.setBackgroundColor(new Color(0xC0, 0xC0, 0xC0));
datatable.addCell(cell);
*/
datatable.setDefaultHorizontalAlignment(Element.ALIGN_CENTER);
Color color = new Color(0xC0, 0xC0, 0xC0);
datatable.addCell(this.createCell(new Phrase("序号",fontHeader),color,Element.ALIGN_CENTER,Element.ALIGN_MIDDLE,1));
datatable.addCell(this.createCell(new Phrase("设备编号",fontHeader),color,Element.ALIGN_CENTER,Element.ALIGN_MIDDLE,1));
datatable.addCell(this.createCell(new Phrase("时间",fontHeader),color,Element.ALIGN_CENTER,Element.ALIGN_MIDDLE,1));
datatable.addCell(this.createCell(new Phrase("日志类型",fontHeader),color,Element.ALIGN_CENTER,Element.ALIGN_MIDDLE,1));
datatable.addCell(this.createCell(new Phrase("日志级别",fontHeader),color,Element.ALIGN_CENTER,Element.ALIGN_MIDDLE,1));
datatable.addCell(this.createCell(new Phrase("引发事件",fontHeader),color,Element.ALIGN_CENTER,Element.ALIGN_MIDDLE,1));
datatable.addCell(this.createCell(new Phrase("源IP地址",fontHeader),color,Element.ALIGN_CENTER,Element.ALIGN_MIDDLE,1));
datatable.addCell(this.createCell(new Phrase("源端口",fontHeader),color,Element.ALIGN_CENTER,Element.ALIGN_MIDDLE,1));
datatable.addCell(this.createCell(new Phrase("目的IP地址",fontHeader),color,Element.ALIGN_CENTER,Element.ALIGN_MIDDLE,1));
datatable.addCell(this.createCell(new Phrase("目的端口",fontHeader),color,Element.ALIGN_CENTER,Element.ALIGN_MIDDLE,1));
datatable.addCell(this.createCell(new Phrase("协议类型",fontHeader),color,Element.ALIGN_CENTER,Element.ALIGN_MIDDLE,1));
datatable.addCell(this.createCell(new Phrase("次数",fontHeader),color,Element.ALIGN_CENTER,Element.ALIGN_MIDDLE,1));
datatable.addCell(this.createCell(new Phrase("日志内容",fontHeader),color,Element.ALIGN_CENTER,Element.ALIGN_MIDDLE,1));
datatable.endHeaders();
List netlogList = null;
TblNetlog netlog = null;
NetlogBusiness netlogBusiness = new NetlogBusiness();
int count = netlogBusiness.getNetlogCount(hqlCount);
netlogList = netlogBusiness.getAllNetlog(0,count,hqlSearch);
for(int i=0;i<netlogList.size();i++)
{
netlog = (TblNetlog)netlogList.get(i);
datatable.addCell(new Phrase(String.valueOf(i+1),fontContent));
datatable.addCell(new Phrase(netlog.getDeviceId().toString(),fontContent));
datatable.addCell(new Phrase(netlog.getTime().toLocaleString(),fontContent));
datatable.addCell(new Phrase(netlog.getCategory(),fontContent));
datatable.addCell(new Phrase(netlog.getSeverity(),fontContent));
datatable.addCell(new Phrase(netlog.getEvent(),fontContent));
datatable.addCell(new Phrase(netlog.getSrcIp(),fontContent));
datatable.addCell(new Phrase(netlog.getSrcPort(),fontContent));
datatable.addCell(new Phrase(netlog.getDstIp(),fontContent));
datatable.addCell(new Phrase(netlog.getDstPort(),fontContent));
datatable.addCell(new Phrase(netlog.getProtocol(),fontContent));
datatable.addCell(new Phrase(netlog.getOccurrence().toString(),fontContent));
datatable.addCell(new Phrase(netlog.getContent(),fontContent));
}
document.add(datatable);
//统计信息
Paragraph paraTotol = new Paragraph("纪录条数:"+count, fontHeader);
paraTotol.setAlignment(Element.ALIGN_CENTER);
document.add(paraTotol);
Paragraph paraTime = new Paragraph("创建时间:"+new Date().toLocaleString(), fontContent);
paraTime.setAlignment(Element.ALIGN_LEFT);
document.add(paraTime);
// step 5: we close the document (the outputstream is also closed internally)
document.close();
// 设置 response headers
response.setHeader("Expires", "0");
response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
response.setContentLength(baos.size());
//创建servletoutputstream流对象,即为response。getoutputstream
ServletOutputStream out = response.getOutputStream();
baos.writeTo(out);//将字节输出流写入到servletoutputstream
out.flush();//out。flush输出内容
} catch (Exception e) {
messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
"sys.common.error", e.toString()));
saveMessages(request, messages);
return mapping.findForward("failure");
}
return null;
}
public Cell createCell(Phrase phrase,Color color,int halign,int valign,int colspan ) throws BadElementException
{
Cell cell = new Cell(phrase);
cell.setHorizontalAlignment(halign);
cell.setVerticalAlignment(valign);
cell.setColspan(colspan);
cell.setBackgroundColor(color);
return cell;
}
}
|