Package com.eviware.soapui.impl.wsdl.actions.iface.tools.wscompile

Source Code of com.eviware.soapui.impl.wsdl.actions.iface.tools.wscompile.WSCompileAction$WSCompileShowConfigFileAction

/*
*  soapUI, copyright (C) 2004-2011 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.wscompile;

import java.io.File;
import java.io.IOException;

import com.eviware.soapui.SoapUI;
import com.eviware.soapui.impl.wsdl.actions.iface.tools.support.AbstractToolsAction;
import com.eviware.soapui.impl.wsdl.actions.iface.tools.support.ArgumentBuilder;
import com.eviware.soapui.impl.wsdl.actions.iface.tools.support.ProcessToolRunner;
import com.eviware.soapui.impl.wsdl.actions.iface.tools.support.ShowConfigFileAction;
import com.eviware.soapui.impl.wsdl.actions.iface.tools.support.ToolHost;
import com.eviware.soapui.impl.wsdl.support.HelpUrls;
import com.eviware.soapui.model.iface.Interface;
import com.eviware.soapui.settings.ToolsSettings;
import com.eviware.soapui.support.Tools;
import com.eviware.soapui.support.UISupport;
import com.eviware.soapui.support.action.swing.ActionList;
import com.eviware.soapui.support.types.StringToStringMap;
import com.eviware.x.form.XForm;
import com.eviware.x.form.XFormDialog;
import com.eviware.x.form.XFormDialogBuilder;
import com.eviware.x.form.XFormFactory;
import com.sun.java.xml.ns.jaxRpc.ri.config.ConfigurationDocument;
import com.sun.java.xml.ns.jaxRpc.ri.config.ConfigurationDocument.Configuration;
import com.sun.java.xml.ns.jaxRpc.ri.config.NamespaceMappingRegistryType;
import com.sun.java.xml.ns.jaxRpc.ri.config.NamespaceMappingType;
import com.sun.java.xml.ns.jaxRpc.ri.config.WsdlType;

/**
* Invokes JWSDP wscompile
*
* @author Ole.Matzura
*/

public class WSCompileAction extends AbstractToolsAction<Interface>
{
  private final class WSCompileShowConfigFileAction extends ShowConfigFileAction
  {
    private final Interface modelItem;

    private WSCompileShowConfigFileAction( String title, String description, Interface modelItem )
    {
      super( title, description );
      this.modelItem = modelItem;
    }

    protected String getConfigFile()
    {
      ConfigurationDocument configDocument = createConfigFile( getDialog().getValues(), modelItem );
      return configDocument.toString();
    }
  }

  private static final String OUTPUT = "directory";
  private static final String DATAHANDLERONLY = "datahandleronly";
  private static final String DONOTUNWRAP = "donotunwrap";
  private static final String PACKAGE = "package";
  private static final String KEEP = "keep";
  private static final String MAPPING = "mapping";
  private static final String SOURCE = "source";
  private static final String OPTIMIZE = "optimize";
  private static final String SOURCE_VERSION = "source version";
  private static final String MODEL = "model";
  private static final String NONCLASS = "non-class";
  private static final String SECURITY = "security";
  private static final String DEBUG = "debug";
  private static final String EXPLICITCONTEXT = "explicitcontext";
  private static final String JAXBENUMTYPE = "jaxbenumtype";
  private static final String NODATABINDING = "nodatabinding";
  private static final String NOENCODEDTYPES = "noencodedtypes";
  private static final String NOMULTIREFS = "nomultirefs";
  private static final String NORPCSTRUCTURES = "norpcstructures";
  private static final String NOVALIDATION = "novalidation";
  private static final String RESOLVEIDREF = "resolveidref";
  private static final String SEARCHSCHEMA = "searchschema";
  private static final String SERIALIZEINTERFACES = "serializeinterfaces";
  private static final String STRICT = "strict";
  private static final String UNWRAP = "unwrap";
  private static final String WSI = "wsi";
  private static final String PROXY = "proxy";
  private static final String NAMESPACE_MAPPING = "Namespace mapping";
  public static final String SOAPUI_ACTION_ID = "WSCompileAction";

  public WSCompileAction()
  {
    super( "JAX-RPC Artifacts", "Generates JAX-RPC artifacts using wscompile" );
  }

