diff options
author | Mark Spruiell <mes@zeroc.com> | 2001-11-09 23:36:27 +0000 |
---|---|---|
committer | Mark Spruiell <mes@zeroc.com> | 2001-11-09 23:36:27 +0000 |
commit | 16939d0af64389f533bb38db1ae18898e637278b (patch) | |
tree | 0aa583b25aee0eaf852d7354d01d838bcb06efa0 /java/ant/Slice2JavaTask.java | |
parent | detect and fix Java keywords (diff) | |
download | ice-16939d0af64389f533bb38db1ae18898e637278b.tar.bz2 ice-16939d0af64389f533bb38db1ae18898e637278b.tar.xz ice-16939d0af64389f533bb38db1ae18898e637278b.zip |
initial check-in
Diffstat (limited to 'java/ant/Slice2JavaTask.java')
-rw-r--r-- | java/ant/Slice2JavaTask.java | 257 |
1 files changed, 257 insertions, 0 deletions
diff --git a/java/ant/Slice2JavaTask.java b/java/ant/Slice2JavaTask.java new file mode 100644 index 00000000000..440784e270e --- /dev/null +++ b/java/ant/Slice2JavaTask.java @@ -0,0 +1,257 @@ +// ********************************************************************** +// +// Copyright (c) 2001 +// MutableRealms, Inc. +// Huntsville, AL, USA +// +// All Rights Reserved +// +// ********************************************************************** + +//package Ice.Ant; + +import org.apache.tools.ant.Task; +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.DirectoryScanner; +import org.apache.tools.ant.types.FileSet; +import org.apache.tools.ant.taskdefs.ExecTask; +import org.apache.tools.ant.types.Commandline.Argument; +import org.apache.tools.ant.types.Path; +import org.apache.tools.ant.types.Reference; + +import java.io.File; +import java.io.FileOutputStream; + +/** + * An ant task for slice2java. The task minimizes regeneration by + * creating a tag file whose timestamp represents the last time + * the corresponding Slice file was generated. + * + * Attributes: + * + * translator - The pathname of the translator (default: "slice2java"). + * tagdir - The directory in which tag files are located (default: "."). + * outputdir - The value for the --output-dir translator option. + * package - The value for the --package translator option. + * + * Nested elements: + * + * includepath - The directories in which to search for Slice files. + * These are converted into -I directives for the translator. + * fileset - The set of Slice files to generate. + * + * Example: + * + * <project ...> + * <taskdef name="slice2java" classname="Slice2JavaTask" /> + * <property name="slice.dir" value="../include/slice"/> + * <target name="generate"> + * <mkdir dir="tags" /> + * <slice2java tagdir="tags" outputdir="out" package="com.foo"> + * <includepath> + * <pathelement path="${slice.dir}" /> + * </includepath> + * <fileset dir="${slice.dir}"> + * <include name="*.ice" /> + * </fileset> + * </slice2java> + * </target> + * </project> + * + * The <taskdef> element installs the slice2java task. + */ +public class Slice2JavaTask extends org.apache.tools.ant.Task +{ + public + Slice2JavaTask() + { + _translator = "slice2java"; + _tagDir = "."; + _outputDir = null; + _package = null; + _includePath = null; + _fileSet = null; + } + + public void + setTranslator(String prog) + { + _translator = prog; + } + + public void + setTagdir(String dir) + { + _tagDir = dir; + } + + public void + setOutputdir(String dir) + { + _outputDir = dir; + } + + public void + setPackage(String pkg) + { + _package = pkg; + } + + public Path + createIncludePath() + { + if (_includePath == null) + { + _includePath = new Path(project); + } + return _includePath.createPath(); + } + + public void + setIncludePathRef(Reference ref) + { + createIncludePath().setRefid(ref); + } + + public void + setIncludePath(Path includePath) + { + if (_includePath == null) + { + _includePath = includePath; + } + else + { + _includePath.append(includePath); + } + } + + public FileSet + createFileset() + { + if (_fileSet == null) + { + _fileSet = new FileSet(); + } + return _fileSet; + } + + public void + execute() + throws BuildException + { + if (_fileSet == null) + { + throw new BuildException("No fileset specified"); + } + + // + // Compose a list of the files that need to be translated + // + java.util.Vector buildList = new java.util.Vector(); + java.util.Vector tagList = new java.util.Vector(); + DirectoryScanner scanner = _fileSet.getDirectoryScanner(project); + scanner.scan(); + String[] files = scanner.getIncludedFiles(); + for (int i = 0; i < files.length; i++) + { + File slice = new File(_fileSet.getDir(project), files[i]); + File tag = new File(_tagDir, "." + slice.getName() + ".tag"); + + if (tag.exists() && slice.lastModified() <= tag.lastModified()) + { + log("skipping " + files[i]); + } + else + { + buildList.addElement(slice); + tagList.addElement(tag); + } + } + + // + // Run the translator + // + if (!buildList.isEmpty()) + { + StringBuffer cmd = new StringBuffer(); + + // + // Add --output-dir + // + if (_outputDir != null) + { + cmd.append(" --output-dir "); + cmd.append(_outputDir); + } + + // + // Add --package + // + if (_package != null) + { + cmd.append(" --package "); + cmd.append(_package); + } + + // + // Add include directives + // + if (_includePath != null) + { + String[] dirs = _includePath.list(); + for (int i = 0; i < dirs.length; i++) + { + cmd.append(" -I"); + cmd.append(dirs[i]); + } + } + + // + // Add files to be translated + // + for (int i = 0; i < buildList.size(); i++) + { + File f = (File)buildList.elementAt(i); + cmd.append(" "); + cmd.append(f.toString()); + } + + // + // Execute + // + log(_translator + " " + cmd); + ExecTask task = (ExecTask)project.createTask("exec"); + task.setFailonerror(true); + Argument arg = task.createArg(); + arg.setLine(cmd.toString()); + task.setExecutable(_translator); + task.execute(); + + // + // Touch the tag files + // + for (int i = 0; i < tagList.size(); i++) + { + File f = (File)tagList.elementAt(i); + try + { + FileOutputStream out = new FileOutputStream(f); + out.close(); + } + catch(java.io.IOException ex) + { + throw new BuildException("Unable to create tag file " + + f + ": " + ex); + } + } + } + } + + private String _translator; + private String _tagDir; + private String _outputDir; + private String _package; + private Path _includePath; + private FileSet _fileSet; +} |