/**************************************************************************************
* Copyright (c) Jonas Bon�r, Alexandre Vasseur. All rights reserved. *
* http://aspectwerkz.codehaus.org *
* ---------------------------------------------------------------------------------- *
* The software in this package is published under the terms of the LGPL license *
* a copy of which has been included with this distribution in the license.txt file. *
**************************************************************************************/
package org.codehaus.aspectwerkz.compiler;
import org.apache.tools.ant.BuildLogger;
import org.apache.tools.ant.DefaultLogger;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.Copy;
import org.apache.tools.ant.taskdefs.Delete;
import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.types.selectors.FilenameSelector;
import java.io.File;
/**
* Utility class providing file manipulation facilities. <p/>This implementation uses Ant task programmaticaly.
*
* @author <a href="mailto:alex@gnilux.com">Alexandre Vasseur </a>
*/
public class Utility {
/**
* Ant project
*/
private Project project;
/**
* Ant logger
*/
private BuildLogger logger;
private boolean verbose = false;
/**
* Constructs a new project and attach simple logger
*/
public Utility() {
project = new Project();
logger = new DefaultLogger();
logger.setMessageOutputLevel(0);
logger.setOutputPrintStream(System.out);
logger.setErrorPrintStream(System.err);
project.addBuildListener(logger);
}
/**
* Set verbosity
*/
public void setVerbose(boolean verbose) {
if (verbose) {
logger.setMessageOutputLevel(2);
verbose = true;
} else {
logger.setMessageOutputLevel(-1);
verbose = false;
}
}
/**
* Delete recursively a directory and the directory itself
*/
public void deleteDir(File dir) {
Delete task = new Delete();
task.setProject(project);
task.setTaskName("delete");
FilenameSelector fns = new FilenameSelector();
fns.setName("**/*");
FileSet fs = new FileSet();
fs.setDir(dir);
fs.addFilename(fns);
task.addFileset(fs);
task.setIncludeEmptyDirs(true);
task.perform();
dir.delete();
}
/**
* Copy a file or directory recursively
*/
public void backupFile(File source, File dest) {
Copy task = new Copy();
task.setProject(project);
task.setTaskName("backup");
task.setVerbose(verbose);
//@todo haltOnError
//copyTask.setFailOnError(haltOnError);
if (source.isDirectory()) {
FilenameSelector fns = new FilenameSelector();
fns.setName("**/*");
FileSet fs = new FileSet();
fs.setDir(source);
fs.addFilename(fns);
task.addFileset(fs);
task.setTodir(dest);
task.setIncludeEmptyDirs(true);
} else {
task.setFile(source);
task.setTofile(dest);
}
task.setOverwrite(true);
task.setPreserveLastModified(true);
task.execute();
}
public void log(String msg) {
project.log(msg);
}
}