Browse Source

Removing tabs and cleaning up imports ( the layout feature of IntelliJ is great! )

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@269945 13f79535-47bb-0310-9956-ffa450edef68
master
Stephane Bailliez 23 years ago
parent
commit
cadfecbbe8
9 changed files with 767 additions and 760 deletions
  1. +134
    -136
      src/main/org/apache/tools/ant/taskdefs/optional/sitraka/CovMerge.java
  2. +50
    -52
      src/main/org/apache/tools/ant/taskdefs/optional/sitraka/CovReport.java
  3. +338
    -334
      src/main/org/apache/tools/ant/taskdefs/optional/sitraka/Coverage.java
  4. +18
    -13
      src/main/org/apache/tools/ant/taskdefs/optional/sitraka/Filters.java
  5. +99
    -96
      src/main/org/apache/tools/ant/taskdefs/optional/sitraka/ReportFilters.java
  6. +14
    -14
      src/main/org/apache/tools/ant/taskdefs/optional/sitraka/Socket.java
  7. +22
    -22
      src/main/org/apache/tools/ant/taskdefs/optional/sitraka/StringUtil.java
  8. +83
    -78
      src/main/org/apache/tools/ant/taskdefs/optional/sitraka/Triggers.java
  9. +9
    -15
      src/main/org/apache/tools/ant/taskdefs/optional/sitraka/XMLReport.java

+ 134
- 136
src/main/org/apache/tools/ant/taskdefs/optional/sitraka/CovMerge.java View File

@@ -54,23 +54,21 @@

package org.apache.tools.ant.taskdefs.optional.sitraka;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;
import java.util.Vector;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.taskdefs.LogStreamHandler;
import org.apache.tools.ant.taskdefs.Execute;
import org.apache.tools.ant.taskdefs.LogStreamHandler;
import org.apache.tools.ant.types.Commandline;


import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.DirectoryScanner;
import java.util.Vector;
import java.util.Random;
import java.io.File;

import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.IOException;

