Use metadata used for project generation for stats

Closes gh-810
This commit is contained in:
Madhura Bhave
2019-02-06 11:39:05 -08:00
parent 8c02e4093c
commit 1bd84fe0ce
8 changed files with 83 additions and 60 deletions
@@ -16,6 +16,8 @@
package io.spring.initializr.generator;
import io.spring.initializr.metadata.InitializrMetadata;
/**
* Event published when an error occurred trying to generate a project.
*
@@ -25,8 +27,9 @@ public class ProjectFailedEvent extends ProjectRequestEvent {
private final Exception cause;
public ProjectFailedEvent(ProjectRequest projectRequest, Exception cause) {
super(projectRequest);
public ProjectFailedEvent(ProjectRequest projectRequest, InitializrMetadata metadata,
Exception cause) {
super(projectRequest, metadata);
this.cause = cause;
}
@@ -16,6 +16,8 @@
package io.spring.initializr.generator;
import io.spring.initializr.metadata.InitializrMetadata;
/**
* Event published when a new project has been generated successfully.
*
@@ -23,8 +25,9 @@ package io.spring.initializr.generator;
*/
public class ProjectGeneratedEvent extends ProjectRequestEvent {
public ProjectGeneratedEvent(ProjectRequest projectRequest) {
super(projectRequest);
public ProjectGeneratedEvent(ProjectRequest projectRequest,
InitializrMetadata metadata) {
super(projectRequest, metadata);
}
}
@@ -133,18 +133,19 @@ public class ProjectGenerator {
* @return the Maven POM
*/
public byte[] generateMavenPom(ProjectRequest request) {
InitializrMetadata metadata = this.metadataProvider.get();
try {
Map<String, Object> model = resolveModel(request);
Map<String, Object> model = resolveModel(request, metadata);
if (!isMavenBuild(request)) {
throw new InvalidProjectRequestException("Could not generate Maven pom, "
+ "invalid project type " + request.getType());
}
byte[] content = doGenerateMavenPom(model);
publishProjectGeneratedEvent(request);
publishProjectGeneratedEvent(request, metadata);
return content;
}
catch (InitializrException ex) {
publishProjectFailedEvent(request, ex);
publishProjectFailedEvent(request, metadata, ex);
throw ex;
}
}
@@ -155,19 +156,20 @@ public class ProjectGenerator {
* @return the gradle build
*/
public byte[] generateGradleBuild(ProjectRequest request) {
InitializrMetadata metadata = this.metadataProvider.get();
try {
Map<String, Object> model = resolveModel(request);
Map<String, Object> model = resolveModel(request, metadata);
if (!isGradleBuild(request)) {
throw new InvalidProjectRequestException(
"Could not generate Gradle build, " + "invalid project type "
+ request.getType());
}
byte[] content = doGenerateGradleBuild(model);
publishProjectGeneratedEvent(request);
publishProjectGeneratedEvent(request, metadata);
return content;
}
catch (InitializrException ex) {
publishProjectFailedEvent(request, ex);
publishProjectFailedEvent(request, metadata, ex);
throw ex;
}
}
@@ -179,14 +181,15 @@ public class ProjectGenerator {
* @return the generated project structure
*/
public File generateProjectStructure(ProjectRequest request) {
InitializrMetadata metadata = this.metadataProvider.get();
try {
Map<String, Object> model = resolveModel(request);
Map<String, Object> model = resolveModel(request, metadata);
File rootDir = generateProjectStructure(request, model);
publishProjectGeneratedEvent(request);
publishProjectGeneratedEvent(request, metadata);
return rootDir;
}
catch (InitializrException ex) {
publishProjectFailedEvent(request, ex);
publishProjectFailedEvent(request, metadata, ex);
throw ex;
}
}
@@ -302,13 +305,15 @@ public class ProjectGenerator {
}
}
private void publishProjectGeneratedEvent(ProjectRequest request) {
ProjectGeneratedEvent event = new ProjectGeneratedEvent(request);
private void publishProjectGeneratedEvent(ProjectRequest request,
InitializrMetadata metadata) {
ProjectGeneratedEvent event = new ProjectGeneratedEvent(request, metadata);
this.eventPublisher.publishEvent(event);
}
private void publishProjectFailedEvent(ProjectRequest request, Exception cause) {
ProjectFailedEvent event = new ProjectFailedEvent(request, cause);
private void publishProjectFailedEvent(ProjectRequest request,
InitializrMetadata metadata, Exception cause) {
ProjectFailedEvent event = new ProjectFailedEvent(request, metadata, cause);
this.eventPublisher.publishEvent(event);
}
@@ -333,12 +338,13 @@ public class ProjectGenerator {
* Resolve the specified {@link ProjectRequest} and return the model to use to
* generate the project.
* @param originalRequest the request to handle
* @param metadata the initializr metadata
* @return a model for that request
*/
protected Map<String, Object> resolveModel(ProjectRequest originalRequest) {
protected Map<String, Object> resolveModel(ProjectRequest originalRequest,
InitializrMetadata metadata) {
Assert.notNull(originalRequest.getBootVersion(), "boot version must not be null");
Map<String, Object> model = new LinkedHashMap<>();
InitializrMetadata metadata = this.metadataProvider.get();
ProjectRequest request = this.requestResolver.resolve(originalRequest, metadata);
@@ -16,6 +16,8 @@
package io.spring.initializr.generator;
import io.spring.initializr.metadata.InitializrMetadata;
/**
* Event published when a {@link ProjectRequest} has been processed.
*
@@ -27,10 +29,14 @@ public abstract class ProjectRequestEvent {
private final ProjectRequest projectRequest;
private final InitializrMetadata metadata;
private final long timestamp;
protected ProjectRequestEvent(ProjectRequest projectRequest) {
protected ProjectRequestEvent(ProjectRequest projectRequest,
InitializrMetadata metadata) {
this.projectRequest = projectRequest;
this.metadata = metadata;
this.timestamp = System.currentTimeMillis();
}
@@ -50,4 +56,12 @@ public abstract class ProjectRequestEvent {
return this.timestamp;
}
/**
* Return the metadata that was used to generate the project.
* @return the metadata
*/
public InitializrMetadata getMetadata() {
return this.metadata;
}
}