View Javadoc

1   /*
2    *  soapUI, copyright (C) 2004-2008 eviware.com 
3    *
4    *  soapUI is free software; you can redistribute it and/or modify it under the 
5    *  terms of version 2.1 of the GNU Lesser General Public License as published by 
6    *  the Free Software Foundation.
7    *
8    *  soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without 
9    *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
10   *  See the GNU Lesser General Public License for more details at gnu.org.
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  import java.text.SimpleDateFormat;
20  import java.util.Date;
21  
22  import javax.swing.AbstractAction;
23  import javax.swing.Action;
24  
25  import org.jdesktop.swingx.JXTable;
26  
27  import com.eviware.soapui.SoapUI;
28  import com.eviware.soapui.impl.wsdl.loadtest.log.LoadTestLog;
29  import com.eviware.soapui.impl.wsdl.loadtest.log.LoadTestLogEntry;
30  import com.eviware.soapui.support.UISupport;
31  
32  /***
33   * Simple loadtest log exporter, creates a comma-separated file containing a header row
34   * and values for each log entry
35   *  
36   * @author Ole.Matzura
37   */
38  
39  public class ExportLoadTestLogAction extends AbstractAction
40  {
41  	private final LoadTestLog loadTestLog;
42  	private final JXTable logTable;
43  
44  	public ExportLoadTestLogAction(LoadTestLog loadTestLog, JXTable logTable)
45     {
46  		this.loadTestLog = loadTestLog;
47  		this.logTable = logTable;
48  		putValue( Action.SMALL_ICON, UISupport.createImageIcon( "/export.gif"));
49        putValue( Action.SHORT_DESCRIPTION, "Export current loadtest log to a file" );
50     }
51     
52  	public void actionPerformed(ActionEvent e)
53  	{
54  		try
55  		{
56  			if( loadTestLog.getSize() == 0 || (logTable != null && logTable.getRowCount() == 0 )) 
57  			{
58  				UISupport.showErrorMessage( "No data to export!" );
59  				return;
60  			}
61  			
62           File file = UISupport.getFileDialogs().saveAs(this, "Select file for log export");
63           if( file == null )
64              return;
65  
66  			int cnt = exportToFile(file);
67  			
68  			UISupport.showInfoMessage( "Saved " + cnt + " log entries to file [" + file.getName() + "]" );
69  		}
70  		catch (IOException e1)
71  		{
72  			SoapUI.logError( e1 );
73  		}
74     }
75  
76  	public int exportToFile(File file) throws IOException
77  	{
78  		PrintWriter writer = new PrintWriter(file);
79  		writeHeader(writer);
80  		int cnt = writeLog(writer);
81  		writer.flush();
82  		writer.close();
83  		return cnt;
84  	}
85  
86  	private int writeLog( PrintWriter writer)
87  	{
88  		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
89  		
90  		int cnt = 0;
91  		for( int c = 0 ; c < loadTestLog.getSize(); c++ )
92  		{
93  			if( logTable != null )
94  			{
95  				int index = logTable.getFilters().convertRowIndexToView( c );
96  				if( index == -1 )
97  					continue;
98  			}
99  			
100 			LoadTestLogEntry logEntry = (LoadTestLogEntry) loadTestLog.getElementAt( c );
101 			writer.write( sdf.format( new Date(logEntry.getTimeStamp()) ));
102 			writer.write( ',' );
103 			writer.write( logEntry.getType() );
104 			writer.write( ',' );
105 			String targetStepName = logEntry.getTargetStepName();
106 			writer.write( targetStepName == null ? "" : targetStepName );
107 			writer.write( ",\"" );
108 			writer.write( logEntry.getMessage() );
109 			writer.write( '"' );
110 			writer.println();
111 			cnt++;
112 		}
113 		
114 		return cnt;
115 	}
116 
117 	private void writeHeader(PrintWriter writer)
118 	{
119 		writer.println( "time,type,step,message");
120 	}
121 }