diff --git a/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/Dependency.java b/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/Dependency.java index f136a146..aa735236 100644 --- a/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/Dependency.java +++ b/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/Dependency.java @@ -58,6 +58,11 @@ public class Dependency { return new Builder(groupId, artifactId); } + public static Builder from(Dependency dependency) { + return new Builder(dependency.getGroupId(), dependency.getArtifactId()) + .initialize(dependency); + } + /** * The group ID of the dependency. * @return the group ID @@ -163,11 +168,23 @@ public class Dependency { return self(); } + public B exclusions(Set exclusions) { + this.exclusions = (exclusions != null) ? new LinkedHashSet<>(exclusions) + : new LinkedHashSet<>(); + return self(); + } + @SuppressWarnings("unchecked") protected B self() { return (B) this; } + protected B initialize(Dependency dependency) { + version(dependency.getVersion()).scope(dependency.getScope()) + .type(dependency.getType()).exclusions(dependency.getExclusions()); + return self(); + } + public Dependency build() { return new Dependency(this); } diff --git a/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/gradle/GradleDependency.java b/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/gradle/GradleDependency.java index b3eac8de..059d22c9 100644 --- a/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/gradle/GradleDependency.java +++ b/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/gradle/GradleDependency.java @@ -36,6 +36,11 @@ public class GradleDependency extends Dependency { return new Builder(groupId, artifactId); } + public static Builder from(Dependency dependency) { + return new Builder(dependency.getGroupId(), dependency.getArtifactId()) + .initialize(dependency); + } + public String getConfiguration() { return this.configuration; } @@ -59,7 +64,16 @@ public class GradleDependency extends Dependency { } @Override - public Dependency build() { + protected Builder initialize(Dependency dependency) { + super.initialize(dependency); + if (dependency instanceof GradleDependency) { + configuration(((GradleDependency) dependency).getConfiguration()); + } + return self(); + } + + @Override + public GradleDependency build() { return new GradleDependency(this); } diff --git a/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/maven/MavenDependency.java b/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/maven/MavenDependency.java index 562883e5..838cf1f6 100644 --- a/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/maven/MavenDependency.java +++ b/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/maven/MavenDependency.java @@ -36,6 +36,11 @@ public class MavenDependency extends Dependency { return new Builder(groupId, artifactId); } + public static Builder from(Dependency dependency) { + return new Builder(dependency.getGroupId(), dependency.getArtifactId()) + .initialize(dependency); + } + public boolean isOptional() { return this.optional; } @@ -59,7 +64,16 @@ public class MavenDependency extends Dependency { } @Override - public Dependency build() { + protected Builder initialize(Dependency dependency) { + super.initialize(dependency); + if (dependency instanceof MavenDependency) { + optional(((MavenDependency) dependency).isOptional()); + } + return self(); + } + + @Override + public MavenDependency build() { return new MavenDependency(this); } diff --git a/initializr-generator/src/test/java/io/spring/initializr/generator/buildsystem/gradle/GradleDependencyTests.java b/initializr-generator/src/test/java/io/spring/initializr/generator/buildsystem/gradle/GradleDependencyTests.java new file mode 100644 index 00000000..59426af7 --- /dev/null +++ b/initializr-generator/src/test/java/io/spring/initializr/generator/buildsystem/gradle/GradleDependencyTests.java @@ -0,0 +1,63 @@ +/* + * Copyright 2012-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.initializr.generator.buildsystem.gradle; + +import io.spring.initializr.generator.buildsystem.Dependency; +import io.spring.initializr.generator.buildsystem.DependencyScope; +import io.spring.initializr.generator.version.VersionReference; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link GradleDependency}. + * + * @author Stephane Nicoll + */ +class GradleDependencyTests { + + @Test + void initializeFromStandardDependency() { + Dependency original = Dependency.withCoordinates("com.example", "test") + .version(VersionReference.ofValue("1.0.0")).scope(DependencyScope.RUNTIME) + .type("zip").build(); + GradleDependency dependency = GradleDependency.from(original).build(); + assertThat(original).isNotSameAs(dependency); + assertThat(dependency.getGroupId()).isEqualTo("com.example"); + assertThat(dependency.getArtifactId()).isEqualTo("test"); + assertThat(dependency.getVersion()).isEqualTo(VersionReference.ofValue("1.0.0")); + assertThat(dependency.getScope()).isEqualTo(DependencyScope.RUNTIME); + assertThat(dependency.getType()).isEqualTo("zip"); + assertThat(dependency.getConfiguration()).isNull(); + } + + @Test + void initializeFromMavenDependency() { + Dependency original = GradleDependency.withCoordinates("com.example", "test") + .version(VersionReference.ofValue("1.0.0")).scope(DependencyScope.RUNTIME) + .type("zip").configuration("myConfiguration").build(); + GradleDependency dependency = GradleDependency.from(original).build(); + assertThat(original).isNotSameAs(dependency); + assertThat(dependency.getGroupId()).isEqualTo("com.example"); + assertThat(dependency.getArtifactId()).isEqualTo("test"); + assertThat(dependency.getVersion()).isEqualTo(VersionReference.ofValue("1.0.0")); + assertThat(dependency.getScope()).isEqualTo(DependencyScope.RUNTIME); + assertThat(dependency.getType()).isEqualTo("zip"); + assertThat(dependency.getConfiguration()).isEqualTo("myConfiguration"); + } + +} diff --git a/initializr-generator/src/test/java/io/spring/initializr/generator/buildsystem/maven/MavenDependencyTests.java b/initializr-generator/src/test/java/io/spring/initializr/generator/buildsystem/maven/MavenDependencyTests.java new file mode 100644 index 00000000..8b02582f --- /dev/null +++ b/initializr-generator/src/test/java/io/spring/initializr/generator/buildsystem/maven/MavenDependencyTests.java @@ -0,0 +1,63 @@ +/* + * Copyright 2012-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.initializr.generator.buildsystem.maven; + +import io.spring.initializr.generator.buildsystem.Dependency; +import io.spring.initializr.generator.buildsystem.DependencyScope; +import io.spring.initializr.generator.version.VersionReference; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link MavenDependency}. + * + * @author Stephane Nicoll + */ +class MavenDependencyTests { + + @Test + void initializeFromStandardDependency() { + Dependency original = Dependency.withCoordinates("com.example", "test") + .version(VersionReference.ofValue("1.0.0")).scope(DependencyScope.RUNTIME) + .type("zip").build(); + MavenDependency dependency = MavenDependency.from(original).build(); + assertThat(original).isNotSameAs(dependency); + assertThat(dependency.getGroupId()).isEqualTo("com.example"); + assertThat(dependency.getArtifactId()).isEqualTo("test"); + assertThat(dependency.getVersion()).isEqualTo(VersionReference.ofValue("1.0.0")); + assertThat(dependency.getScope()).isEqualTo(DependencyScope.RUNTIME); + assertThat(dependency.getType()).isEqualTo("zip"); + assertThat(dependency.isOptional()).isFalse(); + } + + @Test + void initializeFromMavenDependency() { + Dependency original = MavenDependency.withCoordinates("com.example", "test") + .version(VersionReference.ofValue("1.0.0")).scope(DependencyScope.RUNTIME) + .type("zip").optional(true).build(); + MavenDependency dependency = MavenDependency.from(original).build(); + assertThat(original).isNotSameAs(dependency); + assertThat(dependency.getGroupId()).isEqualTo("com.example"); + assertThat(dependency.getArtifactId()).isEqualTo("test"); + assertThat(dependency.getVersion()).isEqualTo(VersionReference.ofValue("1.0.0")); + assertThat(dependency.getScope()).isEqualTo(DependencyScope.RUNTIME); + assertThat(dependency.getType()).isEqualTo("zip"); + assertThat(dependency.isOptional()).isTrue(); + } + +}