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