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 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 ((Xpp3Dom) body.getHead()).writeToSerializer( NAMESPACE, serializer );
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 ((Xpp3Dom) body.getFooter()).writeToSerializer( NAMESPACE, serializer );
184 }
185 serializer.endTag( NAMESPACE, tagName );
186 }
187
188
189
190
191
192
193
194
195
196 private void writeDecorationModel( DecorationModel decorationModel, String tagName, XmlSerializer serializer )
197 throws java.io.IOException
198 {
199 serializer.setPrefix( "", "http://maven.apache.org/DECORATION/1.1.0" );
200 serializer.setPrefix( "xsi", "http://www.w3.org/2001/XMLSchema-instance" );
201 serializer.startTag( NAMESPACE, tagName );
202 serializer.attribute( "", "xsi:schemaLocation", "http://maven.apache.org/DECORATION/1.1.0 http://maven.apache.org/xsd/decoration-1.1.0.xsd" );
203 if ( decorationModel.getName() != null )
204 {
205 serializer.attribute( NAMESPACE, "name", decorationModel.getName() );
206 }
207 if ( decorationModel.getBannerLeft() != null )
208 {
209 writeBanner( (Banner) decorationModel.getBannerLeft(), "bannerLeft", serializer );
210 }
211 if ( decorationModel.getBannerRight() != null )
212 {
213 writeBanner( (Banner) decorationModel.getBannerRight(), "bannerRight", serializer );
214 }
215 if ( decorationModel.getGoogleAnalyticsAccountId() != null )
216 {
217 serializer.startTag( NAMESPACE, "googleAnalyticsAccountId" ).text( decorationModel.getGoogleAnalyticsAccountId() ).endTag( NAMESPACE, "googleAnalyticsAccountId" );
218 }
219 if ( decorationModel.getPublishDate() != null )
220 {
221 writePublishDate( (PublishDate) decorationModel.getPublishDate(), "publishDate", serializer );
222 }
223 if ( decorationModel.getVersion() != null )
224 {
225 writeVersion( (Version) decorationModel.getVersion(), "version", serializer );
226 }
227 if ( ( decorationModel.getPoweredBy() != null ) && ( decorationModel.getPoweredBy().size() > 0 ) )
228 {
229 serializer.startTag( NAMESPACE, "poweredBy" );
230 for ( Iterator iter = decorationModel.getPoweredBy().iterator(); iter.hasNext(); )
231 {
232 Logo o = (Logo) iter.next();
233 writeLogo( o, "logo", serializer );
234 }
235 serializer.endTag( NAMESPACE, "poweredBy" );
236 }
237 if ( decorationModel.getSkin() != null )
238 {
239 writeSkin( (Skin) decorationModel.getSkin(), "skin", serializer );
240 }
241 if ( decorationModel.getBody() != null )
242 {
243 writeBody( (Body) decorationModel.getBody(), "body", serializer );
244 }
245 if ( decorationModel.getCustom() != null )
246 {
247 ((Xpp3Dom) decorationModel.getCustom()).writeToSerializer( NAMESPACE, serializer );
248 }
249 serializer.endTag( NAMESPACE, tagName );
250 }
251
252
253
254
255
256
257
258
259
260 private void writeLinkItem( LinkItem linkItem, String tagName, XmlSerializer serializer )
261 throws java.io.IOException
262 {
263 serializer.startTag( NAMESPACE, tagName );
264 if ( linkItem.getName() != null )
265 {
266 serializer.attribute( NAMESPACE, "name", linkItem.getName() );
267 }
268 if ( linkItem.getHref() != null )
269 {
270 serializer.attribute( NAMESPACE, "href", linkItem.getHref() );
271 }
272 if ( linkItem.getImg() != null )
273 {
274 serializer.attribute( NAMESPACE, "img", linkItem.getImg() );
275 }
276 if ( ( linkItem.getPosition() != null ) && !linkItem.getPosition().equals( "left" ) )
277 {
278 serializer.attribute( NAMESPACE, "position", linkItem.getPosition() );
279 }
280 if ( linkItem.getAlt() != null )
281 {
282 serializer.attribute( NAMESPACE, "alt", linkItem.getAlt() );
283 }
284 if ( linkItem.getBorder() != null )
285 {
286 serializer.attribute( NAMESPACE, "border", linkItem.getBorder() );
287 }
288 if ( linkItem.getWidth() != null )
289 {
290 serializer.attribute( NAMESPACE, "width", linkItem.getWidth() );
291 }
292 if ( linkItem.getHeight() != null )
293 {
294 serializer.attribute( NAMESPACE, "height", linkItem.getHeight() );
295 }
296 if ( linkItem.getTarget() != null )
297 {
298 serializer.attribute( NAMESPACE, "target", linkItem.getTarget() );
299 }
300 serializer.endTag( NAMESPACE, tagName );
301 }
302
303
304
305
306
307
308
309
310
311 private void writeLogo( Logo logo, String tagName, XmlSerializer serializer )
312 throws java.io.IOException
313 {
314 serializer.startTag( NAMESPACE, tagName );
315 if ( logo.getName() != null )
316 {
317 serializer.attribute( NAMESPACE, "name", logo.getName() );
318 }
319 if ( logo.getHref() != null )
320 {
321 serializer.attribute( NAMESPACE, "href", logo.getHref() );
322 }
323 if ( logo.getImg() != null )
324 {
325 serializer.attribute( NAMESPACE, "img", logo.getImg() );
326 }
327 if ( ( logo.getPosition() != null ) && !logo.getPosition().equals( "left" ) )
328 {
329 serializer.attribute( NAMESPACE, "position", logo.getPosition() );
330 }
331 if ( logo.getAlt() != null )
332 {
333 serializer.attribute( NAMESPACE, "alt", logo.getAlt() );
334 }
335 if ( logo.getBorder() != null )
336 {
337 serializer.attribute( NAMESPACE, "border", logo.getBorder() );
338 }
339 if ( logo.getWidth() != null )
340 {
341 serializer.attribute( NAMESPACE, "width", logo.getWidth() );
342 }
343 if ( logo.getHeight() != null )
344 {
345 serializer.attribute( NAMESPACE, "height", logo.getHeight() );
346 }
347 if ( logo.getTarget() != null )
348 {
349 serializer.attribute( NAMESPACE, "target", logo.getTarget() );
350 }
351 serializer.endTag( NAMESPACE, tagName );
352 }
353
354
355
356
357
358
359
360
361
362 private void writeMenu( Menu menu, String tagName, XmlSerializer serializer )
363 throws java.io.IOException
364 {
365 serializer.startTag( NAMESPACE, tagName );
366 if ( menu.getName() != null )
367 {
368 serializer.attribute( NAMESPACE, "name", menu.getName() );
369 }
370 if ( menu.getInherit() != null )
371 {
372 serializer.attribute( NAMESPACE, "inherit", menu.getInherit() );
373 }
374 if ( menu.isInheritAsRef() != false )
375 {
376 serializer.attribute( NAMESPACE, "inheritAsRef", String.valueOf( menu.isInheritAsRef() ) );
377 }
378 if ( menu.getRef() != null )
379 {
380 serializer.attribute( NAMESPACE, "ref", menu.getRef() );
381 }
382 if ( menu.getImg() != null )
383 {
384 serializer.attribute( NAMESPACE, "img", menu.getImg() );
385 }
386 if ( menu.getAlt() != null )
387 {
388 serializer.attribute( NAMESPACE, "alt", menu.getAlt() );
389 }
390 if ( ( menu.getPosition() != null ) && !menu.getPosition().equals( "left" ) )
391 {
392 serializer.attribute( NAMESPACE, "position", menu.getPosition() );
393 }
394 if ( menu.getBorder() != null )
395 {
396 serializer.attribute( NAMESPACE, "border", menu.getBorder() );
397 }
398 if ( menu.getWidth() != null )
399 {
400 serializer.attribute( NAMESPACE, "width", menu.getWidth() );
401 }
402 if ( menu.getHeight() != null )
403 {
404 serializer.attribute( NAMESPACE, "height", menu.getHeight() );
405 }
406 if ( ( menu.getItems() != null ) && ( menu.getItems().size() > 0 ) )
407 {
408 for ( Iterator iter = menu.getItems().iterator(); iter.hasNext(); )
409 {
410 MenuItem o = (MenuItem) iter.next();
411 writeMenuItem( o, "item", serializer );
412 }
413 }
414 serializer.endTag( NAMESPACE, tagName );
415 }
416
417
418
419
420
421
422
423
424
425 private void writeMenuItem( MenuItem menuItem, String tagName, XmlSerializer serializer )
426 throws java.io.IOException
427 {
428 serializer.startTag( NAMESPACE, tagName );
429 if ( menuItem.isCollapse() != false )
430 {
431 serializer.attribute( NAMESPACE, "collapse", String.valueOf( menuItem.isCollapse() ) );
432 }
433 if ( menuItem.getRef() != null )
434 {
435 serializer.attribute( NAMESPACE, "ref", menuItem.getRef() );
436 }
437 if ( menuItem.getName() != null )
438 {
439 serializer.attribute( NAMESPACE, "name", menuItem.getName() );
440 }
441 if ( menuItem.getHref() != null )
442 {
443 serializer.attribute( NAMESPACE, "href", menuItem.getHref() );
444 }
445 if ( menuItem.getImg() != null )
446 {
447 serializer.attribute( NAMESPACE, "img", menuItem.getImg() );
448 }
449 if ( ( menuItem.getPosition() != null ) && !menuItem.getPosition().equals( "left" ) )
450 {
451 serializer.attribute( NAMESPACE, "position", menuItem.getPosition() );
452 }
453 if ( menuItem.getAlt() != null )
454 {
455 serializer.attribute( NAMESPACE, "alt", menuItem.getAlt() );
456 }
457 if ( menuItem.getBorder() != null )
458 {
459 serializer.attribute( NAMESPACE, "border", menuItem.getBorder() );
460 }
461 if ( menuItem.getWidth() != null )
462 {
463 serializer.attribute( NAMESPACE, "width", menuItem.getWidth() );
464 }
465 if ( menuItem.getHeight() != null )
466 {
467 serializer.attribute( NAMESPACE, "height", menuItem.getHeight() );
468 }
469 if ( menuItem.getTarget() != null )
470 {
471 serializer.attribute( NAMESPACE, "target", menuItem.getTarget() );
472 }
473 if ( menuItem.getDescription() != null )
474 {
475 serializer.startTag( NAMESPACE, "description" ).text( menuItem.getDescription() ).endTag( NAMESPACE, "description" );
476 }
477 if ( ( menuItem.getItems() != null ) && ( menuItem.getItems().size() > 0 ) )
478 {
479 for ( Iterator iter = menuItem.getItems().iterator(); iter.hasNext(); )
480 {
481 MenuItem o = (MenuItem) iter.next();
482 writeMenuItem( o, "item", serializer );
483 }
484 }
485 serializer.endTag( NAMESPACE, tagName );
486 }
487
488
489
490
491
492
493
494
495
496 private void writePublishDate( PublishDate publishDate, String tagName, XmlSerializer serializer )
497 throws java.io.IOException
498 {
499 serializer.startTag( NAMESPACE, tagName );
500 if ( publishDate.getPosition() != null )
501 {
502 serializer.attribute( NAMESPACE, "position", publishDate.getPosition() );
503 }
504 if ( ( publishDate.getFormat() != null ) && !publishDate.getFormat().equals( "yyyy-MM-dd" ) )
505 {
506 serializer.attribute( NAMESPACE, "format", publishDate.getFormat() );
507 }
508 serializer.endTag( NAMESPACE, tagName );
509 }
510
511
512
513
514
515
516
517
518
519 private void writeSkin( Skin skin, String tagName, XmlSerializer serializer )
520 throws java.io.IOException
521 {
522 serializer.startTag( NAMESPACE, tagName );
523 if ( skin.getGroupId() != null )
524 {
525 serializer.startTag( NAMESPACE, "groupId" ).text( skin.getGroupId() ).endTag( NAMESPACE, "groupId" );
526 }
527 if ( skin.getArtifactId() != null )
528 {
529 serializer.startTag( NAMESPACE, "artifactId" ).text( skin.getArtifactId() ).endTag( NAMESPACE, "artifactId" );
530 }
531 if ( skin.getVersion() != null )
532 {
533 serializer.startTag( NAMESPACE, "version" ).text( skin.getVersion() ).endTag( NAMESPACE, "version" );
534 }
535 serializer.endTag( NAMESPACE, tagName );
536 }
537
538
539
540
541
542
543
544
545
546 private void writeVersion( Version version, String tagName, XmlSerializer serializer )
547 throws java.io.IOException
548 {
549 serializer.startTag( NAMESPACE, tagName );
550 if ( version.getPosition() != null )
551 {
552 serializer.attribute( NAMESPACE, "position", version.getPosition() );
553 }
554 serializer.endTag( NAMESPACE, tagName );
555 }
556
557 }