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.tools;
    14
    15  import java.io.OutputStreamWriter;
    16
    17  import org.apache.commons.cli.CommandLine;
    18  import org.apache.commons.cli.CommandLineParser;
    19  import org.apache.commons.cli.HelpFormatter;
    20  import org.apache.commons.cli.Options;
    21  import org.apache.commons.cli.PosixParser;
    22  import org.apache.log4j.ConsoleAppender;
    23  import org.apache.log4j.Logger;
    24  import org.apache.log4j.PatternLayout;
    25
    26  import com.eviware.soapui.SoapUI;
    27  import com.eviware.soapui.monitor.TestMonitor;
    28  import com.eviware.soapui.support.UISupport;
    29
    30  public abstract class AbstractSoapUIRunner
    31  {
    32  	private boolean groovyLogInitialized;
    33  	private String projectFile;
    34  	protected static Logger log;
    35
    36  	public AbstractSoapUIRunner( String title )
    37  	{
    38  		log = Logger.getLogger( this.getClass() );
    39
    40  		if( title != null )
    41  			System.out.println( title );
    42
    43  		SoapUI.initSoapUILog();
    44  		SoapUI.setTestMonitor( new TestMonitor() );
    45  		SoapUI.loadExtLibs();
    46  	}
    47
    48  	public void initGroovyLog()
    49  	{
    50  		if( !groovyLogInitialized )
    51  		{
    52  			Logger logger = Logger.getLogger( "groovy.log" );
    53
    54  			ConsoleAppender appender = new ConsoleAppender();
    55  			appender.setWriter( new OutputStreamWriter( System.out ));
    56  			appender.setLayout( new PatternLayout( "%d{ABSOLUTE} %-5p [%c{1}] %m%n") );
    57  			logger.addAppender( appender);
    58
    59  			groovyLogInitialized = true;
    60  		}
    61  	}
    62
    63  	public void runFromCommandLine( String [] args )
    64  	{
    65  		try
    66  		{
    67  			initFromCommandLine( args, true );
    68  			run();
    69  			System.exit( 0 );
    70  		}
    71  		catch( Throwable e )
    72  		{
    73  			log.error( e.toString() );
    74  			SoapUI.logError( e );
    75  			System.exit( 1 );
    76  		}
    77  	}
    78
    79  	public boolean initFromCommandLine( String[] args, boolean printHelp ) throws Exception
    80  	{
    81  		SoapUIOptions options = initCommandLineOptions();
    82
    83  		CommandLineParser parser = new PosixParser();
    84  		CommandLine cmd = parser.parse( options, args);
    85
    86  		if( options.requiresProject() )
    87  		{
    88  			args = cmd.getArgs();
    89
    90  			if( args.length != 1 )
    91  			{
    92  				if( printHelp )
    93  				{
    94  					HelpFormatter formatter = new HelpFormatter();
    95  					formatter.printHelp( options.getRunnerName() + " [options] <soapui-project-file>", options );
    96  				}
    97
    98  				System.err.println( "Missing soapUI project file.." );
    99  				return false;
    100 			}
    101
    102 			setProjectFile( args[0] );
    103 		}
    104
    105 		return processCommandLine( cmd );
    106 	}
    107
    108 	public void enableSwingUI()
    109 	{
    110 		log.info( "Enabling Swing UI" );
    111 		SoapUI.initSoapUILookAndFeel();
    112 		SoapUI.prepareSwingUI();
    113 		UISupport.setMainFrame( null );
    114 	}
    115
    116 	protected abstract boolean processCommandLine( CommandLine cmd );
    117
    118 	protected abstract SoapUIOptions initCommandLineOptions();
    119
    120 	public abstract void run() throws Exception;
    121
    122 	public String getProjectFile()
    123 	{
    124 		return projectFile;
    125 	}
    126
    127 	/***
    128 	 * Sets the soapUI project file containing the tests to run
    129 	 *
    130 	 * @param projectFile the soapUI project file containing the tests to run
    131 	 */
    132
    133 	public void setProjectFile(String projectFile)
    134 	{
    135 		log.info( "setting projectFile to [" + projectFile + "]" );
    136 		this.projectFile = projectFile;
    137 	}
    138
    139 	public static class SoapUIOptions extends Options
    140 	{
    141 		private final String runnerName;
    142
    143 		public SoapUIOptions( String runnerName )
    144 		{
    145 			this.runnerName = runnerName;}
    146
    147 		public String getRunnerName()
    148 		{
    149 			return runnerName;
    150 		}
    151
    152 		public boolean requiresProject()
    153 		{
    154 			return true;
    155 		}
    156 	}
    157 }