001: /**************************************************************************************
002: * Copyright (c) Jonas BonŽr, Alexandre Vasseur. All rights reserved. *
003: * http://aspectwerkz.codehaus.org *
004: * ---------------------------------------------------------------------------------- *
005: * The software in this package is published under the terms of the LGPL license *
006: * a copy of which has been included with this distribution in the license.txt file. *
007: **************************************************************************************/package org.codehaus.aspectwerkz.compiler;
008:
009: import org.apache.tools.ant.BuildLogger;
010: import org.apache.tools.ant.DefaultLogger;
011: import org.apache.tools.ant.Project;
012: import org.apache.tools.ant.taskdefs.Copy;
013: import org.apache.tools.ant.taskdefs.Delete;
014: import org.apache.tools.ant.types.FileSet;
015: import org.apache.tools.ant.types.selectors.FilenameSelector;
016:
017: import java.io.File;
018:
019: /**
020: * Utility class providing file manipulation facilities. <p/>This implementation uses Ant task programmaticaly.
021: *
022: * @author <a href="mailto:alex@gnilux.com">Alexandre Vasseur </a>
023: */
024: public class Utility {
025: /**
026: * Ant project
027: */
028: private Project project;
029:
030: /**
031: * Ant logger
032: */
033: private BuildLogger logger;
034:
035: private boolean verbose = false;
036:
037: /**
038: * Constructs a new project and attach simple logger
039: */
040: public Utility() {
041: project = new Project();
042: logger = new DefaultLogger();
043: logger.setMessageOutputLevel(0);
044: logger.setOutputPrintStream(System.out);
045: logger.setErrorPrintStream(System.err);
046: project.addBuildListener(logger);
047: }
048:
049: /**
050: * Set verbosity
051: */
052: public void setVerbose(boolean verbose) {
053: if (verbose) {
054: logger.setMessageOutputLevel(2);
055: verbose = true;
056: } else {
057: logger.setMessageOutputLevel(-1);
058: verbose = false;
059: }
060: }
061:
062: /**
063: * Delete recursively a directory and the directory itself
064: */
065: public void deleteDir(File dir) {
066: Delete task = new Delete();
067: task.setProject(project);
068: task.setTaskName("delete");
069: FilenameSelector fns = new FilenameSelector();
070: fns.setName("**/*");
071: FileSet fs = new FileSet();
072: fs.setDir(dir);
073: fs.addFilename(fns);
074: task.addFileset(fs);
075: task.setIncludeEmptyDirs(true);
076: task.perform();
077: dir.delete();
078: }
079:
080: /**
081: * Copy a file or directory recursively
082: */
083: public void backupFile(File source, File dest) {
084: Copy task = new Copy();
085: task.setProject(project);
086: task.setTaskName("backup");
087: task.setVerbose(verbose);
088:
089: //@todo haltOnError
090: //copyTask.setFailOnError(haltOnError);
091: if (source.isDirectory()) {
092: FilenameSelector fns = new FilenameSelector();
093: fns.setName("**/*");
094: FileSet fs = new FileSet();
095: fs.setDir(source);
096: fs.addFilename(fns);
097: task.addFileset(fs);
098: task.setTodir(dest);
099: task.setIncludeEmptyDirs(true);
100: } else {
101: task.setFile(source);
102: task.setTofile(dest);
103: }
104: task.setOverwrite(true);
105: task.setPreserveLastModified(true);
106: task.execute();
107: }
108:
109: public void log(String msg) {
110: project.log(msg);
111: }
112: }
|