1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.impl.rest.actions.service;
14
15 import java.io.File;
16
17 import com.eviware.soapui.SoapUI;
18 import com.eviware.soapui.impl.rest.RestService;
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.impl.wsdl.support.PathUtils;
25 import com.eviware.soapui.model.iface.Interface;
26 import com.eviware.soapui.settings.ToolsSettings;
27 import com.eviware.soapui.support.Tools;
28 import com.eviware.soapui.support.UISupport;
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 Apache CXF wsdl2java utility
37 *
38 * @author Ole.Matzura
39 */
40
41 public class Wadl2JavaAction extends AbstractToolsAction<Interface>
42 {
43 private static final String PACKAGE = "Package";
44 private static final String OUTPUT = "Output Directory";
45 private static final String AUTOMATIC_PACKAGE_NAMES = "Automatic Package Names";
46 private static final String JAXB_CUSTOMIZATION = "JAXB Customization File(s)";
47
48 public static final String SOAPUI_ACTION_ID = "Wadl2JavaAction";
49
50 public Wadl2JavaAction()
51 {
52 super( "WADL2Java", "Generates java code from WADL" );
53 }
54
55 protected XFormDialog buildDialog( Interface modelItem )
56 {
57 XFormDialogBuilder builder = XFormFactory.createDialogBuilder( "WADL2Java" );
58
59 XForm mainForm = builder.createForm( "Basic" );
60
61 mainForm.addTextField( OUTPUT, "Root directory for all emitted files.", XForm.FieldType.PROJECT_FOLDER );
62 mainForm.addTextField( PACKAGE, "Default Package for generated classes", XForm.FieldType.JAVA_PACKAGE );
63
64 mainForm.addCheckBox( AUTOMATIC_PACKAGE_NAMES, "Generates starting point code for a client mainline" );
65 mainForm.addTextField( JAXB_CUSTOMIZATION, "Space-separated list of JAXWS or JAXB binding files",
66 XForm.FieldType.TEXT );
67
68 buildArgsForm( builder, true, "wadl2java" );
69
70 return builder.buildDialog( buildDefaultActions( HelpUrls.WADL2JAVA_HELP_URL, modelItem ),
71 "Specify arguments for reference wadl2java", UISupport.TOOL_ICON );
72 }
73
74 protected StringToStringMap initValues( Interface modelItem, Object param )
75 {
76 StringToStringMap values = super.initValues( modelItem, param );
77 return values;
78 }
79
80 protected void generate( StringToStringMap values, ToolHost toolHost, Interface modelItem ) throws Exception
81 {
82 String xfireDir = SoapUI.getSettings().getString( ToolsSettings.WADL2JAVA_LOCATION, null );
83 if( Tools.isEmpty( xfireDir ) )
84 {
85 UISupport.showErrorMessage( "WADL2Java directory must be set in global preferences" );
86 return;
87 }
88
89 ProcessBuilder builder = new ProcessBuilder();
90 ArgumentBuilder args = buildArgs( modelItem );
91 builder.command( args.getArgs() );
92 builder.directory( new File( xfireDir ) );
93
94 ( ( RestService )modelItem ).getWadlContext().regenerateWadl();
95
96 toolHost.run( new ProcessToolRunner( builder, "WADL2Java", modelItem, args ) );
97 }
98
99 private ArgumentBuilder buildArgs( Interface modelItem ) throws Exception
100 {
101 StringToStringMap values = dialog.getValues();
102 values.put( OUTPUT, Tools.ensureDir( values.get( OUTPUT ), "" ) );
103
104 ArgumentBuilder builder = new ArgumentBuilder( values );
105
106 builder.startScript( "wadl2java" );
107
108 builder.addString( OUTPUT, "-o" );
109 builder.addString( PACKAGE, "-p" );
110
111 builder.addBoolean( AUTOMATIC_PACKAGE_NAMES, "-a" );
112 builder.addString( JAXB_CUSTOMIZATION, "-c" );
113
114 addToolArgs( values, builder );
115 String wsdlUrl = getWadlUrl( values, ( RestService )modelItem );
116 if( PathUtils.isFilePath( wsdlUrl ))
117 wsdlUrl = new File( wsdlUrl ).toURI().toURL().toString();
118 builder.addArgs( wsdlUrl );
119 return builder;
120 }
121
122 protected String getWadlUrl( StringToStringMap values, RestService modelItem ) throws Exception
123 {
124 String expandPath = PathUtils.expandPath( modelItem.getDefinition(), modelItem );
125 if( PathUtils.isHttpPath( expandPath ) && !modelItem.isGenerated())
126 {
127 return expandPath;
128 }
129 else
130 {
131 File tempFile = File.createTempFile( "tempdir", null );
132 String path = tempFile.getAbsolutePath();
133 tempFile.delete();
134 return modelItem.getDefinitionContext().export( path );
135 }
136 }
137 }