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) {

Reply via email to