1 package org.apache.maven.plugins.site;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.io.IOException;
24
25 import java.util.Iterator;
26 import java.util.List;
27 import java.util.Locale;
28
29 import org.apache.maven.doxia.module.xdoc.XdocSinkFactory;
30 import org.apache.maven.doxia.sink.Sink;
31 import org.apache.maven.doxia.site.decoration.DecorationModel;
32 import org.apache.maven.doxia.site.decoration.Menu;
33 import org.apache.maven.doxia.site.decoration.MenuItem;
34
35 import org.codehaus.plexus.i18n.I18N;
36
37
38
39
40
41
42
43
44 public class SiteMap
45 {
46
47 private String encoding;
48 private I18N i18n;
49
50 public SiteMap( String encoding, I18N i18n )
51 {
52 this.encoding = encoding;
53 this.i18n = i18n;
54 }
55
56
57
58
59
60
61 public I18N getI18n()
62 {
63 return i18n;
64 }
65
66
67
68
69
70
71 public void setI18n( I18N i18n )
72 {
73 this.i18n = i18n;
74 }
75
76
77
78
79
80
81 public String getEncoding()
82 {
83 return encoding;
84 }
85
86
87
88
89
90
91 public void setEncoding( String enc )
92 {
93 this.encoding = enc;
94 }
95
96
97
98
99
100
101
102
103
104
105
106
107 public void generate( DecorationModel model, File targetDir, Locale locale )
108 throws IOException
109 {
110 File outputDir = new File( targetDir, "xdoc" );
111 Sink sink = new XdocSinkFactory().createSink( outputDir, "sitemap.xml", encoding );
112
113 try
114 {
115 extract( model, sink, locale );
116 }
117 finally
118 {
119 sink.close();
120 }
121 }
122
123 private void extract( DecorationModel decoration, Sink sink, Locale locale )
124 {
125 sink.head();
126 sink.title();
127 sink.text( i18n.getString( "site-plugin", locale, "site.sitemap.title" ) );
128 sink.title_();
129 sink.head_();
130 sink.body();
131
132 sink.section1();
133 sink.sectionTitle1();
134 sink.text( i18n.getString( "site-plugin", locale, "site.sitemap.section.title" ) );
135 sink.sectionTitle1_();
136
137 sink.paragraph();
138 sink.text( i18n.getString( "site-plugin", locale, "site.sitemap.description" ) );
139 sink.paragraph_();
140
141 for ( Iterator it = decoration.getMenus().iterator(); it.hasNext(); )
142 {
143 Menu menu = (Menu) it.next();
144
145 sink.section3();
146 sink.sectionTitle3();
147 sink.text( menu.getName() );
148 sink.sectionTitle3_();
149 sink.horizontalRule();
150
151 extractItems( menu.getItems(), sink );
152
153 sink.section3_();
154 }
155
156 sink.section1_();
157 sink.body_();
158 }
159
160 private void extractItems( List items, Sink sink )
161 {
162 if ( items == null || items.isEmpty() )
163 {
164 return;
165 }
166
167 sink.list();
168
169 for ( Iterator it = items.iterator(); it.hasNext(); )
170 {
171 MenuItem item = (MenuItem) it.next();
172
173 sink.listItem();
174 sink.link( item.getHref() );
175 sink.text( item.getName() );
176 sink.link_();
177 sink.listItem_();
178
179 extractItems( item.getItems(), sink );
180 }
181
182 sink.list_();
183 }
184 }