Java tutorial
/** * PureInfo Command-phase2 * @(#)PingGuReportsTasker.java 1.0 2008-6-4 * * Copyright(c) 2004-2005, PureInfo Information Technology Corp. Ltd. * All rights reserved, see the license file. * * www.pureinfo.com.cn */ package com.pureinfo.srm.reports.table.data.pinggu; import java.io.FileOutputStream; import java.io.OutputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; import java.util.TimerTask; import org.apache.log4j.Logger; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import com.pureinfo.ark.ArkHelper; import com.pureinfo.ark.content.ArkContentHelper; import com.pureinfo.ark.interaction.list.ColumnInfo; import com.pureinfo.ark.interaction.list.ListHelper; import com.pureinfo.common.sender.SenderHelper; import com.pureinfo.common.sender.model.ISender; import com.pureinfo.common.sender.model.SentInfo; import com.pureinfo.dolphin.context.LocalContextHelper; import com.pureinfo.dolphin.export.ExportHelper; import com.pureinfo.dolphin.export.IConvertor; import com.pureinfo.dolphin.export.impl.SceneryConvertorImpl; import com.pureinfo.dolphin.export.model.DolphinExportGoods; import com.pureinfo.dolphin.model.IObjects; import com.pureinfo.force.PureFactory; import com.pureinfo.force.PureSystem; import com.pureinfo.force.exception.PureException; import com.pureinfo.force.fileserver.FileFactory; import com.pureinfo.srm.SRMTypes; import com.pureinfo.srm.auth.domain.ISRMUserMgr; import com.pureinfo.srm.auth.model.SRMUser; import com.pureinfo.srm.reports.table.data.pinggu.constants.PingGuConstants; import com.pureinfo.srm.reports.table.data.pinggu.form.PingGuParameterVO; import com.pureinfo.srm.reports.table.data.pinggu.reporter.ReportsBase; /** * <P> * Created on 2008-6-4 10:45:29<BR> * Last modified on 2008-6-4 * </P> * TODO describe PingGuReportsTasker here ... * * @author sunjie * @version 1.0, 2008-6-4 * @since Command-phase2 1.0 */ public class PingGuReportsTasker extends TimerTask { FileFactory factory = FileFactory.getInstance(); private SRMUser user; private PingGuParameterVO parameterVO; private Logger logger = Logger.getLogger(this.getClass().getName()); private Set exportBeanSet = new LinkedHashSet(); /** * Returns the user. * * @return the user. */ public SRMUser getUser() { return user; } /** * Sets the user. * * @param _user * the user to set. */ public void setUser(SRMUser _user) { user = _user; } /** * Returns the parameterVO. * * @return the parameterVO. */ public PingGuParameterVO getParameterVO() { return parameterVO; } /** * Sets the parameterVO. * * @param _parameterVO * the parameterVO to set. */ public void setParameterVO(PingGuParameterVO _parameterVO) { parameterVO = _parameterVO; } /** * @see java.util.TimerTask#run() */ public void run() { logger.debug("run..."); ArkHelper.setLoginUser(user); init(); LocalContextHelper.setAttribute(PingGuConstants.ATTRIBUTE_NAME_OF_PARAMETER, parameterVO); String sTempFile = null; OutputStream fos = null; StringBuffer msg = new StringBuffer(); String sFileName; Date startDate = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String title = formatter.format(startDate) + ""; try { sFileName = ""; title += sFileName + "(" + parameterVO.getDeptCode() + ")"; String sFileExt = ".xls"; IMultiSheetExporter exporter = (IMultiSheetExporter) PureFactory.getBean("ExcelExporterMultiSheet"); long totalTime = 0, startTime = startDate.getTime(); // to expor the data into temporay file sTempFile = factory.getNextFileName("EX", sFileExt, true); logger.debug("the file name:" + sTempFile); HSSFWorkbook book = new HSSFWorkbook(); StringBuffer errorBuffer = new StringBuffer(); for (Iterator iterator = exportBeanSet.iterator(); iterator.hasNext();) { DolphinExportGoods goods = new DolphinExportGoods(); ReportsBase report = (ReportsBase) iterator.next(); IConvertor convertor = new SceneryConvertorImpl(report.getExportSenery(), "content"); IObjects objs = null; try { objs = report.getObjs(); List colInfos = getColsInfo(report); String[] headers = new String[colInfos.size()]; String[] properties = new String[colInfos.size()]; for (int i = 0; i < colInfos.size(); i++) { ColumnInfo colInfo = (ColumnInfo) colInfos.get(i); String sHeader = colInfo.getTitle(); headers[i] = sHeader.replaceAll("[\\\\\\[\\]\\?/<>]+", "_"); properties[i] = colInfo.getName(); } goods.setType(ExportHelper.TYPE_EXCEL); goods.setName(report.getReportName()); goods.setHeaders(headers); goods.setData(objs, properties, convertor); exporter.export(book, goods); } catch (Exception e) { logger.error("===============export error.", e); errorBuffer.append(report.getReportName() + ":" + e.getMessage() + "\n\n"); } finally { if (objs != null) objs.clear(); goods.clear(); } } fos = new FileOutputStream(sTempFile); book.write(fos); fos.flush(); fos.close(); fos = null; totalTime = new Date().getTime() - startTime; msg.append("\n" + sFileName + "\n" + getUrl(sTempFile)); msg.append("\n" + ((totalTime) / 60000.0) + " ."); msg.append("\n0.\n"); if (errorBuffer.length() != 0) { msg.append("------------------------------------\n\n"); msg.append("\n"); msg.append(errorBuffer.toString()); } msg.append("------------------------------------\n\n"); msg.append( "\nexcel6553565535"); } catch (Exception ex) { logger.error("failed to export data", ex); msg.append("\n" + ex.getMessage()); } finally { if (fos != null) try { fos.close(); } catch (Exception ex) { } sendSysMsg(msg.toString(), title); } } /** * @param report * @return * @throws PureException */ private List getColsInfo(ReportsBase report) throws PureException { List colInfos; ListHelper lh = new ListHelper(); String sClassName = report.getEntityMetadata().getName(); List baseCols = null; lh.setSenery(report.getExportSenery()); lh.setAct("content"); baseCols = lh.prepareBase(sClassName); colInfos = lh.prepareColsInfo(baseCols, null, null, null, sClassName, false); return colInfos; } private void init() { String[] fieldClassesName = PureSystem.getProperty("pinggu.baobiao.class").split(","); for (int i = 0; i < fieldClassesName.length; i++) { Class fieldClass = null; try { fieldClass = Class.forName(fieldClassesName[i]); ReportsBase reporter = (ReportsBase) fieldClass.newInstance(); reporter.parameter = parameterVO; exportBeanSet.add(reporter); logger.debug("to add export bean:" + reporter); } catch (InstantiationException ex) { logger.error(ex); } catch (IllegalAccessException ex) { logger.error(ex); } catch (ClassNotFoundException ex) { logger.error(ex); } } } /** * @return * @throws PureException */ private String getUrl(String sTempFile) throws PureException { String sUrl = PureSystem.getProperty("srm.url"); int nPos = sUrl.indexOf('/', 8); if (nPos > 0) { sUrl = sUrl.substring(0, nPos); } return sUrl += factory.mapHttpPath(sTempFile, true); } private void sendSysMsg(String _sMsg, String _title) { try { if (user == null) { return; } SentInfo sentInfo = new SentInfo(); ISRMUserMgr m = (ISRMUserMgr) ArkContentHelper.getContentMgrOf(SRMTypes.SRMUSER); SRMUser systemAdmin = (SRMUser) m.lookupByName("super-admin"); sentInfo.setFromAddress(systemAdmin == null ? "1" : String.valueOf(systemAdmin.getId())); sentInfo.setFromPerson("SYSTEM"); sentInfo.setToAddress(String.valueOf(user.getId())); sentInfo.setToPerson(user.getTrueName()); sentInfo.setSubject(_title); sentInfo.setContent(_sMsg); ISender sysSender = SenderHelper.getSender(SenderHelper.TYPE_SYSTEM); sysSender.send(sentInfo); } catch (PureException e) { logger.error(e); } } }