1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.impl.wsdl.loadtest.data.actions;
14
15 import java.awt.event.ActionEvent;
16 import java.io.File;
17 import java.io.IOException;
18 import java.io.PrintWriter;
19
20 import javax.swing.AbstractAction;
21 import javax.swing.Action;
22 import javax.swing.table.TableModel;
23
24 import com.eviware.soapui.SoapUI;
25 import com.eviware.soapui.support.UISupport;
26
27 /***
28 * Simple statistics exporter, creates a comma-separated file containing a
29 * header row and values for each test step
30 *
31 * @author Ole.Matzura
32 */
33
34 public class ExportStatisticsAction extends AbstractAction
35 {
36 private final TableModel model;
37
38 public ExportStatisticsAction( TableModel model )
39 {
40 this.model = model;
41 putValue( Action.SMALL_ICON, UISupport.createImageIcon( "/export.gif" ) );
42 putValue( Action.SHORT_DESCRIPTION, "Export statistics to a file" );
43 }
44
45 public void actionPerformed( ActionEvent e )
46 {
47 try
48 {
49 if( model.getRowCount() == 0 )
50 {
51 UISupport.showErrorMessage( "No data to export!" );
52 return;
53 }
54
55 File file = UISupport.getFileDialogs().saveAs( this, "Select file for export" );
56 if( file == null )
57 return;
58
59 int cnt = exportToFile( file );
60 UISupport.showInfoMessage( "Saved " + cnt + " rows to file [" + file.getName() + "]" );
61 }
62 catch( IOException e1 )
63 {
64 SoapUI.logError( e1 );
65 }
66 }
67
68 public int exportToFile( File file ) throws IOException
69 {
70 PrintWriter writer = new PrintWriter( file );
71 writerHeader( writer );
72 int cnt = writeData( writer );
73 writer.flush();
74 writer.close();
75 return cnt;
76 }
77
78 private int writeData( PrintWriter writer )
79 {
80 int c = 0;
81 for( ; c < model.getRowCount(); c++ )
82 {
83 for( int i = 1; i < model.getColumnCount(); i++ )
84 {
85 if( i > 1 )
86 writer.print( ',' );
87
88 writer.print( model.getValueAt( c, i ) );
89 }
90
91 writer.println();
92 }
93
94 return c;
95 }
96
97 private void writerHeader( PrintWriter writer )
98 {
99 for( int i = 1; i < model.getColumnCount(); i++ )
100 {
101 if( i > 1 )
102 writer.print( ',' );
103
104 writer.print( model.getColumnName( i ) );
105 }
106
107 writer.println();
108 }
109 }