This is an automated email from the ASF dual-hosted git repository. cstamas pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/maven.git
The following commit(s) were added to refs/heads/master by this push: new 6e192fbb54 [MNG-7972] Artifact coordinate out of "standard string" (#1347) 6e192fbb54 is described below commit 6e192fbb543fc7418444bf52e910adafa3b53d4f Author: Tamas Cservenak <ta...@cservenak.net> AuthorDate: Mon Dec 18 11:30:20 2023 +0100 [MNG-7972] Artifact coordinate out of "standard string" (#1347) Expose ArtifactCoordinate creation out of standard string. --- https://issues.apache.org/jira/browse/MNG-7972 --- .../main/java/org/apache/maven/api/Session.java | 18 ++++++++-- .../api/services/ArtifactCoordinateFactory.java | 16 ++++++++- .../services/ArtifactCoordinateFactoryRequest.java | 35 ++++++++++++++---- .../DependencyCoordinateFactoryRequest.java | 25 ++++++++++++- .../maven/internal/impl/AbstractSession.java | 10 ++++++ .../impl/DefaultArtifactCoordinateFactory.java | 42 ++++++++++++---------- .../impl/DefaultDependencyCoordinateFactory.java | 36 ++++++++++++------- 7 files changed, 140 insertions(+), 42 deletions(-) diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java index 33045547e5..b7f6098868 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java @@ -194,14 +194,26 @@ public interface Session { /** * Shortcut for {@code getService(ArtifactFactory.class).create(...)}. * - * @see org.apache.maven.api.services.ArtifactFactory#create(Session, String, String, String, String) + * @see org.apache.maven.api.services.ArtifactCoordinateFactory#create(Session, String, String, String, String) */ ArtifactCoordinate createArtifactCoordinate(String groupId, String artifactId, String version, String extension); /** + * Creates a coordinate out of string that is formatted like: + * {@code <groupId>:<artifactId>[:<extension>[:<classifier>]]:<version>} + * <p> * Shortcut for {@code getService(ArtifactFactory.class).create(...)}. * - * @see org.apache.maven.api.services.ArtifactFactory#create(Session, String, String, String, String, String, String) + * @param coordString the string having "standard" coordinate. + * @return an {@code ArtifactCoordinate}, never {@code null} + * @see org.apache.maven.api.services.ArtifactCoordinateFactory#create(Session, String) + */ + ArtifactCoordinate createArtifactCoordinate(String coordString); + + /** + * Shortcut for {@code getService(ArtifactFactory.class).create(...)}. + * + * @see org.apache.maven.api.services.ArtifactCoordinateFactory#create(Session, String, String, String, String, String, String) */ ArtifactCoordinate createArtifactCoordinate( String groupId, String artifactId, String version, String classifier, String extension, String type); @@ -209,7 +221,7 @@ public interface Session { /** * Shortcut for {@code getService(ArtifactFactory.class).create(...)}. * - * @see org.apache.maven.api.services.ArtifactFactory#create(Session, String, String, String, String, String, String) + * @see org.apache.maven.api.services.ArtifactCoordinateFactory#create(Session, String, String, String, String, String, String) */ ArtifactCoordinate createArtifactCoordinate(Artifact artifact); diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactCoordinateFactory.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactCoordinateFactory.java index ef88499eab..de694024af 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactCoordinateFactory.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactCoordinateFactory.java @@ -37,12 +37,26 @@ public interface ArtifactCoordinateFactory extends Service { * Creates a coordinate. * * @param request the request holding coordinate creation parameters - * @return an {@code Artifact}, never {@code null} + * @return an {@code ArtifactCoordinate}, never {@code null} * @throws IllegalArgumentException if {@code request} is null or {@code request.session} is null or invalid */ @Nonnull ArtifactCoordinate create(@Nonnull ArtifactCoordinateFactoryRequest request); + /** + * Creates a coordinate out of string that is formatted like: + * {@code <groupId>:<artifactId>[:<extension>[:<classifier>]]:<version>} + * + * @param session the session. + * @param coordinateString the string having "standard" coordinate. + * @return an {@code ArtifactCoordinate}, never {@code null} + * @throws IllegalArgumentException if {@code session} is null or invalid + */ + @Nonnull + default ArtifactCoordinate create(@Nonnull Session session, @Nonnull String coordinateString) { + return create(ArtifactCoordinateFactoryRequest.build(session, coordinateString)); + } + @Nonnull default ArtifactCoordinate create( @Nonnull Session session, String groupId, String artifactId, String version, String extension) { diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactCoordinateFactoryRequest.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactCoordinateFactoryRequest.java index c81b4532fb..975c2a39bb 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactCoordinateFactoryRequest.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactCoordinateFactoryRequest.java @@ -51,11 +51,13 @@ public interface ArtifactCoordinateFactoryRequest { String getType(); + String getCoordinateString(); + @Nonnull static ArtifactCoordinateFactoryRequest build( @Nonnull Session session, String groupId, String artifactId, String version, String extension) { return ArtifactCoordinateFactoryRequest.builder() - .session(nonNull(session, "session cannot be null")) + .session(nonNull(session, "session")) .groupId(groupId) .artifactId(artifactId) .version(version) @@ -73,7 +75,7 @@ public interface ArtifactCoordinateFactoryRequest { String extension, String type) { return ArtifactCoordinateFactoryRequest.builder() - .session(nonNull(session, "session cannot be null")) + .session(nonNull(session, "session")) .groupId(groupId) .artifactId(artifactId) .version(version) @@ -83,11 +85,19 @@ public interface ArtifactCoordinateFactoryRequest { .build(); } + @Nonnull + static ArtifactCoordinateFactoryRequest build(@Nonnull Session session, @Nonnull String coordinateString) { + return ArtifactCoordinateFactoryRequest.builder() + .session(nonNull(session, "session")) + .coordinateString(nonNull(coordinateString, "coordinateString")) + .build(); + } + @Nonnull static ArtifactCoordinateFactoryRequest build(@Nonnull Session session, @Nonnull ArtifactCoordinate coordinate) { return ArtifactCoordinateFactoryRequest.builder() - .session(nonNull(session, "session cannot be null")) - .groupId(nonNull(coordinate, "coordinate cannot be null").getGroupId()) + .session(nonNull(session, "session")) + .groupId(nonNull(coordinate, "coordinate").getGroupId()) .artifactId(coordinate.getArtifactId()) .classifier(coordinate.getClassifier()) .version(coordinate.getVersion().asString()) @@ -108,6 +118,7 @@ public interface ArtifactCoordinateFactoryRequest { private String classifier; private String extension; private String type; + private String coordinateString; ArtifactFactoryRequestBuilder() {} @@ -146,9 +157,14 @@ public interface ArtifactCoordinateFactoryRequest { return this; } + public ArtifactFactoryRequestBuilder coordinateString(String coordinateString) { + this.coordinateString = coordinateString; + return this; + } + public ArtifactCoordinateFactoryRequest build() { return new DefaultArtifactFactoryRequestArtifact( - session, groupId, artifactId, version, classifier, extension, type); + session, groupId, artifactId, version, classifier, extension, type, coordinateString); } private static class DefaultArtifactFactoryRequestArtifact extends BaseRequest @@ -159,6 +175,7 @@ public interface ArtifactCoordinateFactoryRequest { private final String classifier; private final String extension; private final String type; + private final String coordinateString; DefaultArtifactFactoryRequestArtifact( @Nonnull Session session, @@ -167,7 +184,8 @@ public interface ArtifactCoordinateFactoryRequest { String version, String classifier, String extension, - String type) { + String type, + String coordinateString) { super(session); this.groupId = groupId; this.artifactId = artifactId; @@ -175,6 +193,7 @@ public interface ArtifactCoordinateFactoryRequest { this.classifier = classifier; this.extension = extension; this.type = type; + this.coordinateString = coordinateString; } @Override @@ -206,6 +225,10 @@ public interface ArtifactCoordinateFactoryRequest { public String getType() { return type; } + + public String getCoordinateString() { + return coordinateString; + } } } } diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyCoordinateFactoryRequest.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyCoordinateFactoryRequest.java index 532d820a26..6db92dbe65 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyCoordinateFactoryRequest.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyCoordinateFactoryRequest.java @@ -109,6 +109,7 @@ public interface DependencyCoordinateFactoryRequest extends ArtifactCoordinateFa private String classifier; private String extension; private String type; + private String coordinateString; private String scope; private boolean optional; private Collection<Exclusion> exclusions = Collections.emptyList(); @@ -150,6 +151,11 @@ public interface DependencyCoordinateFactoryRequest extends ArtifactCoordinateFa return this; } + public DependencyCoordinateFactoryRequestBuilder coordinateString(String coordinateString) { + this.coordinateString = coordinateString; + return this; + } + public DependencyCoordinateFactoryRequestBuilder scope(String scope) { this.scope = scope; return this; @@ -182,7 +188,17 @@ public interface DependencyCoordinateFactoryRequest extends ArtifactCoordinateFa public DependencyCoordinateFactoryRequest build() { return new DefaultDependencyCoordinateFactoryRequest( - session, groupId, artifactId, version, classifier, extension, type, scope, optional, exclusions); + session, + groupId, + artifactId, + version, + classifier, + extension, + type, + coordinateString, + scope, + optional, + exclusions); } private static class DefaultDependencyCoordinateFactoryRequest extends BaseRequest @@ -193,6 +209,7 @@ public interface DependencyCoordinateFactoryRequest extends ArtifactCoordinateFa private final String classifier; private final String extension; private final String type; + private final String coordinateString; private final String scope; private final boolean optional; private final Collection<Exclusion> exclusions; @@ -206,6 +223,7 @@ public interface DependencyCoordinateFactoryRequest extends ArtifactCoordinateFa String classifier, String extension, String type, + String coordinateString, String scope, boolean optional, Collection<Exclusion> exclusions) { @@ -216,6 +234,7 @@ public interface DependencyCoordinateFactoryRequest extends ArtifactCoordinateFa this.classifier = classifier; this.extension = extension; this.type = type; + this.coordinateString = coordinateString; this.scope = scope; this.optional = optional; this.exclusions = exclusions; @@ -251,6 +270,10 @@ public interface DependencyCoordinateFactoryRequest extends ArtifactCoordinateFa return type; } + public String getCoordinateString() { + return coordinateString; + } + @Override public String getScope() { return scope; diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java b/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java index 579a7fd55b..0ef8cdf384 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java @@ -219,6 +219,16 @@ public abstract class AbstractSession implements InternalSession { return getService(ArtifactCoordinateFactory.class).create(this, groupId, artifactId, version, extension); } + /** + * Shortcut for <code>getService(CoordinateFactory.class).create(...)</code> + * + * @see ArtifactCoordinateFactory#create(Session, String) + */ + @Override + public ArtifactCoordinate createArtifactCoordinate(String coordString) { + return getService(ArtifactCoordinateFactory.class).create(this, coordString); + } + /** * Shortcut for <code>getService(CoordinateFactory.class).create(...)</code> * diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactCoordinateFactory.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactCoordinateFactory.java index 945b7abc29..8ee696bbca 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactCoordinateFactory.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactCoordinateFactory.java @@ -36,24 +36,30 @@ public class DefaultArtifactCoordinateFactory implements ArtifactCoordinateFacto public ArtifactCoordinate create(@Nonnull ArtifactCoordinateFactoryRequest request) { nonNull(request, "request"); InternalSession session = InternalSession.from(request.getSession()); - ArtifactType type = null; - if (request.getType() != null) { - type = session.getSession().getArtifactTypeRegistry().get(request.getType()); + if (request.getCoordinateString() != null) { + return new DefaultArtifactCoordinate( + session, new org.eclipse.aether.artifact.DefaultArtifact(request.getCoordinateString())); + } else { + ArtifactType type = null; + if (request.getType() != null) { + type = session.getSession().getArtifactTypeRegistry().get(request.getType()); + } + String str1 = request.getClassifier(); + String classifier = str1 != null && !str1.isEmpty() + ? request.getClassifier() + : type != null ? type.getClassifier() : ""; + String str = request.getExtension(); + String extension = + str != null && !str.isEmpty() ? request.getExtension() : type != null ? type.getExtension() : ""; + return new DefaultArtifactCoordinate( + session, + new org.eclipse.aether.artifact.DefaultArtifact( + request.getGroupId(), + request.getArtifactId(), + classifier, + extension, + request.getVersion(), + type)); } - String str1 = request.getClassifier(); - String classifier = - str1 != null && !str1.isEmpty() ? request.getClassifier() : type != null ? type.getClassifier() : ""; - String str = request.getExtension(); - String extension = - str != null && !str.isEmpty() ? request.getExtension() : type != null ? type.getExtension() : ""; - return new DefaultArtifactCoordinate( - session, - new org.eclipse.aether.artifact.DefaultArtifact( - request.getGroupId(), - request.getArtifactId(), - classifier, - extension, - request.getVersion(), - type)); } } diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCoordinateFactory.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCoordinateFactory.java index d3ebc6c5f9..6362a8ccde 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCoordinateFactory.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCoordinateFactory.java @@ -45,19 +45,29 @@ public class DefaultDependencyCoordinateFactory implements DependencyCoordinateF if (request.getType() != null) { type = session.getSession().getArtifactTypeRegistry().get(request.getType()); } - return new DefaultDependencyCoordinate( - session, - new org.eclipse.aether.graph.Dependency( - new org.eclipse.aether.artifact.DefaultArtifact( - request.getGroupId(), - request.getArtifactId(), - request.getClassifier(), - request.getExtension(), - request.getVersion(), - type), - request.getScope(), - request.isOptional(), - map(request.getExclusions(), this::toExclusion))); + if (request.getCoordinateString() != null) { + return new DefaultDependencyCoordinate( + session, + new org.eclipse.aether.graph.Dependency( + new org.eclipse.aether.artifact.DefaultArtifact(request.getCoordinateString()), + request.getScope(), + request.isOptional(), + map(request.getExclusions(), this::toExclusion))); + } else { + return new DefaultDependencyCoordinate( + session, + new org.eclipse.aether.graph.Dependency( + new org.eclipse.aether.artifact.DefaultArtifact( + request.getGroupId(), + request.getArtifactId(), + request.getClassifier(), + request.getExtension(), + request.getVersion(), + type), + request.getScope(), + request.isOptional(), + map(request.getExclusions(), this::toExclusion))); + } } private org.eclipse.aether.graph.Exclusion toExclusion(Exclusion exclusion) {