summaryrefslogtreecommitdiff
path: root/java/ant/Slice2JavaTask.java
diff options
context:
space:
mode:
authorMark Spruiell <mes@zeroc.com>2001-11-09 23:36:27 +0000
committerMark Spruiell <mes@zeroc.com>2001-11-09 23:36:27 +0000
commit16939d0af64389f533bb38db1ae18898e637278b (patch)
tree0aa583b25aee0eaf852d7354d01d838bcb06efa0 /java/ant/Slice2JavaTask.java
parentdetect and fix Java keywords (diff)
downloadice-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.java257
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;
+}