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.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  			// sh -c requires all args in one string.. 
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 }