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

Source Code of com.eviware.soapui.impl.wsdl.panels.loadtest.StatisticsDesktopPanel$SelectStepComboBoxModel$InternalTestSuiteListener

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

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

import javax.swing.AbstractListModel;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;

import com.eviware.soapui.impl.support.actions.ShowOnlineHelpAction;
import com.eviware.soapui.impl.wsdl.loadtest.WsdlLoadTest;
import com.eviware.soapui.impl.wsdl.loadtest.data.actions.ExportStatisticsHistoryAction;
import com.eviware.soapui.impl.wsdl.support.HelpUrls;
import com.eviware.soapui.model.support.TestSuiteListenerAdapter;
import com.eviware.soapui.model.testsuite.TestStep;
import com.eviware.soapui.support.UISupport;
import com.eviware.soapui.support.components.JXToolBar;
import com.eviware.soapui.ui.support.DefaultDesktopPanel;

/**
* DesktopPanel for Statistics Graphs
*
* @author Ole.Matzura
*/

public class StatisticsDesktopPanel extends DefaultDesktopPanel
{
  private JPanel panel;
  private final WsdlLoadTest loadTest;
  private JStatisticsGraph statisticsGraph;
  private JButton exportButton;
  private SelectStepComboBoxModel selectStepComboBoxModel;
  private InternalPropertyChangeListener propertyChangeListener = new InternalPropertyChangeListener();
  private JComboBox resolutionCombo;

  public StatisticsDesktopPanel( WsdlLoadTest loadTest )
  {
    super( "Statistics for [" + loadTest.getName() + "]", null, null );
    this.loadTest = loadTest;

    loadTest.addPropertyChangeListener( propertyChangeListener );

    buildUI();
  }

  private void buildUI()
  {
    statisticsGraph = new JStatisticsGraph( loadTest );

    JScrollPane scrollPane = new JScrollPane( statisticsGraph );
    scrollPane.getViewport().setBackground( Color.WHITE );
    scrollPane.setHorizontalScrollBarPolicy( ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS );

    panel = UISupport.buildPanelWithToolbarAndStatusBar( buildToolbar(), scrollPane, statisticsGraph.getLegend() );
    panel.setPreferredSize( new Dimension( 600, 400 ) );
  }

  private JComponent buildToolbar()
  {
    exportButton = UISupport.createToolbarButton( new ExportStatisticsHistoryAction( statisticsGraph ) );

    JXToolBar toolbar = UISupport.createToolbar();

    toolbar.addSpace( 5 );
    toolbar.addLabeledFixed( "Select Step:", buildSelectStepCombo() );
    toolbar.addUnrelatedGap();
    toolbar.addLabeledFixed( "Resolution:", buildResolutionCombo() );
    toolbar.addGlue();
    toolbar.addFixed( exportButton );
    toolbar.addFixed( UISupport.createToolbarButton( new ShowOnlineHelpAction( HelpUrls.STATISTICSGRAPH_HELP_URL ) ) );

    return toolbar;
  }

  private JComponent buildResolutionCombo()
  {
    resolutionCombo = new JComboBox( new String[] { "data", "250", "500", "1000" } );
    resolutionCombo.setEditable( true );
    resolutionCombo.setToolTipText( "Sets update interval of graph in milliseconds" );
    long resolution = statisticsGraph.getResolution();
    resolutionCombo.setSelectedItem( resolution == 0 ? "data" : String.valueOf( resolution ) );
    resolutionCombo.addItemListener( new ItemListener()
    {

      public void itemStateChanged( ItemEvent e )
      {
        try
        {
          String value = resolutionCombo.getSelectedItem().toString();
          long resolution = value.equals( "data" ) ? 0 : Long.parseLong( value );
          if( resolution != statisticsGraph.getResolution() )
          {
            statisticsGraph.setResolution( resolution );
          }
        }
        catch( Exception ex )
        {
          long resolution = statisticsGraph.getResolution();
          resolutionCombo.setSelectedItem( resolution == 0 ? "data" : String.valueOf( resolution ) );
        }
      }
    } );
    return resolutionCombo;
  }

  private JComponent buildSelectStepCombo()
  {
    selectStepComboBoxModel = new SelectStepComboBoxModel();
    JComboBox selectStepCombo = new JComboBox( selectStepComboBoxModel );
    selectStepCombo.setRenderer( new TestStepCellRenderer() );
    return selectStepCombo;
  }

  public JComponent getComponent()
  {
    return panel;
  }

  private final class InternalPropertyChangeListener implements PropertyChangeListener
  {
    public void propertyChange( PropertyChangeEvent evt )
    {
      if( evt.getPropertyName().equals( WsdlLoadTest.NAME_PROPERTY ) )
      {
        setTitle( "Statistics for [" + loadTest.getName() + "]" );
      }
    }
  }

  private class SelectStepComboBoxModel extends AbstractListModel implements ComboBoxModel
  {
    private TestStep selectedStep;
    private InternalTestSuiteListener testSuiteListener = new InternalTestSuiteListener();

    public SelectStepComboBoxModel()
    {
      loadTest.getTestCase().getTestSuite().addTestSuiteListener( testSuiteListener );
    }

    public void setSelectedItem( Object anItem )
    {
      if( anItem == selectedStep )
        return;

      if( anItem == null || anItem.equals( "Total" ) )
        selectedStep = null;

      if( anItem instanceof TestStep )
      {
        selectedStep = ( TestStep )anItem;
      }

      statisticsGraph.setTestStep( selectedStep );
    }

    public Object getSelectedItem()
    {
      return selectedStep == null ? "Total" : selectedStep;
    }

    public int getSize()
    {
      return loadTest.getTestCase().getTestStepCount() + 1;
    }

    public Object getElementAt( int index )
    {
      return index == getSize() - 1 ? "Total" : loadTest.getTestCase().getTestStepAt( index );
    }

    private final class InternalTestSuiteListener extends TestSuiteListenerAdapter
    {
      public void testStepAdded( TestStep testStep, int index )
      {
        if( testStep.getTestCase() == loadTest.getTestCase() )
        {
          fireIntervalAdded( SelectStepComboBoxModel.this, index, index );
        }
      }

      public void testStepRemoved( TestStep testStep, int index )
      {
        if( testStep.getTestCase() == loadTest.getTestCase() )
        {
          if( selectedStep == testStep )
          {
            setSelectedItem( null );
            fireContentsChanged( SelectStepComboBoxModel.this, -1, -1 );
          }

          fireIntervalRemoved( SelectStepComboBoxModel.this, index, index );
        }
      }
    }

    public void release()
    {
      loadTest.getTestCase().getTestSuite().removeTestSuiteListener( testSuiteListener );
    }
  }

  private final static class TestStepCellRenderer extends DefaultListCellRenderer
  {
    public Component getListCellRendererComponent( JList list, Object value, int index, boolean isSelected,
        boolean cellHasFocus )
    {
      JLabel label = ( JLabel )super.getListCellRendererComponent( list, value, index, isSelected, cellHasFocus );

      if( value instanceof TestStep )
        label.setText( ( ( TestStep )value ).getName() );

      return label;
    }
  }

  public boolean onClose( boolean canCancel )
  {
    selectStepComboBoxModel.release();
    loadTest.removePropertyChangeListener( propertyChangeListener );
    statisticsGraph.release();

    return super.onClose( canCancel );
  }
}
TOP

Related Classes of com.eviware.soapui.impl.wsdl.panels.loadtest.StatisticsDesktopPanel$SelectStepComboBoxModel$InternalTestSuiteListener

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.