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.commons.io.FilenameUtils;
21 import org.apache.maven.plugin.MojoExecutionException;
22 import org.forgerock.doc.maven.AbstractDocbkxMojo;
23 import org.forgerock.doc.maven.utils.ImageCopier;
24 import org.forgerock.doc.maven.utils.NameUtils;
25 import org.forgerock.doc.maven.utils.OLinkUtils;
26 import org.twdata.maven.mojoexecutor.MojoExecutor;
27
28 import java.io.File;
29 import java.io.IOException;
30 import java.util.ArrayList;
31
32
33
34
35 public class Epub {
36
37
38
39
40 private AbstractDocbkxMojo m;
41
42
43
44
45 private final Executor executor;
46
47
48
49
50
51
52 public Epub(final AbstractDocbkxMojo mojo) {
53 m = mojo;
54 this.executor = new Executor();
55 }
56
57
58
59
60
61
62 public void execute() throws MojoExecutionException {
63 executor.prepareOlinkDB();
64 executor.build();
65 }
66
67
68
69
70
71
72
73
74
75 final String getTargetDB() throws MojoExecutionException {
76 File targetDB = new File(m.getBuildDirectory(), "olinkdb-epub.xml");
77
78 try {
79 OLinkUtils.createTargetDatabase(targetDB, "epub", m);
80 } catch (Exception e) {
81 throw new MojoExecutionException(
82 "Failed to write link target database: " + targetDB.getPath(), e);
83 }
84
85 return targetDB.getPath();
86 }
87
88
89
90
91 class Executor extends MojoExecutor {
92
93
94 private String targetDatabaseDocument;
95
96
97
98
99
100
101
102 String getTargetDatabaseDocument() throws MojoExecutionException {
103
104 if (targetDatabaseDocument == null || targetDatabaseDocument.isEmpty()) {
105 targetDatabaseDocument = getTargetDB();
106 }
107
108 return targetDatabaseDocument;
109 }
110
111
112
113
114
115
116 void prepareOlinkDB() throws MojoExecutionException {
117
118 for (String docName : m.getDocNames()) {
119 ArrayList<MojoExecutor.Element> cfg = new ArrayList<MojoExecutor.Element>();
120 cfg.addAll(m.getBaseConfiguration());
121 cfg.add(element(name("xincludeSupported"), m.isXincludeSupported()));
122 cfg.add(element(name("sourceDirectory"), m.path(m.getDocbkxModifiableSourcesDirectory())));
123 cfg.add(element(name("collectXrefTargets"), "yes"));
124 cfg.add(element(name("includes"), docName + "/" + m.getDocumentSrcName()));
125 cfg.add(element(name("currentDocid"), docName));
126 cfg.add(element(name("targetDatabaseDocument"), getTargetDatabaseDocument()));
127 cfg.add(element(name("targetDirectory"), m.path(m.getDocbkxOutputDirectory()) + "/epub"));
128 cfg.add(element(name("targetsFilename"), m.getDocumentSrcName() + ".epub.target.db"));
129
130 executeMojo(
131 plugin(
132 groupId("com.agilejava.docbkx"),
133 artifactId("docbkx-maven-plugin"),
134 version(m.getDocbkxVersion())),
135 goal("generate-epub"),
136 configuration(cfg.toArray(new Element[cfg.size()])),
137 executionEnvironment(m.getProject(), m.getSession(), m.getPluginManager())
138 );
139 }
140 }
141
142
143
144
145
146
147 void build() throws MojoExecutionException {
148
149 try {
150 ImageCopier.copyImages("epub", "", m);
151 } catch (IOException e) {
152 throw new MojoExecutionException("Failed to copy images", e);
153 }
154
155 for (String docName : m.getDocNames()) {
156 ArrayList<Element> cfg = new ArrayList<MojoExecutor.Element>();
157 cfg.addAll(m.getBaseConfiguration());
158 cfg.add(element(name("epubCustomization"), m.path(m.getEpubCustomization())));
159 cfg.add(element(name("targetDatabaseDocument"), getTargetDatabaseDocument()));
160 cfg.add(element(name("targetDirectory"), m.path(m.getDocbkxOutputDirectory()) + "/epub"));
161
162 cfg.add(element(name("includes"), docName + "/" + m.getDocumentSrcName()));
163
164 executeMojo(
165 plugin(
166 groupId("com.agilejava.docbkx"),
167 artifactId("docbkx-maven-plugin"),
168 version(m.getDocbkxVersion())),
169 goal("generate-epub"),
170 configuration(cfg.toArray(new Element[cfg.size()])),
171 executionEnvironment(m.getProject(), m.getSession(), m.getPluginManager()));
172
173 File outputEpub = FileUtils.getFile(
174 m.getDocbkxOutputDirectory(), "epub",
175 FilenameUtils.getBaseName(m.getDocumentSrcName()) + ".epub");
176
177 try {
178 NameUtils.renameDocument(outputEpub, docName, m.getProjectName());
179 } catch (IOException e) {
180 throw new MojoExecutionException("Failed to rename document", e);
181 }
182 }
183 }
184 }
185 }