1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.impl.wsdl.panels.loadtest;
14
15 import java.awt.Color;
16 import java.awt.Dimension;
17 import java.awt.event.ItemEvent;
18 import java.awt.event.ItemListener;
19 import java.beans.PropertyChangeEvent;
20 import java.beans.PropertyChangeListener;
21
22 import javax.swing.DefaultComboBoxModel;
23 import javax.swing.JButton;
24 import javax.swing.JComboBox;
25 import javax.swing.JComponent;
26 import javax.swing.JPanel;
27 import javax.swing.JScrollPane;
28 import javax.swing.ScrollPaneConstants;
29
30 import com.eviware.soapui.impl.wsdl.actions.support.ShowOnlineHelpAction;
31 import com.eviware.soapui.impl.wsdl.loadtest.WsdlLoadTest;
32 import com.eviware.soapui.impl.wsdl.loadtest.data.LoadTestStatistics.Statistic;
33 import com.eviware.soapui.impl.wsdl.loadtest.data.actions.ExportSamplesHistoryAction;
34 import com.eviware.soapui.impl.wsdl.support.HelpUrls;
35 import com.eviware.soapui.support.UISupport;
36 import com.eviware.soapui.support.components.JXToolBar;
37 import com.eviware.soapui.ui.support.DefaultDesktopPanel;
38
39 /***
40 * DesktopPanel for StatisticsHistory Graphs
41 *
42 * @author Ole.Matzura
43 */
44
45 public class StatisticsHistoryDesktopPanel extends DefaultDesktopPanel
46 {
47 private JPanel panel;
48 private final WsdlLoadTest loadTest;
49 private JStatisticsHistoryGraph historyGraph;
50 private JButton exportButton;
51 private JComboBox selectStatisticCombo;
52 private StatisticsHistoryDesktopPanel.InternalPropertyChangeListener propertyChangeListener;
53 private JComboBox resolutionCombo;
54
55 public StatisticsHistoryDesktopPanel( WsdlLoadTest loadTest )
56 {
57 super( "Statistics History for [" + loadTest.getName() + "]", null, null);
58 this.loadTest = loadTest;
59
60 propertyChangeListener = new InternalPropertyChangeListener();
61 loadTest.addPropertyChangeListener( WsdlLoadTest.NAME_PROPERTY, propertyChangeListener);
62
63 buildUI();
64 }
65
66 private void buildUI()
67 {
68 historyGraph = new JStatisticsHistoryGraph( loadTest );
69
70 JScrollPane scrollPane = new JScrollPane( historyGraph );
71 scrollPane.getViewport().setBackground( Color.WHITE );
72 scrollPane.setHorizontalScrollBarPolicy( ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS );
73
74 panel = UISupport.buildPanelWithToolbarAndStatusBar( buildToolbar(),
75 scrollPane, historyGraph.getLegend() );
76 panel.setPreferredSize( new Dimension( 600, 400 ));
77 }
78
79 private JComponent buildToolbar()
80 {
81 exportButton = UISupport.createToolbarButton( new ExportSamplesHistoryAction( historyGraph ) );
82
83 JXToolBar toolbar = UISupport.createToolbar();
84
85 toolbar.addSpace( 5 );
86 toolbar.addLabeledFixed( "Select Statistic:", buildSelectStatisticCombo() );
87 toolbar.addUnrelatedGap();
88 toolbar.addLabeledFixed( "Resolution:", buildResolutionCombo() );
89 toolbar.addGlue();
90 toolbar.addFixed( exportButton );
91 toolbar.addFixed( UISupport.createToolbarButton( new ShowOnlineHelpAction( HelpUrls.STATISTICSGRAPH_HELP_URL )));
92
93 return toolbar;
94 }
95
96 private JComponent buildResolutionCombo()
97 {
98 resolutionCombo = new JComboBox( new String[] {"data", "250", "500", "1000"} );
99 resolutionCombo.setEditable( true );
100 resolutionCombo.setToolTipText( "Sets update interval of graph in milliseconds" );
101 long resolution = historyGraph.getResolution();
102 resolutionCombo.setSelectedItem( resolution == 0 ? "data" : String.valueOf( resolution ));
103 resolutionCombo.addItemListener( new ItemListener() {
104
105 public void itemStateChanged( ItemEvent e )
106 {
107 try
108 {
109 String value = resolutionCombo.getSelectedItem().toString();
110 long resolution = value.equals( "data" ) ? 0 : Long.parseLong( value );
111 if( resolution != historyGraph.getResolution() )
112 {
113 historyGraph.setResolution( resolution );
114 }
115 }
116 catch( Exception ex )
117 {
118 long resolution = historyGraph.getResolution();
119 resolutionCombo.setSelectedItem( resolution == 0 ? "data" : String.valueOf( resolution ));
120 }
121 }} );
122 return resolutionCombo;
123 }
124
125 private JComponent buildSelectStatisticCombo()
126 {
127 DefaultComboBoxModel model = new DefaultComboBoxModel();
128 model.addElement( Statistic.AVERAGE );
129 model.addElement( Statistic.TPS );
130 model.addElement( Statistic.ERRORS );
131 model.addElement( Statistic.BPS );
132
133 selectStatisticCombo = new JComboBox( model );
134 selectStatisticCombo.addItemListener( new ItemListener() {
135
136 public void itemStateChanged(ItemEvent e)
137 {
138 historyGraph.setStatistic( Statistic.valueOf( selectStatisticCombo.getSelectedItem().toString() ));
139 }} );
140
141 return selectStatisticCombo;
142 }
143
144 public JComponent getComponent()
145 {
146 return panel;
147 }
148
149 public boolean onClose(boolean canCancel)
150 {
151 loadTest.removePropertyChangeListener( WsdlLoadTest.NAME_PROPERTY, propertyChangeListener);
152 return super.onClose( canCancel );
153 }
154
155 private final class InternalPropertyChangeListener implements PropertyChangeListener
156 {
157 public void propertyChange(PropertyChangeEvent evt)
158 {
159 setTitle( "Statistics History for [" + loadTest.getName() + "]" );
160 }
161 }
162 }