1 package net.sf.mvnflexreports;
2
3 import java.io.BufferedReader;
4 import java.io.File;
5 import java.io.FileOutputStream;
6 import java.io.InputStreamReader;
7 import java.util.ArrayList;
8 import java.util.List;
9
10 import org.apache.maven.doxia.sink.Sink;
11 import org.apache.maven.plugin.logging.Log;
12
13 /***
14 * @author Rémi Flament
15 *
16 */
17 public abstract class AbstractGraphvizMavenReportGenerator {
18
19 protected Sink sink;
20
21 protected String fontName;
22
23 protected String fontSize;
24
25 /***
26 * The program name for dot (can be dot, circo, neato, or any program that
27 * understand dot files)
28 */
29 protected String programName;
30
31 protected String layout;
32
33 public String getLayout() {
34 return layout;
35 }
36
37 public void setLayout(String layout) {
38 this.layout = layout;
39 }
40
41 public Sink getSink() {
42 return sink;
43 }
44
45 public void setSink(Sink sink) {
46 this.sink = sink;
47 }
48
49 public String getFontName() {
50 return fontName;
51 }
52
53 public void setFontName(String fontName) {
54 this.fontName = fontName;
55 }
56
57 public String getFontSize() {
58 return fontSize;
59 }
60
61 public void setFontSize(String fontSize) {
62 this.fontSize = fontSize;
63 }
64
65 public String getProgramName() {
66 return programName;
67 }
68
69 public void setProgramName(String programName) {
70 this.programName = programName;
71 }
72
73 protected File invokeDot(String dot, String name, String outputDirectory, Log log) throws Exception {
74
75 File imagesDir = new File(outputDirectory + File.separator + "images");
76 File output = new File(outputDirectory + File.separator + "images" + File.separator + name + ".png");
77 imagesDir.mkdirs();
78
79 File dotFile = File.createTempFile(name, ".dot");
80 log.debug("Generating dot file in : " + dotFile.getAbsolutePath());
81 FileOutputStream stream = new FileOutputStream(dotFile);
82 stream.write(dot.getBytes());
83 stream.close();
84
85 log.debug("Generating image file in : " + output.getAbsolutePath());
86
87 List<String> commands = new ArrayList<String>();
88 commands.add(programName);
89 commands.add("-Tpng");
90 commands.add("-o");
91 commands.add(output.getAbsolutePath());
92 commands.add(dotFile.getAbsolutePath());
93
94 ProcessBuilder builder = new ProcessBuilder(commands);
95 log.debug("Running command " + builder.command().toString());
96
97 Process process = builder.redirectErrorStream(true).directory(null).start();
98
99 int status = process.waitFor();
100
101 if (status != 0) {
102 log.error("Command [" + builder.command().toString() + "] exited with status : " + status);
103 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
104 String line = null;
105 while ((line = bufferedReader.readLine()) != null) {
106 log.error(line);
107 }
108
109 }
110
111 return output;
112 }
113
114 }