/**
* Convenient task to run the snapshot merge utility for JProbe Coverage.
@@ -79,152 +77,152 @@ import java.io.IOException;
*/
public class CovMerge extends Task {

/** coverage home, it is mandatory */
/** coverage home, it is mandatory */
private File home = null;
/** the name of the output snapshot */
/** the name of the output snapshot */
private File tofile = null;
/** the filesets that will get all snapshots to merge */
/** the filesets that will get all snapshots to merge */
private Vector filesets = new Vector();
private boolean verbose;

/**
* set the coverage home. it must point to JProbe coverage
* directories where are stored native librairies and jars
*/
private boolean verbose;

/**
* set the coverage home. it must point to JProbe coverage
* directories where are stored native librairies and jars
*/
public void setHome(File value) {
this.home = value;
}

/**
* Set the output snapshot file
*/
/**
* Set the output snapshot file
*/
public void setTofile(File value) {
this.tofile = value;
}

/** run the merging in verbose mode */
public void setVerbose(boolean flag){
this.verbose = flag;
}
/** run the merging in verbose mode */
public void setVerbose(boolean flag) {
this.verbose = flag;
}

/** add a fileset containing the snapshots to include/exclude */
public void addFileset(FileSet fs){
filesets.addElement(fs);
}
/** add a fileset containing the snapshots to include/exclude */
public void addFileset(FileSet fs) {
filesets.addElement(fs);
}

//---------------- the tedious job begins here
//---------------- the tedious job begins here

public CovMerge() {
public CovMerge() {
}

/** execute the jpcovmerge by providing a parameter file */
/** execute the jpcovmerge by providing a parameter file */
public void execute() throws BuildException {
checkOptions();
File paramfile = createParamFile();
try{
Commandline cmdl = new Commandline();
cmdl.setExecutable( new File(home, "jpcovmerge").getAbsolutePath() );
if (verbose) {
cmdl.createArgument().setValue("-v");
}
cmdl.createArgument().setValue("-jp_paramfile=" + paramfile.getAbsolutePath());
LogStreamHandler handler = new LogStreamHandler(this,Project.MSG_INFO,Project.MSG_WARN);
Execute exec = new Execute(handler);
log(cmdl.toString(), Project.MSG_VERBOSE);
exec.setCommandline(cmdl.getCommandline());
// JProbe process always return 0 so we will not be
// able to check for failure ! :-(
int exitValue = exec.execute();
if (exitValue!=0) {
throw new BuildException("JProbe Coverage Merging failed (" + exitValue + ")");
}
checkOptions();
File paramfile = createParamFile();
try {
Commandline cmdl = new Commandline();
cmdl.setExecutable(new File(home, "jpcovmerge").getAbsolutePath());
if (verbose) {
cmdl.createArgument().setValue("-v");
}
cmdl.createArgument().setValue("-jp_paramfile=" + paramfile.getAbsolutePath());
LogStreamHandler handler = new LogStreamHandler(this, Project.MSG_INFO, Project.MSG_WARN);
Execute exec = new Execute(handler);
log(cmdl.toString(), Project.MSG_VERBOSE);
exec.setCommandline(cmdl.getCommandline());
// JProbe process always return 0 so we will not be
// able to check for failure ! :-(
int exitValue = exec.execute();
if (exitValue != 0) {
throw new BuildException("JProbe Coverage Merging failed (" + exitValue + ")");
}
} catch (IOException e) {
throw new BuildException("Failed to run JProbe Coverage Merge: " + e);
} finally {
//@todo should be removed once switched to JDK1.2
paramfile.delete();
}
//@todo should be removed once switched to JDK1.2
paramfile.delete();
}
}

/** check for mandatory options */
protected void checkOptions() throws BuildException {
if (tofile == null) {
throw new BuildException("'tofile' attribute must be set.");
}
// check coverage home
if (home == null || !home.isDirectory() ) {
throw new BuildException("Invalid home directory. Must point to JProbe home directory");
}
home = new File(home,"Coverage");
File jar = new File(home, "coverage.jar");
if (!jar.exists()) {
throw new BuildException("Cannot find Coverage directory: " + home);
}
}
/** get the snapshots from the filesets */
protected File[] getSnapshots() {
Vector v = new Vector();
final int size = filesets.size();
for (int i = 0; i < size; i++) {
FileSet fs = (FileSet) filesets.elementAt(i);
DirectoryScanner ds = fs.getDirectoryScanner(getProject());
ds.scan();
String[] f = ds.getIncludedFiles();
for (int j = 0; j < f.length; j++) {
String pathname = f[j];
File file = new File(ds.getBasedir(), pathname);
file = project.resolveFile(file.getPath());
v.addElement( file );
}
}
File[] files = new File[v.size()];
v.copyInto(files);
return files;
}
/**
* create the parameters file that contains all file to merge
* and the output filename.
*/
protected File createParamFile() throws BuildException {
File[] snapshots = getSnapshots();
File file = createTmpFile();
FileWriter fw = null;
try {
fw = new FileWriter(file);
PrintWriter pw = new PrintWriter(fw);
for (int i = 0; i < snapshots.length; i++) {
pw.println(snapshots[i].getAbsolutePath());
}
// last file is the output snapshot
pw.println(project.resolveFile(tofile.getPath()));
pw.flush();
return file;
} catch (IOException e){
if (fw != null) {
try {
fw.close();
} catch (IOException ignored){
}
}
throw new BuildException("I/O error while writing to " + file, e);
}
}
/** create a temporary file in the current dir (For JDK1.1 support) */
protected File createTmpFile(){
final long rand = (new Random(System.currentTimeMillis())).nextLong();
File file = new File("jpcovmerge" + rand + ".tmp");
return file;
}
/** check for mandatory options */
protected void checkOptions() throws BuildException {
if (tofile == null) {
throw new BuildException("'tofile' attribute must be set.");
}
// check coverage home
if (home == null || !home.isDirectory()) {
throw new BuildException("Invalid home directory. Must point to JProbe home directory");
}
home = new File(home, "Coverage");
File jar = new File(home, "coverage.jar");
if (!jar.exists()) {
throw new BuildException("Cannot find Coverage directory: " + home);
}
}
/** get the snapshots from the filesets */
protected File[] getSnapshots() {
Vector v = new Vector();
final int size = filesets.size();
for (int i = 0; i < size; i++) {
FileSet fs = (FileSet) filesets.elementAt(i);
DirectoryScanner ds = fs.getDirectoryScanner(getProject());
ds.scan();
String[] f = ds.getIncludedFiles();
for (int j = 0; j < f.length; j++) {
String pathname = f[j];
File file = new File(ds.getBasedir(), pathname);
file = project.resolveFile(file.getPath());
v.addElement(file);
}
}
File[] files = new File[v.size()];
v.copyInto(files);
return files;
}
/**
* create the parameters file that contains all file to merge
* and the output filename.
*/
protected File createParamFile() throws BuildException {
File[] snapshots = getSnapshots();
File file = createTmpFile();
FileWriter fw = null;
try {
fw = new FileWriter(file);
PrintWriter pw = new PrintWriter(fw);
for (int i = 0; i < snapshots.length; i++) {
pw.println(snapshots[i].getAbsolutePath());
}
// last file is the output snapshot
pw.println(project.resolveFile(tofile.getPath()));
pw.flush();
return file;
} catch (IOException e) {
if (fw != null) {
try {
fw.close();
} catch (IOException ignored) {
}
}
throw new BuildException("I/O error while writing to " + file, e);
}
}
/** create a temporary file in the current dir (For JDK1.1 support) */
protected File createTmpFile() {
final long rand = (new Random(System.currentTimeMillis())).nextLong();
File file = new File("jpcovmerge" + rand + ".tmp");
return file;
}
}

+ 50
- 52
src/main/org/apache/tools/ant/taskdefs/optional/sitraka/CovReport.java View File

@@ -54,35 +54,28 @@

package org.apache.tools.ant.taskdefs.optional.sitraka;

import java.io.File;
import java.io.IOException;
import java.util.Vector;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

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

import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.EnumeratedAttribute;


import java.util.Vector;
import java.io.File;

import java.io.IOException;

import javax.xml.transform.TransformerFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Source;
import javax.xml.transform.Result;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.dom.DOMSource;
import org.apache.tools.ant.types.Path;
import org.w3c.dom.Document;





/**
* Convenient task to run the snapshot merge utility for JProbe Coverage 3.0.
*
@@ -138,7 +131,7 @@ public class CovReport extends Task {
/*

/** coverage home, mandatory */
private File home = null;
private File home = null;

/** format of generated report, optional */
private String format = null;
@@ -179,48 +172,50 @@ public class CovReport extends Task {
}

public static class ReportFormat extends EnumeratedAttribute {
public String[] getValues(){
public String[] getValues() {
return new String[]{"html", "text", "xml"};
}
}

/** set the format of the report html|text|xml*/
public void setFormat(ReportFormat value){
public void setFormat(ReportFormat value) {
this.format = value.getValue();
}

public static class ReportType extends EnumeratedAttribute {
public String[] getValues(){
public String[] getValues() {
return new String[]{"executive", "summary", "detailed", "verydetailed"};
}
}

/** sets the report type executive|summary|detailed|verydetailed */
public void setType(ReportType value){
this.type = value.getValue();
public void setType(ReportType value) {
this.type = value.getValue();
}

/** include source code lines. XML report only */
public void setIncludesource(boolean value){
public void setIncludesource(boolean value) {
this.includeSource = value;
}

/** sets the threshold printing method 0-100*/
public void setPercent(Integer value){
public void setPercent(Integer value) {
this.percent = value;
}

/** set the filters */
public void setFilters(String values){
public void setFilters(String values) {
this.filters = values;
}

public Path createSourcepath(){
public Path createSourcepath() {
if (sourcePath == null) {
sourcePath = new Path(project);
}
return sourcePath.createPath();
}

public void setSnapshot(File value){
public void setSnapshot(File value) {
this.snapshot = value;
}

@@ -232,15 +227,15 @@ public class CovReport extends Task {
}

//@todo to remove
public Path createCoveragepath(){
public Path createCoveragepath() {
if (coveragePath == null) {
coveragePath = new Path(project);
}
return coveragePath.createPath();
}

public Reference createReference(){
if (reference == null){
public Reference createReference() {
if (reference == null) {
reference = new Reference();
}
return reference;
@@ -261,12 +256,12 @@ public class CovReport extends Task {
if (home == null) {
throw new BuildException("'home' attribute must be set to JProbe home directory");
}
home = new File(home,"Coverage");
home = new File(home, "Coverage");
File jar = new File(home, "coverage.jar");
if (!jar.exists()) {
throw new BuildException("Cannot find Coverage directory: " + home);
}
if (reference != null && !"xml".equals(format)){
if (reference != null && !"xml".equals(format)) {
log("Ignored reference. It cannot be used in non XML report.");
reference = null; // nullify it so that there is no ambiguity
}
@@ -278,15 +273,15 @@ public class CovReport extends Task {
try {
Commandline cmdl = new Commandline();
// we need to run Coverage from his directory due to dll/jar issues
cmdl.setExecutable( new File(home, "jpcovreport").getAbsolutePath() );
cmdl.setExecutable(new File(home, "jpcovreport").getAbsolutePath());
String[] params = getParameters();
for (int i = 0; i < params.length; i++) {
cmdl.createArgument().setValue(params[i]);
}

// use the custom handler for stdin issues
LogStreamHandler handler = new LogStreamHandler(this,Project.MSG_INFO,Project.MSG_WARN);
Execute exec = new Execute( handler );
LogStreamHandler handler = new LogStreamHandler(this, Project.MSG_INFO, Project.MSG_WARN);
Execute exec = new Execute(handler);
log(cmdl.toString(), Project.MSG_VERBOSE);
exec.setCommandline(cmdl.getCommandline());
int exitValue = exec.execute();
@@ -295,17 +290,17 @@ public class CovReport extends Task {
}
log("coveragePath: " + coveragePath, Project.MSG_VERBOSE);
log("format: " + format, Project.MSG_VERBOSE);
if (reference != null && "xml".equals(format)){
if (reference != null && "xml".equals(format)) {
reference.createEnhancedXMLReport();
}

} catch (IOException e){
} catch (IOException e) {
throw new BuildException("Failed to execute JProbe Coverage Report.", e);
}
}


protected String[] getParameters(){
protected String[] getParameters() {
Vector v = new Vector();
if (format != null) {
v.addElement("-format=" + format);
@@ -341,49 +336,52 @@ public class CovReport extends Task {
public class Reference {
protected Path classPath;
protected ReportFilters filters;
public Path createClasspath(){

public Path createClasspath() {
if (classPath == null) {
classPath = new Path(CovReport.this.project);
}
return classPath.createPath();
}
public ReportFilters createFilters(){
if (filters == null){

public ReportFilters createFilters() {
if (filters == null) {
filters = new ReportFilters();
}
return filters;
}

protected void createEnhancedXMLReport() throws BuildException {
// we need a classpath element
if (classPath == null){
if (classPath == null) {
throw new BuildException("Need a 'classpath' element.");
}
// and a valid one...
String[] paths = classPath.list();
if (paths.length == 0){
if (paths.length == 0) {
throw new BuildException("Coverage path is invalid. It does not contain any existing path.");
}
// and we need at least one filter include/exclude.
if (filters == null || filters.size() == 0){
if (filters == null || filters.size() == 0) {
createFilters();
log("Adding default include filter to *.*()", Project.MSG_VERBOSE);
ReportFilters.Include include = new ReportFilters.Include();
filters.addInclude( include );
filters.addInclude(include);
}
try {
log("Creating enhanced XML report", Project.MSG_VERBOSE);
XMLReport report = new XMLReport(CovReport.this, tofile);
report.setReportFilters(filters);
report.setJProbehome( new File(home.getParent()) );
report.setJProbehome(new File(home.getParent()));
Document doc = report.createDocument(paths);
TransformerFactory tfactory = TransformerFactory.newInstance();
Transformer transformer = tfactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
Source src = new DOMSource(doc);
Result res = new StreamResult( "file:///" + tofile.toString() );
Result res = new StreamResult("file:///" + tofile.toString());
transformer.transform(src, res);
} catch (Exception e){
} catch (Exception e) {
throw new BuildException("Error while performing enhanced XML report from file " + tofile, e);
}
}


+ 338
- 334
src/main/org/apache/tools/ant/taskdefs/optional/sitraka/Coverage.java View File

@@ -54,25 +54,25 @@

package org.apache.tools.ant.taskdefs.optional.sitraka;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.FileWriter;
import java.io.File;
import java.io.OutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Vector;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Random;
import java.util.Vector;

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

/**
* Convenient task to run Sitraka JProbe Coverage from Ant.
@@ -86,376 +86,380 @@ import org.apache.tools.ant.taskdefs.LogStreamHandler;
*/
public class Coverage extends Task {

protected File home;
protected File home;

protected Commandline cmdl = new Commandline();

protected CommandlineJava cmdlJava = new CommandlineJava();

protected String function = "coverage";

protected String seedName;

protected File inputFile;

protected Commandline cmdl = new Commandline();
protected File javaExe;

protected CommandlineJava cmdlJava = new CommandlineJava();
protected String vm;

protected String function = "coverage";
protected boolean applet = false;

protected String seedName;
/** this is a somewhat annoying thing, set it to never */
protected String exitPrompt = "never";

protected File inputFile;
protected Filters filters = new Filters();

protected File javaExe;
protected Triggers triggers;

protected String vm;
protected String finalSnapshot = "coverage";

protected boolean applet = false;
protected String recordFromStart = "coverage";

/** this is a somewhat annoying thing, set it to never */
protected String exitPrompt = "never";
protected File snapshotDir;

protected Filters filters = new Filters();
protected File workingDir;

protected Triggers triggers;
protected boolean trackNatives = false;

protected String finalSnapshot = "coverage";
protected Socket socket;

protected String recordFromStart = "coverage";
protected int warnLevel = 0;

protected File snapshotDir;
protected Vector filesets = new Vector();

protected File workingDir;
//--------- setters used via reflection --

protected boolean trackNatives = false;
/** set the coverage home directory where are libraries, jars and jplauncher */
public void setHome(File value) {
home = value;
}

/** seed name for snapshot file. can be null, default to snap */
public void setSeedname(String value) {
seedName = value;
}

public void setInputfile(File value) {
inputFile = value;
}

protected Socket socket;
public void setJavaexe(File value) {
javaExe = value;
}

protected int warnLevel = 0;
public static class Javavm extends EnumeratedAttribute {
public String[] getValues() {
return new String[]{"java2", "jdk118", "jdk117"};
}
}

protected Vector filesets = new Vector();
/** jdk117, jdk118 or java2, can be null, default to java2 */
public void setVm(Javavm value) {
vm = value.getValue();
}

//--------- setters used via reflection --
/** default to false unless file is htm or html */
public void setApplet(boolean value) {
applet = value;
}

/** set the coverage home directory where are libraries, jars and jplauncher */
public void setHome(File value){
home = value;
}
/** always, error, never */
public void setExitprompt(String value) {
exitPrompt = value;
}

/** seed name for snapshot file. can be null, default to snap */
public void setSeedname(String value){
seedName = value;
}
public Filters createFilters() {
return filters;
}

public void setInputfile(File value){
inputFile = value;
}
public Triggers createTriggers() {
if (triggers == null) {
triggers = new Triggers();
}
return triggers;
}

public void setJavaexe(File value){
javaExe = value;
}
public Socket createSocket() {
if (socket == null) {
socket = new Socket();
}
return socket;
}

public static class Javavm extends EnumeratedAttribute {
public String[] getValues(){
return new String[]{"java2", "jdk118", "jdk117"};
}
}
/** jdk117, jdk118 or java2, can be null, default to java2 */
public void setVm(Javavm value) {
vm = value.getValue();
}
public static class Finalsnapshot extends EnumeratedAttribute {
public String[] getValues() {
return new String[]{"coverage", "none", "all"};
}
}

/** default to false unless file is htm or html */
public void setApplet(boolean value){
applet = value;
}
/** none, coverage, all. can be null, default to none */
public void setFinalsnapshot(String value) {
finalSnapshot = value;
}

/** always, error, never */
public void setExitprompt(String value){
exitPrompt = value;
}
public static class Recordfromstart extends EnumeratedAttribute {
public String[] getValues() {
return new String[]{"coverage", "none", "all"};
}
}

public Filters createFilters(){
return filters;
}
/** all, coverage, none */
public void setRecordfromstart(Recordfromstart value) {
recordFromStart = value.getValue();
}

public Triggers createTriggers(){
if (triggers == null) {
triggers = new Triggers();
}
return triggers;
}
public void setWarnlevel(Integer value) {
warnLevel = value.intValue();
}

public Socket createSocket(){
if (socket == null ) {
socket = new Socket();
}
return socket;
}
public void setSnapshotdir(File value) {
snapshotDir = value;
}

public static class Finalsnapshot extends EnumeratedAttribute {
public String[] getValues(){
return new String[]{"coverage", "none", "all"};
}
}
public void setWorkingdir(File value) {
workingDir = value;
}

/** none, coverage, all. can be null, default to none */
public void setFinalsnapshot(String value){
finalSnapshot = value;
}
public void setTracknatives(boolean value) {
trackNatives = value;
}

public static class Recordfromstart extends EnumeratedAttribute {
public String[] getValues(){
return new String[]{"coverage", "none", "all"};
}
}
/** all, coverage, none */
public void setRecordfromstart(Recordfromstart value) {
recordFromStart = value.getValue();
}
//

public void setWarnlevel(Integer value){
warnLevel = value.intValue();
}

public void setSnapshotdir(File value){
snapshotDir = value;
}

public void setWorkingdir(File value){
workingDir = value;
}

public void setTracknatives(boolean value){
trackNatives = value;
}

//

/** the jvm arguments */
/** the jvm arguments */
public Commandline.Argument createJvmarg() {
return cmdlJava.createVmArgument();
}

/** the command arguments */
/** the command arguments */
public Commandline.Argument createArg() {
return cmdlJava.createArgument();
}

/** classpath to run the files */
/** classpath to run the files */
public Path createClasspath() {
return cmdlJava.createClasspath(project).createPath();
}

/** classname to run as standalone or runner for filesets */
public void setClassname(String value){
cmdlJava.setClassname(value);
}
/** the classnames to execute */
public void addFileset(FileSet fs){
filesets.addElement(fs);
}
//---------------- the tedious job begins here
public Coverage(){
}
/** execute the jplauncher by providing a parameter file */
public void execute() throws BuildException {
File paramfile = null;
// if an input file is used, all other options are ignored...
if (inputFile == null){
checkOptions();
paramfile = createParamFile();
} else {
paramfile = inputFile;
}
try {
// we need to run Coverage from his directory due to dll/jar issues
cmdl.setExecutable( new File(home, "jplauncher").getAbsolutePath() );
cmdl.createArgument().setValue("-jp_input=" + paramfile.getAbsolutePath());
// use the custom handler for stdin issues
LogStreamHandler handler = new CoverageStreamHandler(this);
Execute exec = new Execute( handler );
log(cmdl.toString(), Project.MSG_VERBOSE);
exec.setCommandline(cmdl.getCommandline());
int exitValue = exec.execute();
if (exitValue != 0) {
throw new BuildException("JProbe Coverage failed (" + exitValue + ")");
}
} catch (IOException e){
throw new BuildException("Failed to execute JProbe Coverage.", e);
} finally {
//@todo should be removed once switched to JDK1.2
if (inputFile == null && paramfile != null){
paramfile.delete();
}
}
}
/** wheck what is necessary to check, Coverage will do the job for us */
protected void checkOptions() throws BuildException {
// check coverage home
if (home == null || !home.isDirectory() ) {
throw new BuildException("Invalid home directory. Must point to JProbe home directory");
}
home = new File(home,"Coverage");
File jar = new File(home, "coverage.jar");
if (!jar.exists()) {
throw new BuildException("Cannot find Coverage directory: " + home);
}
// make sure snapshot dir exists and is resolved
if (snapshotDir == null) {
snapshotDir = new File(".");
}
snapshotDir = project.resolveFile(snapshotDir.getPath());
if (!snapshotDir.isDirectory() || !snapshotDir.exists()) {
throw new BuildException("Snapshot directory does not exists :" + snapshotDir);
}
if (workingDir == null) {
workingDir = new File(".");
}
workingDir = project.resolveFile(workingDir.getPath());
// check for info, do your best to select the java executable.
// JProbe 3.0 fails if there is no javaexe option. So
if (javaExe == null && ( vm == null || "java2".equals(vm) ) ) {
String version = System.getProperty("java.version");
// make we are using 1.2+, if it is, then do your best to
// get a javaexe
if ( !version.startsWith("1.1") ){
if (vm == null){
vm = "java2";
}
// if we are here obviously it is java2
String home = System.getProperty("java.home");
boolean isUnix = File.separatorChar == '/';
javaExe = isUnix ? new File(home, "bin/java") : new File(home,"/bin/java.exe");
}
}
}
/**
* return the command line parameters. Parameters can either be passed
* to the command line and stored to a file (then use the -jp_input=<filename>)
* if they are too numerous.
*/
protected String[] getParameters(){
Vector params = new Vector();
params.addElement("-jp_function=" + function);
if (vm != null) {
params.addElement("-jp_vm=" + vm);
}
if (javaExe != null) {
params.addElement("-jp_java_exe=" + project.resolveFile(javaExe.getPath()));
}
params.addElement("-jp_working_dir=" + workingDir.getPath() );
params.addElement("-jp_snapshot_dir=" + snapshotDir.getPath() );
params.addElement("-jp_record_from_start=" + recordFromStart);
params.addElement("-jp_warn=" + warnLevel);
if (seedName != null) {
params.addElement("-jp_output_file=" + seedName);
}
params.addElement("-jp_filter=" + filters.toString() );
if (triggers != null) {
params.addElement("-jp_trigger=" + triggers.toString() );
}
if (finalSnapshot != null) {
params.addElement("-jp_final_snapshot=" + finalSnapshot);
}
/** classname to run as standalone or runner for filesets */
public void setClassname(String value) {
cmdlJava.setClassname(value);
}
/** the classnames to execute */
public void addFileset(FileSet fs) {
filesets.addElement(fs);
}
//---------------- the tedious job begins here
public Coverage() {
}
/** execute the jplauncher by providing a parameter file */
public void execute() throws BuildException {
File paramfile = null;
// if an input file is used, all other options are ignored...
if (inputFile == null) {
checkOptions();
paramfile = createParamFile();
} else {
paramfile = inputFile;
}
try {
// we need to run Coverage from his directory due to dll/jar issues
cmdl.setExecutable(new File(home, "jplauncher").getAbsolutePath());
cmdl.createArgument().setValue("-jp_input=" + paramfile.getAbsolutePath());
// use the custom handler for stdin issues
LogStreamHandler handler = new CoverageStreamHandler(this);
Execute exec = new Execute(handler);
log(cmdl.toString(), Project.MSG_VERBOSE);
exec.setCommandline(cmdl.getCommandline());
int exitValue = exec.execute();
if (exitValue != 0) {
throw new BuildException("JProbe Coverage failed (" + exitValue + ")");
}
} catch (IOException e) {
throw new BuildException("Failed to execute JProbe Coverage.", e);
} finally {
//@todo should be removed once switched to JDK1.2
if (inputFile == null && paramfile != null) {
paramfile.delete();
}
}
}
/** wheck what is necessary to check, Coverage will do the job for us */
protected void checkOptions() throws BuildException {
// check coverage home
if (home == null || !home.isDirectory()) {
throw new BuildException("Invalid home directory. Must point to JProbe home directory");
}
home = new File(home, "Coverage");
File jar = new File(home, "coverage.jar");
if (!jar.exists()) {
throw new BuildException("Cannot find Coverage directory: " + home);
}
// make sure snapshot dir exists and is resolved
if (snapshotDir == null) {
snapshotDir = new File(".");
}
snapshotDir = project.resolveFile(snapshotDir.getPath());
if (!snapshotDir.isDirectory() || !snapshotDir.exists()) {
throw new BuildException("Snapshot directory does not exists :" + snapshotDir);
}
if (workingDir == null) {
workingDir = new File(".");
}
workingDir = project.resolveFile(workingDir.getPath());
// check for info, do your best to select the java executable.
// JProbe 3.0 fails if there is no javaexe option. So
if (javaExe == null && (vm == null || "java2".equals(vm))) {
String version = System.getProperty("java.version");
// make we are using 1.2+, if it is, then do your best to
// get a javaexe
if (!version.startsWith("1.1")) {
if (vm == null) {
vm = "java2";
}
// if we are here obviously it is java2
String home = System.getProperty("java.home");
boolean isUnix = File.separatorChar == '/';
javaExe = isUnix ? new File(home, "bin/java") : new File(home, "/bin/java.exe");
}
}
}
/**
* return the command line parameters. Parameters can either be passed
* to the command line and stored to a file (then use the -jp_input=<filename>)
* if they are too numerous.
*/
protected String[] getParameters() {
Vector params = new Vector();
params.addElement("-jp_function=" + function);
if (vm != null) {
params.addElement("-jp_vm=" + vm);
}
if (javaExe != null) {
params.addElement("-jp_java_exe=" + project.resolveFile(javaExe.getPath()));
}
params.addElement("-jp_working_dir=" + workingDir.getPath());
params.addElement("-jp_snapshot_dir=" + snapshotDir.getPath());
params.addElement("-jp_record_from_start=" + recordFromStart);
params.addElement("-jp_warn=" + warnLevel);
if (seedName != null) {
params.addElement("-jp_output_file=" + seedName);
}
params.addElement("-jp_filter=" + filters.toString());
if (triggers != null) {
params.addElement("-jp_trigger=" + triggers.toString());
}
if (finalSnapshot != null) {
params.addElement("-jp_final_snapshot=" + finalSnapshot);
}
params.addElement("-jp_exit_prompt=" + exitPrompt);
//params.addElement("-jp_append=" + append);
params.addElement("-jp_track_natives=" + trackNatives);
//.... now the jvm
// arguments
String[] vmargs = cmdlJava.getVmCommand().getArguments();
for (int i = 0; i < vmargs.length; i++) {
params.addElement(vmargs[i]);
}
// classpath
Path classpath = cmdlJava.getClasspath();
if (classpath != null && classpath.size() > 0) {
params.addElement("-classpath " + classpath.toString());
}
// classname (runner or standalone)
if (cmdlJava.getClassname() != null) {
params.addElement(cmdlJava.getClassname());
}
// arguments for classname
String[] args = cmdlJava.getJavaCommand().getArguments();
for (int i = 0; i < args.length; i++) {
params.addElement(args[i]);
}
String[] array = new String[params.size()];
params.copyInto(array);
return array;
}
/**
* create the parameter file from the given options. The file is
* created with a random name in the current directory.
* @return the file object where are written the configuration to run
* JProbe Coverage
* @throws BuildException thrown if something bad happens while writing
* the arguments to the file.
*/
protected File createParamFile() throws BuildException {
//@todo change this when switching to JDK 1.2 and use File.createTmpFile()
File file = createTmpFile();
log("Creating parameter file: " + file, Project.MSG_VERBOSE);
// options need to be one per line in the parameter file
// so write them all in a single string
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
String[] params = getParameters();
for (int i = 0; i < params.length; i++){
pw.println(params[i]);
}
pw.flush();
log("JProbe Coverage parameters:\n" + sw.toString(), Project.MSG_VERBOSE);
// now write them to the file
FileWriter fw = null;
try {
fw = new FileWriter(file);
fw.write(sw.toString());
fw.flush();
} catch (IOException e){
throw new BuildException("Could not write parameter file " + file, e);
} finally {
if (fw != null) {
try {
fw.close();
} catch (IOException ignored){}
}
}
return file;
}

/** create a temporary file in the current dir (For JDK1.1 support) */
protected File createTmpFile(){
final long rand = (new Random(System.currentTimeMillis())).nextLong();
File file = new File("jpcoverage" + rand + ".tmp");
return file;
}

/** specific pumper to avoid those nasty stdin issues */
static class CoverageStreamHandler extends LogStreamHandler {
CoverageStreamHandler(Task task){
super(task, Project.MSG_INFO, Project.MSG_WARN);
}
/**
* there are some issues concerning all JProbe executable
* In our case a 'Press ENTER to close this window..." will
* be displayed in the current window waiting for enter.
* So I'm closing the stream right away to avoid problems.
*/
public void setProcessInputStream(OutputStream os) {
try {
os.close();
} catch (IOException ignored){
}
}
}
//params.addElement("-jp_append=" + append);
params.addElement("-jp_track_natives=" + trackNatives);
//.... now the jvm
// arguments
String[] vmargs = cmdlJava.getVmCommand().getArguments();
for (int i = 0; i < vmargs.length; i++) {
params.addElement(vmargs[i]);
}
// classpath
Path classpath = cmdlJava.getClasspath();
if (classpath != null && classpath.size() > 0) {
params.addElement("-classpath " + classpath.toString());
}
// classname (runner or standalone)
if (cmdlJava.getClassname() != null) {
params.addElement(cmdlJava.getClassname());
}
// arguments for classname
String[] args = cmdlJava.getJavaCommand().getArguments();
for (int i = 0; i < args.length; i++) {
params.addElement(args[i]);
}

String[] array = new String[params.size()];
params.copyInto(array);
return array;
}


/**
* create the parameter file from the given options. The file is
* created with a random name in the current directory.
* @return the file object where are written the configuration to run
* JProbe Coverage
* @throws BuildException thrown if something bad happens while writing
* the arguments to the file.
*/
protected File createParamFile() throws BuildException {
//@todo change this when switching to JDK 1.2 and use File.createTmpFile()
File file = createTmpFile();
log("Creating parameter file: " + file, Project.MSG_VERBOSE);

// options need to be one per line in the parameter file
// so write them all in a single string
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
String[] params = getParameters();
for (int i = 0; i < params.length; i++) {
pw.println(params[i]);
}
pw.flush();
log("JProbe Coverage parameters:\n" + sw.toString(), Project.MSG_VERBOSE);

// now write them to the file
FileWriter fw = null;
try {
fw = new FileWriter(file);
fw.write(sw.toString());
fw.flush();
} catch (IOException e) {
throw new BuildException("Could not write parameter file " + file, e);
} finally {
if (fw != null) {
try {
fw.close();
} catch (IOException ignored) {
}
}
}
return file;
}

/** create a temporary file in the current dir (For JDK1.1 support) */
protected File createTmpFile() {
final long rand = (new Random(System.currentTimeMillis())).nextLong();
File file = new File("jpcoverage" + rand + ".tmp");
return file;
}

/** specific pumper to avoid those nasty stdin issues */
static class CoverageStreamHandler extends LogStreamHandler {
CoverageStreamHandler(Task task) {
super(task, Project.MSG_INFO, Project.MSG_WARN);
}

/**
* there are some issues concerning all JProbe executable
* In our case a 'Press ENTER to close this window..." will
* be displayed in the current window waiting for enter.
* So I'm closing the stream right away to avoid problems.
*/
public void setProcessInputStream(OutputStream os) {
try {
os.close();
} catch (IOException ignored) {
}
}
}

}

+ 18
- 13
src/main/org/apache/tools/ant/taskdefs/optional/sitraka/Filters.java View File

@@ -72,22 +72,22 @@ public class Filters {
/** user defined filters */
protected Vector filters = new Vector();

public Filters(){
public Filters() {
}

public void setDefaultExclude(boolean value){
public void setDefaultExclude(boolean value) {
defaultExclude = value;
}

public void addInclude(Include incl){
public void addInclude(Include incl) {
filters.addElement(incl);
}

public void addExclude(Exclude excl){
public void addExclude(Exclude excl) {
filters.addElement(excl);
}

public String toString(){
public String toString() {
StringBuffer buf = new StringBuffer();
final int size = filters.size();
if (defaultExclude) {
@@ -98,7 +98,7 @@ public class Filters {
}
for (int i = 0; i < size; i++) {
buf.append(filters.elementAt(i).toString());
if ( i < size - 1) {
if (i < size - 1) {
buf.append(',');
}
}
@@ -109,25 +109,30 @@ public class Filters {
protected String clazz;
protected String method = "*"; // default is all methods
protected boolean enabled = true; // default is enable
public void setName(String value){ // this one is deprecated.

public void setName(String value) { // this one is deprecated.
clazz = value;
}
public void setClass(String value){
clazz = value;

public void setClass(String value) {
clazz = value;
}
public void setMethod(String value){

public void setMethod(String value) {
method = value;
}
public void setEnabled(boolean value){

public void setEnabled(boolean value) {
enabled = value;
}
public String toString(){

public String toString() {
return clazz + "." + method + "()";
}
}

public static class Include extends FilterElement {
public String toString(){
public String toString() {
return super.toString() + ":I" + (enabled ? "" : "#");
}
}


+ 99
- 96
src/main/org/apache/tools/ant/taskdefs/optional/sitraka/ReportFilters.java View File

@@ -66,101 +66,104 @@ import org.apache.tools.ant.util.regexp.RegexpMatcherFactory;
*/
public class ReportFilters {

/** user defined filters */
protected Vector filters = new Vector();

/** cached matcher for each filter */
protected Vector matchers = null;

public ReportFilters(){
}

public void addInclude(Include incl){
filters.addElement(incl);
}

public void addExclude(Exclude excl){
filters.addElement(excl);
}

public int size(){
return filters.size();
}

/**
* Check whether a given &lt;classname&gt;&lt;method&gt;() is accepted by the list
* of filters or not.
* @param methodname the full method name in the format &lt;classname&gt;&lt;method&gt;()
*/
public boolean accept(String methodname){
// I'm deferring matcher instantiations at runtime to avoid computing
// the filters at parsing time
if (matchers == null){
createMatchers();
}
boolean result = false;
// assert filters.size() == matchers.size()
final int size = filters.size();
for (int i = 0; i < size; i++){
FilterElement filter = (FilterElement)filters.elementAt(i);
RegexpMatcher matcher = (RegexpMatcher)matchers.elementAt(i);
if (filter instanceof Include){
result = result || matcher.matches(methodname);
} else if (filter instanceof Exclude){
result = result && !matcher.matches(methodname);
} else{
//not possible
throw new IllegalArgumentException("Invalid filter element: " + filter.getClass().getName());
}
}
return result;
}

/** should be called only once to cache matchers */
protected void createMatchers(){
RegexpMatcherFactory factory = new RegexpMatcherFactory();
final int size = filters.size();
matchers = new Vector();
for (int i = 0; i < size; i++){
FilterElement filter = (FilterElement)filters.elementAt(i);
RegexpMatcher matcher = factory.newRegexpMatcher();
String pattern = filter.getAsPattern();
matcher.setPattern(pattern);
matchers.addElement(matcher);
}
}


/** default abstract filter element class */
abstract public static class FilterElement {
protected String clazz = "*"; // default is all classes
protected String method = "*"; // default is all methods

public void setClass(String value){
clazz = value;
}
public void setMethod(String value){
method = value;
}

public String getAsPattern(){
StringBuffer buf = new StringBuffer(toString());
StringUtil.replace(buf, ".", "\\.");
StringUtil.replace(buf, "*", ".*");
StringUtil.replace(buf, "(", "\\(");
StringUtil.replace(buf, ")", "\\)");
return buf.toString();
}

public String toString(){
return clazz + "." + method + "()";
}
}

/** concrete include class */
public static class Include extends FilterElement {}

/** concrete exclude class */
public static class Exclude extends FilterElement {}
/** user defined filters */
protected Vector filters = new Vector();

/** cached matcher for each filter */
protected Vector matchers = null;

public ReportFilters() {
}

public void addInclude(Include incl) {
filters.addElement(incl);
}

public void addExclude(Exclude excl) {
filters.addElement(excl);
}

public int size() {
return filters.size();
}

/**
* Check whether a given &lt;classname&gt;&lt;method&gt;() is accepted by the list
* of filters or not.
* @param methodname the full method name in the format &lt;classname&gt;&lt;method&gt;()
*/
public boolean accept(String methodname) {
// I'm deferring matcher instantiations at runtime to avoid computing
// the filters at parsing time
if (matchers == null) {
createMatchers();
}
boolean result = false;
// assert filters.size() == matchers.size()
final int size = filters.size();
for (int i = 0; i < size; i++) {
FilterElement filter = (FilterElement) filters.elementAt(i);
RegexpMatcher matcher = (RegexpMatcher) matchers.elementAt(i);
if (filter instanceof Include) {
result = result || matcher.matches(methodname);
} else if (filter instanceof Exclude) {
result = result && !matcher.matches(methodname);
} else {
//not possible
throw new IllegalArgumentException("Invalid filter element: " + filter.getClass().getName());
}
}
return result;
}

/** should be called only once to cache matchers */
protected void createMatchers() {
RegexpMatcherFactory factory = new RegexpMatcherFactory();
final int size = filters.size();
matchers = new Vector();
for (int i = 0; i < size; i++) {
FilterElement filter = (FilterElement) filters.elementAt(i);
RegexpMatcher matcher = factory.newRegexpMatcher();
String pattern = filter.getAsPattern();
matcher.setPattern(pattern);
matchers.addElement(matcher);
}
}


/** default abstract filter element class */
abstract public static class FilterElement {
protected String clazz = "*"; // default is all classes
protected String method = "*"; // default is all methods

public void setClass(String value) {
clazz = value;
}

public void setMethod(String value) {
method = value;
}

public String getAsPattern() {
StringBuffer buf = new StringBuffer(toString());
StringUtil.replace(buf, ".", "\\.");
StringUtil.replace(buf, "*", ".*");
StringUtil.replace(buf, "(", "\\(");
StringUtil.replace(buf, ")", "\\)");
return buf.toString();
}

public String toString() {
return clazz + "." + method + "()";
}
}

/** concrete include class */
public static class Include extends FilterElement {
}

/** concrete exclude class */
public static class Exclude extends FilterElement {
}
}


+ 14
- 14
src/main/org/apache/tools/ant/taskdefs/optional/sitraka/Socket.java View File

@@ -64,22 +64,22 @@ package org.apache.tools.ant.taskdefs.optional.sitraka;
*/
public class Socket {

/** default to localhost */
private String host = "127.0.0.1";
/** default to localhost */
private String host = "127.0.0.1";

/** default to 4444 */
private int port = 4444;
/** default to 4444 */
private int port = 4444;

public void setHost(String value){
host = value;
}
public void setHost(String value) {
host = value;
}

public void setPort(Integer value){
port = value.intValue();
}
public void setPort(Integer value) {
port = value.intValue();
}

/** if no host is set, returning ':<port>', will take localhost */
public String toString(){
return host + ":" + port;
}
/** if no host is set, returning ':<port>', will take localhost */
public String toString() {
return host + ":" + port;
}
}

+ 22
- 22
src/main/org/apache/tools/ant/taskdefs/optional/sitraka/StringUtil.java View File

@@ -58,27 +58,27 @@ package org.apache.tools.ant.taskdefs.optional.sitraka;
* @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
*/
public final class StringUtil {
/** private constructor, it's a utility class */
private StringUtil() {
}
/** private constructor, it's a utility class */
private StringUtil() {
}

/**
* Replaces all occurences of <tt>find</tt> with <tt>replacement</tt> in the
* source StringBuffer.
* @param src the original string buffer to modify.
* @param find the string to be replaced.
* @param replacement the replacement string for <tt>find</tt> matches.
*/
public static void replace(StringBuffer src, String find, String replacement){
int index = 0;
while (index < src.length() ){
index = src.toString().indexOf(find, index);
if (index == -1){
break;
}
src.delete(index, index + find.length());
src.insert(index, replacement);
index += replacement.length() + 1;
}
}
/**
* Replaces all occurences of <tt>find</tt> with <tt>replacement</tt> in the
* source StringBuffer.
* @param src the original string buffer to modify.
* @param find the string to be replaced.
* @param replacement the replacement string for <tt>find</tt> matches.
*/
public static void replace(StringBuffer src, String find, String replacement) {
int index = 0;
while (index < src.length()) {
index = src.toString().indexOf(find, index);
if (index == -1) {
break;
}
src.delete(index, index + find.length());
src.insert(index, replacement);
index += replacement.length() + 1;
}
}
}

+ 83
- 78
src/main/org/apache/tools/ant/taskdefs/optional/sitraka/Triggers.java View File

@@ -54,8 +54,9 @@

package org.apache.tools.ant.taskdefs.optional.sitraka;

import java.util.Vector;
import java.util.Hashtable;
import java.util.Vector;

import org.apache.tools.ant.BuildException;

/**
@@ -66,82 +67,86 @@ import org.apache.tools.ant.BuildException;
*/
public class Triggers {

protected Vector triggers = new Vector();
public Triggers(){
}

public void addMethod(Method method){
triggers.addElement(method);
}

// -jp_trigger=ClassName.*():E:S,ClassName.MethodName():X:X
public String toString(){
StringBuffer buf = new StringBuffer();
final int size = triggers.size();
for(int i = 0; i < size; i++) {
buf.append( triggers.elementAt(i).toString() );
if (i < size - 1) {
buf.append(',');
}
}
return buf.toString();
}

public static class Method {
protected String name;
protected String event;
protected String action;
protected String param;
public void setName(String value){
name = value;
}
public void setEvent(String value){
if (eventMap.get(value) == null) {
throw new BuildException("Invalid event, must be one of " + eventMap);
}
event = value;
}
public void setAction(String value) throws BuildException {
if (actionMap.get(value) == null) {
throw new BuildException("Invalid action, must be one of " + actionMap);
}
action = value;
}
public void setParam(String value){
param = value;
}

// return <name>:<event>:<action>[:param]
public String toString(){
StringBuffer buf = new StringBuffer();
buf.append(name).append(":"); //@todo name must not be null, check for it
buf.append(eventMap.get(event)).append(":");
buf.append(actionMap.get(action));
if (param != null) {
buf.append(":").append(param);
}
return buf.toString();
}
}

/** mapping of actions to cryptic command line mnemonics */
private final static Hashtable actionMap = new Hashtable(3);
/** mapping of events to cryptic command line mnemonics */
private final static Hashtable eventMap = new Hashtable(3);

static {
actionMap.put("enter", "E");
actionMap.put("exit", "X");
// clear|pause|resume|snapshot|suspend|exit
eventMap.put("clear", "C");
eventMap.put("pause", "P");
eventMap.put("resume", "R");
eventMap.put("snapshot", "S");
eventMap.put("suspend", "A");
eventMap.put("exit", "X");
}
protected Vector triggers = new Vector();

public Triggers() {
}

public void addMethod(Method method) {
triggers.addElement(method);
}

// -jp_trigger=ClassName.*():E:S,ClassName.MethodName():X:X
public String toString() {
StringBuffer buf = new StringBuffer();
final int size = triggers.size();
for (int i = 0; i < size; i++) {
buf.append(triggers.elementAt(i).toString());
if (i < size - 1) {
buf.append(',');
}
}
return buf.toString();
}


public static class Method {
protected String name;
protected String event;
protected String action;
protected String param;

public void setName(String value) {
name = value;
}

public void setEvent(String value) {
if (eventMap.get(value) == null) {
throw new BuildException("Invalid event, must be one of " + eventMap);
}
event = value;
}

public void setAction(String value) throws BuildException {
if (actionMap.get(value) == null) {
throw new BuildException("Invalid action, must be one of " + actionMap);
}
action = value;
}

public void setParam(String value) {
param = value;
}

// return <name>:<event>:<action>[:param]
public String toString() {
StringBuffer buf = new StringBuffer();
buf.append(name).append(":"); //@todo name must not be null, check for it
buf.append(eventMap.get(event)).append(":");
buf.append(actionMap.get(action));
if (param != null) {
buf.append(":").append(param);
}
return buf.toString();
}
}

/** mapping of actions to cryptic command line mnemonics */
private final static Hashtable actionMap = new Hashtable(3);

/** mapping of events to cryptic command line mnemonics */
private final static Hashtable eventMap = new Hashtable(3);

static {
actionMap.put("enter", "E");
actionMap.put("exit", "X");
// clear|pause|resume|snapshot|suspend|exit
eventMap.put("clear", "C");
eventMap.put("pause", "P");
eventMap.put("resume", "R");
eventMap.put("snapshot", "S");
eventMap.put("suspend", "A");
eventMap.put("exit", "X");
}

}

+ 9
- 15
src/main/org/apache/tools/ant/taskdefs/optional/sitraka/XMLReport.java View File

@@ -53,6 +53,15 @@
*/
package org.apache.tools.ant.taskdefs.optional.sitraka;

import java.io.File;
import java.io.FileInputStream;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.NoSuchElementException;
import java.util.Vector;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.taskdefs.optional.sitraka.bytecode.ClassFile;
@@ -65,21 +74,6 @@ import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.NoSuchElementException;
import java.util.Vector;

/**
* Little hack to process XML report from JProbe. It will fix
* some reporting errors from JProbe 3.0 and makes use of a reference


Loading…
Cancel
Save