Package org.apache.jmeter.control

Source Code of org.apache.jmeter.control.LoopController

/*
* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation.  All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache JMeter" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache JMeter", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation.  For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.jmeter.control;

import org.apache.jmeter.samplers.Entry;
import org.apache.jmeter.samplers.CycleEntry;
import org.apache.jmeter.util.JMeterUtils;
import java.io.Serializable;
/************************************************************
*  Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
*
*@author     Michael Stover
*@created    $Date: 2002/03/04 23:08:54 $
*@version    1.0
***********************************************************/

public class LoopController extends LogicController implements Serializable
{
  private int loops = -1;
  private int loopCount = 0;

  boolean continueForever = true;

  /************************************************************
   *  !ToDo (Constructor description)
   ***********************************************************/
  public LoopController()
  {
    this.setName(getClassLabel());
  }

  /************************************************************
   *  !ToDo (Method description)
   *
   *@param  loops  !ToDo (Parameter description)
   ***********************************************************/
  public void setLoops(int loops)
  {
    this.loops = loops;
  }

  /************************************************************
   *  Gets the GuiClass attribute of the GenericController object
   *
   *@return    The GuiClass value
   ***********************************************************/
  public Class getGuiClass()
  {
    return org.apache.jmeter.gui.LoopControlPanel.class;
  }

  /************************************************************
   *  Gets the ClassLabel attribute of the GenericController object
   *
   *@return    The ClassLabel value
   ***********************************************************/
  public String getClassLabel()
  {
    return JMeterUtils.getResString("loop_controller_title");
  }

  /************************************************************
   *  !ToDoo (Method description)
   *
   *@return    !ToDo (Return description)
   ***********************************************************/
  public int getLoops()
  {
    return loops;
  }

  public void setContinueForever(boolean forever)
  {
    continueForever = forever;
  }


  public boolean getContinueForever()
  {
    return continueForever;
  }

  /************************************************************
   *  !ToDoo (Method description)
   *
   *@return    !ToDo (Return description)
   ***********************************************************/
  public Class getTagHandlerClass()
  {
    return org.apache.jmeter.save.handlers.LoopControlHandler.class;
  }

  /************************************************************
   *  !ToDo (Method description)
   *
   *@return    !ToDo (Return description)
   ***********************************************************/
  public Object clone()
  {
    LoopController control = new LoopController();
    control.setLoops(loops);
    control.setContinueForever(continueForever);
    standardCloneProc(control);
    return control;
  }

  /************************************************************
   *  !ToDo (Method description)
   ***********************************************************/
  public void uncompile()
  {
    super.uncompile();
    loopCount = 0;
  }

  /************************************************************
   *  Description of the Method
   *
   *@return    Description of the Returned Value
   ***********************************************************/
  protected Entry endEntryCycle()
  {
    if (controlIt.hasNext())
    {
      current = (SamplerController)controlIt.next();
    }
    else
    {
      if (loops > -1)
      {
        loopCount++;
      }
      controlIt = null;
    }
    return nextEntry();
  }

  /************************************************************
   *  !ToDo (Method description)
   *
   *@return    !ToDo (Return description)
   ***********************************************************/
  protected boolean init()
  {
    if (controlIt == null)
    {
      if (endOfLoop())
      {
        return false;
      }
      controlIt = subControllers.iterator();
      if (controlIt.hasNext())
      {
        current = (SamplerController)controlIt.next();
      }
      else
      {
        return false;
      }
    }
    return true;
  }

  private boolean endOfLoop()
  {
    return loops > -1 && loopCount >= loops;
  }

  /************************************************************
   *  Retrieves the next Entry to be sampled.
   *
   *@return    !ToDo (Return description)
   ***********************************************************/
  public Entry nextEntry()
  {
    Entry entry = null;
    if (!init())
    {
      if(endOfLoop())
      {
        if(continueForever)
        {
          loopCount = 0;
          return new CycleEntry();
        }
        else
        {
          return null;
        }
      }
      return null;
    }
    entry = current.nextEntry();
    if (entry == null)
    {
      return removeFromIterator();
    }
    else if (entry instanceof CycleEntry)
    {
      return endEntryCycle();
    }
    else
    {
      configureEntry(entry);
    }
    return entry;
  }
}
TOP

Related Classes of org.apache.jmeter.control.LoopController

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.