ArgumentBuilder.java :  » Web-Services » soapui-1.7.5 » com » eviware » soapui » impl » wsdl » actions » iface » tools » support » Java Open Source

Java Open Source » Web Services » soapui 1.7.5 
soapui 1.7.5 » com » eviware » soapui » impl » wsdl » actions » iface » tools » support » ArgumentBuilder.java
/*
 *  soapUI, copyright (C) 2004-2007 eviware.com 
 *
 *  soapUI is free software; you can redistribute it and/or modify it under the 
 *  terms of version 2.1 of the GNU Lesser General Public License as published by 
 *  the Free Software Foundation.
 *
 *  soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without 
 *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
 *  See the GNU Lesser General Public License for more details at gnu.org.
 */
 
package com.eviware.soapui.impl.wsdl.actions.iface.tools.support;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import com.eviware.soapui.support.UISupport;
import com.eviware.soapui.support.types.StringToStringMap;

/**
 * Utility for build commandline arguments from dialog input
 * 
 * @author ole.matzura
 */

public class ArgumentBuilder
{
  private final StringToStringMap values;
  private List<String> args = new ArrayList<String>();
  private boolean isUnix;

  public ArgumentBuilder( StringToStringMap values )
  {
    this.values = values;
  }
  
  public List<String> getArgs()
  {
    if( isUnix )
    {
      // sh -c requires all args in one string.. 
      StringBuffer buf = new StringBuffer();
      for( int c = 2; c < args.size(); c++ )
      {
        if( c > 2 )
          buf.append( ' ' );
        buf.append( escapeUnixArg( args.get( c )));
      }
      
      ArrayList<String> result = new ArrayList<String>();
      result.add( args.get( 0 ));
      result.add( args.get( 1 ));
      result.add( buf.toString() );
      
      return result;
    }
    else
    {
      return new ArrayList<String>( args );
    }
  }

  private String escapeUnixArg( String str )
  {
    StringBuffer buf = new StringBuffer();
    int spaceIndex = str.indexOf( ' ' );
    if( spaceIndex >= 0 )
    {
      buf.append( "\\'" );
    }
    
    for( int c = 0; c < str.length(); c++ )
    {
      char ch = str.charAt( c );
      switch( ch )
      {
        case '\'' : buf.append( "\\'" ); break;
        case '\\' : buf.append( "\\\\" ); break;
        default : buf.append( ch );
      }
    }
    
    if( spaceIndex >= 0 )
    {
      buf.append( "\\'" );
    }
    
    return buf.toString();
  }

  public boolean addString(String name, String arg)
  {
    if( !values.containsKey( name ))
      return false;
    
    String value = values.get( name ).toString();
    if( value == null || value.length() == 0 )
      return false;
    
    if( arg != null )
      args.add( arg );
    
    args.add( value);
    
    return true;
  }

  public ArgumentBuilder addArgs( String... args )
  {
    for( int c = 0; c < args.length; c++ )
      this.args.add( args[c] );
    
    return this;
  }
  
  public boolean addBoolean( String name, String arg )
  {
    if( values.containsKey( name ) && Boolean.valueOf( values.get( name ).toString() ))
    {
      args.add( arg );
      return true;
    }
    
    return false;
  }

  public String toString()
  {
    StringBuffer buf = new StringBuffer();
    for( int c = 0; c < args.size(); c++ )
    {
      if( c > 0 )
        buf.append( ' ' );
      
      buf.append( args.get( c ));
    }
    
    return buf.toString();
  }

  public ArgumentBuilder startScript(String script)
  {
    return startScript( script, ".bat", ".sh" );
  }

  public boolean addString(String name, String arg, String separator)
  {
    if( !values.containsKey( name ))
      return false;
    
    String value = values.get( name ).toString();
    if( value == null || value.length() == 0 )
      return false;
    
    args.add( arg + separator + value );
    
    return true;
  }

  public boolean addBoolean(String name, String arg, String trueValue, String falseValue )
  {
    if( !values.containsKey( name ))
      return false;
    
    args.add( arg );

    if( Boolean.valueOf( values.get( name ).toString() ))
    {
      args.add( trueValue );
      return true;
    }
    else
    {
      args.add( falseValue );
      return false;
    }
  }

  public ArgumentBuilder startScript(String script, String windowsExt, String unixExt )
  {
    if( UISupport.isWindows() && windowsExt != null )
    {
      addArgs( "cmd.exe", "/C", script + windowsExt );
    }
    else
    {
      isUnix = true;
      
      if( !script.startsWith( "." ) && !script.startsWith( File.separator ))
        script = "./" + script;
      
      addArgs( "sh", "-c", script + unixExt );
    }
    
    return this;
  }

  public String[] getStringArgs()
  {
    return args.toArray( new String[args.size()] );
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.