content: /**
   * Licensed to the Apache Software Foundation (ASF) under one or more
   * contributor license agreements.  See the NOTICE file distributed with
   * this work for additional information regarding copyright ownership.
   * The ASF licenses this file to You under the Apache License, Version 2.0
   * (the "License"); you may not use this file except in compliance with
   * the License.  You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package org.apache.activemq.tool;
  
  import java.io.File;
  import java.io.FileOutputStream;
  import java.io.IOException;
  import java.io.PrintWriter;
  import java.util.Enumeration;
  import java.util.Properties;
  
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  
  public class ReportGenerator {
  
      private static final Logger LOG = LoggerFactory.getLogger(ReportGenerator.class);
      private String reportDirectory;
      private String reportName;
      private PrintWriter writer;
      private File reportFile;
      private Properties testSettings;
  
      public ReportGenerator() {
      }
  
      public ReportGenerator(String reportDirectory, String reportName) {
          this.setReportDirectory(reportDirectory);
          this.setReportName(reportName);
      }
  
      public void startGenerateReport() {
  
          File reportDir = new File(getReportDirectory());
  
          // Create output directory if it doesn't exist.
          if (!reportDir.exists()) {
              reportDir.mkdirs();
          }
  
          if (reportDir != null) {
              reportFile = new File(this.getReportDirectory() + File.separator + this.getReportName() + ".xml");
          }
  
          try {
              this.writer = new PrintWriter(new FileOutputStream(reportFile));
          } catch (IOException e1) {
              e1.printStackTrace(); // To change body of catch statement use
                                      // File | Settings | File Templates.
          }
      }
  
      public void stopGenerateReport() {
          writeWithIndent(0, "</test-report>");
          this.getWriter().flush();
          this.getWriter().close();
          LOG.info(" TEST REPORT OUTPUT : " + reportFile.getAbsolutePath());
  
      }
  
      protected void addTestInformation() {
  
          writeWithIndent(0, "<test-report>");
          writeWithIndent(2, "<test-information>");
  
          writeWithIndent(4, "<os-name>" + System.getProperty("os.name") + "</os-name>");
          writeWithIndent(4, "<java-version>" + System.getProperty("java.version") + "</java-version>");
  
      }
  
      protected void addClientSettings() {
          if (this.getTestSettings() != null) {
              Enumeration keys = getTestSettings().propertyNames();
  
              writeWithIndent(4, "<test-settings>");
  
              String key;
              while (keys.hasMoreElements()) {
                  key = (String)keys.nextElement();
                  writeWithIndent(6, "<" + key + ">" + getTestSettings().get(key) + "</" + key + ">");
              }
  
              writeWithIndent(4, "</test-settings>");
          }
      }
  
      protected void endTestInformation() {
          writeWithIndent(2, "</test-information>");
  
      }
  
      protected void startTestResult(long checkpointInterval) {
          long intervalInSec = checkpointInterval / 1000;
          writeWithIndent(2, "<test-result checkpoint_interval_in_sec='" + intervalInSec + "' >");
      }
  
      protected void endTestResult() {
          writeWithIndent(2, "</test-result>");
      }
  
      protected void writeWithIndent(int indent, String result) {
          StringBuffer buffer = new StringBuffer();
  
          for (int i = 0; i < indent; ++i) {
              buffer.append(" ");
          }
  
          buffer.append(result);
          writer.println(buffer.toString());
      }
  
      public PrintWriter getWriter() {
          return this.writer;
      }
  
      public String getReportDirectory() {
          return reportDirectory;
      }
  
      public void setReportDirectory(String reportDirectory) {
          this.reportDirectory = reportDirectory;
      }
  
      public String getReportName() {
          return reportName;
      }
  
      public void setReportName(String reportName) {
          this.reportName = reportName;
      }
  
      public Properties getTestSettings() {
          return testSettings;
      }
  
      public void setTestSettings(Properties testSettings) {
          this.testSettings = testSettings;
      }
  }
  