/** * Processes the previously set WADL file and generated code in the specified package and target * directory. * * @throws org.apache.tools.ant.BuildException if processing of the WADL file fails. */ public void execute() throws BuildException { if (pkg == null) throw new BuildException(Wadl2JavaMessages.PACKAGE_ATTRIBUTE_REQUIRED()); if (target == null) throw new BuildException(Wadl2JavaMessages.TARGET_ATTRIBUTE_REQUIRED()); if (!target.exists()) throw new BuildException(Wadl2JavaMessages.TARGET_DIRECTORY_MUST_EXIST(target.toString())); if (!target.isDirectory()) throw new BuildException(Wadl2JavaMessages.TARGET_ATTRIBUTE_DIRECTORY(target.toString())); if (desc == null) throw new BuildException(Wadl2JavaMessages.DESCRIPTION_REQUIRED()); List<File> customizations = new ArrayList<File>(); for (FileSet fs : customizationFileSets) { DirectoryScanner ds = fs.getDirectoryScanner(getProject()); String[] includedFiles = ds.getIncludedFiles(); for (String filename : includedFiles) { File f = new File(ds.getBasedir(), filename); customizations.add(f); } } if (desc.getScheme() == null || desc.getScheme().equals("file")) { // assume a file if not explicitly told otherwise File fileDesc = new File(this.getOwningTarget().getProject().getBaseDir(), desc.getPath()); if (!fileDesc.exists()) throw new BuildException(Wadl2JavaMessages.WADL_DESCRIPTION_MUST_EXIST(desc.toString())); if (!fileDesc.isFile()) throw new BuildException(Wadl2JavaMessages.WADL_DESCRIPTION_FILE(desc.toString())); desc = fileDesc.toURI(); // check if description has changed since code was last generated long earliestProducedFileStamp = Long.MAX_VALUE; for (FileSet fs : producedFileSets) { DirectoryScanner ds = fs.getDirectoryScanner(getProject()); String[] includedFiles = ds.getIncludedFiles(); for (String filename : includedFiles) { File f = new File(ds.getBasedir(), filename); if (f.lastModified() < earliestProducedFileStamp) earliestProducedFileStamp = f.lastModified(); } } long latestConsumedFileStamp = fileDesc.lastModified(); for (FileSet fs : consumedFileSets) { DirectoryScanner ds = fs.getDirectoryScanner(getProject()); String[] includedFiles = ds.getIncludedFiles(); for (String filename : includedFiles) { File f = new File(ds.getBasedir(), filename); if (f.lastModified() > latestConsumedFileStamp) latestConsumedFileStamp = f.lastModified(); } } for (File f : customizations) { if (f.lastModified() > latestConsumedFileStamp) latestConsumedFileStamp = f.lastModified(); } if (earliestProducedFileStamp < Long.MAX_VALUE && latestConsumedFileStamp < earliestProducedFileStamp) { log(Wadl2JavaMessages.SKIPPING_COMPILATION()); return; } } // pre-requisites satisfied, compile the description try { Wadl2Java wadlProcessor = new Wadl2Java(target, pkg, autoPackage, customizations); wadlProcessor.process(desc); } catch (Exception ex) { ex.printStackTrace(); throw new BuildException(Wadl2JavaMessages.PROCESSING_FAILED(), ex); } }