]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.support.ant/src/main/java/org/argeo/slc/ant/AntRun.java
Reintroduce ant support
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.ant / src / main / java / org / argeo / slc / ant / AntRun.java
1 package org.argeo.slc.ant;
2
3 import java.io.File;
4 import java.util.ArrayList;
5 import java.util.HashMap;
6 import java.util.List;
7 import java.util.Map;
8 import java.util.Vector;
9
10 import org.apache.commons.logging.Log;
11 import org.apache.commons.logging.LogFactory;
12 import org.apache.tools.ant.BuildEvent;
13 import org.apache.tools.ant.BuildListener;
14 import org.apache.tools.ant.Project;
15 import org.apache.tools.ant.ProjectHelper;
16 import org.apache.tools.ant.helper.ProjectHelper2;
17 import org.argeo.slc.SlcException;
18 import org.springframework.core.io.Resource;
19
20 public class AntRun implements Runnable {
21 private final static Log log = LogFactory.getLog(AntRun.class);
22
23 private Resource buildFile;
24
25 private List<String> targets = new ArrayList<String>();
26 private Map<Object, Object> properties = new HashMap<Object, Object>();
27
28 public void run() {
29 Project project = new Project();
30
31 try {
32 String path = buildFile.getURL().getPath();
33 project.setUserProperty("ant.file", path);
34 project.setBaseDir(extractBaseDir(path));
35
36 project.init();
37 ProjectHelper projectHelper = new ProjectHelper2();
38 project.addReference(ProjectHelper.PROJECTHELPER_REFERENCE,
39 projectHelper);
40 projectHelper.parse(project, buildFile.getURL());
41 } catch (Exception e) {
42 throw new SlcException("Could not parse " + buildFile, e);
43 }
44
45 if (properties != null) {
46 for (Map.Entry<Object, Object> entry : properties.entrySet()) {
47 project.setUserProperty(entry.getKey().toString(), entry
48 .getValue().toString());
49 }
50 }
51
52 project.fireBuildStarted();
53 Throwable exception = null;
54 try {
55 project.addBuildListener(new LoggingListener());
56 if (targets.size() == 0) {
57 project.executeTarget(project.getDefaultTarget());
58 } else {
59 project.executeTargets(new Vector<String>(targets));
60 }
61 } catch (Throwable e) {
62 exception = e;
63 throw new SlcException("Could not run Ant script " + buildFile, e);
64 } finally {
65 project.fireBuildFinished(exception);
66 }
67 }
68
69 private File extractBaseDir(String path) {
70 String baseDir = null;
71 if (path.length() > 1) {
72 int indx = path.lastIndexOf('/', path.length() - 1);
73 if (indx == -1 || indx == 0) {
74 baseDir = "/";
75 } else {
76 baseDir = path.substring(0, indx) + "/";
77 }
78 } else {
79 baseDir = "/";
80 }
81 File file = new File(baseDir);
82 if (file.exists()) {
83 return file;
84 } else {
85 return new File(System.getProperty("user.dir"));
86 }
87 }
88
89 public void setBuildFile(Resource buildFile) {
90 this.buildFile = buildFile;
91 }
92
93 public void setTargets(List<String> targets) {
94 this.targets = targets;
95 }
96
97 public void setProperties(Map<Object, Object> properties) {
98 this.properties = properties;
99 }
100
101 protected static class LoggingListener implements BuildListener {
102
103 public void buildFinished(BuildEvent event) {
104 if (log.isDebugEnabled())
105 log.debug("Ant build finished: " + event);
106 }
107
108 public void buildStarted(BuildEvent event) {
109 if (log.isDebugEnabled())
110 log.debug("Ant build started: " + event);
111 }
112
113 public void messageLogged(BuildEvent event) {
114 log.info(event.getMessage());
115 }
116
117 public void targetFinished(BuildEvent event) {
118 if (log.isTraceEnabled())
119 log.debug("Target finished: " + event.getTarget());
120 }
121
122 public void targetStarted(BuildEvent event) {
123 if (log.isTraceEnabled())
124 log.debug("Target started: " + event.getTarget());
125 }
126
127 public void taskFinished(BuildEvent event) {
128 }
129
130 public void taskStarted(BuildEvent event) {
131 }
132 }
133 }