1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.impl.wsdl.actions.iface.tools.dotnet;
14
15 import java.io.File;
16
17 import com.eviware.soapui.SoapUI;
18 import com.eviware.soapui.impl.wsdl.actions.iface.tools.support.AbstractToolsAction;
19 import com.eviware.soapui.impl.wsdl.actions.iface.tools.support.ArgumentBuilder;
20 import com.eviware.soapui.impl.wsdl.actions.iface.tools.support.ProcessToolRunner;
21 import com.eviware.soapui.impl.wsdl.actions.iface.tools.support.ToolHost;
22 import com.eviware.soapui.impl.wsdl.support.HelpUrls;
23 import com.eviware.soapui.model.iface.Interface;
24 import com.eviware.soapui.settings.ToolsSettings;
25 import com.eviware.soapui.support.Tools;
26 import com.eviware.soapui.support.UISupport;
27 import com.eviware.soapui.support.types.StringToStringMap;
28 import com.eviware.x.form.XForm;
29 import com.eviware.x.form.XFormDialog;
30 import com.eviware.x.form.XFormDialogBuilder;
31 import com.eviware.x.form.XFormFactory;
32
33 /***
34 * Invokes .NET wsdl.exe
35 *
36 * @author Ole.Matzura
37 */
38
39 public class DotNetWsdlAction extends AbstractToolsAction<Interface>
40 {
41 private static final String OUTPUT = "output directory";
42 private static final String LANGUAGE = "language";
43 private static final String SERVER = "serverInterface";
44 private static final String NAMESPACE = "namespace";
45 private static final String PROTOCOL = "protocol";
46
47 private static final String SHARETYPES = "sharetypes";
48 private static final String FIELDS = "fields";
49 private static final String ORDER = "order";
50 private static final String ENABLEDATABINDING = "enableDataBinding";
51 private static final String URLKEY = "url key";
52 private static final String BASEURL = "base url";
53
54 private static final String USERNAME = "username";
55 private static final String PASSWORD = "password";
56 private static final String DOMAIN = "domain";
57 private static final String PROXY = "proxy";
58 private static final String PROXYUSERNAME = "proxy username";
59 private static final String PROXYPASSWORD = "proxy password";
60 private static final String PROXYDOMAIN = "proxy domain";
61
62 public DotNetWsdlAction( Interface iface )
63 {
64 super( iface, ".NET 2.0 Artifacts", "Generates .NET 2.0 artifacts using wsdl.exe");
65 }
66
67 protected StringToStringMap initValues()
68 {
69 StringToStringMap values = super.initValues();
70 values.putIfMissing( LANGUAGE, "CS" );
71 return values;
72 }
73
74 protected XFormDialog buildDialog()
75 {
76 XFormDialogBuilder builder = XFormFactory.createDialogBuilder(".NET 2.0 artifacts");
77
78 XForm mainForm = builder.createForm( "Basic" );
79 addWSDLFields( mainForm );
80
81 mainForm.addTextField( OUTPUT, "root directory for generated files.", XForm.FieldType.PROJECT_FOLDER );
82 mainForm.addTextField( NAMESPACE, "The namespace for the generated proxy or template", XForm.FieldType.TEXT );
83
84 mainForm.addCheckBox( SERVER, "(Generates interfaces for server-side implementation of an ASP.Net Web Service)" );
85 mainForm.addComboBox( LANGUAGE, new String[] { "CS", "VB", "JS", "VJS", "CPP" },
86 "add scope to deploy.wsdd");
87
88 mainForm.addComboBox( PROTOCOL, new String[] { "SOAP", "SOAP12", "HttpGet", "HttpPost" },
89 "override the default protocol to implement" );
90
91 XForm advForm = builder.createForm( "Advanced" );
92
93 advForm.addCheckBox( SHARETYPES, "(turns on type sharing feature)" );
94 advForm.addCheckBox( FIELDS, "(generate fields instead of properties)" );
95 advForm.addCheckBox( ORDER, "(generate explicit order identifiers on particle members)" );
96 advForm.addCheckBox( ENABLEDATABINDING, "(implement INotifyPropertyChanged interface on all generated types)" );
97 advForm.addTextField( URLKEY, "configuration key to use in the code generation to read the default URL value", XForm.FieldType.URL );
98 advForm.addTextField( BASEURL, "base url to use when calculating the url fragment", XForm.FieldType.URL );
99
100 XForm httpForm = builder.createForm( "HTTP settings" );
101 httpForm.addTextField( USERNAME, "username to access the WSDL-URI", XForm.FieldType.TEXT );
102 httpForm.addTextField( PASSWORD, "password to access the WSDL-URI", XForm.FieldType.TEXT );
103 httpForm.addTextField( DOMAIN, "domain to access the WSDL-URI", XForm.FieldType.TEXT );
104 httpForm.addTextField( PROXY, "username to access the WSDL-URI", XForm.FieldType.TEXT );
105 httpForm.addTextField( PROXYUSERNAME, "proxy username to access the WSDL-URI", XForm.FieldType.TEXT );
106 httpForm.addTextField( PROXYPASSWORD, "proxy password to access the WSDL-URI", XForm.FieldType.TEXT );
107 httpForm.addTextField( PROXYDOMAIN, "proxy domain to access the WSDL-URI", XForm.FieldType.TEXT );
108
109 buildArgsForm( builder, false, "wsdl.exe" );
110
111 return builder.buildDialog( buildDefaultActions( HelpUrls.DOTNET_HELP_URL ),
112 "Specify arguments for .NET 2 wsdl.exe", UISupport.TOOL_ICON );
113 }
114
115 protected void generate(StringToStringMap values, ToolHost toolHost) throws Exception
116 {
117 String dotnetDir = SoapUI.getSettings().getString( ToolsSettings.DOTNET_WSDL_LOCATION, null );
118 if( Tools.isEmpty( dotnetDir ) )
119 {
120 UISupport.showErrorMessage( ".NET 2.0 wsdl.exe directory must be set in global preferences" );
121 return;
122 }
123
124 ProcessBuilder builder = new ProcessBuilder();
125 ArgumentBuilder args = buildArgs( values );
126 builder.command(args.getArgs());
127 builder.directory(new File(dotnetDir));
128
129 toolHost.run( new ProcessToolRunner( builder, ".NET wsdl.exe", modelItem ));
130 }
131
132 private ArgumentBuilder buildArgs(StringToStringMap values)
133 {
134 values.put( OUTPUT, Tools.ensureDir( values.get( OUTPUT ), "" ));
135
136 ArgumentBuilder builder = new ArgumentBuilder( values );
137 builder.addArgs( "cmd.exe", "/C", "wsdl.exe", "/nologo", "/verbose" );
138
139 builder.addString( NAMESPACE, "/namespace", ":" );
140 builder.addString( OUTPUT, "/out", ":" );
141 builder.addString( PROTOCOL, "/protocol", ":" );
142 builder.addString( LANGUAGE, "/language", ":" );
143
144 builder.addBoolean( SERVER, "/serverInterface" );
145 builder.addBoolean( SHARETYPES, "/sharetypes" );
146 builder.addBoolean( FIELDS, "/fields" );
147 builder.addBoolean( ORDER, "/order" );
148 builder.addBoolean( ENABLEDATABINDING, "/enableDataBinding" );
149
150 builder.addString( URLKEY, "/appsettingurlkey", ":" );
151 builder.addString( BASEURL, "/appsettingbaseurl", ":" );
152
153 builder.addString( USERNAME, "/username", ":" );
154 builder.addString( PASSWORD, "/password", ":" );
155 builder.addString( DOMAIN, "/domain", ":" );
156 builder.addString( PROXY, "/proxy", ":" );
157 builder.addString( PROXYUSERNAME, "/proxyusername", ":" );
158 builder.addString( PROXYPASSWORD, "/proxypassword", ":" );
159 builder.addString( PROXYDOMAIN, "/proxydomain", ":" );
160
161 addToolArgs( values, builder );
162
163 builder.addArgs( getWsdlUrl( values ) );
164
165 return builder;
166 }
167 }