diff options
author | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2020-07-08 13:24:41 +0200 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2020-07-08 13:24:41 +0200 |
commit | 9b8f0756ecc1a038fbaab4388f74886965a5c02f (patch) | |
tree | cdcc27f7300017635ca200441a62106447fa5aae /bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/TestBundleDependencyScopeTranslator.java | |
parent | 92e778cf7cb3a41c516becd4b2e8cf5cc295b865 (diff) |
Move helper classes from 'mojo' to 'util'
Diffstat (limited to 'bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/TestBundleDependencyScopeTranslator.java')
-rw-r--r-- | bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/TestBundleDependencyScopeTranslator.java | 115 |
1 files changed, 0 insertions, 115 deletions
diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/TestBundleDependencyScopeTranslator.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/TestBundleDependencyScopeTranslator.java deleted file mode 100644 index 92023df8b23..00000000000 --- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/TestBundleDependencyScopeTranslator.java +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.container.plugin.mojo; - -import org.apache.maven.artifact.Artifact; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.logging.Logger; - -import static java.util.stream.Collectors.toList; - -/** - * Translates the scope of dependencies when constructing a test bundle. - * Used by {@link Artifacts} to determine which artifacts that are provided by the runtime or must be included in the bundle. - * - * Dependencies of scope 'test' are by default translated to 'compile'. Dependencies of other scopes are kept as is. - * - * Default scope translation for 'test' scope dependencies can be overridden through a comma-separated configuration string. - * Each substring is a triplet on the form [groupId]:[artifactId]:[scope]. - * Scope translation overrides affects all transitive dependencies. - * The ordering of the triplets determines the priority - only the first matching override will affect a given dependency. - * - * @author bjorncs - */ -class TestBundleDependencyScopeTranslator implements Artifacts.ScopeTranslator { - - private static final Logger log = Logger.getLogger(TestBundleDependencyScopeTranslator.class.getName()); - - private final Map<Artifact, String> dependencyScopes; - - private TestBundleDependencyScopeTranslator(Map<Artifact, String> dependencyScopes) { - this.dependencyScopes = dependencyScopes; - } - - @Override public String scopeOf(Artifact artifact) { return Objects.requireNonNull(dependencyScopes.get(artifact)); } - - static TestBundleDependencyScopeTranslator from(Map<String, Artifact> dependencies, String rawConfig) { - List<DependencyOverride> dependencyOverrides = toDependencyOverrides(rawConfig); - Map<Artifact, String> dependencyScopes = new HashMap<>(); - for (Artifact dependency : dependencies.values()) { - dependencyScopes.put(dependency, getScopeForDependency(dependency, dependencyOverrides, dependencies)); - } - return new TestBundleDependencyScopeTranslator(dependencyScopes); - } - - private static List<DependencyOverride> toDependencyOverrides(String rawConfig) { - if (rawConfig == null || rawConfig.isBlank()) return List.of(); - return Arrays.stream(rawConfig.split(",")) - .map(String::strip) - .filter(s -> !s.isBlank()) - .map(TestBundleDependencyScopeTranslator::toDependencyOverride) - .collect(toList()); - } - - private static DependencyOverride toDependencyOverride(String overrideString) { - String[] elements = overrideString.split(":"); - if (elements.length != 3) { - throw new IllegalArgumentException("Invalid dependency override: " + overrideString); - } - return new DependencyOverride(elements[0], elements[1], elements[2]); - } - - private static String stripVersionAndScope(String idInDependencyTrail) { - int firstDelimiter = idInDependencyTrail.indexOf(':'); - int secondDelimiter = idInDependencyTrail.indexOf(':', firstDelimiter + 1); - return idInDependencyTrail.substring(0, secondDelimiter); - } - - private static String getScopeForDependency( - Artifact dependency, List<DependencyOverride> overrides, Map<String, Artifact> otherArtifacts) { - String oldScope = dependency.getScope(); - if (!oldScope.equals(Artifact.SCOPE_TEST)) return oldScope; - for (DependencyOverride override : overrides) { - for (Artifact dependent : dependencyTrailOf(dependency, otherArtifacts)) { - if (override.isForArtifact(dependent)) { - log.fine(() -> String.format( - "Overriding scope of '%s'; scope '%s' overridden to '%s'", - dependency.getId(), oldScope, override.scope)); - return override.scope; - } - } - } - log.fine(() -> String.format( - "Using default scope translation for '%s'; scope 'test' translated to 'compile'", - dependency.getId())); - return Artifact.SCOPE_COMPILE; - } - - private static List<Artifact> dependencyTrailOf(Artifact artifact, Map<String, Artifact> otherArtifacts) { - return artifact.getDependencyTrail().stream() - .skip(1) // Maven project itself is the first entry - .map(parentId -> otherArtifacts.get(stripVersionAndScope(parentId))) - .filter(Objects::nonNull) - .collect(toList()); - } - - private static class DependencyOverride { - final String groupId; - final String artifactId; - final String scope; - - DependencyOverride(String groupId, String artifactId, String scope) { - this.groupId = groupId; - this.artifactId = artifactId; - this.scope = scope; - } - - boolean isForArtifact(Artifact artifact) { - return artifact.getGroupId().equals(groupId) && artifact.getArtifactId().equals(artifactId); - } - } -} |