  protected XFormDialog buildDialog( Interface modelItem )
  {
    XFormDialogBuilder builder = XFormFactory.createDialogBuilder( "WSCompile" );

    XForm mainForm = builder.createForm( "Basic" );
    addWSDLFields( mainForm, modelItem );

    mainForm
        .addTextField( PACKAGE, "the package of the classes generated by wscompile", XForm.FieldType.JAVA_PACKAGE );
    mainForm.addTextField( OUTPUT, "where to place generated output files", XForm.FieldType.PROJECT_FOLDER );
    mainForm.addCheckBox( KEEP, "(Keep generated files)" );
    mainForm.addTextField( MAPPING, "Generate a J2EE mapping.xml file", XForm.FieldType.PROJECT_FILE );
    mainForm.addTextField( MODEL, "Write the internal model to the given file", XForm.FieldType.PROJECT_FILE );
    mainForm.addTextField( SOURCE, "Where to place generated source files", XForm.FieldType.PROJECT_FOLDER );
    mainForm.addTextField( NONCLASS, "Where to place non-class generated files", XForm.FieldType.PROJECT_FOLDER );
    mainForm.addCheckBox( OPTIMIZE, "(Optimize generated code)" );
    mainForm.addCheckBox( DEBUG, "(Generate debugging info)" );
    mainForm.addComboBox( SOURCE_VERSION, new String[] { "1.0.1", "1.0.3", "1.1", "1.1.1", "1.1.2" },
        "Generate code for the specified JAX-RPC SI version" );
    mainForm.addTextField( SECURITY, "Security configuration file to generate security code",
        XForm.FieldType.PROJECT_FILE );
    mainForm.addTextField( PROXY, "Specify a HTTP proxy server", XForm.FieldType.URL );

    XForm featuresForm = builder.createForm( "Features" );

    featuresForm.addCheckBox( DATAHANDLERONLY, "(Always map attachments to the DataHandler type)" );
    featuresForm.addCheckBox( DONOTUNWRAP, "(Disable unwrapping of document/literal wrapper elements in WSI mode)" );
    featuresForm.addCheckBox( EXPLICITCONTEXT, "(Turn on explicit service context mapping)" );
    featuresForm.addCheckBox( JAXBENUMTYPE, "(Map anonymous enumeration to its base type)" );
    featuresForm.addCheckBox( NODATABINDING, "(Turn off data binding for literal encoding)" );
    featuresForm.addCheckBox( NOENCODEDTYPES, "(Turn off encoding type information)" );
    featuresForm.addCheckBox( NOMULTIREFS, "(Turn off support for multiple references)" );
    featuresForm.addCheckBox( NORPCSTRUCTURES, "(Do not generate RPC structures)" );
    featuresForm.addCheckBox( NOVALIDATION, "(Turn off full validation of imported WSDL documents)" );
    featuresForm.addCheckBox( RESOLVEIDREF, "(Resolve xsd:IDREF)" );
    featuresForm.addCheckBox( SEARCHSCHEMA, "(Search schema aggressively for types)" );
    featuresForm.addCheckBox( SERIALIZEINTERFACES, "(Turn on direct serialization of interface types)" );
    featuresForm.addCheckBox( STRICT, "(Generate code strictly compliant with JAXRPC spec)" );
    featuresForm.addCheckBox( UNWRAP, "(Enable unwrapping of document/literal wrapper elements in WSI mode)" );
    featuresForm.addCheckBox( WSI,
        "(Enable WSI-Basic Profile features, to be used for document/literal and rpc/literal)" );

    XForm advForm = builder.createForm( "Advanced" );
    advForm.addNameSpaceTable( NAMESPACE_MAPPING, modelItem );

    buildArgsForm( builder, false, "wscompile" );

    ActionList actions = buildDefaultActions( HelpUrls.WSCOMPILE_HELP_URL, modelItem );
    actions.addAction( new WSCompileShowConfigFileAction( "JAX-RPC wscompile",
        "Contents of generated config.xml file", modelItem ) );

    return builder.buildDialog( actions, "Specify arguments for JAX-RPC wscompile", UISupport.TOOL_ICON );
  }

  protected StringToStringMap initValues( Interface modelItem, Object param )
  {
    StringToStringMap values = super.initValues( modelItem, param );
    values.putIfMissing( SOURCE_VERSION, "1.1.2" );
    values.putIfMissing( WSI, Boolean.toString( true ) );

    return values;
  }

  protected void generate( StringToStringMap values, ToolHost toolHost, Interface modelItem ) throws Exception
  {
    String wscompileDir = SoapUI.getSettings().getString( ToolsSettings.JWSDP_WSCOMPILE_LOCATION, null );
    if( Tools.isEmpty( wscompileDir ) )
    {
      UISupport.showErrorMessage( "wscompile directory must be set in global preferences" );
      return;
    }

    String wscompileExtension = UISupport.isWindows() ? ".bat" : ".sh";

    File wscompileFile = new File( wscompileDir + File.separatorChar + "wscompile" + wscompileExtension );
    if( !wscompileFile.exists() )
    {
      UISupport.showErrorMessage( "Could not find wscompile script at [" + wscompileFile + "]" );
      return;
    }

    ProcessBuilder builder = new ProcessBuilder();
    ArgumentBuilder args = buildArgs( values, UISupport.isWindows(), modelItem );
    builder.command( args.getArgs() );
    builder.directory( new File( wscompileDir ) );

    toolHost.run( new ProcessToolRunner( builder, "JAX-RPC wscompile", modelItem ) );
  }

