mirror of
https://gitee.com/dcren/initializr.git
synced 2025-12-26 22:25:51 +08:00
Alias style to dependencies
Style is the only parameter that deviates from the default names in the metadata. As 'dependencies' is the name used in the metadata, it can be used as an alias of style. This simplifies the HAL-generated URLs Fixes gh-50
This commit is contained in:
@@ -34,6 +34,7 @@ class InitializrMetadataJsonMapper {
|
||||
|
||||
InitializrMetadataJsonMapper() {
|
||||
this.templateVariables = new TemplateVariables(
|
||||
new TemplateVariable('dependencies', TemplateVariable.VariableType.REQUEST_PARAM),
|
||||
new TemplateVariable('type', TemplateVariable.VariableType.REQUEST_PARAM),
|
||||
new TemplateVariable('packaging', TemplateVariable.VariableType.REQUEST_PARAM),
|
||||
new TemplateVariable('javaVersion', TemplateVariable.VariableType.REQUEST_PARAM),
|
||||
@@ -85,7 +86,7 @@ class InitializrMetadataJsonMapper {
|
||||
|
||||
private generateTemplatedUri(appUrl, action) {
|
||||
String uri = appUrl != null ? appUrl + action : action
|
||||
UriTemplate uriTemplate = new UriTemplate(uri + '?style={dependencies}', this.templateVariables)
|
||||
UriTemplate uriTemplate = new UriTemplate(uri, this.templateVariables)
|
||||
uriTemplate.toString()
|
||||
}
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ class ProjectGenerationMetricsListener implements ProjectGenerationListener {
|
||||
}
|
||||
|
||||
protected void handleDependencies(ProjectRequest request) {
|
||||
request.dependencies.each {
|
||||
request.resolvedDependencies.each {
|
||||
def id = sanitize(it.id)
|
||||
increment(key("dependency.$id"))
|
||||
}
|
||||
|
||||
@@ -158,7 +158,7 @@ class ProjectGenerator {
|
||||
request.resolve(metadata)
|
||||
|
||||
// request resolved so we can log what has been requested
|
||||
def dependencies = request.dependencies.collect { it.id }
|
||||
def dependencies = request.resolvedDependencies.collect { it.id }
|
||||
log.info("Processing request{type=$request.type, dependencies=$dependencies}")
|
||||
|
||||
request.properties.each { model[it.key] = it.value }
|
||||
|
||||
@@ -28,8 +28,8 @@ import groovy.util.logging.Slf4j
|
||||
@Slf4j
|
||||
class ProjectRequest {
|
||||
|
||||
def style = []
|
||||
|
||||
List<String> style = []
|
||||
List<String> dependencies = []
|
||||
String name
|
||||
String type
|
||||
String description
|
||||
@@ -42,7 +42,9 @@ class ProjectRequest {
|
||||
String packageName
|
||||
String javaVersion
|
||||
|
||||
def dependencies = []
|
||||
// Resolved dependencies based on the ids provided by either "style" or "dependencies"
|
||||
List<InitializrMetadata.Dependency> resolvedDependencies
|
||||
|
||||
def facets = []
|
||||
def build
|
||||
|
||||
@@ -50,11 +52,8 @@ class ProjectRequest {
|
||||
* Resolve this instance against the specified {@link InitializrMetadata}
|
||||
*/
|
||||
void resolve(InitializrMetadata metadata) {
|
||||
style = style ?: []
|
||||
if (!style.class.isArray() && !(style instanceof Collection)) {
|
||||
style = [style]
|
||||
}
|
||||
dependencies = style.collect {
|
||||
List<String> depIds = style ? style : dependencies
|
||||
resolvedDependencies = depIds.collect {
|
||||
def dependency = metadata.getDependency(it)
|
||||
if (dependency == null) {
|
||||
if (it.contains(':')) {
|
||||
@@ -66,7 +65,7 @@ class ProjectRequest {
|
||||
}
|
||||
dependency
|
||||
}
|
||||
dependencies.each {
|
||||
resolvedDependencies.each {
|
||||
it.facets.each {
|
||||
if (!facets.contains(it)) {
|
||||
facets.add(it)
|
||||
@@ -93,10 +92,10 @@ class ProjectRequest {
|
||||
protected afterResolution(InitializrMetadata metadata) {
|
||||
if (packaging == 'war' && !hasWebFacet()) {
|
||||
// Need to be able to bootstrap the web app
|
||||
dependencies << metadata.getDependency('web')
|
||||
resolvedDependencies << metadata.getDependency('web')
|
||||
facets << 'web'
|
||||
}
|
||||
if (dependencies.isEmpty()) {
|
||||
if (resolvedDependencies.isEmpty()) {
|
||||
addDefaultDependency()
|
||||
}
|
||||
}
|
||||
@@ -109,7 +108,7 @@ class ProjectRequest {
|
||||
def root = new InitializrMetadata.Dependency()
|
||||
root.id = 'root_starter'
|
||||
root.asSpringBootStarter('')
|
||||
dependencies << root
|
||||
resolvedDependencies << root
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ repositories {
|
||||
providedRuntime
|
||||
}
|
||||
<% } %>
|
||||
dependencies {<% dependencies.each { %>
|
||||
dependencies {<% resolvedDependencies.each { %>
|
||||
compile("${it.groupId}:${it.artifactId}")<% } %><% if (language=='groovy') { %>
|
||||
compile("org.codehaus.groovy:groovy")<% } %><% if (packaging=='war') { %>
|
||||
providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")<% } %>
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
<relativePath/> <!-- lookup parent from repository -->
|
||||
</parent>
|
||||
|
||||
<dependencies><% dependencies.each { %>
|
||||
<dependencies><% resolvedDependencies.each { %>
|
||||
<dependency>
|
||||
<groupId>${it.groupId}</groupId>
|
||||
<artifactId>${it.artifactId}</artifactId><% if (it.version != null) { %>
|
||||
|
||||
@@ -36,7 +36,7 @@ class InitializrMetadataJsonMapperTests {
|
||||
.addDependencyGroup('foo', 'one', 'two').validateAndGet()
|
||||
def json = jsonMapper.write(metadata, null)
|
||||
def result = slurper.parseText(json)
|
||||
assertEquals '/foo.zip?style={dependencies}{&type,packaging,javaVersion,language,bootVersion,' +
|
||||
assertEquals '/foo.zip{?dependencies,type,packaging,javaVersion,language,bootVersion,' +
|
||||
'groupId,artifactId,version,name,description,packageName}', result._links.foo.href
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@ class InitializrMetadataJsonMapperTests {
|
||||
.addDependencyGroup('foo', 'one', 'two').validateAndGet()
|
||||
def json = jsonMapper.write(metadata, 'http://server:8080/my-app')
|
||||
def result = slurper.parseText(json)
|
||||
assertEquals 'http://server:8080/my-app/foo.zip?style={dependencies}{&type,packaging,javaVersion,' +
|
||||
assertEquals 'http://server:8080/my-app/foo.zip{?dependencies,type,packaging,javaVersion,' +
|
||||
'language,bootVersion,groupId,artifactId,version,name,description,packageName}',
|
||||
result._links.foo.href
|
||||
}
|
||||
|
||||
@@ -42,8 +42,22 @@ class ProjectRequestTests {
|
||||
request.style << 'web' << 'spring-data'
|
||||
request.resolve(metadata)
|
||||
assertEquals 'Build type not detected', 'maven', request.build
|
||||
assertBootStarter(request.dependencies[0], 'web')
|
||||
assertBootStarter(request.dependencies[1], 'spring-data')
|
||||
assertBootStarter(request.resolvedDependencies[0], 'web')
|
||||
assertBootStarter(request.resolvedDependencies[1], 'spring-data')
|
||||
}
|
||||
|
||||
@Test
|
||||
void resolveWithDependencies() {
|
||||
def request = new ProjectRequest()
|
||||
def metadata = InitializrMetadataBuilder.withDefaults()
|
||||
.addDependencyGroup('code', 'web', 'security', 'spring-data').validateAndGet()
|
||||
|
||||
request.type = 'maven-project'
|
||||
request.dependencies << 'web' << 'spring-data'
|
||||
request.resolve(metadata)
|
||||
assertEquals 'Build type not detected', 'maven', request.build
|
||||
assertBootStarter(request.resolvedDependencies[0], 'web')
|
||||
assertBootStarter(request.resolvedDependencies[1], 'spring-data')
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -53,7 +67,7 @@ class ProjectRequestTests {
|
||||
.addDependencyGroup('code', createDependency('org.foo', 'acme', '1.2.0')).validateAndGet()
|
||||
request.style << 'org.foo:acme'
|
||||
request.resolve(metadata)
|
||||
assertDependency(request.dependencies[0], 'org.foo', 'acme', '1.2.0')
|
||||
assertDependency(request.resolvedDependencies[0], 'org.foo', 'acme', '1.2.0')
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -64,8 +78,8 @@ class ProjectRequestTests {
|
||||
|
||||
request.style << 'org.foo:bar' << 'foo-bar'
|
||||
request.resolve(metadata)
|
||||
assertDependency(request.dependencies[0], 'org.foo', 'bar', null)
|
||||
assertBootStarter(request.dependencies[1], 'foo-bar')
|
||||
assertDependency(request.resolvedDependencies[0], 'org.foo', 'bar', null)
|
||||
assertBootStarter(request.resolvedDependencies[1], 'foo-bar')
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -76,6 +76,26 @@ class MainControllerIntegrationTests extends AbstractInitializrControllerIntegra
|
||||
.hasSpringBootStarterDependency('test')
|
||||
}
|
||||
|
||||
@Test
|
||||
void dependenciesIsAnAliasOfStyle() {
|
||||
downloadZip('/starter.zip?dependencies=web&dependencies=jpa').isJavaProject().isMavenProject()
|
||||
.hasStaticAndTemplatesResources(true).pomAssert()
|
||||
.hasDependenciesCount(3)
|
||||
.hasSpringBootStarterDependency('web')
|
||||
.hasSpringBootStarterDependency('data-jpa') // alias jpa -> data-jpa
|
||||
.hasSpringBootStarterDependency('test')
|
||||
}
|
||||
|
||||
@Test
|
||||
void dependenciesIsAnAliasOfStyleCommaSeparated() {
|
||||
downloadZip('/starter.zip?dependencies=web,jpa').isJavaProject().isMavenProject()
|
||||
.hasStaticAndTemplatesResources(true).pomAssert()
|
||||
.hasDependenciesCount(3)
|
||||
.hasSpringBootStarterDependency('web')
|
||||
.hasSpringBootStarterDependency('data-jpa') // alias jpa -> data-jpa
|
||||
.hasSpringBootStarterDependency('test')
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleWarProject() {
|
||||
downloadZip('/starter.zip?style=web&style=security&packaging=war&type=gradle.zip')
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
{
|
||||
"_links": {
|
||||
"maven-build": {
|
||||
"href": "http://localhost:@port@/pom.xml?style={dependencies}{&type,packaging,javaVersion,language,bootVersion,groupId,artifactId,version,name,description,packageName}",
|
||||
"href": "http://localhost:@port@/pom.xml{?dependencies,type,packaging,javaVersion,language,bootVersion,groupId,artifactId,version,name,description,packageName}",
|
||||
"templated": true
|
||||
},
|
||||
"maven-project": {
|
||||
"href": "http://localhost:@port@/starter.zip?style={dependencies}{&type,packaging,javaVersion,language,bootVersion,groupId,artifactId,version,name,description,packageName}",
|
||||
"href": "http://localhost:@port@/starter.zip{?dependencies,type,packaging,javaVersion,language,bootVersion,groupId,artifactId,version,name,description,packageName}",
|
||||
"templated": true
|
||||
},
|
||||
"gradle-build": {
|
||||
"href": "http://localhost:@port@/build.gradle?style={dependencies}{&type,packaging,javaVersion,language,bootVersion,groupId,artifactId,version,name,description,packageName}",
|
||||
"href": "http://localhost:@port@/build.gradle{?dependencies,type,packaging,javaVersion,language,bootVersion,groupId,artifactId,version,name,description,packageName}",
|
||||
"templated": true
|
||||
},
|
||||
"gradle-project": {
|
||||
"href": "http://localhost:@port@/starter.zip?style={dependencies}{&type,packaging,javaVersion,language,bootVersion,groupId,artifactId,version,name,description,packageName}",
|
||||
"href": "http://localhost:@port@/starter.zip{?dependencies,type,packaging,javaVersion,language,bootVersion,groupId,artifactId,version,name,description,packageName}",
|
||||
"templated": true
|
||||
}
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user