Re: Help Help, I am intermediate in Java...need help in follow case
On Oct 1, 12:42 pm, RedGrittyBrick <RedGrittyBr...@spamweary.invalid>
wrote:
ElementX wrote:
There is two java classes
second class is for execute ant file.
First Class does the most.
first create a plain class which accepts two java.io.File object in
constructor as input and output and a method which performs
replacement.
- the replacement must take into account the file ending of the input
file:
+ for .java, .cpp, .c and .css remove the FIRST occurrence of "/
* ... */"
+ for .xml, .xhtml, .html and .xsl remove the FIRST occurrence of
"<!-- ...
-->"
has any body have an example class to do it?
Thanks a lot...if you can help...I create a class but is not
working...maybe I can post it here...
Do post it here. It would help if you explain *exactly* what you mean by
"is not working".
--
RGB
the following code was wrote for mappings in jar file...maybe can
help...
public class RemoveHeader extends Task {
private File toDir;
private File mappingFile;
private List<FileSet> filesets;
private List<String> includes, excludes;
private ClassMappings mappings;
private String charset;
/* (non-Javadoc)
* @see org.apache.tools.ant.Task#init()
*/
@Override
public void init() throws BuildException {
super.init();
includes = new ArrayList<String>();
excludes = new ArrayList<String>();
filesets = new ArrayList<FileSet>();
mappings = new ClassMappings();
}
/**
* Defines the directory where to save the replaced files.
This is a
* mandatory parameter.
*
* @param toDir the directory where to save files
*/
public void setTodir(File toDir) {
this.toDir = toDir;
}
/**
* Defines the location of the mapping file generated by
ProGuard. This
* is a mandatory parameter.
*
* @param mappingFile the file containing the class name
mappings
*/
public void setMappingfile(File mappingFile) {
this.mappingFile = mappingFile;
}
/**
* Defines the configuration files to scan for class names and
to replace
* the original class names with their mappings. XML files are
scanned for
* elements having an attribute named "class". These
classes will
* be included in the list of classes to replace. Further
classes may be
* added using the <include> directive of this task.
* <p>
* This parameter is mandatory.
*
* @param files the file set containing the files to scan
*/
public void addConfiguredFileSet(FileSet files) {
this.filesets.add(files);
}
/**
* Adds a class name to exclude from the replacement process.
*
* @param name the <code>ClassNames</code> to exclude from the
replacement
*/
public void addConfiguredExclude(ClassNames name) {
excludes.addAll(Arrays.asList(name.getNames()));
}
/**
* Adds a class name to include into the replacement process.
*
* @param name the <code>ClassNames</code> to include into the
replacement
*/
public void addConfiguredInclude(ClassNames name) {
includes.addAll(Arrays.asList(name.getNames()));
}
/**
* Defines the character encoding used for reading and writing
files.
*
* @param charset a valid character encoding for the current
Java platform
*/
public void setCharset(String charset) {
this.charset = charset;
}
/* (non-Javadoc)
* @see org.apache.tools.ant.Task#execute()
*/
@Override
public void execute() throws BuildException {
/* Check input parameters. */
if (filesets.isEmpty()) {
throw new BuildException("No file set defined");
}
if (toDir == null) {
throw new BuildException("No destination directory
defined.");
}
if (mappingFile == null) {
throw new BuildException("No mapping file defined");
}
if (!toDir.exists()) {
throw new BuildException("Destination directory \"" +
toDir.getAbsolutePath() + "\" does not
exist.");
}
if (!mappingFile.exists()) {
throw new BuildException("Mapping file does not
exist");
}
mappings.reset();
/* Search input files for classes to replace. */
findClasses();
/* Parse the ProGuard mappings file. */
try {
mappings.parseMappings(mappingFile);
} catch (IOException ex) {
throw new BuildException("Error parsing mappings file:
" +
mappingFile.getAbsolutePath(), ex);
}
/* Exclude the files that were requested to exclude. */
for (String exclude : excludes) {
if (mappings.removeClass(exclude)) {
log("Excluding \"" + exclude + "\" from replace",
Project.MSG_VERBOSE);
} else {
log("Exclude class \"" + exclude + "\" not found
in the " +
"configuration files", Project.MSG_WARN);
}
}
/* Add includes. */
for (String include : includes) {
mappings.addClass(include);
log("Including \"" + include + "\" into replace",
Project.MSG_VERBOSE);
}
/* Perform the replacement and display results. */
MappingResult result = replace();
if (result.hasFailures()) {
log("Failed to replace the following classes: " +
result.getFailures(),
Project.MSG_WARN);
}
log("Replaced " + result.getMappingsCount() + " mappings",
Project.MSG_INFO);
}
/**
* Searches for classes to replace in the configured file
sets.
*/
private void findClasses() throws BuildException {
/* Loop through all file sets. */
for (FileSet fileset : filesets) {
DirectoryScanner scanner =
fileset.getDirectoryScanner();
String[] files = scanner.getIncludedFiles();
File base = scanner.getBasedir();
for (int i = 0; i < files.length; i++) {
try {
File f = new File(base, files[i]);
if (!f.exists()) {
throw new BuildException("File " +
f.getAbsolutePath() + " not found");
}
log("Searching " + f.getAbsolutePath() + " for
class attributes", Project.MSG_VERBOSE);
mappings.findClasses(f);
} catch (IOException ex) {
throw new BuildException("I/O error parsing
file " + files[i], ex);
}
}
}
}
/**
* Performs the replace on all files sets of this.
*/
private MappingResult replace() {
MappingResult result = new MappingResult();
/* Loop through all file sets. */
for (FileSet fileset : filesets) {
DirectoryScanner scanner =
fileset.getDirectoryScanner();
String[] files = scanner.getIncludedFiles();
File src = scanner.getBasedir();
for (int i = 0; i < files.length; i++) {
try {
File in = new File(src, files[i]);
File out = new File(toDir, files[i]);
if (!in.exists()) {
throw new BuildException("File " +
in.getAbsolutePath() + " not found");
}
if (!out.getParentFile().exists()) {
out.getParentFile().mkdirs();
}
log("Processing " + in.getAbsolutePath(),
Project.MSG_VERBOSE);
mappings.replaceClassNames(in, out, charset,
result);
} catch (IOException ex) {
throw new BuildException("I/O error replacing
file " + files[i], ex);
}
}
}
return result;
}
}
}