]> git.argeo.org Git - gpl/argeo-slc.git/blob - org.argeo.slc.core/src/org/argeo/slc/ant/AntRun.java
Remove runner servlet
[gpl/argeo-slc.git] / org.argeo.slc.core / src / org / argeo / slc / ant / AntRun.java
1 /*
2 * Copyright (C) 2007-2012 Argeo GmbH
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 package org.argeo.slc.ant;
17
18 import java.io.File;
19 import java.util.ArrayList;
20 import java.util.HashMap;
21 import java.util.List;
22 import java.util.Map;
23 import java.util.Vector;
24
25 import org.apache.commons.logging.Log;
26 import org.apache.commons.logging.LogFactory;
27 import org.apache.tools.ant.BuildEvent;
28 import org.apache.tools.ant.BuildListener;
29 import org.apache.tools.ant.Project;
30 import org.apache.tools.ant.ProjectHelper;
31 import org.apache.tools.ant.helper.ProjectHelper2;
32 import org.argeo.slc.SlcException;
33 import org.springframework.core.io.Resource;
34
35 public class AntRun implements Runnable {
36 private final static Log log = LogFactory.getLog(AntRun.class);
37
38 private Resource buildFile;
39 private File baseDir;
40
41 private List<String> targets = new ArrayList<String>();
42 private Map<Object, Object> properties = new HashMap<Object, Object>();
43
44 public void run() {
45 Project project = new Project();
46
47 try {
48 String path = buildFile.getURL().getPath();
49 project.setUserProperty("ant.file", path);
50 project.setBaseDir(extractBaseDir(path));
51
52 project.init();
53 ProjectHelper projectHelper = new ProjectHelper2();
54 project.addReference(ProjectHelper.PROJECTHELPER_REFERENCE,
55 projectHelper);
56 projectHelper.parse(project, buildFile.getURL());
57 } catch (Exception e) {
58 throw new SlcException("Could not parse " + buildFile, e);
59 }
60
61 if (properties != null) {
62 for (Map.Entry<Object, Object> entry : properties.entrySet()) {
63 project.setUserProperty(entry.getKey().toString(), entry
64 .getValue().toString());
65 }
66 }
67
68 project.fireBuildStarted();
69 Throwable exception = null;
70 try {
71 project.addBuildListener(new LoggingListener());
72 if (targets.size() == 0) {
73 project.executeTarget(project.getDefaultTarget());
74 } else {
75 project.executeTargets(new Vector<String>(targets));
76 }
77 } catch (Throwable e) {
78 exception = e;
79 throw new SlcException("Could not run Ant script " + buildFile, e);
80 } finally {
81 project.fireBuildFinished(exception);
82 }
83 }
84
85 private File extractBaseDir(String path) {
86 if(this.baseDir!=null)
87 return this.baseDir;
88
89 String baseDir = null;
90 if (path.length() > 1) {
91 int indx = path.lastIndexOf('/', path.length() - 1);
92 if (indx == -1 || indx == 0) {
93 baseDir = "/";
94 } else {
95 baseDir = path.substring(0, indx) + "/";
96 }
97 } else {
98 baseDir = "/";
99 }
100 File file = new File(baseDir);
101 if (file.exists()) {
102 return file;
103 } else {
104 return new File(System.getProperty("user.dir"));
105 }
106 }
107
108 public void setBuildFile(Resource buildFile) {
109 this.buildFile = buildFile;
110 }
111
112 public void setTargets(List<String> targets) {
113 this.targets = targets;
114 }
115
116 public void setProperties(Map<Object, Object> properties) {
117 this.properties = properties;
118 }
119
120 public void setBaseDir(File baseDir) {
121 this.baseDir = baseDir;
122 }
123
124 protected static class LoggingListener implements BuildListener {
125
126 public void buildFinished(BuildEvent event) {
127 if (log.isDebugEnabled())
128 log.debug("Ant build finished: " + event);
129 }
130
131 public void buildStarted(BuildEvent event) {
132 if (log.isDebugEnabled())
133 log.debug("Ant build started: " + event);
134 }
135
136 public void messageLogged(BuildEvent event) {
137 if (event.getPriority() == Project.MSG_DEBUG) {
138 if (log.isTraceEnabled())
139 log.trace(event.getMessage());
140 } else if (event.getPriority() == Project.MSG_VERBOSE) {
141 if (log.isDebugEnabled())
142 log.debug(event.getMessage());
143 } else if (event.getPriority() == Project.MSG_INFO) {
144 log.info(event.getMessage());
145
146 } else if (event.getPriority() == Project.MSG_WARN) {
147 log.warn(event.getMessage());
148
149 } else if (event.getPriority() == Project.MSG_ERR) {
150 log.error(event.getMessage());
151 } else {
152 log.error(event.getMessage());
153 }
154 }
155
156 public void targetFinished(BuildEvent event) {
157 if (log.isTraceEnabled())
158 log.debug("Target finished: " + event.getTarget());
159 }
160
161 public void targetStarted(BuildEvent event) {
162 if (log.isTraceEnabled())
163 log.debug("Target started: " + event.getTarget());
164 }
165
166 public void taskFinished(BuildEvent event) {
167 }
168
169 public void taskStarted(BuildEvent event) {
170 }
171 }
172 }