Allow to initialize a dependency builder from an existing dependency

This commit is contained in:
Stephane Nicoll 2019-05-31 11:09:20 +02:00
parent 31b60a6955
commit e063405b92
5 changed files with 173 additions and 2 deletions

View File

@ -58,6 +58,11 @@ public class Dependency {
return new Builder(groupId, artifactId); 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. * The group ID of the dependency.
* @return the group ID * @return the group ID
@ -163,11 +168,23 @@ public class Dependency {
return self(); return self();
} }
public B exclusions(Set<Exclusion> exclusions) {
this.exclusions = (exclusions != null) ? new LinkedHashSet<>(exclusions)
: new LinkedHashSet<>();
return self();
}
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
protected B self() { protected B self() {
return (B) this; 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() { public Dependency build() {
return new Dependency(this); return new Dependency(this);
} }

View File

@ -36,6 +36,11 @@ public class GradleDependency extends Dependency {
return new Builder(groupId, artifactId); return new Builder(groupId, artifactId);
} }
public static Builder from(Dependency dependency) {
return new Builder(dependency.getGroupId(), dependency.getArtifactId())
.initialize(dependency);
}
public String getConfiguration() { public String getConfiguration() {
return this.configuration; return this.configuration;
} }
@ -59,7 +64,16 @@ public class GradleDependency extends Dependency {
} }
@Override @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); return new GradleDependency(this);
} }

View File

@ -36,6 +36,11 @@ public class MavenDependency extends Dependency {
return new Builder(groupId, artifactId); return new Builder(groupId, artifactId);
} }
public static Builder from(Dependency dependency) {
return new Builder(dependency.getGroupId(), dependency.getArtifactId())
.initialize(dependency);
}
public boolean isOptional() { public boolean isOptional() {
return this.optional; return this.optional;
} }
@ -59,7 +64,16 @@ public class MavenDependency extends Dependency {
} }
@Override @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); return new MavenDependency(this);
} }

View File

@ -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");
}
}

View File

@ -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();
}
}