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