1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.impl.rest.actions.service;
14
15 import com.eviware.soapui.SoapUI;
16 import com.eviware.soapui.impl.rest.RestService;
17 import com.eviware.soapui.impl.wsdl.actions.iface.tools.support.AbstractToolsAction;
18 import com.eviware.soapui.impl.wsdl.actions.iface.tools.support.ArgumentBuilder;
19 import com.eviware.soapui.impl.wsdl.actions.iface.tools.support.ProcessToolRunner;
20 import com.eviware.soapui.impl.wsdl.actions.iface.tools.support.ToolHost;
21 import com.eviware.soapui.impl.wsdl.support.HelpUrls;
22 import com.eviware.soapui.model.iface.Interface;
23 import com.eviware.soapui.settings.ToolsSettings;
24 import com.eviware.soapui.support.Tools;
25 import com.eviware.soapui.support.UISupport;
26 import com.eviware.soapui.support.types.StringToStringMap;
27 import com.eviware.x.form.XForm;
28 import com.eviware.x.form.XFormDialog;
29 import com.eviware.x.form.XFormDialogBuilder;
30 import com.eviware.x.form.XFormFactory;
31
32 import java.io.File;
33 import java.io.IOException;
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", XForm.FieldType.TEXT );
66
67 buildArgsForm( builder, true, "wadl2java");
68
69 return builder.buildDialog( buildDefaultActions(HelpUrls.WADL2JAVA_HELP_URL, modelItem),
70 "Specify arguments for reference wadl2java", UISupport.TOOL_ICON );
71 }
72
73 protected StringToStringMap initValues(Interface modelItem, Object param)
74 {
75 StringToStringMap values = super.initValues(modelItem, param);
76 return values;
77 }
78
79 protected void generate(StringToStringMap values, ToolHost toolHost, Interface modelItem) throws Exception
80 {
81 String xfireDir = SoapUI.getSettings().getString( ToolsSettings.WADL2JAVA_LOCATION, null );
82 if( Tools.isEmpty( xfireDir ))
83 {
84 UISupport.showErrorMessage( "WADL2Java directory must be set in global preferences" );
85 return;
86 }
87
88 ProcessBuilder builder = new ProcessBuilder();
89 ArgumentBuilder args = buildArgs( modelItem );
90 builder.command(args.getArgs());
91 builder.directory(new File(xfireDir));
92
93 ((RestService)modelItem).getWadlContext().regenerateWadl();
94
95 toolHost.run( new ProcessToolRunner( builder, "WADL2Java", modelItem, args ));
96 }
97
98 private ArgumentBuilder buildArgs( Interface modelItem ) throws IOException
99 {
100 StringToStringMap values = dialog.getValues();
101 values.put( OUTPUT, Tools.ensureDir( values.get( OUTPUT ), "" ));
102
103 ArgumentBuilder builder = new ArgumentBuilder( values );
104
105 builder.startScript( "wadl2java" );
106
107 builder.addString( OUTPUT, "-o" );
108 builder.addString( PACKAGE, "-p" );
109
110 builder.addBoolean( AUTOMATIC_PACKAGE_NAMES, "-a" );
111 builder.addString( JAXB_CUSTOMIZATION, "-c" );
112
113 addToolArgs( values, builder );
114 builder.addArgs( getWsdlUrl( values, modelItem ) );
115 return builder;
116 }
117 }