You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2020/09/21 08:14:55 UTC

[isis] branch master updated: ISIS-2437: model for LOCAL vs EXTERNAL dependencies

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new fc70dbf  ISIS-2437: model for LOCAL vs EXTERNAL dependencies
fc70dbf is described below

commit fc70dbf60bdd0efc96bd09dc4ef50b4b844784f5
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Sep 21 10:14:42 2020 +0200

    ISIS-2437: model for LOCAL vs EXTERNAL dependencies
---
 .../tooling/projectmodel/ArtifactCoordinates.java  |  6 ++++-
 .../projectmodel/ArtifactShortNameFactory.java     |  2 +-
 .../isis/tooling/projectmodel/Dependency.java      | 10 +++++++++
 .../projectmodel/ProjectNodeFactory_maven.java     | 26 ++++++++++++++++++++--
 .../gradle/GradleDependenciesFactory.java          |  6 +++--
 .../gradle/GradleDependenciesWriter.java           |  1 -
 6 files changed, 44 insertions(+), 7 deletions(-)

diff --git a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ArtifactCoordinates.java b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ArtifactCoordinates.java
index b8c98ee..b08460c 100644
--- a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ArtifactCoordinates.java
+++ b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ArtifactCoordinates.java
@@ -35,11 +35,15 @@ public class ArtifactCoordinates implements Comparable<ArtifactCoordinates> {
     @NonNull private final String version;
     
     private final AtomicReference<ComparableVersion> comparableVersion = new AtomicReference<ComparableVersion>();
-    
+
     @Override
     public String toString() {
         return String.format("%s:%s:%s:%s", groupId, artifactId, packaging, version); 
     }
+    
+    public String toStringWithGroupAndId() {
+        return String.format("%s:%s", groupId, artifactId);
+    }
 
     // -- COMPARATOR
     
diff --git a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ArtifactShortNameFactory.java b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ArtifactShortNameFactory.java
index a56329a..fed8de2 100644
--- a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ArtifactShortNameFactory.java
+++ b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ArtifactShortNameFactory.java
@@ -23,6 +23,6 @@ import lombok.NonNull;
 public class ArtifactShortNameFactory {
     
     public static String toShortName(final @NonNull ArtifactCoordinates coors) {
-        return String.format("%s:%s:%s", coors.getGroupId(), coors.getArtifactId(), coors.getVersion());
+        return String.format("%s:%s", coors.getGroupId(), coors.getArtifactId());
     }
 }
diff --git a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/Dependency.java b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/Dependency.java
index 710e427..e35c757 100644
--- a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/Dependency.java
+++ b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/Dependency.java
@@ -26,13 +26,23 @@ import lombok.Data;
 @Data @Builder
 public class Dependency implements Comparable<Dependency> {
     
+    public static enum Location {
+        LOCAL,
+        EXTERNAL;
+
+        public boolean isLocal()    { return this == LOCAL; }
+        public boolean isExternal() { return this == EXTERNAL; }
+    }
+    
     private final ArtifactCoordinates artifactCoordinates;
+    private Location location;
     
     /**
      * as generated by {@link ArtifactShortNameFactory}
      */
     private final String shortName;  
     
+    
     // -- COMPARATOR
     
     private final static Comparator<Dependency> comparator = Comparator
diff --git a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ProjectNodeFactory_maven.java b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ProjectNodeFactory_maven.java
index 1d2c27a..69b4641 100644
--- a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ProjectNodeFactory_maven.java
+++ b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ProjectNodeFactory_maven.java
@@ -19,6 +19,7 @@
 package org.apache.isis.tooling.projectmodel;
 
 import java.io.File;
+import java.util.HashSet;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.stream.Collectors;
@@ -29,6 +30,7 @@ import javax.annotation.Nullable;
 import org.apache.maven.model.Model;
 
 import org.apache.isis.commons.internal.base._Strings;
+import org.apache.isis.tooling.projectmodel.Dependency.Location;
 import org.apache.isis.tooling.projectmodel.maven.MavenModelFactory;
 import org.apache.isis.tooling.projectmodel.maven.SimpleModelResolver;
 
@@ -41,10 +43,26 @@ class ProjectNodeFactory_maven {
         val modelResolver = new SimpleModelResolver(projRootFolder);
         val rootModel = modelResolver.getRootModel();
         val interpolate = false; //XXX interpolation is experimental
-        return visitMavenProject(null, rootModel, modelResolver, interpolate);
+        val projTree = visitMavenProject(null, rootModel, modelResolver, interpolate);
+        
+        // now post process the tree structure:
+        // first pass: collect local artifacts
+        // second pass: update all local dependencies' location to LOCAL
+        val localArtifacts = new HashSet<String>();
+        projTree.depthFirst(projModel->{
+            localArtifacts.add(projModel.getArtifactCoordinates().toStringWithGroupAndId());
+        });
+        
+        projTree.depthFirst(projModel->{
+            projModel.getDependencies().stream()
+            .filter(dep->localArtifacts.contains(dep.getArtifactCoordinates().toStringWithGroupAndId()))
+            .forEach(localDep->localDep.setLocation(Location.LOCAL));
+        });
+        
+        return projTree;
     }
 
- // -- HELPER MAVEN
+    // -- HELPER
 
     private static ProjectNode visitMavenProject(
             final @Nullable ProjectNode parent, 
@@ -95,6 +113,7 @@ class ProjectNodeFactory_maven {
         
         return Dependency.builder()
                 .artifactCoordinates(artifactCoordinates)
+                .location(Location.EXTERNAL) // just priming here to be overwritten in post-processing if required
                 .shortName(ArtifactShortNameFactory.toShortName(artifactCoordinates))
                 .build();
     }
@@ -120,4 +139,7 @@ class ProjectNodeFactory_maven {
         .collect(Collectors.toList());
     }
     
+    
+
+    
 }
diff --git a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/gradle/GradleDependenciesFactory.java b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/gradle/GradleDependenciesFactory.java
index d6ac2a4..5d3c495 100644
--- a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/gradle/GradleDependenciesFactory.java
+++ b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/gradle/GradleDependenciesFactory.java
@@ -39,8 +39,10 @@ public class GradleDependenciesFactory {
         
         projTree.depthFirst(projModel -> {
             
-            projModel.getDependencies().forEach(dependency->{
-                dependenciesByShortName.put(dependency.getShortName(), dependency);    
+            projModel.getDependencies().stream()
+            .filter(dependency->dependency.getLocation().isExternal())
+            .forEach(extDependency->{
+                dependenciesByShortName.put(extDependency.getShortName(), extDependency);    
             });
             
         });
diff --git a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/gradle/GradleDependenciesWriter.java b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/gradle/GradleDependenciesWriter.java
index de06c6d..dc6eec2 100644
--- a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/gradle/GradleDependenciesWriter.java
+++ b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/gradle/GradleDependenciesWriter.java
@@ -23,7 +23,6 @@ import java.io.Writer;
 
 import org.apache.isis.commons.internal.base._Strings;
 
-import lombok.SneakyThrows;
 import lombok.val;
 
 public class GradleDependenciesWriter extends WriterAbstract {