1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.module.groovy.task;
35
36 import groovy.lang.Binding;
37 import groovy.lang.GroovyRuntimeException;
38
39 import info.magnolia.cms.util.ClasspathResourcesUtil;
40 import info.magnolia.module.InstallContext;
41 import info.magnolia.module.delta.AbstractTask;
42 import info.magnolia.module.delta.TaskExecutionException;
43 import info.magnolia.module.groovy.console.MgnlGroovyConsole;
44
45 import java.io.File;
46 import java.io.IOException;
47 import java.io.InputStream;
48 import java.io.StringWriter;
49 import java.net.URL;
50
51 import org.slf4j.Logger;
52 import org.slf4j.LoggerFactory;
53
54
55
56
57 public class ExecuteGroovyFileTask extends AbstractTask {
58
59
60 private static final Logger log = LoggerFactory.getLogger(ExecuteGroovyFileTask.class);
61
62 private MgnlGroovyConsole console;
63
64 private String inputFile;
65
66 public ExecuteGroovyFileTask(String taskName, String taskDescription, String inputFile) {
67 super(taskName, taskDescription);
68 this.inputFile = inputFile;
69 }
70
71 @Override
72 public void execute(InstallContext installContext) throws TaskExecutionException {
73 try {
74
75 console = new MgnlGroovyConsole(new Binding());
76
77 executeGroovyScript(installContext);
78 } catch (Exception e) {
79 throw new TaskExecutionException("Could not execute the groovy File '" + inputFile + "': " + e.getMessage(), e);
80 }
81 }
82
83 private void executeGroovyScript(InstallContext installContext) throws Exception {
84
85
86 if (this.inputFile == null) {
87 throw new IOException("Input File is Null");
88 }
89
90
91 URL inFile = ClasspathResourcesUtil.getResource(this.inputFile);
92 if (inFile == null) {
93 throw new IOException("Can't find resource file at " + this.inputFile);
94 }
95
96 final InputStream inputStream = ClasspathResourcesUtil.getResource(this.inputFile).openStream();
97 if (inputStream == null) {
98 throw new IOException("Can't find resource file at " + inFile.getFile());
99 }
100
101 Object lastResult = null;
102 StringWriter outputStream = new StringWriter();
103 try {
104 lastResult = console.evaluate(inputStream, (new File(inFile.getFile())).getName(), outputStream);
105
106 if (lastResult != null) {
107 outputStream.getBuffer().append(lastResult);
108 }
109 outputStream.flush();
110 installContext.info(outputStream.toString());
111 } catch (GroovyRuntimeException e) {
112 log.error("Got a Groovy Execution Error", e);
113 throw e;
114 } finally {
115 outputStream.close();
116 inputStream.close();
117 }
118 }
119 }