1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.impl.wsdl.actions.iface.tools.support;
14
15 import java.io.File;
16 import java.util.ArrayList;
17 import java.util.List;
18
19 import com.eviware.soapui.support.UISupport;
20 import com.eviware.soapui.support.types.StringToStringMap;
21
22 /***
23 * Utility for build commandline arguments from dialog input
24 *
25 * @author ole.matzura
26 */
27
28 public class ArgumentBuilder
29 {
30 private final StringToStringMap values;
31 private List<String> args = new ArrayList<String>();
32 private boolean isUnix;
33
34 public ArgumentBuilder( StringToStringMap values )
35 {
36 this.values = values;
37 }
38
39 public List<String> getArgs()
40 {
41 if( isUnix )
42 {
43
44 StringBuffer buf = new StringBuffer();
45 for( int c = 2; c < args.size(); c++ )
46 {
47 if( c > 2 )
48 buf.append( ' ' );
49 buf.append( escapeUnixArg( args.get( c )));
50 }
51
52 ArrayList<String> result = new ArrayList<String>();
53 result.add( args.get( 0 ));
54 result.add( args.get( 1 ));
55 result.add( buf.toString() );
56
57 return result;
58 }
59 else
60 {
61 return new ArrayList<String>( args );
62 }
63 }
64
65 private String escapeUnixArg( String str )
66 {
67 StringBuffer buf = new StringBuffer();
68
69 for( int c = 0; c < str.length(); c++ )
70 {
71 char ch = str.charAt( c );
72 switch( ch )
73 {
74 case ' ' : buf.append( "%20" ); break;
75 default : buf.append( ch );
76 }
77 }
78
79 return buf.toString();
80 }
81
82 public boolean addString(String name, String arg)
83 {
84 if( !values.containsKey( name ))
85 return false;
86
87 String value = values.get( name ).toString();
88 if( value == null || value.length() == 0 )
89 return false;
90
91 if( arg != null )
92 args.add( arg );
93
94 args.add( value);
95
96 return true;
97 }
98
99 public ArgumentBuilder addArgs( String... args )
100 {
101 for( int c = 0; c < args.length; c++ )
102 this.args.add( args[c] );
103
104 return this;
105 }
106
107 public boolean addBoolean( String name, String arg )
108 {
109 if( values.containsKey( name ) && Boolean.valueOf( values.get( name ).toString() ))
110 {
111 args.add( arg );
112 return true;
113 }
114
115 return false;
116 }
117
118 public String toString()
119 {
120 StringBuffer buf = new StringBuffer();
121 for( int c = 0; c < args.size(); c++ )
122 {
123 if( c > 0 )
124 buf.append( ' ' );
125
126 buf.append( args.get( c ));
127 }
128
129 return buf.toString();
130 }
131
132 public ArgumentBuilder startScript(String script)
133 {
134 return startScript( script, ".bat", ".sh" );
135 }
136
137 public boolean addString(String name, String arg, String separator)
138 {
139 if( !values.containsKey( name ))
140 return false;
141
142 String value = values.get( name ).toString();
143 if( value == null || value.length() == 0 )
144 return false;
145
146 args.add( arg + separator + value );
147
148 return true;
149 }
150
151 public boolean addBoolean(String name, String arg, String trueValue, String falseValue )
152 {
153 if( !values.containsKey( name ))
154 return false;
155
156 args.add( arg );
157
158 if( Boolean.valueOf( values.get( name ).toString() ))
159 {
160 args.add( trueValue );
161 return true;
162 }
163 else
164 {
165 args.add( falseValue );
166 return false;
167 }
168 }
169
170 public ArgumentBuilder startScript(String script, String windowsExt, String unixExt )
171 {
172 if( UISupport.isWindows() && windowsExt != null )
173 {
174 addArgs( "cmd.exe", "/C", script + windowsExt );
175 }
176 else
177 {
178 isUnix = true;
179
180 if( !script.startsWith( "." ) && !script.startsWith( File.separator ))
181 script = "./" + script;
182
183 addArgs( "sh", "-c", script + unixExt );
184 }
185
186 return this;
187 }
188
189 public String[] getStringArgs()
190 {
191 return args.toArray( new String[args.size()] );
192 }
193 }