// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.container.plugin.util; import org.apache.maven.artifact.Artifact; import org.apache.maven.project.MavenProject; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Optional; /** * @author Tony Vaagenes * @author ollivir */ public class Artifacts { public static final String VESPA_GROUP_ID = "com.yahoo.vespa"; interface ScopeTranslator { String scopeOf(Artifact artifact); } private static class NoopScopeTranslator implements ScopeTranslator { @Override public String scopeOf(Artifact artifact) { return artifact.getScope(); } } public static class ArtifactSet { private final List jarArtifactsToInclude; private final List jarArtifactsProvided; private final List nonJarArtifacts; private ArtifactSet( List jarArtifactsToInclude, List jarArtifactsProvided, List nonJarArtifacts) { this.jarArtifactsToInclude = jarArtifactsToInclude; this.jarArtifactsProvided = jarArtifactsProvided; this.nonJarArtifacts = nonJarArtifacts; } public List getJarArtifactsToInclude() { return jarArtifactsToInclude; } public List getJarArtifactsProvided() { return jarArtifactsProvided; } public List getNonJarArtifacts() { return nonJarArtifacts; } } public static ArtifactSet getArtifacts(MavenProject project) { return getArtifacts(project, new NoopScopeTranslator()); } public static ArtifactSet getArtifacts(MavenProject project, ScopeTranslator scopeTranslator) { List jarArtifactsToInclude = new ArrayList<>(); List jarArtifactsProvided = new ArrayList<>(); List nonJarArtifactsToInclude = new ArrayList<>(); List nonJarArtifactsProvided = new ArrayList<>(); for (Artifact artifact : project.getArtifacts()) { String scope = scopeTranslator.scopeOf(artifact); if ("jar".equals(artifact.getType())) { if (Artifact.SCOPE_COMPILE.equals(scope)) { jarArtifactsToInclude.add(artifact); } else if (Artifact.SCOPE_PROVIDED.equals(scope)) { jarArtifactsProvided.add(artifact); } } else { if (Artifact.SCOPE_COMPILE.equals(scope)) { nonJarArtifactsToInclude.add(artifact); } else if (Artifact.SCOPE_PROVIDED.equals(scope)) { nonJarArtifactsProvided.add(artifact); } } } nonJarArtifactsToInclude.addAll(nonJarArtifactsProvided); return new ArtifactSet(jarArtifactsToInclude, jarArtifactsProvided, nonJarArtifactsToInclude); } public static Collection getArtifactsToInclude(MavenProject project) { return getArtifacts(project, new NoopScopeTranslator()).getJarArtifactsToInclude(); } public static Optional getVespaArtifact(String artifactId, List availableArtifacts) { for (Artifact artifact : availableArtifacts) { if (artifactId.equals(artifact.getArtifactId()) && VESPA_GROUP_ID.equals(artifact.getGroupId())) { return Optional.of(artifact); } } return Optional.empty(); } }