1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.forgerock.doc.maven.build;
18
19 import org.apache.commons.io.FileUtils;
20 import org.apache.maven.plugin.MojoExecutionException;
21 import org.forgerock.doc.maven.AbstractDocbkxMojo;
22 import org.forgerock.doc.maven.utils.ImageCopier;
23 import org.forgerock.doc.maven.utils.OLinkUtils;
24 import org.twdata.maven.mojoexecutor.MojoExecutor;
25
26 import java.io.File;
27 import java.io.IOException;
28 import java.util.ArrayList;
29
30
31
32
33 public class Webhelp {
34
35
36
37
38 private AbstractDocbkxMojo m;
39
40
41
42
43 private final Executor executor;
44
45
46
47
48
49
50 public Webhelp(final AbstractDocbkxMojo mojo) {
51 m = mojo;
52 this.executor = new Executor();
53 }
54
55
56
57
58
59
60 public void execute() throws MojoExecutionException {
61 executor.prepareOlinkDB();
62 executor.build();
63 }
64
65
66
67
68
69
70
71
72 final String getTargetDB() throws MojoExecutionException {
73 File targetDB = new File(m.getBuildDirectory(), "olinkdb-webhelp.xml");
74
75 try {
76 OLinkUtils.createTargetDatabase(targetDB, "webhelp", m);
77 } catch (Exception e) {
78 throw new MojoExecutionException(
79 "Failed to write link target database: " + targetDB.getPath(), e);
80 }
81
82 return targetDB.getPath();
83 }
84
85
86
87
88 class Executor extends MojoExecutor {
89
90
91
92
93
94
95 void prepareOlinkDB() throws MojoExecutionException {
96
97 for (String docName : m.getDocNames()) {
98 ArrayList<Element> cfg = new ArrayList<MojoExecutor.Element>();
99 cfg.addAll(m.getBaseConfiguration());
100
101 cfg.add(element(name("chapterAutolabel"), "1"));
102 cfg.add(element(name("webhelpAutolabel"), "1"));
103 cfg.add(element(name("webhelpCustomization"), m.path(m.getWebHelpCustomization())));
104 cfg.add(element(name("collectXrefTargets"), "only"));
105
106 cfg.add(element(name("currentDocid"), docName));
107 cfg.add(element(name("includes"), docName + "/" + m.getDocumentSrcName()));
108 final File webHelpBase = new File(m.getDocbkxOutputDirectory(), "webhelp");
109 cfg.add(element(name("targetDirectory"), m.path(webHelpBase)));
110 cfg.add(element(name("targetsFilename"), m.getDocumentSrcName() + ".webhelp.target.db"));
111
112 executeMojo(
113 plugin(
114 groupId("com.agilejava.docbkx"),
115 artifactId("docbkx-maven-plugin"),
116 version(m.getDocbkxVersion())),
117 goal("generate-webhelp"),
118 configuration(cfg.toArray(new Element[cfg.size()])),
119 executionEnvironment(m.getProject(), m.getSession(), m.getPluginManager()));
120 }
121 }
122
123
124
125
126
127
128 void build() throws MojoExecutionException {
129
130 try {
131 ImageCopier.copyImages("webhelp", "", m);
132 } catch (IOException e) {
133 throw new MojoExecutionException("Failed to copy images", e);
134 }
135
136 for (String docName : m.getDocNames()) {
137 ArrayList<MojoExecutor.Element> cfg = new ArrayList<MojoExecutor.Element>();
138 cfg.addAll(m.getBaseConfiguration());
139
140 cfg.add(element(name("chapterAutolabel"), "1"));
141 cfg.add(element(name("webhelpAutolabel"), "1"));
142 cfg.add(element(name("webhelpCustomization"),
143 m.path(m.getWebHelpCustomization())));
144
145 cfg.add(element(name("targetDatabaseDocument"), getTargetDB()));
146
147 final File webHelpBase = new File(m.getDocbkxOutputDirectory(), "webhelp");
148 cfg.add(element(name("targetDirectory"), m.path(webHelpBase)));
149
150 cfg.add(element(name("currentDocid"), docName));
151 cfg.add(element(name("includes"), docName + "/" + m.getDocumentSrcName()));
152
153 executeMojo(
154 plugin(
155 groupId("com.agilejava.docbkx"),
156 artifactId("docbkx-maven-plugin"),
157 version(m.getDocbkxVersion())),
158 goal("generate-webhelp"),
159 configuration(cfg.toArray(new Element[cfg.size()])),
160 executionEnvironment(m.getProject(), m.getSession(), m.getPluginManager()));
161
162
163 final File webHelpCss = FileUtils.getFile(
164 webHelpBase, docName, "common", "css", "positioning.css");
165 final File webHelpLogo = FileUtils.getFile(
166 webHelpBase, docName, "common", "images", "logo.png");
167 try {
168 FileUtils.copyFile(m.getWebHelpCss(), webHelpCss);
169 FileUtils.copyFile(m.getWebHelpLogo(), webHelpLogo);
170 } catch (IOException ie) {
171 throw new MojoExecutionException("Failed to copy file", ie);
172 }
173 }
174 }
175 }
176 }