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.Project;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.taskdefs.ExecuteStreamHandler;
import org.apache.tools.ant.taskdefs.LogStreamHandler;
import org.apache.tools.ant.taskdefs.Execute;
import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.types.CommandlineJava;
import org.apache.tools.ant.types.Path;

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

/**
* Simple Metamata MParse task based on the original written by
* <a href="mailto:thomas.haas@softwired-inc.com">Thomas Haas</a>.
*
*
* This version was written for Metamata 2.0 available at
* <a href="http://www.metamata.com">http://www.metamata.com</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 boolean verbose = false;
private boolean debugparser = false;
private boolean debugscanner = false;
private boolean debugscanner = 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 */
public void setTarget(File 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 */
public void setVerbose(boolean flag){
verbose = flag;
@@ -139,22 +110,12 @@ public class MParse extends Task {
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() {
cmdl.setVm("java");
cmdl.setClassname("com.metamata.jj.MParse");
}


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

// set the metamata.home property
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
String[] options = getOptions();
Vector opts = getOptions();
String[] options = new String[ opts.size() ];
opts.copyInto(options);

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


/** execute the process with a specific handler */
protected void _execute(ExecuteStreamHandler handler) throws BuildException {
// 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 + ")");
return;
}
final Execute process = new Execute(handler);
log(cmdl.describeCommand(), Project.MSG_VERBOSE);
process.setCommandline(cmdl.getCommandline());
@@ -219,10 +183,10 @@ public class MParse extends Task {
throw new BuildException("Metamata task failed.");
}
} 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 */
protected void cleanUp(){
if (optionsFile != null){
@@ -240,7 +204,7 @@ public class MParse extends Task {
}
}
}
/**
* return an array of files containing the path to the needed
* libraries to run metamata. The file are not checked for
@@ -250,48 +214,47 @@ public class MParse extends Task {
*/
protected File[] getMetamataLibs(){
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() ];
files.copyInto(array);
return array;
}
/**
* validate options set and resolve files and paths
* @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.
if (metahome == null || !metahome.exists()){
if (metamataHome == null || !metamataHome.exists()){
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.
File[] jars = getMetamataLibs();
for (int i = 0; i < jars.length; i++){
if (!jars[i].exists()){
throw new BuildException(jars[i]
throw new BuildException(jars[i]
+ " does not exist. Check your metamata installation.");
}
}
}
// check that the target is ok and resolve it.
if (target == null || !target.isFile()
if (target == null || !target.isFile()
|| !target.getName().endsWith(".jj")) {
throw new BuildException("Invalid target: " + target);
}
target = project.resolveFile(target.getPath());
}
}
/**
* 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();
if (verbose){
options.addElement("-verbose");
@@ -302,21 +265,18 @@ public class MParse extends Task {
if (debugparser){
options.addElement("-dp");
}
if (classpath != null){
if (classPath != null){
options.addElement("-classpath");
options.addElement(classpath.toString());
options.addElement(classPath.toString());
}
if (sourcepath != null){
if (sourcePath != null){
options.addElement("-sourcepath");
options.addElement(sourcepath.toString());
options.addElement(sourcePath.toString());
}
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
* @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