@Test void mergeMetadata() { InitializrMetadata metadata = InitializrMetadataBuilder.create() .withInitializrMetadata( new ClassPathResource("metadata/config/test-min.json")) .build(); assertThat(metadata.getConfiguration().getEnv().isForceSsl()).isEqualTo(true); assertThat(metadata.getDependencies().getContent()).hasSize(1); Dependency dependency = metadata.getDependencies().get("test"); assertThat(dependency).isNotNull(); assertThat(dependency.getGroupId()).isEqualTo("org.springframework.boot"); assertThat(metadata.getTypes().getContent()).hasSize(1); assertThat(metadata.getBootVersions().getContent()).hasSize(2); assertThat(metadata.getPackagings().getContent()).hasSize(2); assertThat(metadata.getJavaVersions().getContent()).hasSize(1); assertThat(metadata.getLanguages().getContent()).hasSize(3); assertThat(metadata.getName().getContent()).isEqualTo("metadata-merge"); assertThat(metadata.getDescription().getContent()) .isEqualTo("Demo project for metadata merge"); assertThat(metadata.getGroupId().getContent()).isEqualTo("org.acme"); assertThat(metadata.getArtifactId().getContent()).isEqualTo("metadata"); assertThat(metadata.getVersion().getContent()).isEqualTo("1.0.0-SNAPSHOT"); assertThat(metadata.getPackageName().getContent()).isEqualTo("org.acme.demo"); }
@Override public String write(InitializrMetadata metadata, String appUrl) { ObjectNode delegate = nodeFactory.objectNode(); links(delegate, metadata.getTypes().getContent(), appUrl); dependencies(delegate, metadata.getDependencies()); type(delegate, metadata.getTypes()); singleSelect(delegate, metadata.getPackagings()); singleSelect(delegate, metadata.getJavaVersions()); singleSelect(delegate, metadata.getLanguages()); singleSelect(delegate, metadata.getBootVersions()); text(delegate, metadata.getGroupId()); text(delegate, metadata.getArtifactId()); text(delegate, metadata.getVersion()); text(delegate, metadata.getName()); text(delegate, metadata.getDescription()); text(delegate, metadata.getPackageName()); return delegate.toString(); }
/** * Apply defaults to capabilities that have no value. * @param metadata the initializr metadata */ protected void applyDefaults(InitializrMetadata metadata) { if (!StringUtils.hasText(metadata.getName().getContent())) { metadata.getName().setContent("demo"); } if (!StringUtils.hasText(metadata.getDescription().getContent())) { metadata.getDescription().setContent("Demo project for Spring Boot"); } if (!StringUtils.hasText(metadata.getGroupId().getContent())) { metadata.getGroupId().setContent("com.example"); } if (!StringUtils.hasText(metadata.getVersion().getContent())) { metadata.getVersion().setContent("0.0.1-SNAPSHOT"); } }
protected Map<String, Object> initializeCommandLineModel(InitializrMetadata metadata, String serviceUrl) { Map<String, Object> model = new LinkedHashMap<>(); model.put("logo", LOGO); model.put("serviceUrl", serviceUrl); model.put("dependencies", generateDependencyTable(metadata)); model.put("types", generateTypeTable(metadata, "Rel", false)); Map<String, Object> defaults = metadata.defaults(); defaults.put("applicationName", metadata.getConfiguration() .generateApplicationName(metadata.getName().getContent())); defaults.put("baseDir", "no base dir"); defaults.put("dependencies", "none"); Map<String, Object> parametersDescription = buildParametersDescription(metadata); String[][] parameterTable = new String[defaults.size() + 1][]; parameterTable[0] = new String[] { "Parameter", "Description", "Default value" }; int i = 1; for (String id : defaults.keySet().stream().sorted() .collect(Collectors.toList())) { String[] data = new String[3]; data[0] = id; data[1] = (String) parametersDescription.get(id); data[2] = (String) defaults.get(id); parameterTable[i++] = data; } model.put("parameters", TableGenerator.generate(parameterTable)); return model; }
@Test void initializeRemoteConfig() throws Exception { InitializrMetadata localMetadata = this.metadataProvider.get(); InitializrMetadata metadata = InitializrMetadataBuilder.create() .withInitializrMetadata(new UrlResource(createUrl("/metadata/config"))) .build(); // Basic assertions assertThat(metadata.getDependencies().getContent()) .hasSameSizeAs(localMetadata.getDependencies().getContent()); assertThat(metadata.getTypes().getContent()) .hasSameSizeAs(localMetadata.getTypes().getContent()); assertThat(metadata.getBootVersions().getContent()) .hasSameSizeAs(localMetadata.getBootVersions().getContent()); assertThat(metadata.getPackagings().getContent()) .hasSameSizeAs(localMetadata.getPackagings().getContent()); assertThat(metadata.getJavaVersions().getContent()) .hasSameSizeAs(localMetadata.getJavaVersions().getContent()); assertThat(metadata.getLanguages().getContent()) .hasSameSizeAs(localMetadata.getLanguages().getContent()); }
List<String> depIds = (!getStyle().isEmpty() ? getStyle() : getDependencies()); String actualBootVersion = (getBootVersion() != null) ? getBootVersion() : metadata.getBootVersions().getDefault().getId(); Version requestedVersion = Version.parse(actualBootVersion); this.resolvedDependencies = depIds.stream().map((it) -> { Dependency dependency = metadata.getDependencies().get(it); if (dependency == null) { throw new InvalidProjectRequestException( String repositoryId = it.getRepository(); this.repositories.computeIfAbsent(repositoryId, (s) -> metadata .getConfiguration().getEnv().getRepositories().get(s)); Type type = metadata.getTypes().get(getType()); if (type == null) { throw new InvalidProjectRequestException( DefaultMetadataElement packaging = metadata.getPackagings() .get(getPackaging()); if (packaging == null) { DefaultMetadataElement language = metadata.getLanguages().get(getLanguage()); if (language == null) { throw new InvalidProjectRequestException("Unknown language '" metadata.getConfiguration().generateApplicationName(getName())); setPackageName(metadata.getConfiguration().cleanPackageName(getPackageName(), metadata.getPackageName().getContent()));
@Test void initializeSetsMetadataDefaults() { ProjectRequest request = initProjectRequest(); assertThat(request.getName()).isEqualTo(this.metadata.getName().getContent()); assertThat(request.getType()) .isEqualTo(this.metadata.getTypes().getDefault().getId()); assertThat(request.getDescription()) .isEqualTo(this.metadata.getDescription().getContent()); assertThat(request.getGroupId()) .isEqualTo(this.metadata.getGroupId().getContent()); assertThat(request.getArtifactId()) .isEqualTo(this.metadata.getArtifactId().getContent()); assertThat(request.getVersion()) .isEqualTo(this.metadata.getVersion().getContent()); assertThat(request.getBootVersion()) .isEqualTo(this.metadata.getBootVersions().getDefault().getId()); assertThat(request.getPackaging()) .isEqualTo(this.metadata.getPackagings().getDefault().getId()); }
private void resolveBom(InitializrMetadata metadata, String bomId, Version requestedVersion) { if (!this.boms.containsKey(bomId)) { BillOfMaterials bom = metadata.getConfiguration().getEnv().getBoms() .get(bomId).resolve(requestedVersion); bom.getAdditionalBoms() .forEach((id) -> resolveBom(metadata, id, requestedVersion)); this.boms.put(bomId, bom); } }
@Test void mergeConfig() { InitializrProperties config = load( new ClassPathResource("application-test-default.yml")); InitializrProperties customDefaultsConfig = load( new ClassPathResource("application-test-custom-defaults.yml")); InitializrMetadata metadata = InitializrMetadataBuilder .fromInitializrProperties(config) .withInitializrProperties(customDefaultsConfig).build(); assertDefaultConfig(metadata); assertThat(metadata.getGroupId().getContent()).isEqualTo("org.foo"); assertThat(metadata.getArtifactId().getContent()).isEqualTo("foo-bar"); assertThat(metadata.getVersion().getContent()).isEqualTo("1.2.4-SNAPSHOT"); assertThat(metadata.getName().getContent()).isEqualTo("FooBar"); assertThat(metadata.getDescription().getContent()).isEqualTo("FooBar Project"); assertThat(metadata.getPackageName().getContent()).isEqualTo("org.foo.demo"); }
metadata.getConfiguration().getEnv().getBoms().put("foo-bom", bom); Kotlin kotlin = metadata.getConfiguration().getEnv().getKotlin(); kotlin.setDefaultVersion("1.3"); kotlin.getMappings() kotlin.getMappings() .add(createKotlinVersionMapping("1.3.x.BUILD-SNAPSHOT", "1.2")); metadata.validate(); metadata.updateSpringBootVersions(bootVersions); assertThat(metadata.getConfiguration().getEnv().getBoms().get("foo-bom") .resolve(Version.parse("1.3.6.RELEASE")).getVersion()).isEqualTo("1.0.0"); assertThat(metadata.getConfiguration().getEnv().getBoms().get("foo-bom") .resolve(Version.parse("1.3.7.BUILD-SNAPSHOT")).getVersion()) .isEqualTo("1.1.0-BUILD-SNAPSHOT"); assertThat(metadata.getDependencies().get("bar") .resolve(Version.parse("1.3.6.RELEASE")).getVersion()) .isEqualTo("0.1.0.RELEASE"); assertThat(metadata.getDependencies().get("bar") .resolve(Version.parse("1.3.7.BUILD-SNAPSHOT")).getVersion()) .isEqualTo("0.2.0.RELEASE"); assertThat(metadata.getConfiguration().getEnv().getKotlin() .resolveKotlinVersion(Version.parse("1.3.7.BUILD-SNAPSHOT"))) .isEqualTo("1.2");
@Override public void contribute(Info.Builder builder) { Map<String, Object> details = new LinkedHashMap<>(); this.metadataProvider.get().getDependencies().getAll().forEach((dependency) -> { if (dependency.getBom() == null) { contribute(details, dependency); } }); if (!details.isEmpty()) { builder.withDetail("dependency-ranges", details); } }
/** * Render the home page with the specified template. * @param model the model data */ protected void renderHome(Map<String, Object> model) { InitializrMetadata metadata = this.metadataProvider.get(); model.put("serviceUrl", generateAppUrl()); BeanWrapperImpl wrapper = new BeanWrapperImpl(metadata); for (PropertyDescriptor descriptor : wrapper.getPropertyDescriptors()) { if ("types".equals(descriptor.getName())) { model.put("types", removeTypes(metadata.getTypes())); } else { model.put(descriptor.getName(), wrapper.getPropertyValue(descriptor.getName())); } } // Google analytics support model.put("trackingCode", metadata.getConfiguration().getEnv().getGoogleAnalyticsTrackingCode()); }
@Test void defaultBootVersionIsAlwaysSet() { InitializrMetadata metadata = new InitializrMetadataTestBuilder() .addBootVersion("0.0.9.RELEASE", true) .addBootVersion("0.0.8.RELEASE", false).build(); assertThat(metadata.getBootVersions().getDefault().getId()) .isEqualTo("0.0.9.RELEASE"); DefaultInitializrMetadataProvider provider = new DefaultInitializrMetadataProvider( metadata, objectMapper, this.restTemplate); expectJson(metadata.getConfiguration().getEnv().getSpringBootMetadataUrl(), "metadata/sagan/spring-boot-no-default.json"); InitializrMetadata updatedMetadata = provider.get(); assertThat(updatedMetadata.getBootVersions()).isNotNull(); List<DefaultMetadataElement> updatedBootVersions = updatedMetadata .getBootVersions().getContent(); assertThat(updatedBootVersions).hasSize(4); assertBootVersion(updatedBootVersions.get(0), "1.3.1 (SNAPSHOT)", true); assertBootVersion(updatedBootVersions.get(1), "1.3.0", false); assertBootVersion(updatedBootVersions.get(2), "1.2.6 (SNAPSHOT)", false); assertBootVersion(updatedBootVersions.get(3), "1.2.5", false); }
private static void assertDefaultConfig(InitializrMetadata metadata) { assertThat(metadata).isNotNull(); assertThat(metadata.getDependencies().getAll()).hasSize(8); assertThat(metadata.getDependencies().getContent()).hasSize(2); assertThat(metadata.getTypes().getContent()).hasSize(4); }
public DependencyMetadata get(InitializrMetadata metadata, Version bootVersion) { Map<String, Dependency> dependencies = new LinkedHashMap<>(); for (Dependency dependency : metadata.getDependencies().getAll()) { if (dependency.match(bootVersion)) { dependencies.put(dependency.getId(), dependency.resolve(bootVersion)); for (Dependency dependency : dependencies.values()) { if (dependency.getRepository() != null) { repositories.put(dependency.getRepository(), metadata.getConfiguration() .getEnv().getRepositories().get(dependency.getRepository())); for (Dependency dependency : dependencies.values()) { if (dependency.getBom() != null) { boms.put(dependency.getBom(), metadata.getConfiguration().getEnv() .getBoms().get(dependency.getBom()).resolve(bootVersion)); for (String id : bom.getRepositories()) { repositories.put(id, metadata.getConfiguration().getEnv().getRepositories().get(id));
@Test void stripInvalidCharsFromPackage() { InitializrMetadata metadata = initializeMetadata(); metadata.getGroupId().setContent("org.acme"); metadata.getArtifactId().setContent("2foo.bar"); assertThat(metadata.getPackageName().getContent()).isEqualTo("org.acme.foo.bar"); metadata = initializeMetadata(); metadata.getGroupId().setContent("org.ac-me"); metadata.getArtifactId().setContent("foo-bar"); assertThat(metadata.getPackageName().getContent()).isEqualTo("org.acme.foobar"); }
protected String generateTypeTable(InitializrMetadata metadata, String linkHeader, boolean addTags) { String[][] typeTable = new String[metadata.getTypes().getContent().size() + 1][]; if (addTags) { typeTable[0] = new String[] { linkHeader, "Description", "Tags" }; } else { typeTable[0] = new String[] { linkHeader, "Description" }; } int i = 1; for (Type type : metadata.getTypes().getContent().stream() .sorted(Comparator.comparing(MetadataElement::getId)) .collect(Collectors.toList())) { String[] data = new String[typeTable[0].length]; data[0] = (type.isDefault() ? type.getId() + " *" : type.getId()); data[1] = (type.getDescription() != null) ? type.getDescription() : type.getName(); if (addTags) { data[2] = buildTagRepresentation(type); } typeTable[i++] = data; } return TableGenerator.generate(typeTable); }
@Test void initializeGroupIdAndArtifactId() { this.metadata = InitializrMetadataBuilder.create().build(); this.metadata.getGroupId().setContent("org.acme"); this.metadata.getArtifactId().setContent("my-project"); ProjectRequest request = initProjectRequest(); assertThat(request.getGroupId()).isEqualTo("org.acme"); assertThat(request.getArtifactId()).isEqualTo("my-project"); }
Maven maven = metadata.getConfiguration().getEnv().getMaven(); ParentPom parentPom = maven.resolveParentPom(request.getBootVersion()); if (parentPom.isIncludeSpringBootBom() && !request.getBoms().containsKey("spring-boot")) { request.getBoms().put("spring-boot", metadata.createSpringBootBom( request.getBootVersion(), "spring-boot.version")); model.put("dependencyManagementPluginVersion", metadata.getConfiguration() .getEnv().getGradle().getDependencyManagementPluginVersion()); if ("kotlin".equals(request.getLanguage())) { model.put("kotlinVersion", metadata.getConfiguration().getEnv().getKotlin() .resolveKotlinVersion(bootVersion)); model.put("kotlin", true);
private ResponseEntity<String> dependenciesFor(InitializrMetadataVersion version, String bootVersion) { InitializrMetadata metadata = this.metadataProvider.get(); Version v = (bootVersion != null) ? Version.parse(bootVersion) : Version.parse(metadata.getBootVersions().getDefault().getId()); DependencyMetadata dependencyMetadata = this.dependencyMetadataProvider .get(metadata, v); String content = new DependencyMetadataV21JsonMapper().write(dependencyMetadata); return ResponseEntity.ok().contentType(version.getMediaType()) .eTag(createUniqueId(content)) .cacheControl(CacheControl.maxAge(7, TimeUnit.DAYS)).body(content); }