  private ArgumentBuilder buildArgs( StringToStringMap values, boolean isWindows, Interface modelItem )
      throws IOException
  {
    ArgumentBuilder builder = new ArgumentBuilder( values );
    builder.startScript( "wscompile" );

    values.put( OUTPUT, Tools.ensureDir( values.get( OUTPUT ), "" ) );

    values.put( SOURCE, Tools.ensureDir( values.get( SOURCE ), values.get( OUTPUT ) ) );
    values.put( NONCLASS, Tools.ensureDir( values.get( NONCLASS ), values.get( OUTPUT ) ) );

    values.put( MAPPING, Tools.ensureFileDir( values.get( MAPPING ), values.get( OUTPUT ) ) );
    values.put( MODEL, Tools.ensureFileDir( values.get( MODEL ), values.get( OUTPUT ) ) );

    builder.addString( OUTPUT, "-d" );
    builder.addBoolean( KEEP, "-keep" );
    builder.addString( MAPPING, "-mapping" );
    builder.addString( MODEL, "-model" );
    builder.addString( SOURCE, "-s" );
    builder.addString( NONCLASS, "-nd" );
    builder.addBoolean( OPTIMIZE, "-O" );
    builder.addBoolean( DEBUG, "-g" );
    builder.addString( SOURCE_VERSION, "-source" );
    builder.addString( SECURITY, "-security" );
    builder.addString( PROXY, "httpproxy", ":" );

    builder.addBoolean( DATAHANDLERONLY, "-f:datahandleronly" );
    builder.addBoolean( DONOTUNWRAP, "-f:donotunwrap" );
    builder.addBoolean( EXPLICITCONTEXT, "-f:explicitcontext" );
    builder.addBoolean( JAXBENUMTYPE, "-f:jaxbenumtype" );
    builder.addBoolean( NODATABINDING, "-f:nodatabinding" );
    builder.addBoolean( NOENCODEDTYPES, "-f:noencodedtypes" );
    builder.addBoolean( NOMULTIREFS, "-f:nomultirefs" );
    builder.addBoolean( NORPCSTRUCTURES, "-f:norpcstructures" );
    builder.addBoolean( NOVALIDATION, "-f:novalidation" );
    builder.addBoolean( RESOLVEIDREF, "-f:resolveidref" );
    builder.addBoolean( SEARCHSCHEMA, "-f:searchschema" );
    builder.addBoolean( SERIALIZEINTERFACES, "-f:serializeinterfaces" );
    builder.addBoolean( STRICT, "-f:strict" );
    builder.addBoolean( UNWRAP, "-f:unwrap" );
    builder.addBoolean( WSI, "-f:wsi" );

    builder.addArgs( "-import" );
    builder.addArgs( "-verbose" );
    addToolArgs( values, builder );
    builder.addArgs( buildConfigFile( values, modelItem ) );
    return builder;
  }

  private String buildConfigFile( StringToStringMap values, Interface modelItem ) throws IOException
  {
    File file = File.createTempFile( "wscompile-config", ".xml" );
    ConfigurationDocument configDocument = createConfigFile( values, modelItem );
    configDocument.save( file );
    return file.getAbsolutePath();
  }

  private ConfigurationDocument createConfigFile( StringToStringMap values, Interface modelItem )
  {
    ConfigurationDocument configDocument = ConfigurationDocument.Factory.newInstance();
    Configuration config = configDocument.addNewConfiguration();

    WsdlType wsdl = config.addNewWsdl();
    wsdl.setLocation( getWsdlUrl( values, modelItem ) );
    wsdl.setPackageName( values.get( PACKAGE ).toString() );

    try
    {
      StringToStringMap nsMappings = StringToStringMap.fromXml( values.get( NAMESPACE_MAPPING ) );
      if( !nsMappings.isEmpty() )
      {
        NamespaceMappingRegistryType nsMappingRegistry = wsdl.addNewNamespaceMappingRegistry();

        for( String namespace : nsMappings.keySet() )
        {
          String packageName = nsMappings.get( namespace );

          NamespaceMappingType newMapping = nsMappingRegistry.addNewNamespaceMapping();
          newMapping.setNamespace( namespace );
          newMapping.setPackageName( packageName );
        }
      }
    }
    catch( Exception e )
    {
      SoapUI.logError( e );
    }
    return configDocument;
  }
}
TOP

Related Classes of com.eviware.soapui.impl.wsdl.actions.iface.tools.wscompile.WSCompileAction$WSCompileShowConfigFileAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.