/*=============================================================================*
* Copyright 2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*=============================================================================*/
package org.apache.ws.resource.tool;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.FileScanner;
import org.apache.tools.ant.taskdefs.MatchingTask;
import org.apache.tools.ant.types.Environment;
import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.Reference;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
* Ant task that wraps {@link Wsdl2Java}.
*
* @author Ian Springer (ian DOT springer AT hp DOT com)
*/
public class Wsdl2JavaTask
extends MatchingTask
{
static
{
if ( System.getProperty( "log4j.configuration" ) == null )
{
System.setProperty( "log4j.configuration", "log4j.properties" );
}
}
private List m_wsdls = new ArrayList( );
private File m_outputDir;
private Path m_classpath;
private Boolean m_verbose;
/**
* Set the classpath to be passed to the XMLBeans schema compiler.
*
* @param classpath the classpath to be passed to the XMLBeans schema compiler
*/
public void setClasspath( Path classpath )
{
if ( m_classpath == null )
{
m_classpath = classpath;
}
else
{
m_classpath.append( classpath );
}
}
/**
* Gets the classpath to be used for this compilation.
*
* @return the classpath
*/
public Path getClasspath( )
{
return m_classpath;
}
/**
* Adds a reference to a classpath defined elsewhere.
*
* @param ref the reference to add
*/
public void setClasspathRef( Reference ref )
{
createClasspath( ).setRefid( ref );
}
/**
* DOCUMENT_ME
*
* @param debug DOCUMENT_ME
*
* @deprecated
*/
public void setDebug( boolean debug )
{
// this attribute is no longer used
}
/**
* DOCUMENT_ME
*
* @param nonProxyHosts DOCUMENT_ME
*/
public void setNonProxyHosts( String nonProxyHosts )
{
nonProxyHosts = nonProxyHosts.trim( );
if ( !nonProxyHosts.startsWith( "${" ) )
{
System.setProperty( "http.nonProxyHosts", nonProxyHosts );
}
}
/**
* DOCUMENT_ME
*
* @param outputDir DOCUMENT_ME
*/
public void setOutputDir( File outputDir )
{
m_outputDir = outputDir;
}
/**
* DOCUMENT_ME
*
* @param proxyHost DOCUMENT_ME
*/
public void setProxyHost( String proxyHost )
{
proxyHost = proxyHost.trim( );
if ( !proxyHost.startsWith( "${" ) )
{
System.setProperty( "http.proxyHost", proxyHost );
}
}
/**
* DOCUMENT_ME
*
* @param proxyPort DOCUMENT_ME
*/
public void setProxyPort( String proxyPort )
{
proxyPort = proxyPort.trim( );
if ( !proxyPort.startsWith( "${" ) )
{
System.setProperty( "http.proxyPort", proxyPort );
}
}
/**
* DOCUMENT_ME
*
* @param verbose DOCUMENT_ME
*/
public void setVerbose( boolean verbose )
{
m_verbose = Boolean.valueOf( verbose );
}
/**
* DOCUMENT_ME
*
* @param wsdl a WSDM WSDL file
*/
public void setWsdl( File wsdl )
{
m_wsdls.add( wsdl );
}
/**
* Sets a system property.
*
* @param var the system property to be set
*/
public void addConfiguredSysproperty( Environment.Variable var )
{
getProject( ).log( "Setting system property: " + var.getKey( ) + " = " + var.getValue( ) );
System.setProperty( var.getKey( ),
var.getValue( ) );
}
/**
* DOCUMENT_ME
*
* @param wsdls DOCUMENT_ME
*/
public void addConfiguredWsdls( FileSet wsdls )
{
processWsdlFileset( wsdls );
}
/**
* Creates the classpath.
*
* @return the classpath
*/
public Path createClasspath( )
{
if ( m_classpath == null )
{
m_classpath = new Path( getProject( ) );
}
return m_classpath.createPath( );
}
/**
* DOCUMENT_ME
*
* @throws org.apache.tools.ant.BuildException
* DOCUMENT_ME
*/
public void execute( )
throws BuildException
{
Wsdl2Java.Wsdl2JavaOptions options = new Wsdl2Java.Wsdl2JavaOptions( );
if ( m_verbose != null )
{
options.setVerbose( m_verbose.booleanValue( ) );
}
File[] classpathFiles = Wsdl2Java.toFileArray( m_classpath.toString( ) );
File[] wsdlFiles = (File[]) m_wsdls.toArray( new File[0] );
try
{
Wsdl2Java wsdl2Java = createWsdl2Java( wsdlFiles, m_outputDir, classpathFiles, options );
wsdl2Java.generate( );
}
catch ( Exception e )
{
throw new BuildException( e );
}
}
/**
* DOCUMENT_ME
*
* @return DOCUMENT_ME
*/
public String toString( )
{
return "Wsdl2Java Ant task";
}
/**
* DOCUMENT_ME
*
* @param wsdlFiles DOCUMENT_ME
* @param outputDir DOCUMENT_ME
* @param classpathFiles DOCUMENT_ME
* @param options DOCUMENT_ME
*
* @return DOCUMENT_ME
*
* @throws Exception DOCUMENT_ME
*/
protected Wsdl2Java createWsdl2Java( File[] wsdlFiles,
File outputDir,
File[] classpathFiles,
Wsdl2Java.Wsdl2JavaOptions options )
throws Exception
{
return new Wsdl2Java( wsdlFiles, outputDir, classpathFiles, options );
}
private void processWsdlFileset( FileSet fileSet )
{
if ( fileSet.getDir( getProject( ) ) != null )
{
FileScanner scanner = fileSet.getDirectoryScanner( getProject( ) );
File basedir = scanner.getBasedir( );
String[] files = scanner.getIncludedFiles( );
for ( int i = 0; i < files.length; i++ )
{
m_wsdls.add( new File( basedir, files[i] ) );
}
}
}
}