Browse Source

MParse refactoring

PR: 10160
Submitted by: jesse@cryptocard.com (Jesse)


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@272999 13f79535-47bb-0310-9956-ffa450edef68
master
Stephane Bailliez 23 years ago
parent
commit
25d72a26d4
1 changed files with 40 additions and 89 deletions
  1. +40
    -89
      src/main/org/apache/tools/ant/taskdefs/optional/metamata/MParse.java

+ 40
- 89
src/main/org/apache/tools/ant/taskdefs/optional/metamata/MParse.java View File

@@ -56,12 +56,10 @@ package org.apache.tools.ant.taskdefs.optional.metamata;


import org.apache.tools.ant.BuildException; import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project; import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.taskdefs.ExecuteStreamHandler; import org.apache.tools.ant.taskdefs.ExecuteStreamHandler;
import org.apache.tools.ant.taskdefs.LogStreamHandler; import org.apache.tools.ant.taskdefs.LogStreamHandler;
import org.apache.tools.ant.taskdefs.Execute; import org.apache.tools.ant.taskdefs.Execute;
import org.apache.tools.ant.types.Commandline; import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.types.CommandlineJava;
import org.apache.tools.ant.types.Path; import org.apache.tools.ant.types.Path;


import java.io.File; import java.io.File;
@@ -69,56 +67,29 @@ import java.io.IOException;
import java.io.FileWriter; import java.io.FileWriter;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.util.Vector; import java.util.Vector;
import java.util.Random;


