1919 * under the License.
2020 */
2121
22+ import org .apache .maven .artifact .Artifact ;
23+ import org .apache .maven .artifact .repository .ArtifactRepository ;
2224import org .apache .maven .doxia .sink .Sink ;
2325import org .apache .maven .doxia .sink .SinkFactory ;
2426import org .apache .maven .doxia .site .decoration .DecorationModel ;
2729import org .apache .maven .doxia .siterenderer .RenderingContext ;
2830import org .apache .maven .doxia .siterenderer .SiteRenderingContext ;
2931import org .apache .maven .doxia .siterenderer .sink .SiteRendererSink ;
32+ import org .apache .maven .doxia .tools .SiteTool ;
33+ import org .apache .maven .doxia .tools .SiteToolException ;
3034import org .apache .maven .plugin .AbstractMojo ;
3135import org .apache .maven .plugin .MojoExecutionException ;
3236import org .apache .maven .plugins .annotations .Component ;
3539import org .apache .maven .shared .utils .WriterFactory ;
3640import org .codehaus .plexus .util .ReaderFactory ;
3741
42+ import static org .apache .maven .shared .utils .logging .MessageUtils .buffer ;
43+
3844import java .io .File ;
3945import java .io .FileOutputStream ;
4046import java .io .IOException ;
4147import java .io .OutputStreamWriter ;
4248import java .io .Writer ;
4349import java .util .HashMap ;
50+ import java .util .List ;
4451import java .util .Locale ;
4552import java .util .Map ;
4653
@@ -90,6 +97,24 @@ public abstract class AbstractMavenReport
9097 @ Parameter ( property = "outputEncoding" , defaultValue = "${project.reporting.outputEncoding}" , readonly = true )
9198 private String outputEncoding ;
9299
100+ /**
101+ * The local repository.
102+ */
103+ @ Parameter ( defaultValue = "${localRepository}" , readonly = true , required = true )
104+ protected ArtifactRepository localRepository ;
105+
106+ /**
107+ * Remote repositories used for the project.
108+ */
109+ @ Parameter ( defaultValue = "${project.remoteArtifactRepositories}" , readonly = true , required = true )
110+ protected List <ArtifactRepository > remoteRepositories ;
111+
112+ /**
113+ * SiteTool.
114+ */
115+ @ Component
116+ protected SiteTool siteTool ;
117+
93118 /**
94119 * Doxia Site Renderer component.
95120 */
@@ -126,19 +151,17 @@ public void execute()
126151
127152 Locale locale = Locale .getDefault ();
128153
129- SiteRenderingContext siteContext = new SiteRenderingContext ();
130- siteContext .setDecoration ( new DecorationModel () );
131- siteContext .setTemplateName ( "org/apache/maven/doxia/siterenderer/resources/default-site.vm" );
132- siteContext .setLocale ( locale );
133- siteContext .setTemplateProperties ( getTemplateProperties () );
154+ try
155+ {
156+ SiteRenderingContext siteContext = createSiteRenderingContext ( locale );
134157
135- // TODO Replace null with real value
136- RenderingContext context = new RenderingContext ( outputDirectory , filename , null );
158+ // copy resources
159+ getSiteRenderer (). copyResources ( siteContext , outputDirectory );
137160
138- SiteRendererSink sink = new SiteRendererSink ( context );
161+ // TODO Replace null with real value
162+ RenderingContext docRenderingContext = new RenderingContext ( outputDirectory , filename , null );
139163
140- try
141- {
164+ SiteRendererSink sink = new SiteRendererSink ( docRenderingContext );
142165
143166 generate ( sink , null , locale );
144167
@@ -147,12 +170,16 @@ public void execute()
147170 outputDirectory .mkdirs ();
148171
149172 try ( Writer writer =
150- new OutputStreamWriter ( new FileOutputStream ( new File ( outputDirectory , filename ) ),
151- getOutputEncoding () ) )
173+ new OutputStreamWriter ( new FileOutputStream ( new File ( outputDirectory , filename ) ),
174+ getOutputEncoding () ) )
152175 {
176+ // render report
153177 getSiteRenderer ().mergeDocumentIntoSite ( writer , sink , siteContext );
154178 }
155179 }
180+
181+ // copy generated resources also
182+ getSiteRenderer ().copyResources ( siteContext , outputDirectory );
156183 }
157184 catch ( RendererException | IOException | MavenReportException e )
158185 {
@@ -161,14 +188,14 @@ public void execute()
161188 }
162189 }
163190
164- /**
165- * create template properties like done in maven-site-plugin's
166- * <code>AbstractSiteRenderingMojo.createSiteRenderingContext( Locale )</code>
167- * @return properties
168- */
169- private Map <String , Object > getTemplateProperties ()
191+ private SiteRenderingContext createSiteRenderingContext ( Locale locale )
192+ throws MavenReportException , IOException
170193 {
194+ DecorationModel decorationModel = new DecorationModel ();
195+
171196 Map <String , Object > templateProperties = new HashMap <>();
197+ // We tell the skin that we are rendering in standalone mode
198+ templateProperties .put ( "standalone" , Boolean .TRUE );
172199 templateProperties .put ( "project" , getProject () );
173200 templateProperties .put ( "inputEncoding" , getInputEncoding () );
174201 templateProperties .put ( "outputEncoding" , getOutputEncoding () );
@@ -177,7 +204,32 @@ private Map<String, Object> getTemplateProperties()
177204 {
178205 templateProperties .put ( (String ) entry .getKey (), entry .getValue () );
179206 }
180- return templateProperties ;
207+
208+ SiteRenderingContext context ;
209+ try
210+ {
211+ Artifact skinArtifact =
212+ siteTool .getSkinArtifactFromRepository ( localRepository , remoteRepositories , decorationModel );
213+
214+ getLog ().info ( buffer ().a ( "Rendering content with " ).strong ( skinArtifact .getId ()
215+ + " skin" ).a ( '.' ).toString () );
216+
217+ context = siteRenderer .createContextForSkin ( skinArtifact , templateProperties , decorationModel ,
218+ project .getName (), locale );
219+ }
220+ catch ( SiteToolException e )
221+ {
222+ throw new MavenReportException ( "Failed to retrieve skin artifact" , e );
223+ }
224+ catch ( RendererException e )
225+ {
226+ throw new MavenReportException ( "Failed to create context for skin" , e );
227+ }
228+
229+ // Generate static site
230+ context .setRootDirectory ( project .getBasedir () );
231+
232+ return context ;
181233 }
182234
183235 /**
0 commit comments