ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ste...@apache.org
Subject cvs commit: ant/src/testcases/org/apache/tools/ant/taskdefs/optional WsdlToDotnetTest.java
Date Tue, 03 Aug 2004 23:24:10 GMT
stevel      2004/08/03 16:24:10

  Modified:    src/etc/testcases/taskdefs/optional WsdlToDotnet.xml
               src/main/org/apache/tools/ant/taskdefs/optional/dotnet
                        WsdlToDotnet.java
               src/testcases/org/apache/tools/ant/taskdefs/optional
                        WsdlToDotnetTest.java
  Log:
  These changes will break Stefan's and my work builds, but they are for the better.
  
  1. pull file/url stuff from the main class into another instance of the schema class.
  
  2. added a makeURL flag that turns a file ref in a schema into a URL. v. useful for .net.

  
  3. added a compiler enum and attr that lets you choose compiler. Compilers are microsoft|mono|microsoft-on-mono.

  
  4. renamed parseableerrors to ideErrors.
  
  5. dependency logic uses filesys granularity. 
  
  No tests for the compiler stuff, we need to think about how to do that.
  
  Revision  Changes    Path
  1.10      +3 -3      ant/src/etc/testcases/taskdefs/optional/WsdlToDotnet.xml
  
  Index: WsdlToDotnet.xml
  ===================================================================
  RCS file: /home/cvs/ant/src/etc/testcases/taskdefs/optional/WsdlToDotnet.xml,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- WsdlToDotnet.xml	3 Aug 2004 08:52:06 -0000	1.9
  +++ WsdlToDotnet.xml	3 Aug 2004 23:24:09 -0000	1.10
  @@ -190,10 +190,10 @@
     </target>
   
   
  -  <target name="testParseableErrorsIgnoredWhenFalse" depends="init">
  +  <target name="testideErrorsIgnoredWhenFalse" depends="init">
       <wsdltodotnet destFile="${out.csc}"
         srcFile="${local.wsdl}"
  -      parseableErrors="false"
  +      ideErrors="false"
         >
       </wsdltodotnet>
     </target>
  @@ -222,5 +222,5 @@
           url="http://ant.apache.org/xml/AntSchema.xsd"/>
       </wsdltodotnet>
     </target>
  -  
  +
   </project>
  
  
  
  1.25      +240 -85   ant/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/WsdlToDotnet.java
  
  Index: WsdlToDotnet.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/WsdlToDotnet.java,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- WsdlToDotnet.java	2 Aug 2004 23:03:22 -0000	1.24
  +++ WsdlToDotnet.java	3 Aug 2004 23:24:09 -0000	1.25
  @@ -19,9 +19,12 @@
   import java.io.File;
   import java.util.Vector;
   import java.util.Iterator;
  +import java.net.URL;
  +import java.net.MalformedURLException;
   
   import org.apache.tools.ant.BuildException;
   import org.apache.tools.ant.Task;
  +import org.apache.tools.ant.types.EnumeratedAttribute;
   import org.apache.tools.ant.taskdefs.condition.Os;
   import org.apache.tools.ant.util.FileUtils;
   
  @@ -55,11 +58,6 @@
       private File destFile = null;
   
       /**
  -     * url to retrieve
  -     */
  -    private String url = null;
  -
  -    /**
        * name of source file
        */
       private String srcFileName = null;
  @@ -89,12 +87,6 @@
        */
       protected String extraOptions = null;
   
  -    /**
  -     * mono flag; we ignore the Rotor implementation of the CLR
  -     * @since Ant 1.7
  -     */
  -    private boolean isMono = !Os.isFamily("windows");
  -
   
       /**
        * protocol string. Exact value set depends on SOAP stack version.
  @@ -103,11 +95,11 @@
       private String protocol = null;
   
       /**
  -     * should errors come in a machine parseable format. This
  +     * should errors come in an IDE format. This
        * is WSE only.
        * @since Ant 1.7
        */
  -    private boolean parseableErrors = false;
  +    private boolean ideErrors = false;
   
       /**
        * filesets of file to compile
  @@ -116,6 +108,33 @@
       private Vector schemas = new Vector();
   
       /**
  +     * our WSDL file.
  +     * @since ant1.7
  +     */
  +    private Schema wsdl=new Schema();
  +
  +    /**
  +     * compiler
  +     * @since ant1.7
  +     */
  +    private Compiler compiler=null;
  +
  +    /**
  +     * error message: dest file is a directory
  +     */
  +    public static final String ERROR_DEST_FILE_IS_DIR = "destination file is a directory";
  +
  +    /**
  +     * error message: no dest file
  +     */
  +    public static final String ERROR_NO_DEST_FILE = "destination file must be specified";
  +
  +    /**
  +     * used for timestamp checking
  +     */
  +    private FileUtils fileutils= FileUtils.newFileUtils();
  +
  +    /**
        * Name of the file to generate. Required
        * @param destFile filename
        */
  @@ -130,7 +149,7 @@
        */
   
       public void setUrl(String url) {
  -        this.url = url;
  +        wsdl.setUrl(url);
       }
   
       /**
  @@ -143,7 +162,10 @@
                   .removeLeadingPath(getProject().getBaseDir(), 
                                      new File(srcFileName));;
           }
  +        //save the string name of the file
           this.srcFileName = srcFileName;
  +        //and save the file
  +        wsdl.setFile(getProject().resolveFile(srcFileName));
       }
   
       /**
  @@ -194,26 +216,14 @@
       }
   
       /**
  -     * Explicitly override the Mono auto-detection.
  -     *
  -     * <p>Defaults to false on Windows and true on any other platform.</p>
  -     *
  -     * @since Ant 1.7
  -     */
  -    public void setMono(boolean b) {
  -        isMono = b;
  -    }
  -
  -
  -    /**
        * Should errors be machine parseable?
        * Optional, default=true
        *
        * @since Ant 1.7
  -     * @param parseableErrors
  +     * @param ideErrors
        */
  -    public void setParseableErrors(boolean parseableErrors) {
  -        this.parseableErrors = parseableErrors;
  +    public void setIdeErrors(boolean ideErrors) {
  +        this.ideErrors = ideErrors;
       }
   
       /**
  @@ -239,38 +249,37 @@
       }
   
       /**
  +     * flag to trigger turning a filename into a file:url
  +     * ignored for the mono compiler.
  +     * @param b
  +     */
  +    public void setMakeURL(boolean b) {
  +        wsdl.setMakeURL(b);
  +    }
  +
  +    /**
  +     * identify the compiler
  +     * @since Ant 1.7
  +     * @param compiler
  +     */
  +    public void setCompiler(Compiler compiler) {
  +        this.compiler = compiler;
  +    }
  +
  +    /**
        * validation code
        * @throws  BuildException  if validation failed
        */
       protected void validate()
               throws BuildException {
           if (destFile == null) {
  -            throw new BuildException("destination file must be specified");
  +            throw new BuildException(ERROR_NO_DEST_FILE);
           }
           if (destFile.isDirectory()) {
               throw new BuildException(
  -                "destination file is a directory");
  -        }
  -        if (url != null && srcFileName != null) {
  -            throw new BuildException(
  -                    "you can not specify both a source file and a URL");
  -        }
  -        if (url == null && srcFileName == null) {
  -            throw new BuildException(
  -                    "you must specify either a source file or a URL");
  +                    ERROR_DEST_FILE_IS_DIR);
           }
  -        if (srcFileName != null) {
  -            File srcFile = getProject().resolveFile(srcFileName);
  -            if (!srcFile.exists()) {
  -                throw new BuildException(
  -                    "source file does not exist");
  -            }
  -            if (srcFile.isDirectory()) {
  -                throw new BuildException(
  -                    "source file is a directory");
  -            }
  -        }
  -
  +        wsdl.validate();
       }
   
       /**
  @@ -280,10 +289,16 @@
        */
       public void execute()
                throws BuildException {
  +        if(compiler==null) {
  +            compiler=Compiler.createDefaultCompiler();
  +        }
           validate();
  -        NetCommand command = new NetCommand(this, "WSDL", "wsdl");
  +        NetCommand command = new NetCommand(this,
  +                "WSDL",
  +                compiler.getCommand());
           command.setFailOnError(failOnError);
           //fill in args
  +        compiler.applyExtraArgs(command);
           command.addArgument("/nologo");
           command.addArgument("/out:" + destFile);
           command.addArgument("/language:", language);
  @@ -294,7 +309,7 @@
           if(protocol!=null) {
               command.addArgument("/protocol:"+protocol);
           }
  -        if(parseableErrors) {
  +        if(ideErrors) {
               command.addArgument("/parsableErrors");
           }
           command.addArgument(extraOptions);
  @@ -302,40 +317,28 @@
           //set source and rebuild options
           boolean rebuild = true;
           long destLastModified = -1;
  -        if (srcFileName != null) {
  -            File srcFile = getProject().resolveFile(srcFileName);
  -            if (isMono) {
  -                // Mono 1.0's wsdl doesn't deal with absolute paths
  -                command.addArgument(srcFileName);
  -            } else {
  -                command.addArgument(srcFile.toString());
  -            }
  -            //rebuild unless the dest file is newer than the source file
  -            if ( destFile.exists() ) {
  -                destLastModified = destFile.lastModified();
  -            }
  -            if (srcFile.exists()
  -                && srcFile.lastModified() <= destLastModified) {
  -                rebuild = false;
  -            }
  -        } else {
  -            //no source file? must be a url, which has no dependency
  -            //handling
  -            rebuild = true;
  -            command.addArgument(url);
  +
  +        //rebuild unless the dest file is newer than the source file
  +        if ( destFile.exists() ) {
  +            destLastModified = destFile.lastModified();
  +            rebuild = isRebuildNeeded(wsdl, destLastModified);
  +        }
  +        String path;
  +        //mark for a rebuild if the dest file is newer
  +        path=wsdl.evaluate();
  +        if ( !compiler.supportsAbsoluteFiles() ) {
  +            // Mono 1.0's wsdl doesn't deal with absolute paths
  +            path = srcFileName;
           }
  +        command.addArgument(path);
           //add in any extra files.
           //this is an error in mono, but we do not warn on it as they may fix that outside
           //the ant build cycle.
           Iterator it=schemas.iterator();
           while ( it.hasNext() ) {
               Schema schema = (Schema) it.next();
  -            //get date, mark for a rebuild if we are newer
  -            long schemaTimestamp;
  -            schemaTimestamp=schema.getTimestamp();
  -            if(schemaTimestamp>destLastModified) {
  -                rebuild=true;
  -            }
  +            //mark for a rebuild if we are newer
  +            rebuild |= isRebuildNeeded(schema, destLastModified);
               command.addArgument(schema.evaluate());
           }
           //conditionally compile
  @@ -344,6 +347,19 @@
           }
       }
   
  +    /**
  +     * checks for a schema being out of data
  +     * @param schema url/file
  +     * @param destLastModified timestamp, -1 for no dest
  +     * @return true if a rebuild is needed.
  +     */
  +    private boolean isRebuildNeeded(Schema schema, long destLastModified) {
  +        if(destLastModified==-1) {
  +            return true;
  +        }
  +        return !fileutils.isUpToDate(schema.getTimestamp(), destLastModified);
  +    }
  +
   
       /**
        * nested schema class
  @@ -352,14 +368,26 @@
       public static class Schema {
           private File file;
           private String url;
  +        private boolean makeURL=false;
  +
           public static final String ERROR_NONE_DECLARED = "One of file and url must be set";
           public static final String ERROR_BOTH_DECLARED = "Only one of file or url can be
set";
           public static final String ERROR_FILE_NOT_FOUND = "Not found: ";
  +        public static final String ERROR_FILE_IS_DIR = "File is a directory: ";
  +        public static final String ERROR_NO_URL_CONVERT = "Could not URL convert ";
   
  +        /**
  +         * validate the schema
  +         */
           public  void validate() {
   
  -            if(file!=null && !file.exists()) {
  -                throw new BuildException(ERROR_FILE_NOT_FOUND+file.toString());
  +            if(file!=null) {
  +                if (!file.exists()) {
  +                    throw new BuildException(ERROR_FILE_NOT_FOUND+file.toString());
  +                }
  +                if ( file.isDirectory() ) {
  +                    throw new BuildException(ERROR_FILE_IS_DIR+file.toString());
  +                }
               }
               if(file!=null && url!=null) {
                   throw new BuildException(ERROR_BOTH_DECLARED);
  @@ -375,16 +403,27 @@
            */
           public String evaluate() {
               validate();
  -            if(file!=null) {
  -                return file.toString();
  -            } else {
  +            if(url!=null) {
                   return getUrl();
               }
  +            if(makeURL) {
  +                try {
  +                    return file.toURL().toExternalForm();
  +                } catch (MalformedURLException e) {
  +                    throw new BuildException(ERROR_NO_URL_CONVERT+file);
  +                }
  +            }
  +            return file.toString();
           }
  +
           public File getFile() {
               return file;
           }
   
  +        /**
  +         * name of a file to use as a source of WSDL or XSD data
  +         * @param file
  +         */
           public void setFile(File file) {
               this.file = file;
           }
  @@ -393,10 +432,28 @@
               return url;
           }
   
  +        /**
  +         * url of a resource.
  +         * URLs have no timestamp checking, and are not validated
  +         * @param url
  +         */
           public void setUrl(String url) {
               this.url = url;
           }
   
  +        public boolean isMakeURL() {
  +            return makeURL;
  +        }
  +
  +        /**
  +         * flag to request that a file is turned into an absolute file: URL
  +         * before being passed to the WSDL compiler
  +         * @param makeURL
  +         */
  +        public void setMakeURL(boolean makeURL) {
  +            this.makeURL = makeURL;
  +        }
  +
           /**
            * return the timestamp of a file, or -1 for a url (meaning we do not know its
age)
            * @return
  @@ -408,5 +465,103 @@
                   return -1;
           }
       }
  +
  +    /**
  +     * The enumerated values for our compiler
  +     */
  +    public static class Compiler extends EnumeratedAttribute {
  +
  +        public static final String COMPILER_MS = "microsoft";
  +        public static final String COMPILER_MONO = "mono";
  +        public static final String COMPILER_MS_ON_MONO = "microsoft-on-mono";
  +        String[] compilers={
  +            COMPILER_MS,
  +            COMPILER_MONO,
  +            COMPILER_MS_ON_MONO
  +        };
  +
  +        public static final String EXE_WSDL = "wsdl";
  +        public static final String EXE_MONO = "mono";
  +        /**
  +         * programs to run
  +         */
  +        String[] compilerExecutables = {
  +            EXE_WSDL,
  +            EXE_WSDL,
  +            EXE_MONO
  +        };
  +
  +
  +        /**
  +         * extra things
  +         */
  +        String[][] extraCompilerArgs = {
  +            {},
  +            {},
  +            {EXE_WSDL}
  +        };
  +
  +        boolean[] absoluteFiles = {
  +            true,
  +            false,
  +            true
  +        };
  +
  +        /**
  +         * This is the only method a subclass needs to implement.
  +         *
  +         * @return an array holding all possible values of the enumeration.
  +         *         The order of elements must be fixed so that <tt>indexOfValue(String)</tt>
  +         *         always return the same index for the same value.
  +         */
  +        public String[] getValues() {
  +            return compilers;
  +        }
  +
  +        /**
  +         * create the default compiler for this platform
  +         * @return
  +         */
  +        public static Compiler createDefaultCompiler() {
  +            Compiler c=new Compiler();
  +            String compilerName;
  +            compilerName= Os.isFamily("windows")?COMPILER_MS:COMPILER_MONO;
  +            c.setValue(compilerName);
  +            return c;
  +        }
  +
  +        /**
  +         * return the command to run
  +         * @return
  +         */
  +        public String getCommand() {
  +            return compilerExecutables[getIndex()];
  +        }
  +
  +        /**
  +         * return any extra arguments for the compiler
  +         * @return
  +         */
  +        public String[] getExtraArgs() {
  +            return extraCompilerArgs[getIndex()];
  +        }
  +
  +        public boolean supportsAbsoluteFiles() {
  +            return absoluteFiles[getIndex()];
  +        }
  +
  +        /**
  +         * apply any extra arguments of this class
  +         * @param command
  +         */
  +        public void applyExtraArgs(NetCommand command) {
  +            String[] args=getExtraArgs();
  +            for(int i=0;i<args.length;i++) {
  +               command.addArgument(args[i]);
  +            }
  +        }
  +
  +    }
  +
   }
   
  
  
  
  1.10      +14 -9     ant/src/testcases/org/apache/tools/ant/taskdefs/optional/WsdlToDotnetTest.java
  
  Index: WsdlToDotnetTest.java
  ===================================================================
  RCS file: /home/cvs/ant/src/testcases/org/apache/tools/ant/taskdefs/optional/WsdlToDotnetTest.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- WsdlToDotnetTest.java	2 Aug 2004 22:42:20 -0000	1.9
  +++ WsdlToDotnetTest.java	3 Aug 2004 23:24:09 -0000	1.10
  @@ -30,10 +30,15 @@
   public class WsdlToDotnetTest extends BuildFileTest {
   
       /**
  -     * Description of the Field
  +     * dir for taskdefs
        */
       private final static String TASKDEFS_DIR = "src/etc/testcases/taskdefs/optional/";
   
  +    /**
  +     * message from exec
  +     */
  +    private static final String WSDL_FAILED = "WSDL returned:";
  +
   
       /**
        * Constructor
  @@ -68,7 +73,7 @@
       public void testNoParams() throws Exception {
           expectBuildExceptionContaining("testNoParams",
                   "expected failure",
  -                "destination file must be specified");
  +                WsdlToDotnet.ERROR_NO_DEST_FILE);
       }
   
       /**
  @@ -77,7 +82,7 @@
       public void testNoSrc() throws Exception {
           expectBuildExceptionContaining("testNoSrc",
                   "expected failure",
  -                "you must specify either a source file or a URL");
  +                WsdlToDotnet.Schema.ERROR_NONE_DECLARED);
       }
   
       /**
  @@ -86,7 +91,7 @@
       public void testDestIsDir() throws Exception {
           expectBuildExceptionContaining("testDestIsDir",
                   "expected failure",
  -                "is a directory");
  +                WsdlToDotnet.ERROR_DEST_FILE_IS_DIR);
       }
   
       /**
  @@ -95,7 +100,7 @@
       public void testBothSrc() throws Exception {
           expectBuildExceptionContaining("testBothSrc",
                   "expected failure",
  -                "both a source file and a URL");
  +                WsdlToDotnet.Schema.ERROR_BOTH_DECLARED);
       }
        /**
        * A unit test for JUnit
  @@ -103,7 +108,7 @@
       public void testSrcIsDir() throws Exception {
           expectBuildExceptionContaining("testSrcIsDir",
                   "expected failure",
  -                "is a directory");
  +                WsdlToDotnet.Schema.ERROR_FILE_IS_DIR);
       }
   
       /**
  @@ -112,7 +117,7 @@
       public void testSrcIsMissing() throws Exception {
           expectBuildExceptionContaining("testSrcIsMissing",
                   "expected failure",
  -                "does not exist");
  +                WsdlToDotnet.Schema.ERROR_FILE_NOT_FOUND);
       }
   
       /**
  @@ -133,7 +138,7 @@
       public void testInvalidExtraOps() throws Exception {
           expectBuildExceptionContaining("testInvalidExtraOps",
                   "expected failure",
  -                "WSDL returned:");
  +                WSDL_FAILED);
       }
   
       /**
  @@ -154,7 +159,7 @@
       public void testInvalidExtraOpsVB() throws Exception {
           expectBuildExceptionContaining("testInvalidExtraOpsVB",
                   "expected failure",
  -                "WSDL returned:");
  +                WSDL_FAILED);
       }
   
       /**
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org


Mime
View raw message