/** /**
* Simple Metamata MParse task based on the original written by * Simple Metamata MParse task based on the original written by
* <a href="mailto:thomas.haas@softwired-inc.com">Thomas Haas</a>. * <a href="mailto:thomas.haas@softwired-inc.com">Thomas Haas</a>.
*
*
* This version was written for Metamata 2.0 available at * This version was written for Metamata 2.0 available at
* <a href="http://www.metamata.com">http://www.metamata.com</a> * <a href="http://www.metamata.com">http://www.metamata.com</a>
* *
* @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a> * @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
*/ */
public class MParse extends Task {
public class MParse extends AbstractMetamataTask {


private Path classpath = null;
private Path sourcepath = null;
private File metahome = null;
private File target = null; private File target = null;
private boolean verbose = false; private boolean verbose = false;
private boolean debugparser = false; private boolean debugparser = false;
private boolean debugscanner = false;
private boolean debugscanner = false;
private boolean cleanup = false; private boolean cleanup = false;
private CommandlineJava cmdl = new CommandlineJava();
private File optionsFile = null;

/** location of metamata dev environment */
public void setMetamatahome(File metamatahome) {
this.metahome = metamatahome;
}


/** the .jj file to process */ /** the .jj file to process */
public void setTarget(File target) { public void setTarget(File target) {
this.target = target; this.target = target;
} }


/** create a classpath entry */
public Path createClasspath() {
if (classpath == null) {
classpath = new Path(project);
}
return classpath;
}

/** creates a sourcepath entry */
public Path createSourcepath() {
if (sourcepath == null) {
sourcepath = new Path(project);
}
return sourcepath;
}

/** set verbose mode */ /** set verbose mode */
public void setVerbose(boolean flag){ public void setVerbose(boolean flag){
verbose = flag; verbose = flag;
@@ -139,22 +110,12 @@ public class MParse extends Task {
cleanup = value; cleanup = value;
} }


/** Creates a nested jvmarg element. */
public Commandline.Argument createJvmarg() {
return cmdl.createVmArgument();
}

/** -mx or -Xmx depending on VM version */
public void setMaxmemory(String max){
cmdl.setMaxmemory(max);
}

public MParse() { public MParse() {
cmdl.setVm("java"); cmdl.setVm("java");
cmdl.setClassname("com.metamata.jj.MParse"); cmdl.setClassname("com.metamata.jj.MParse");
} }



/** execute the command line */ /** execute the command line */
public void execute() throws BuildException { public void execute() throws BuildException {
try { try {
@@ -165,12 +126,12 @@ public class MParse extends Task {
cleanUp(); cleanUp();
} }
} }
/** return the default stream handler for this task */ /** return the default stream handler for this task */
protected ExecuteStreamHandler createStreamHandler(){ protected ExecuteStreamHandler createStreamHandler(){
return new LogStreamHandler(this, Project.MSG_INFO, Project.MSG_INFO); return new LogStreamHandler(this, Project.MSG_INFO, Project.MSG_INFO);
} }
/** /**
* check the options and build the command line * check the options and build the command line
*/ */
@@ -186,18 +147,21 @@ public class MParse extends Task {


// set the metamata.home property // set the metamata.home property
final Commandline.Argument vmArgs = cmdl.createVmArgument(); final Commandline.Argument vmArgs = cmdl.createVmArgument();
vmArgs.setValue("-Dmetamata.home=" + metahome.getAbsolutePath());
vmArgs.setValue("-Dmetamata.home=" + metamataHome.getAbsolutePath());




// write all the options to a temp file and use it ro run the process // write all the options to a temp file and use it ro run the process
String[] options = getOptions();
Vector opts = getOptions();
String[] options = new String[ opts.size() ];
opts.copyInto(options);

optionsFile = createTmpFile(); optionsFile = createTmpFile();
generateOptionsFile(optionsFile, options); generateOptionsFile(optionsFile, options);
Commandline.Argument args = cmdl.createArgument(); Commandline.Argument args = cmdl.createArgument();
args.setLine("-arguments " + optionsFile.getAbsolutePath()); args.setLine("-arguments " + optionsFile.getAbsolutePath());
}
}



/** execute the process with a specific handler */ /** execute the process with a specific handler */
protected void _execute(ExecuteStreamHandler handler) throws BuildException { protected void _execute(ExecuteStreamHandler handler) throws BuildException {
// target has been checked as a .jj, see if there is a matching // target has been checked as a .jj, see if there is a matching
@@ -210,7 +174,7 @@ public class MParse extends Task {
project.log("Target is already build - skipping (" + target + ")"); project.log("Target is already build - skipping (" + target + ")");
return; return;
} }
final Execute process = new Execute(handler); final Execute process = new Execute(handler);
log(cmdl.describeCommand(), Project.MSG_VERBOSE); log(cmdl.describeCommand(), Project.MSG_VERBOSE);
process.setCommandline(cmdl.getCommandline()); process.setCommandline(cmdl.getCommandline());
@@ -219,10 +183,10 @@ public class MParse extends Task {
throw new BuildException("Metamata task failed."); throw new BuildException("Metamata task failed.");
} }
} catch (IOException e){ } catch (IOException e){
throw new BuildException("Failed to launch Metamata task: " + e);
throw new BuildException("Failed to launch Metamata task: ", e);
} }
}
}
/** clean up all the mess that we did with temporary objects */ /** clean up all the mess that we did with temporary objects */
protected void cleanUp(){ protected void cleanUp(){
if (optionsFile != null){ if (optionsFile != null){
@@ -240,7 +204,7 @@ public class MParse extends Task {
} }
} }
} }
/** /**
* return an array of files containing the path to the needed * return an array of files containing the path to the needed
* libraries to run metamata. The file are not checked for * libraries to run metamata. The file are not checked for
@@ -250,48 +214,47 @@ public class MParse extends Task {
*/ */
protected File[] getMetamataLibs(){ protected File[] getMetamataLibs(){
Vector files = new Vector(); Vector files = new Vector();
files.addElement(new File(metahome, "lib/metamata.jar"));
files.addElement(new File(metahome, "bin/lib/JavaCC.zip"));
files.addElement(new File(metamataHome, "lib/metamata.jar"));
files.addElement(new File(metamataHome, "bin/lib/JavaCC.zip"));
File[] array = new File[ files.size() ]; File[] array = new File[ files.size() ];
files.copyInto(array); files.copyInto(array);
return array; return array;
} }
/** /**
* validate options set and resolve files and paths * validate options set and resolve files and paths
* @throws BuildException thrown if an option has an incorrect state. * @throws BuildException thrown if an option has an incorrect state.
*/ */
protected void checkOptions() throws BuildException {
protected void checkOptions() throws BuildException {
// check that the home is ok. // check that the home is ok.
if (metahome == null || !metahome.exists()){
if (metamataHome == null || !metamataHome.exists()){
throw new BuildException("'metamatahome' must point to Metamata home directory."); throw new BuildException("'metamatahome' must point to Metamata home directory.");
} }
metahome = project.resolveFile(metahome.getPath());
metamataHome = project.resolveFile(metamataHome.getPath());
// check that the needed jar exists. // check that the needed jar exists.
File[] jars = getMetamataLibs(); File[] jars = getMetamataLibs();
for (int i = 0; i < jars.length; i++){ for (int i = 0; i < jars.length; i++){
if (!jars[i].exists()){ if (!jars[i].exists()){
throw new BuildException(jars[i]
throw new BuildException(jars[i]
+ " does not exist. Check your metamata installation."); + " does not exist. Check your metamata installation.");
}
}
} }
// check that the target is ok and resolve it. // check that the target is ok and resolve it.
if (target == null || !target.isFile()
if (target == null || !target.isFile()
|| !target.getName().endsWith(".jj")) { || !target.getName().endsWith(".jj")) {
throw new BuildException("Invalid target: " + target); throw new BuildException("Invalid target: " + target);
} }
target = project.resolveFile(target.getPath()); target = project.resolveFile(target.getPath());
}
}
/** /**
* return all options of the command line as string elements * return all options of the command line as string elements
* @param an array of options corresponding to the setted options.
*/ */
protected String[] getOptions(){
protected Vector getOptions() {
Vector options = new Vector(); Vector options = new Vector();
if (verbose){ if (verbose){
options.addElement("-verbose"); options.addElement("-verbose");
@@ -302,21 +265,18 @@ public class MParse extends Task {
if (debugparser){ if (debugparser){
options.addElement("-dp"); options.addElement("-dp");
} }
if (classpath != null){
if (classPath != null){
options.addElement("-classpath"); options.addElement("-classpath");
options.addElement(classpath.toString());
options.addElement(classPath.toString());
} }
if (sourcepath != null){
if (sourcePath != null){
options.addElement("-sourcepath"); options.addElement("-sourcepath");
options.addElement(sourcepath.toString());
options.addElement(sourcePath.toString());
} }
options.addElement(target.getAbsolutePath()); options.addElement(target.getAbsolutePath());
String[] array = new String[options.size()];
options.copyInto(array);
return array;
return options;
} }

/** /**
* write all options to a file with one option / line * write all options to a file with one option / line
* @param tofile the file to write the options to. * @param tofile the file to write the options to.
@@ -343,13 +303,4 @@ public class MParse extends Task {
} }
} }
} }
/** create a temporary file in the current directory */
protected static final File createTmpFile(){
// must be compatible with JDK 1.1 !!!!
final long rand = (new Random(System.currentTimeMillis())).nextLong();
File file = new File("metamata" + rand + ".tmp");
return file;
}

} }

Loading…
Cancel
Save