1 package org.apache.maven.plugins.pdf;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.IOException;
23 import java.util.ArrayList;
24 import java.util.Date;
25 import java.util.List;
26
27 import org.apache.maven.doxia.document.DocumentAuthor;
28 import org.apache.maven.doxia.document.DocumentCover;
29 import org.apache.maven.doxia.document.DocumentMeta;
30 import org.apache.maven.doxia.document.DocumentModel;
31 import org.apache.maven.doxia.document.DocumentTOC;
32 import org.apache.maven.doxia.document.DocumentTOCItem;
33 import org.apache.maven.doxia.site.decoration.DecorationModel;
34 import org.apache.maven.doxia.site.decoration.Menu;
35 import org.apache.maven.doxia.site.decoration.MenuItem;
36 import org.apache.maven.model.Developer;
37 import org.apache.maven.project.MavenProject;
38 import org.codehaus.plexus.util.IOUtil;
39 import org.codehaus.plexus.util.StringUtils;
40 import org.apache.commons.io.input.XmlStreamReader;
41
42
43
44
45
46
47
48 public class DocumentModelBuilder
49 {
50
51 private final MavenProject project;
52
53
54 private final DecorationModel decorationModel;
55
56
57
58
59
60
61 public DocumentModelBuilder( MavenProject project )
62 {
63 this( project, null );
64 }
65
66
67
68
69
70
71
72 public DocumentModelBuilder( MavenProject project, DecorationModel decorationModel )
73 {
74 this.project = project;
75 this.decorationModel = decorationModel;
76 }
77
78
79
80
81
82
83 public DocumentModel getDocumentModel()
84 {
85 return getDocumentModel( project, decorationModel, null );
86 }
87
88
89
90
91
92
93
94 public DocumentModel getDocumentModel( Date date )
95 {
96 return getDocumentModel( project, decorationModel, date );
97 }
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112 private static DocumentModel getDocumentModel( MavenProject project,
113 DecorationModel decorationModel, Date date )
114 {
115 final Date now = ( date == null ? new Date() : date );
116
117 final DocumentModel docModel = new DocumentModel();
118
119 docModel.setModelEncoding( getProjectModelEncoding( project ) );
120 docModel.setOutputName( project == null || project.getArtifactId() == null
121 ? "unnamed" : project.getArtifactId() );
122 docModel.setMeta( getDocumentMeta( project, now ) );
123 docModel.setCover( getDocumentCover( project, now ) );
124 docModel.setToc( getDocumentTOC( decorationModel ) );
125
126 return docModel;
127 }
128
129
130
131
132
133
134
135 private static DocumentTOC getDocumentTOC( DecorationModel decorationModel )
136 {
137 final DocumentTOC toc = new DocumentTOC();
138
139 if ( decorationModel != null && decorationModel.getMenus() != null )
140 {
141 for ( final Menu menu : decorationModel.getMenus() )
142 {
143 for ( final MenuItem item : menu.getItems() )
144 {
145 final DocumentTOCItem documentTOCItem = new DocumentTOCItem();
146 documentTOCItem.setName( item.getName() );
147 documentTOCItem.setRef( item.getHref() );
148 toc.addItem( documentTOCItem );
149 }
150 }
151 }
152
153 return toc;
154 }
155
156
157
158
159
160
161
162
163
164 private static DocumentMeta getDocumentMeta( MavenProject project, Date date )
165 {
166 final DocumentMeta meta = new DocumentMeta();
167
168 meta.setAuthors( getAuthors( project ) );
169 meta.setCreationDate( date );
170 meta.setCreator( System.getProperty( "user.name" ) );
171 meta.setDate( date );
172 meta.setDescription( project == null ? null : project.getDescription() );
173
174 meta.setInitialCreator( System.getProperty( "user.name" ) );
175
176
177 meta.setSubject( getProjectName( project ) );
178 meta.setTitle( getProjectName( project ) );
179
180 return meta;
181 }
182
183
184
185
186
187
188
189
190
191 private static DocumentCover getDocumentCover( MavenProject project, Date date )
192 {
193 final DocumentCover cover = new DocumentCover();
194
195 cover.setAuthors( getAuthors( project ) );
196
197 cover.setCompanyName( getProjectOrganizationName( project ) );
198 cover.setCoverDate( date );
199 cover.setCoverSubTitle( project == null ? null : "v. " + project.getVersion() );
200 cover.setCoverTitle( getProjectName( project ) );
201
202 cover.setCoverVersion( project == null ? null : project.getVersion() );
203
204 cover.setProjectName( getProjectName( project ) );
205
206 return cover;
207 }
208
209
210
211
212
213
214
215
216 private static List<DocumentAuthor> getAuthors( MavenProject project )
217 {
218 if ( project == null || project.getDevelopers() == null )
219 {
220 return null;
221 }
222
223 final List<DocumentAuthor> ret = new ArrayList<DocumentAuthor>( 4 );
224
225 for ( Object o : project.getDevelopers() )
226 {
227 final Developer developer = (Developer) o;
228
229 final DocumentAuthor author = new DocumentAuthor();
230 author.setName( developer.getName() );
231 author.setEmail( developer.getEmail() );
232 author.setCompanyName( developer.getOrganization() );
233 StringBuilder roles = null;
234
235 for ( final String role : developer.getRoles() )
236 {
237 if ( roles == null )
238 {
239 roles = new StringBuilder( 32 );
240 }
241 else
242 {
243 roles.append( ',' ).append( ' ' );
244 }
245 roles.append( role );
246 }
247 if ( roles != null )
248 {
249 author.setPosition( roles.toString() );
250 }
251
252 ret.add( author );
253 }
254
255 return ret;
256 }
257
258
259
260
261
262 private static String getProjectOrganizationName( MavenProject project )
263 {
264 if ( project != null && project.getOrganization() != null
265 && StringUtils.isNotEmpty( project.getOrganization().getName() ) )
266 {
267 return project.getOrganization().getName();
268 }
269
270 return System.getProperty( "user.name" );
271 }
272
273
274
275
276
277
278
279
280 private static String getProjectName( MavenProject project )
281 {
282 if ( project == null )
283 {
284 return null;
285 }
286
287 if ( StringUtils.isEmpty( project.getName() ) )
288 {
289 return project.getGroupId() + ":" + project.getArtifactId();
290 }
291
292 return project.getName();
293 }
294
295
296
297
298
299
300
301 private static String getProjectModelEncoding( MavenProject project )
302 {
303 if ( project == null )
304 {
305 return null;
306 }
307
308 String encoding = project.getModel().getModelEncoding();
309
310 XmlStreamReader reader = null;
311 try
312 {
313 reader = new XmlStreamReader( project.getFile() );
314 encoding = reader.getEncoding();
315 }
316 catch ( IOException e )
317 {
318
319 }
320 finally
321 {
322 IOUtil.close( reader );
323 }
324
325 if ( StringUtils.isEmpty( encoding ) )
326 {
327 return "UTF-8";
328 }
329
330 return encoding;
331 }
332 }