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.actions.iface.tools.oracle;
14  
15  import java.io.File;
16  import java.io.IOException;
17  
18  import com.eviware.soapui.SoapUI;
19  import com.eviware.soapui.impl.wsdl.actions.iface.tools.support.AbstractToolsAction;
20  import com.eviware.soapui.impl.wsdl.actions.iface.tools.support.ArgumentBuilder;
21  import com.eviware.soapui.impl.wsdl.actions.iface.tools.support.ProcessToolRunner;
22  import com.eviware.soapui.impl.wsdl.actions.iface.tools.support.ToolHost;
23  import com.eviware.soapui.impl.wsdl.support.HelpUrls;
24  import com.eviware.soapui.model.iface.Interface;
25  import com.eviware.soapui.settings.ToolsSettings;
26  import com.eviware.soapui.support.Tools;
27  import com.eviware.soapui.support.UISupport;
28  import com.eviware.soapui.support.action.ActionList;
29  import com.eviware.soapui.support.types.StringToStringMap;
30  import com.eviware.x.form.XForm;
31  import com.eviware.x.form.XFormDialog;
32  import com.eviware.x.form.XFormDialogBuilder;
33  import com.eviware.x.form.XFormFactory;
34  
35  /***
36   * Invokes oracle genproxy
37   * 
38   * @author Ole.Matzura
39   */
40  
41  public class OracleWsaGenProxyAction extends AbstractToolsAction<Interface>
42  {
43  	private static final String OUTPUT = "Output Directory";
44  	private static final String PACKAGE = "Destination Package";
45  	
46     public OracleWsaGenProxyAction( Interface iface )
47     {
48        super( iface, "Oracle Proxy Artifacts", "Generates Oracle Proxy artifacts using the wsa.jar utility");
49     }
50  
51     protected XFormDialog buildDialog()
52  	{
53        XFormDialogBuilder builder = XFormFactory.createDialogBuilder("Oracle Artifacts");
54  
55  		XForm mainForm = builder.createForm( "Basic" );
56  		addWSDLFields( mainForm );
57  		
58  		mainForm.addTextField( OUTPUT, "The root directory for all emitted files.", XForm.FieldType.PROJECT_FOLDER );
59  		mainForm.addTextField( PACKAGE, "The target package for generated classes", XForm.FieldType.JAVA_PACKAGE );
60  
61        buildArgsForm( builder, true, "wsa" );
62        
63  		ActionList actions = buildDefaultActions(HelpUrls.ORACLEWSA_HELP_URL);
64  		return builder.buildDialog( actions,
65        		"Specify arguments for Oracle wsa.jar genProxy functionality", UISupport.TOOL_ICON );
66  	}
67     
68  	protected void generate(StringToStringMap values, ToolHost toolHost) throws Exception
69  	{
70  		String wsaDir = SoapUI.getSettings().getString( ToolsSettings.ORACLE_WSA_LOCATION, null );
71  		if( Tools.isEmpty( wsaDir ))
72  		{
73  			UISupport.showErrorMessage( "wsa.jar directory must be set in global preferences" );
74  			return;
75  		}
76  		
77  		File wsaFile = new File( wsaDir + File.separatorChar + "wsa.jar" );
78  		if( !wsaFile.exists() )
79  		{
80  			UISupport.showErrorMessage( "Could not find wsa.jar at [" + wsaFile + "]" );
81  			return;
82  		}
83  		
84  		ProcessBuilder builder = new ProcessBuilder();
85  		ArgumentBuilder args = buildArgs();
86  		builder.command(args.getArgs());
87  		builder.directory(new File(wsaDir));
88  		
89  		toolHost.run( new ProcessToolRunner( builder, "Oracle wsa.jar", modelItem ));
90  	}
91  
92  	private ArgumentBuilder buildArgs() throws IOException
93  	{
94  		StringToStringMap values = dialog.getValues();
95  		
96  		values.put( OUTPUT, Tools.ensureDir( values.get( OUTPUT ), "" ));
97  		
98  		ArgumentBuilder builder = new ArgumentBuilder( values );
99  		builder.addArgs( "java", "-jar", "wsa.jar", "-genProxy" );
100 		addJavaArgs( values, builder );
101 		
102 		builder.addArgs( "-wsdl", getWsdlUrl( values ) );
103 		builder.addString( OUTPUT, "-output" );
104 		builder.addString( PACKAGE, "-packageName" );
105 		
106 		addToolArgs( values, builder );
107 		return builder;
108 	}
109 }