Package org.apache.jmeter.testelement

Source Code of org.apache.jmeter.testelement.ReportPlan

/*
* 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.jmeter.testelement;

import java.io.IOException;
import java.io.Serializable;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.config.ConfigElement;
import org.apache.jmeter.engine.event.LoopIterationEvent;
import org.apache.jmeter.services.FileServer;
import org.apache.jmeter.testelement.property.CollectionProperty;
import org.apache.jmeter.testelement.property.StringProperty;
import org.apache.jmeter.testelement.property.TestElementProperty;
import org.apache.jmeter.threads.ThreadGroup;
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jorphan.logging.LoggingManager;
import org.apache.log.Logger;

public class ReportPlan extends AbstractTestElement implements Serializable, TestListener {
  private static final Logger log = LoggingManager.getLoggerForClass();

  public static final String REPORT_PAGE = "ReportPlan.report_page";

  public static final String USER_DEFINED_VARIABLES = "ReportPlan.user_defined_variables";

  public static final String COMMENTS = "ReportPlan.comments";

  public static final String BASEDIR = "ReportPlan.basedir";

  private transient List reportPages = new LinkedList();

  private transient List configs = new LinkedList();

  private static final List itemsCanAdd = new LinkedList();

  private static ReportPlan plan;

  // There's only 1 test plan, so can cache the mode here
  private static volatile boolean functionalMode = false;

  static {
    itemsCanAdd.add(JMeterUtils.getResString("report_page"));
  }

  public ReportPlan() {
    this(JMeterUtils.getResString("report_plan"));
  }

  public ReportPlan(String name) {
    setName(name);
    setProperty(new CollectionProperty(REPORT_PAGE, reportPages));
  }

  public void setUserDefinedVariables(Arguments vars) {
    setProperty(new TestElementProperty(USER_DEFINED_VARIABLES, vars));
  }

  public String getBasedir() {
    return getPropertyAsString(BASEDIR);
  }

  public void setBasedir(String b) {
    setProperty(BASEDIR, b);
  }

  public Map getUserDefinedVariables() {
    Arguments args = getVariables();
    return args.getArgumentsAsMap();
  }

  private Arguments getVariables() {
    Arguments args = (Arguments) getProperty(USER_DEFINED_VARIABLES).getObjectValue();
    if (args == null) {
      args = new Arguments();
      setUserDefinedVariables(args);
    }
    return args;
  }

  /**
   * Gets the static copy of the functional mode
   *
   * @return mode
   */
  public static boolean getFunctionalMode() {
    return functionalMode;
  }

  public void addParameter(String name, String value) {
    getVariables().addArgument(name, value);
  }

  public static ReportPlan createReportPlan(String name) {
    if (plan == null) {
      if (name == null) {
        plan = new ReportPlan();
      } else {
        plan = new ReportPlan(name);
      }
      plan.setProperty(new StringProperty(TestElement.GUI_CLASS, "org.apache.jmeter.control.gui.ReportGui"));
    }
    return plan;
  }

  public void addTestElement(TestElement tg) {
    super.addTestElement(tg);
    if (tg instanceof ThreadGroup && !isRunningVersion()) {
      addReportPage((ThreadGroup) tg);
    }
  }

  public void addJMeterComponent(TestElement child) {
    if (child instanceof ThreadGroup) {
      addReportPage((ThreadGroup) child);
    }
  }

  /**
   * Gets the ThreadGroups attribute of the TestPlan object.
   *
   * @return the ThreadGroups value
   */
  public Collection getReportPages() {
    return reportPages;
  }

  /**
   * Adds a feature to the ConfigElement attribute of the TestPlan object.
   *
   * @param c
   *            the feature to be added to the ConfigElement attribute
   */
  public void addConfigElement(ConfigElement c) {
    configs.add(c);
  }

  /**
   * Adds a feature to the ThreadGroup attribute of the TestPlan object.
   *
   * @param group
   *            the feature to be added to the ThreadGroup attribute
   */
  public void addReportPage(ThreadGroup group) {
    reportPages.add(group);
  }

  /*
   * (non-Javadoc)
   *
   * @see org.apache.jmeter.testelement.TestListener#testEnded()
   */
  public void testEnded() {
    try {
      FileServer.getFileServer().closeFiles();
    } catch (IOException e) {
      log.error("Problem closing files at end of test", e);
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.apache.jmeter.testelement.TestListener#testEnded(java.lang.String)
   */
  public void testEnded(String host) {
    testEnded();

  }

  /*
   * (non-Javadoc)
   *
   * @see org.apache.jmeter.testelement.TestListener#testIterationStart(org.apache.jmeter.engine.event.LoopIterationEvent)
   */
  public void testIterationStart(LoopIterationEvent event) {
  }

  /*
   * (non-Javadoc)
   *
   * @see org.apache.jmeter.testelement.TestListener#testStarted()
   */
  public void testStarted() {
    if (getBasedir() != null && getBasedir().length() > 0) {
      try {
        FileServer.getFileServer().setBasedir(FileServer.getFileServer().getBaseDir() + getBasedir());
      } catch (IOException e) {
        log.error("Failed to set file server base dir with " + getBasedir(), e);
      }
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.apache.jmeter.testelement.TestListener#testStarted(java.lang.String)
   */
  public void testStarted(String host) {
    testStarted();
  }
}
TOP

Related Classes of org.apache.jmeter.testelement.ReportPlan

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.