Package org.apache.jmeter.control

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

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

import java.io.Serializable;

import org.apache.jmeter.samplers.Sampler;
import org.apache.jmeter.testelement.TestElement;
import org.apache.jmeter.testelement.property.IntegerProperty;

public class InterleaveControl extends GenericController implements Serializable {
  private static final String STYLE = "InterleaveControl.style";// $NON-NLS-1$

  public static final int IGNORE_SUB_CONTROLLERS = 0;

  public static final int USE_SUB_CONTROLLERS = 1;

  private boolean skipNext;

  private transient TestElement searchStart = null;

  private boolean currentReturnedAtLeastOne;

  private boolean stillSame = true;

  /***************************************************************************
   * Constructor for the InterleaveControl object
   **************************************************************************/
  public InterleaveControl() {
  }

  /*
   * (non-Javadoc)
   *
   * @see org.apache.jmeter.control.GenericController#reInitialize()
   */
  public void reInitialize() {
    setFirst(true);
    currentReturnedAtLeastOne = false;
    searchStart = null;
    stillSame = true;
    skipNext = false;
    incrementIterCount();
    recoverRunningVersion();
  }

  public void setStyle(int style) {
    setProperty(new IntegerProperty(STYLE, style));
  }

  public int getStyle() {
    return getPropertyAsInt(STYLE);
  }

  /*
   * (non-Javadoc)
   *
   * @see org.apache.jmeter.control.Controller#next()
   */
  public Sampler next() {
    if (isSkipNext()) {
      reInitialize();
      return null;
    }
    return super.next();
  }

  /*
   * (non-Javadoc)
   *
   * @see GenericController#nextIsAController(Controller)
   */
  protected Sampler nextIsAController(Controller controller) throws NextIsNullException {
    Sampler sampler = controller.next();
    if (sampler == null) {
      currentReturnedNull(controller);
      return next();
    }
    currentReturnedAtLeastOne = true;
    if (getStyle() == IGNORE_SUB_CONTROLLERS) {
      incrementCurrent();
      skipNext = true;
    } else {
      searchStart = null;
    }
    return sampler;
  }

  /*
   * (non-Javadoc)
   *
   * @see org.apache.jmeter.control.GenericController#nextIsASampler(Sampler)
   */
  protected Sampler nextIsASampler(Sampler element) throws NextIsNullException {
    skipNext = true;
    incrementCurrent();
    return element;
  }

  /**
   * If the current is null, reset and continue searching. The searchStart
   * attribute will break us off when we start a repeat.
   *
   * @see org.apache.jmeter.control.GenericController#nextIsNull()
   */
  protected Sampler nextIsNull() {
    resetCurrent();
    return next();
  }

  /*
   * (non-Javadoc)
   *
   * @see GenericController#setCurrentElement(TestElement)
   */
  protected void setCurrentElement(TestElement currentElement) throws NextIsNullException {
    // Set the position when next is first called, and don't overwrite
    // until reInitialize is called.
    if (searchStart == null) {
      searchStart = currentElement;
    } else if (searchStart == currentElement && !stillSame) {
      // We've gone through the whole list and are now back at the start
      // point of our search.
      reInitialize();
      throw new NextIsNullException();
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see GenericController#currentReturnedNull(Controller)
   */
  protected void currentReturnedNull(Controller c) {
    if (c.isDone()) {
      removeCurrentElement();
    } else if (getStyle() == USE_SUB_CONTROLLERS) {
      incrementCurrent();
    }
  }

  /**
   * @return skipNext
   */
  protected boolean isSkipNext() {
    return skipNext;
  }

  /**
   * @param skipNext
   */
  protected void setSkipNext(boolean skipNext) {
    this.skipNext = skipNext;
  }

  /*
   * (non-Javadoc)
   *
   * @see org.apache.jmeter.control.GenericController#incrementCurrent()
   */
  protected void incrementCurrent() {
    if (currentReturnedAtLeastOne) {
      skipNext = true;
    }
    stillSame = false;
    super.incrementCurrent();
  }
}
TOP

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

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.