Package com.eviware.soapui.impl.wsdl.loadtest.strategy

Source Code of com.eviware.soapui.impl.wsdl.loadtest.strategy.SimpleLoadStrategy$ConfigDocumentListener

/*
*  soapUI, copyright (C) 2004-2011 eviware.com
*
*  soapUI is free software; you can redistribute it and/or modify it under the
*  terms of version 2.1 of the GNU Lesser General Public License as published by
*  the Free Software Foundation.
*
*  soapUI 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 Lesser General Public License for more details at gnu.org.
*/

package com.eviware.soapui.impl.wsdl.loadtest.strategy;

import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.text.Document;

import org.apache.xmlbeans.XmlObject;

import com.eviware.soapui.SoapUI;
import com.eviware.soapui.impl.wsdl.loadtest.WsdlLoadTest;
import com.eviware.soapui.model.testsuite.LoadTestRunContext;
import com.eviware.soapui.model.testsuite.LoadTestRunner;
import com.eviware.soapui.model.testsuite.TestCaseRunContext;
import com.eviware.soapui.model.testsuite.TestCaseRunner;
import com.eviware.soapui.support.DocumentListenerAdapter;
import com.eviware.soapui.support.UISupport;
import com.eviware.soapui.support.xml.XmlObjectConfigurationBuilder;
import com.eviware.soapui.support.xml.XmlObjectConfigurationReader;
import com.jgoodies.forms.builder.ButtonBarBuilder;

/**
* LoadStrategy allowing maximum runs and request delays
*
* @author Ole.Matzura
*/

public class SimpleLoadStrategy extends AbstractLoadStrategy
{
  private static final int DEFAULT_TEST_DELAY = 1000;
  private static final float DEFAULT_RANDOM_FACTOR = 0.5F;
  public static final String STRATEGY_TYPE = "Simple";

  private int testDelay = DEFAULT_TEST_DELAY;
  private float randomFactor = DEFAULT_RANDOM_FACTOR;

  private JPanel configPanel;
  private JTextField testDelayField;
  private JTextField randomFactorField;

  public SimpleLoadStrategy( XmlObject config, WsdlLoadTest loadTest )
  {
    super( STRATEGY_TYPE, loadTest );

    if( config != null )
    {
      XmlObjectConfigurationReader reader = new XmlObjectConfigurationReader( config );
      testDelay = reader.readInt( "testDelay", DEFAULT_TEST_DELAY );
      randomFactor = reader.readFloat( "randomFactor", DEFAULT_RANDOM_FACTOR );
    }
  }

  public XmlObject getConfig()
  {
    XmlObjectConfigurationBuilder builder = new XmlObjectConfigurationBuilder();
    builder.add( "testDelay", testDelay );
    builder.add( "randomFactor", randomFactor );
    return builder.finish();
  }

  public void beforeTestCase( LoadTestRunner loadTestRunner, LoadTestRunContext context, TestCaseRunner testRunner,
      TestCaseRunContext runContext )
  {
    int delay = calculateDelay( testDelay );
    if( delay == 0 )
      return;
    try
    {
      Thread.sleep( delay );
    }
    catch( InterruptedException e )
    {
      SoapUI.logError( e );
    }
  }

  public int calculateDelay( int delay )
  {
    if( delay == 0 || randomFactor == 0 )
      return delay;

    int fixDelay = ( int )( ( float )delay * ( 1 - randomFactor ) );
    int randDelay = ( int )( randomFactor == 0 ? 0 : ( float )( delay - fixDelay ) * Math.random() );
    return fixDelay + randDelay;
  }

  public JComponent getConfigurationPanel()
  {
    if( configPanel == null )
    {
      ButtonBarBuilder builder = new ButtonBarBuilder();

      testDelayField = new JTextField( 5 );
      UISupport.setPreferredHeight( testDelayField, 18 );
      testDelayField.setHorizontalAlignment( JTextField.RIGHT );
      testDelayField.setText( String.valueOf( testDelay ) );
      testDelayField.setToolTipText( "Sets the delay between each test run in milliseconds" );
      testDelayField.getDocument().addDocumentListener( new ConfigDocumentListener() );

      builder.addFixed( new JLabel( "Test Delay" ) );
      builder.addRelatedGap();

      builder.addFixed( testDelayField );
      builder.addRelatedGap();

      randomFactorField = new JTextField( 4 );
      UISupport.setPreferredHeight( randomFactorField, 18 );
      randomFactorField.setHorizontalAlignment( JTextField.RIGHT );
      randomFactorField.setText( String.valueOf( randomFactor ) );
      randomFactorField
          .setToolTipText( "Specifies the relative amount of randomization for delay (0 = no random, 1 = all random)" );
      randomFactorField.getDocument().addDocumentListener( new ConfigDocumentListener() );

      builder.addFixed( new JLabel( "Random" ) );
      builder.addRelatedGap();
      builder.addFixed( randomFactorField );

      configPanel = builder.getPanel();
    }

    return configPanel;
  }

  private final class ConfigDocumentListener extends DocumentListenerAdapter
  {
    public void update( Document document )
    {
      try
      {
        if( document == testDelayField.getDocument() )
          testDelay = Integer.parseInt( testDelayField.getText() );
        if( document == randomFactorField.getDocument() )
          randomFactor = Float.parseFloat( randomFactorField.getText().replace( ',', '.' ) );

        notifyConfigurationChanged();
      }
      catch( NumberFormatException e )
      {
      }
    }
  }

  public int getTestDelay()
  {
    return testDelay;
  }

  public float getRandomFactor()
  {
    return randomFactor;
  }

  /**
   * Factory for SimpleLoadStrategy class
   *
   * @author Ole.Matzura
   */

  public static class Factory implements LoadStrategyFactory
  {
    public String getType()
    {
      return STRATEGY_TYPE;
    }

    public LoadStrategy build( XmlObject config, WsdlLoadTest loadTest )
    {
      return new SimpleLoadStrategy( config, loadTest );
    }

    public LoadStrategy create( WsdlLoadTest loadTest )
    {
      return new SimpleLoadStrategy( null, loadTest );
    }
  }
}
TOP

Related Classes of com.eviware.soapui.impl.wsdl.loadtest.strategy.SimpleLoadStrategy$ConfigDocumentListener

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.