1 /***************************************************************************************
2 * Copyright (c) Jonas BonŽr, Alexandre Vasseur. All rights reserved. *
3 * http://aspectwerkz.codehaus.org *
4 * ---------------------------------------------------------------------------------- *
5 * The software in this package is published under the terms of the LGPL license *
6 * a copy of which has been included with this distribution in the license.txt file. *
7 **************************************************************************************/
8 package org.codehaus.aspectwerkz.compiler;
9
10 import org.apache.tools.ant.BuildLogger;
11 import org.apache.tools.ant.DefaultLogger;
12 import org.apache.tools.ant.Project;
13 import org.apache.tools.ant.taskdefs.Copy;
14 import org.apache.tools.ant.taskdefs.Delete;
15 import org.apache.tools.ant.types.FileSet;
16 import org.apache.tools.ant.types.selectors.FilenameSelector;
17
18 import java.io.File;
19
20 /***
21 * Utility class providing file manipulation facilities. <p/>This implementation uses Ant task programmaticaly.
22 *
23 * @author <a href="mailto:alex@gnilux.com">Alexandre Vasseur </a>
24 */
25 public class Utility {
26 /***
27 * Ant project
28 */
29 private Project project;
30
31 /***
32 * Ant logger
33 */
34 private BuildLogger logger;
35
36 private boolean verbose = false;
37
38 /***
39 * Constructs a new project and attach simple logger
40 */
41 public Utility() {
42 project = new Project();
43 logger = new DefaultLogger();
44 logger.setMessageOutputLevel(0);
45 logger.setOutputPrintStream(System.out);
46 logger.setErrorPrintStream(System.err);
47 project.addBuildListener(logger);
48 }
49
50 /***
51 * Set verbosity
52 */
53 public void setVerbose(boolean verbose) {
54 if (verbose) {
55 logger.setMessageOutputLevel(2);
56 verbose = true;
57 } else {
58 logger.setMessageOutputLevel(-1);
59 verbose = false;
60 }
61 }
62
63 /***
64 * Delete recursively a directory and the directory itself
65 */
66 public void deleteDir(File dir) {
67 Delete task = new Delete();
68 task.setProject(project);
69 task.setTaskName("delete");
70 FilenameSelector fns = new FilenameSelector();
71 fns.setName("**/*");
72 FileSet fs = new FileSet();
73 fs.setDir(dir);
74 fs.addFilename(fns);
75 task.addFileset(fs);
76 task.setIncludeEmptyDirs(true);
77 task.perform();
78 dir.delete();
79 }
80
81 /***
82 * Copy a file or directory recursively
83 */
84 public void backupFile(File source, File dest) {
85 Copy task = new Copy();
86 task.setProject(project);
87 task.setTaskName("backup");
88 task.setVerbose(verbose);
89
90
91
92 if (source.isDirectory()) {
93 FilenameSelector fns = new FilenameSelector();
94 fns.setName("**/*");
95 FileSet fs = new FileSet();
96 fs.setDir(source);
97 fs.addFilename(fns);
98 task.addFileset(fs);
99 task.setTodir(dest);
100 task.setIncludeEmptyDirs(true);
101 } else {
102 task.setFile(source);
103 task.setTofile(dest);
104 }
105 task.setOverwrite(true);
106 task.setPreserveLastModified(true);
107 task.execute();
108 }
109
110 public void log(String msg) {
111 project.log(msg);
112 }
113 }