/******************************************************************************* * This file is part of OpenNMS(R). * * Copyright (C) 2009-2011 The OpenNMS Group, Inc. * OpenNMS(R) is Copyright (C) 1999-2011 The OpenNMS Group, Inc. * * OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc. * * OpenNMS(R) is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published * by the Free Software Foundation, either version 3 of the License, * or (at your option) any later version. * * OpenNMS(R) is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with OpenNMS(R). If not, see: * http://www.gnu.org/licenses/ * * For more information contact: * OpenNMS(R) Licensing <license@opennms.org> * http://www.opennms.org/ * http://www.opennms.com/ *******************************************************************************/ package org.opennms.report.inventory; import java.io.IOException; import java.util.Date; import org.apache.log4j.Logger; import org.opennms.report.ReportMailer; import org.opennms.reporting.availability.render.ReportRenderException; import org.opennms.reporting.availability.render.ReportRenderer; /** * <p>InventoryReportRunner class.</p> * * @author ranger * @version $Id: $ */ public class InventoryReportRunner implements Runnable { String theDate; String theField; String reportFormat; String reportEmail; String user; Date reportRequestDate; InventoryReportCalculator calculator; ReportRenderer m_htmlReportRenderer; ReportRenderer m_nullReportRenderer; /** * <p>getNullReportRenderer</p> * * @return a {@link org.opennms.reporting.availability.render.ReportRenderer} object. */ public ReportRenderer getNullReportRenderer() { return m_nullReportRenderer; } /** * <p>setNullReportRenderer</p> * * @param nullReportRenderer a {@link org.opennms.reporting.availability.render.ReportRenderer} object. */ public void setNullReportRenderer(ReportRenderer nullReportRenderer) { m_nullReportRenderer = nullReportRenderer; } /** * <p>getHtmlReportRenderer</p> * * @return a {@link org.opennms.reporting.availability.render.ReportRenderer} object. */ public ReportRenderer getHtmlReportRenderer() { return m_htmlReportRenderer; } /** * <p>setHtmlReportRenderer</p> * * @param htmlReportRenderer a {@link org.opennms.reporting.availability.render.ReportRenderer} object. */ public void setHtmlReportRenderer(ReportRenderer htmlReportRenderer) { m_htmlReportRenderer = htmlReportRenderer; } /** * <p>Getter for the field <code>theDate</code>.</p> * * @return a {@link java.lang.String} object. */ public String getTheDate() { return theDate; } /** * <p>Setter for the field <code>theDate</code>.</p> * * @param theDate a {@link java.lang.String} object. */ public void setTheDate(String theDate) { this.theDate = theDate; } /** * <p>Getter for the field <code>theField</code>.</p> * * @return a {@link java.lang.String} object. */ public String getTheField() { return theField; } /** * <p>Setter for the field <code>theField</code>.</p> * * @param theField a {@link java.lang.String} object. */ public void setTheField(String theField) { this.theField = theField; } /** * <p>Getter for the field <code>reportFormat</code>.</p> * * @return a {@link java.lang.String} object. */ public String getReportFormat() { return reportFormat; } /** * <p>Setter for the field <code>reportFormat</code>.</p> * * @param reportFormat a {@link java.lang.String} object. */ public void setReportFormat(String reportFormat) { this.reportFormat = reportFormat; } /** * <p>Getter for the field <code>reportEmail</code>.</p> * * @return a {@link java.lang.String} object. */ public String getReportEmail() { return reportEmail; } /** * <p>Setter for the field <code>reportEmail</code>.</p> * * @param reportEmail a {@link java.lang.String} object. */ public void setReportEmail(String reportEmail) { this.reportEmail = reportEmail; } /** * <p>Getter for the field <code>user</code>.</p> * * @return a {@link java.lang.String} object. */ public String getUser() { return user; } /** * <p>Setter for the field <code>user</code>.</p> * * @param user a {@link java.lang.String} object. */ public void setUser(String user) { this.user = user; } /** * <p>Getter for the field <code>reportRequestDate</code>.</p> * * @return a {@link java.util.Date} object. */ public Date getReportRequestDate() { return reportRequestDate; } /** * <p>Setter for the field <code>reportRequestDate</code>.</p> * * @param reportRequestDate a {@link java.util.Date} object. */ public void setReportRequestDate(Date reportRequestDate) { this.reportRequestDate = reportRequestDate; } /** * <p>getInventoryReportCalculator</p> * * @return a {@link org.opennms.report.inventory.InventoryReportCalculator} object. */ public InventoryReportCalculator getInventoryReportCalculator() { return calculator; } /** * <p>setInventoryReportCalculator</p> * * @param inventoryReportCalculator a {@link org.opennms.report.inventory.InventoryReportCalculator} object. */ public void setInventoryReportCalculator( InventoryReportCalculator inventoryReportCalculator) { calculator = inventoryReportCalculator; } /** * <p>run</p> */ public void run() { log().debug("run: getting inventory report on Date ["+ theDate +"] for key [" + theField + "]" + ". Requested by User: " + user + "on Date " + reportRequestDate.toString()); ReportRenderer renderer; calculator.setReportRequestDate(reportRequestDate); calculator.setTheDate(theDate); calculator.setUser(user); calculator.setTheField(theField); if (reportFormat.compareTo("pdftype") == 0){ log().debug("run: generating pdf is still not supported :( sending xml"); renderer = m_nullReportRenderer; } else { log().debug("runRancidListReport generating html"); renderer = m_htmlReportRenderer; } try { calculator.calculate(); calculator.writeXML(); String outputFile = calculator.getOutputFileName(); log().debug("Written Configuration Report as XML to " + outputFile); renderer.setInputFileName(outputFile); log().debug("rendering XML " + outputFile + " as " + renderer.getOutputFileName()); renderer.render(); ReportMailer mailer = new ReportMailer( reportEmail, renderer.getBaseDir() + renderer.getOutputFileName(), "OpenNMS Inventory Report"); mailer.send(); } catch (InventoryCalculationException ce) { log().fatal("Unable to calculate report data ", ce); } catch (ReportRenderException re) { log().fatal("Unable to render report ", re); } catch (IOException ioe) { log().fatal("Unable to render report ", ioe); } /* log().debug("InventoryService runNodeBaseInventoryReport object filled"); SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHHmmss"); String datestamp = fmt.format(new java.util.Date()) ; String xmlFileName = ConfigFileConstants.getHome() + "/share/reports/NODEINVENTORY" + datestamp + ".xml"; // Generate source XML FileWriter writer = new FileWriter(xmlFileName); Marshaller marshaller = new Marshaller(writer); marshaller.setSuppressNamespaces(true); marshaller.marshal(rnbi); writer.close(); log().debug("runNodeBaseInventoryReport marshal done"); if (reportFormat.compareTo("pdftype") == 0){ log().debug("runNodeBaseInventoryReport generating pdf is still not supported :( sending xml"); log().debug("runNodeBaseInventoryReport xml sending email"); ReportMailer mailer = new ReportMailer(reportEmail,xmlFileName,"OpenNMS Inventory Report"); mailer.send(); } else { log().debug("runNodeBaseInventoryReport generating html"); String htmlFileName=ConfigFileConstants.getHome() + "/share/reports/NODEINVENTORY" + datestamp + ".html"; File file = new File(htmlFileName); FileOutputStream hmtlFileWriter = new FileOutputStream(file); PDFWriter htmlWriter = new PDFWriter(ConfigFileConstants.getFilePathString() + "/rws-nbinventoryreport.xsl"); File fileR = new File(xmlFileName); Reader fileReader = new InputStreamReader(new FileInputStream(fileR), "UTF-8"); htmlWriter.generateHTML(fileReader, hmtlFileWriter); log().debug("runNodeBaseInventoryReport html sending email"); ReportMailer mailer = new ReportMailer(reportEmail,htmlFileName,"OpenNMS Inventory Report"); mailer.send(); } } catch (Throwable e){ log().debug("InventoryService runNodeBaseInventoryReport exception "+ e.getMessage() ); } */ } private static Logger log() { return Logger.getLogger("Rancid"); } }