View Javadoc

    1   /*
    2    *  soapUI, copyright (C) 2004-2007 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 com.eviware.soapui.SoapUI;
    26  import com.eviware.soapui.impl.wsdl.loadtest.log.LoadTestLog;
    27  import com.eviware.soapui.impl.wsdl.loadtest.log.LoadTestLogEntry;
    28  import com.eviware.soapui.model.testsuite.TestStep;
    29  import com.eviware.soapui.support.UISupport;
    30
    31  /***
    32   * Simple loadtest log exporter, creates a comma-separated file containing a header row
    33   * and values for each log entry
    34   *
    35   * @author Ole.Matzura
    36   */
    37
    38  public class ExportLoadTestLogAction extends AbstractAction
    39  {
    40  	private final LoadTestLog loadTestLog;
    41
    42  	public ExportLoadTestLogAction(LoadTestLog loadTestLog)
    43     {
    44  		this.loadTestLog = loadTestLog;
    45  		putValue( Action.SMALL_ICON, UISupport.createImageIcon( "/export.gif"));
    46        putValue( Action.SHORT_DESCRIPTION, "Export current loadtest log to a file" );
    47     }
    48
    49  	public void actionPerformed(ActionEvent e)
    50  	{
    51  		try
    52  		{
    53  			if( loadTestLog.getSize() == 0 )
    54  			{
    55  				UISupport.showErrorMessage( "No data to export!" );
    56  				return;
    57  			}
    58
    59           File file = UISupport.getFileDialogs().saveAs(this, "Select file for log export");
    60           if( file == null )
    61              return;
    62
    63  			int cnt = exportToFile(file);
    64
    65  			UISupport.showInfoMessage( "Saved " + cnt + " log entries to file [" + file.getName() + "]" );
    66  		}
    67  		catch (IOException e1)
    68  		{
    69  			SoapUI.logError( e1 );
    70  		}
    71     }
    72
    73  	public int exportToFile(File file) throws IOException
    74  	{
    75  		PrintWriter writer = new PrintWriter(file);
    76  		writeHeader(writer);
    77  		int cnt = writeLog(writer);
    78  		writer.flush();
    79  		writer.close();
    80  		return cnt;
    81  	}
    82
    83  	private int writeLog( PrintWriter writer)
    84  	{
    85  		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    86
    87  		int c = 0;
    88  		for( ; c < loadTestLog.getSize(); c++ )
    89  		{
    90  			LoadTestLogEntry logEntry = (LoadTestLogEntry) loadTestLog.getElementAt( c );
    91  			writer.write( sdf.format( new Date(logEntry.getTimeStamp()) ));
    92  			writer.write( ',' );
    93  			writer.write( logEntry.getType() );
    94  			writer.write( ',' );
    95
    96  			TestStep targetStep = logEntry.getTargetStep();
    97  			if( targetStep != null )
    98  				writer.write( targetStep.getName() );
    99
    100 			writer.write( ",\"" );
    101 			writer.write( logEntry.getMessage() );
    102 			writer.write( '"' );
    103 			writer.println();
    104 		}
    105
    106 		return c;
    107 	}
    108
    109 	private void writeHeader(PrintWriter writer)
    110 	{
    111 		writer.println( "time,type,step,message");
    112 	}
    113 }