Skip to content

Commit ecf1b03

Browse files
committed
[MSHARED-1099] Render with a skin when report is run in standalone mode
1 parent df5e068 commit ecf1b03

File tree

2 files changed

+81
-19
lines changed

2 files changed

+81
-19
lines changed

pom.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,11 @@
8989
<artifactId>maven-core</artifactId>
9090
<version>${mavenVersion}</version>
9191
</dependency>
92+
<dependency>
93+
<groupId>org.apache.maven</groupId>
94+
<artifactId>maven-artifact</artifactId>
95+
<version>${mavenVersion}</version>
96+
</dependency>
9297
<dependency>
9398
<groupId>org.apache.maven</groupId>
9499
<artifactId>maven-plugin-api</artifactId>
@@ -116,6 +121,11 @@
116121
<artifactId>doxia-core</artifactId>
117122
<version>${doxiaVersion}</version>
118123
</dependency>
124+
<dependency>
125+
<groupId>org.apache.maven.doxia</groupId>
126+
<artifactId>doxia-integration-tools</artifactId>
127+
<version>${doxiaSitetoolsVersion}</version>
128+
</dependency>
119129
<dependency>
120130
<groupId>org.apache.maven.doxia</groupId>
121131
<artifactId>doxia-site-renderer</artifactId>

src/main/java/org/apache/maven/reporting/AbstractMavenReport.java

Lines changed: 71 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
* under the License.
2020
*/
2121

22+
import org.apache.maven.artifact.Artifact;
23+
import org.apache.maven.artifact.repository.ArtifactRepository;
2224
import org.apache.maven.doxia.sink.Sink;
2325
import org.apache.maven.doxia.sink.SinkFactory;
2426
import org.apache.maven.doxia.site.decoration.DecorationModel;
@@ -27,6 +29,8 @@
2729
import org.apache.maven.doxia.siterenderer.RenderingContext;
2830
import org.apache.maven.doxia.siterenderer.SiteRenderingContext;
2931
import org.apache.maven.doxia.siterenderer.sink.SiteRendererSink;
32+
import org.apache.maven.doxia.tools.SiteTool;
33+
import org.apache.maven.doxia.tools.SiteToolException;
3034
import org.apache.maven.plugin.AbstractMojo;
3135
import org.apache.maven.plugin.MojoExecutionException;
3236
import org.apache.maven.plugins.annotations.Component;
@@ -35,12 +39,15 @@
3539
import org.apache.maven.shared.utils.WriterFactory;
3640
import org.codehaus.plexus.util.ReaderFactory;
3741

42+
import static org.apache.maven.shared.utils.logging.MessageUtils.buffer;
43+
3844
import java.io.File;
3945
import java.io.FileOutputStream;
4046
import java.io.IOException;
4147
import java.io.OutputStreamWriter;
4248
import java.io.Writer;
4349
import java.util.HashMap;
50+
import java.util.List;
4451
import java.util.Locale;
4552
import 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

Comments
 (0)