/** * Copyright (c)2010-2011 Enterprise Website Content Management System(EWCMS), All rights reserved. * EWCMS PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * http://www.ewcms.com */ package com.ewcms.plugin.report.manager.util; import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.ewcms.plugin.BaseException; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JRParameter; import net.sf.jasperreports.engine.JRQuery; import net.sf.jasperreports.engine.design.JasperDesign; import net.sf.jasperreports.engine.xml.JRXmlLoader; /** * 解析报表文件 * * @author 吴智俊 */ public class TextDesignUtil { /** * 报表固定参数,得到报表参数时需要剔除部分 */ private final static Map<String,String> PARAMMAP = new HashMap<String,String>(); static{ PARAMMAP.put("REPORT_CONTEXT",""); PARAMMAP.put("REPORT_PARAMETERS_MAP",""); PARAMMAP.put("JASPER_REPORT", ""); PARAMMAP.put("REPORT_CONNECTION", ""); PARAMMAP.put("REPORT_MAX_COUNT",""); PARAMMAP.put("REPORT_DATA_SOURCE",""); PARAMMAP.put("REPORT_SCRIPTLET",""); PARAMMAP.put("REPORT_LOCALE",""); PARAMMAP.put("REPORT_RESOURCE_BUNDLE",""); PARAMMAP.put("REPORT_TIME_ZONE",""); PARAMMAP.put("REPORT_FORMAT_FACTORY", ""); PARAMMAP.put("REPORT_CLASS_LOADER",""); PARAMMAP.put("REPORT_URL_HANDLER_FACTORY",""); PARAMMAP.put("REPORT_FILE_RESOLVER", ""); PARAMMAP.put("REPORT_TEMPLATES", ""); PARAMMAP.put("SORT_FIELDS", ""); PARAMMAP.put("FILTER", ""); PARAMMAP.put("REPORT_VIRTUALIZER", ""); PARAMMAP.put("IS_IGNORE_PAGINATION",""); } private JasperDesign design = null; /** * 构造函数 * * @param in 报表数据流 * @throws ReportEngineException */ public TextDesignUtil(InputStream in) throws BaseException { try { design = JRXmlLoader.load(in); } catch (JRException e) { throw new BaseException(); } } /** * 得到报表参数 * * @return List<JRParameter> * @throws ReportEngineException */ public List<JRParameter> getParameters() throws BaseException { List<JRParameter> list = new ArrayList<JRParameter>(); try { JRParameter[] jrplist = design.getParameters(); for (JRParameter jrp : jrplist) { String value = PARAMMAP.get(jrp.getName()); if (value != null) continue; list.add(jrp); } return list; } catch (Exception e) { throw new BaseException(); } } /** * 得到报表SQL语句 * * @return SQL语句 * @throws ReportEngineException */ public String getQueryString() throws BaseException { try { JRQuery jrq = design.getQuery(); String sql = jrq.getText(); return sql; } catch (Exception e) { throw new BaseException(); } } }