1
2
3
4
5
6 package org.apache.maven.doxia.site.io.xpp3;
7
8
9
10
11
12 import java.io.OutputStream;
13 import java.io.Writer;
14 import java.util.Iterator;
15 import org.apache.maven.doxia.site.Banner;
16 import org.apache.maven.doxia.site.Body;
17 import org.apache.maven.doxia.site.Image;
18 import org.apache.maven.doxia.site.LinkItem;
19 import org.apache.maven.doxia.site.Logo;
20 import org.apache.maven.doxia.site.Menu;
21 import org.apache.maven.doxia.site.MenuItem;
22 import org.apache.maven.doxia.site.PublishDate;
23 import org.apache.maven.doxia.site.SiteModel;
24 import org.apache.maven.doxia.site.Skin;
25 import org.apache.maven.doxia.site.Version;
26 import org.codehaus.plexus.util.xml.Xpp3Dom;
27 import org.codehaus.plexus.util.xml.pull.MXSerializer;
28 import org.codehaus.plexus.util.xml.pull.XmlSerializer;
29
30
31
32
33
34
35 @SuppressWarnings( "all" )
36 public class SiteXpp3Writer
37 {
38
39
40
41
42
43
44
45
46 private static final String NAMESPACE = null;
47
48
49
50
51 private String fileComment = null;
52
53
54
55
56
57
58
59
60
61
62
63 public void setFileComment( String fileComment )
64 {
65 this.fileComment = fileComment;
66 }
67
68
69
70
71
72
73
74
75 public void write( Writer writer, SiteModel siteModel )
76 throws java.io.IOException
77 {
78 XmlSerializer serializer = new MXSerializer();
79 serializer.setProperty( "http://xmlpull.org/v1/doc/properties.html#serializer-indentation", " " );
80 serializer.setProperty( "http://xmlpull.org/v1/doc/properties.html#serializer-line-separator", "\n" );
81 serializer.setOutput( writer );
82 serializer.startDocument( siteModel.getModelEncoding(), null );
83 writeSiteModel( siteModel, "site", serializer );
84 serializer.endDocument();
85 }
86
87
88
89
90
91
92
93
94 public void write( OutputStream stream, SiteModel siteModel )
95 throws java.io.IOException
96 {
97 XmlSerializer serializer = new MXSerializer();
98 serializer.setProperty( "http://xmlpull.org/v1/doc/properties.html#serializer-indentation", " " );
99 serializer.setProperty( "http://xmlpull.org/v1/doc/properties.html#serializer-line-separator", "\n" );
100 serializer.setOutput( stream, siteModel.getModelEncoding() );
101 serializer.startDocument( siteModel.getModelEncoding(), null );
102 writeSiteModel( siteModel, "site", serializer );
103 serializer.endDocument();
104 }
105
106
107
108
109
110
111
112
113
114 private void writeBanner( Banner banner, String tagName, XmlSerializer serializer )
115 throws java.io.IOException
116 {
117 serializer.startTag( NAMESPACE, tagName );
118 if ( banner.getName() != null )
119 {
120 serializer.attribute( NAMESPACE, "name", banner.getName() );
121 }
122 if ( banner.getHref() != null )
123 {
124 serializer.attribute( NAMESPACE, "href", banner.getHref() );
125 }
126 if ( banner.getTarget() != null )
127 {
128 serializer.attribute( NAMESPACE, "target", banner.getTarget() );
129 }
130 if ( banner.getImage() != null )
131 {
132 writeImage( (Image) banner.getImage(), "image", serializer );
133 }
134 serializer.endTag( NAMESPACE, tagName );
135 }
136
137
138
139
140
141
142
143
144
145 private void writeBody( Body body, String tagName, XmlSerializer serializer )
146 throws java.io.IOException
147 {
148 serializer.startTag( NAMESPACE, tagName );
149 if ( body.getHead() != null )
150 {
151 serializer.startTag( NAMESPACE, "head" ).text( body.getHead() ).endTag( NAMESPACE, "head" );
152 }
153 if ( ( body.getLinks() != null ) && ( body.getLinks().size() > 0 ) )
154 {
155 serializer.startTag( NAMESPACE, "links" );
156 for ( Iterator iter = body.getLinks().iterator(); iter.hasNext(); )
157 {
158 LinkItem o = (LinkItem) iter.next();
159 writeLinkItem( o, "item", serializer );
160 }
161 serializer.endTag( NAMESPACE, "links" );
162 }
163 if ( ( body.getBreadcrumbs() != null ) && ( body.getBreadcrumbs().size() > 0 ) )
164 {
165 serializer.startTag( NAMESPACE, "breadcrumbs" );
166 for ( Iterator iter = body.getBreadcrumbs().iterator(); iter.hasNext(); )
167 {
168 LinkItem o = (LinkItem) iter.next();
169 writeLinkItem( o, "item", serializer );
170 }
171 serializer.endTag( NAMESPACE, "breadcrumbs" );
172 }
173 if ( ( body.getMenus() != null ) && ( body.getMenus().size() > 0 ) )
174 {
175 for ( Iterator iter = body.getMenus().iterator(); iter.hasNext(); )
176 {
177 Menu o = (Menu) iter.next();
178 writeMenu( o, "menu", serializer );
179 }
180 }
181 if ( body.getFooter() != null )
182 {
183 serializer.startTag( NAMESPACE, "footer" ).text( body.getFooter() ).endTag( NAMESPACE, "footer" );
184 }
185 serializer.endTag( NAMESPACE, tagName );
186 }
187
188
189
190
191
192
193
194
195
196 private void writeImage( Image image, String tagName, XmlSerializer serializer )
197 throws java.io.IOException
198 {
199 serializer.startTag( NAMESPACE, tagName );
200 if ( image.getSrc() != null )
201 {
202 serializer.attribute( NAMESPACE, "src", image.getSrc() );
203 }
204 if ( ( image.getPosition() != null ) && !image.getPosition().equals( "left" ) )
205 {
206 serializer.attribute( NAMESPACE, "position", image.getPosition() );
207 }
208 if ( image.getAlt() != null )
209 {
210 serializer.attribute( NAMESPACE, "alt", image.getAlt() );
211 }
212 if ( image.getWidth() != null )
213 {
214 serializer.attribute( NAMESPACE, "width", image.getWidth() );
215 }
216 if ( image.getHeight() != null )
217 {
218 serializer.attribute( NAMESPACE, "height", image.getHeight() );
219 }
220 if ( image.getStyle() != null )
221 {
222 serializer.attribute( NAMESPACE, "style", image.getStyle() );
223 }
224 serializer.endTag( NAMESPACE, tagName );
225 }
226
227
228
229
230
231
232
233
234
235 private void writeLinkItem( LinkItem linkItem, String tagName, XmlSerializer serializer )
236 throws java.io.IOException
237 {
238 serializer.startTag( NAMESPACE, tagName );
239 if ( linkItem.getName() != null )
240 {
241 serializer.attribute( NAMESPACE, "name", linkItem.getName() );
242 }
243 if ( linkItem.getHref() != null )
244 {
245 serializer.attribute( NAMESPACE, "href", linkItem.getHref() );
246 }
247 if ( linkItem.getTarget() != null )
248 {
249 serializer.attribute( NAMESPACE, "target", linkItem.getTarget() );
250 }
251 if ( linkItem.getImage() != null )
252 {
253 writeImage( (Image) linkItem.getImage(), "image", serializer );
254 }
255 serializer.endTag( NAMESPACE, tagName );
256 }
257
258
259
260
261
262
263
264
265
266 private void writeLogo( Logo logo, String tagName, XmlSerializer serializer )
267 throws java.io.IOException
268 {
269 serializer.startTag( NAMESPACE, tagName );
270 if ( logo.getName() != null )
271 {
272 serializer.attribute( NAMESPACE, "name", logo.getName() );
273 }
274 if ( logo.getHref() != null )
275 {
276 serializer.attribute( NAMESPACE, "href", logo.getHref() );
277 }
278 if ( logo.getTarget() != null )
279 {
280 serializer.attribute( NAMESPACE, "target", logo.getTarget() );
281 }
282 if ( logo.getImage() != null )
283 {
284 writeImage( (Image) logo.getImage(), "image", serializer );
285 }
286 serializer.endTag( NAMESPACE, tagName );
287 }
288
289
290
291
292
293
294
295
296
297 private void writeMenu( Menu menu, String tagName, XmlSerializer serializer )
298 throws java.io.IOException
299 {
300 serializer.startTag( NAMESPACE, tagName );
301 if ( menu.getName() != null )
302 {
303 serializer.attribute( NAMESPACE, "name", menu.getName() );
304 }
305 if ( menu.getInherit() != null )
306 {
307 serializer.attribute( NAMESPACE, "inherit", menu.getInherit() );
308 }
309 if ( menu.isInheritAsRef() != false )
310 {
311 serializer.attribute( NAMESPACE, "inheritAsRef", String.valueOf( menu.isInheritAsRef() ) );
312 }
313 if ( menu.getRef() != null )
314 {
315 serializer.attribute( NAMESPACE, "ref", menu.getRef() );
316 }
317 if ( menu.getImage() != null )
318 {
319 writeImage( (Image) menu.getImage(), "image", serializer );
320 }
321 if ( ( menu.getItems() != null ) && ( menu.getItems().size() > 0 ) )
322 {
323 for ( Iterator iter = menu.getItems().iterator(); iter.hasNext(); )
324 {
325 MenuItem o = (MenuItem) iter.next();
326 writeMenuItem( o, "item", serializer );
327 }
328 }
329 serializer.endTag( NAMESPACE, tagName );
330 }
331
332
333
334
335
336
337
338
339
340 private void writeMenuItem( MenuItem menuItem, String tagName, XmlSerializer serializer )
341 throws java.io.IOException
342 {
343 serializer.startTag( NAMESPACE, tagName );
344 if ( menuItem.isCollapse() != false )
345 {
346 serializer.attribute( NAMESPACE, "collapse", String.valueOf( menuItem.isCollapse() ) );
347 }
348 if ( menuItem.getRef() != null )
349 {
350 serializer.attribute( NAMESPACE, "ref", menuItem.getRef() );
351 }
352 if ( menuItem.getName() != null )
353 {
354 serializer.attribute( NAMESPACE, "name", menuItem.getName() );
355 }
356 if ( menuItem.getHref() != null )
357 {
358 serializer.attribute( NAMESPACE, "href", menuItem.getHref() );
359 }
360 if ( menuItem.getTarget() != null )
361 {
362 serializer.attribute( NAMESPACE, "target", menuItem.getTarget() );
363 }
364 if ( ( menuItem.getItems() != null ) && ( menuItem.getItems().size() > 0 ) )
365 {
366 for ( Iterator iter = menuItem.getItems().iterator(); iter.hasNext(); )
367 {
368 MenuItem o = (MenuItem) iter.next();
369 writeMenuItem( o, "item", serializer );
370 }
371 }
372 if ( menuItem.getImage() != null )
373 {
374 writeImage( (Image) menuItem.getImage(), "image", serializer );
375 }
376 serializer.endTag( NAMESPACE, tagName );
377 }
378
379
380
381
382
383
384
385
386
387 private void writePublishDate( PublishDate publishDate, String tagName, XmlSerializer serializer )
388 throws java.io.IOException
389 {
390 serializer.startTag( NAMESPACE, tagName );
391 if ( ( publishDate.getPosition() != null ) && !publishDate.getPosition().equals( "left" ) )
392 {
393 serializer.attribute( NAMESPACE, "position", publishDate.getPosition() );
394 }
395 if ( ( publishDate.getFormat() != null ) && !publishDate.getFormat().equals( "yyyy-MM-dd" ) )
396 {
397 serializer.attribute( NAMESPACE, "format", publishDate.getFormat() );
398 }
399 if ( ( publishDate.getTimezone() != null ) && !publishDate.getTimezone().equals( "Etc/UTC" ) )
400 {
401 serializer.attribute( NAMESPACE, "timezone", publishDate.getTimezone() );
402 }
403 serializer.endTag( NAMESPACE, tagName );
404 }
405
406
407
408
409
410
411
412
413
414 private void writeSiteModel( SiteModel siteModel, String tagName, XmlSerializer serializer )
415 throws java.io.IOException
416 {
417 if ( this.fileComment != null )
418 {
419 serializer.comment(this.fileComment);
420 }
421 serializer.setPrefix( "", "http://maven.apache.org/SITE/2.0.0" );
422 serializer.setPrefix( "xsi", "http://www.w3.org/2001/XMLSchema-instance" );
423 serializer.startTag( NAMESPACE, tagName );
424 serializer.attribute( "", "xsi:schemaLocation", "http://maven.apache.org/SITE/2.0.0 https://maven.apache.org/xsd/site-2.0.0.xsd" );
425 if ( siteModel.getName() != null )
426 {
427 serializer.attribute( NAMESPACE, "name", siteModel.getName() );
428 }
429 if ( ( siteModel.getCombineSelf() != null ) && !siteModel.getCombineSelf().equals( "merge" ) )
430 {
431 serializer.attribute( NAMESPACE, "combine.self", siteModel.getCombineSelf() );
432 }
433 if ( siteModel.getBannerLeft() != null )
434 {
435 writeBanner( (Banner) siteModel.getBannerLeft(), "bannerLeft", serializer );
436 }
437 if ( siteModel.getBannerRight() != null )
438 {
439 writeBanner( (Banner) siteModel.getBannerRight(), "bannerRight", serializer );
440 }
441 if ( siteModel.getPublishDate() != null )
442 {
443 writePublishDate( (PublishDate) siteModel.getPublishDate(), "publishDate", serializer );
444 }
445 if ( siteModel.getVersion() != null )
446 {
447 writeVersion( (Version) siteModel.getVersion(), "version", serializer );
448 }
449 if ( siteModel.getEdit() != null )
450 {
451 serializer.startTag( NAMESPACE, "edit" ).text( siteModel.getEdit() ).endTag( NAMESPACE, "edit" );
452 }
453 if ( ( siteModel.getPoweredBy() != null ) && ( siteModel.getPoweredBy().size() > 0 ) )
454 {
455 serializer.startTag( NAMESPACE, "poweredBy" );
456 for ( Iterator iter = siteModel.getPoweredBy().iterator(); iter.hasNext(); )
457 {
458 Logo o = (Logo) iter.next();
459 writeLogo( o, "logo", serializer );
460 }
461 serializer.endTag( NAMESPACE, "poweredBy" );
462 }
463 if ( siteModel.getSkin() != null )
464 {
465 writeSkin( (Skin) siteModel.getSkin(), "skin", serializer );
466 }
467 if ( siteModel.getBody() != null )
468 {
469 writeBody( (Body) siteModel.getBody(), "body", serializer );
470 }
471 if ( siteModel.getCustom() != null )
472 {
473 ((Xpp3Dom) siteModel.getCustom()).writeToSerializer( NAMESPACE, serializer );
474 }
475 serializer.endTag( NAMESPACE, tagName );
476 }
477
478
479
480
481
482
483
484
485
486 private void writeSkin( Skin skin, String tagName, XmlSerializer serializer )
487 throws java.io.IOException
488 {
489 serializer.startTag( NAMESPACE, tagName );
490 if ( skin.getGroupId() != null )
491 {
492 serializer.startTag( NAMESPACE, "groupId" ).text( skin.getGroupId() ).endTag( NAMESPACE, "groupId" );
493 }
494 if ( skin.getArtifactId() != null )
495 {
496 serializer.startTag( NAMESPACE, "artifactId" ).text( skin.getArtifactId() ).endTag( NAMESPACE, "artifactId" );
497 }
498 if ( skin.getVersion() != null )
499 {
500 serializer.startTag( NAMESPACE, "version" ).text( skin.getVersion() ).endTag( NAMESPACE, "version" );
501 }
502 serializer.endTag( NAMESPACE, tagName );
503 }
504
505
506
507
508
509
510
511
512
513 private void writeVersion( Version version, String tagName, XmlSerializer serializer )
514 throws java.io.IOException
515 {
516 serializer.startTag( NAMESPACE, tagName );
517 if ( ( version.getPosition() != null ) && !version.getPosition().equals( "left" ) )
518 {
519 serializer.attribute( NAMESPACE, "position", version.getPosition() );
520 }
521 serializer.endTag( NAMESPACE, tagName );
522 }
523
524 }