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/10 10:37:00 UTC
[isis] branch master updated: ISIS-2426: tooling: populate
ProjectNode with artifact description and 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 6a5284e ISIS-2426: tooling: populate ProjectNode with artifact description and dependencies
6a5284e is described below
commit 6a5284e872b88eb5d3b454a04cba1e9892ecc7e1
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Sep 10 12:36:41 2020 +0200
ISIS-2426: tooling: populate ProjectNode with artifact description and
dependencies
---
.../org/apache/isis/tooling/_infra/_Strings.java | 42 +++++++++++++++++-----
.../isis/tooling/model4adoc/AsciiDocWriter.java | 2 +-
.../tooling/adocmodel/test/AsciiDocWriterTest.java | 2 +-
.../isis/tooling/projectmodel/ArtifactKey.java | 13 ++++---
.../{ProjectNode.java => Dependency.java} | 27 +++++++-------
.../isis/tooling/projectmodel/ProjectNode.java | 3 ++
.../tooling/projectmodel/ProjectNodeFactory.java | 33 +++++++++++++----
7 files changed, 85 insertions(+), 37 deletions(-)
diff --git a/tooling/commons/src/main/java/org/apache/isis/tooling/_infra/_Strings.java b/tooling/commons/src/main/java/org/apache/isis/tooling/_infra/_Strings.java
index 7989b74..ce5e596 100644
--- a/tooling/commons/src/main/java/org/apache/isis/tooling/_infra/_Strings.java
+++ b/tooling/commons/src/main/java/org/apache/isis/tooling/_infra/_Strings.java
@@ -7,8 +7,39 @@ import java.util.Scanner;
import javax.annotation.Nullable;
public final class _Strings {
+
+ /**
+ * @return whether {@code x} is of zero length or null.
+ */
+ public static boolean isNullOrEmpty(final @Nullable CharSequence x){
+ return x==null || x.length()==0;
+ }
+
+ /**
+ * @param input
+ * @return null if the {@code input} is null or empty, the {@code input} otherwise
+ */
+ public static @Nullable String emptyToNull(final @Nullable String input) {
+ if(isNullOrEmpty(input)) {
+ return null;
+ }
+ return input;
+ }
- public static String read(final InputStream input) {
+ /**
+ * @param input
+ * @return the empty string if the {@code input} is null, the {@code input} otherwise
+ */
+ public static String nullToEmpty(final @Nullable String input) {
+ if(input==null) {
+ return "";
+ }
+ return input;
+ }
+
+ // -- RESOURCE LOADING
+
+ public static String read(final @Nullable InputStream input) {
if(input==null) {
return "";
}
@@ -27,13 +58,6 @@ public final class _Strings {
return readResource(location.getClass(), name);
}
- /**
- * Same as {@link #isEmpty(CharSequence)}
- * @param x
- * @return true only if string is of zero length or null.
- */
- public static boolean isNullOrEmpty(@Nullable final CharSequence x){
- return x==null || x.length()==0;
- }
+
}
diff --git a/tooling/model4adoc/src/main/java/org/apache/isis/tooling/model4adoc/AsciiDocWriter.java b/tooling/model4adoc/src/main/java/org/apache/isis/tooling/model4adoc/AsciiDocWriter.java
index 5188cc7..e31ed79 100644
--- a/tooling/model4adoc/src/main/java/org/apache/isis/tooling/model4adoc/AsciiDocWriter.java
+++ b/tooling/model4adoc/src/main/java/org/apache/isis/tooling/model4adoc/AsciiDocWriter.java
@@ -76,7 +76,7 @@ public class AsciiDocWriter {
val formatWriter = new FormatWriter(writer);
- formatWriter.ifNonEmpty("= %s\n", doc.getTitle());
+ formatWriter.ifNonEmpty("= %s\n\n", doc.getTitle());
for(val block : doc.getBlocks()) {
if(block instanceof Table) {
diff --git a/tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/AsciiDocWriterTest.java b/tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/AsciiDocWriterTest.java
index 8a0749f..279f0a6 100644
--- a/tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/AsciiDocWriterTest.java
+++ b/tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/AsciiDocWriterTest.java
@@ -57,7 +57,7 @@ class AsciiDocWriterTest {
doc.setTitle("Hello World");
String actualAdoc = AsciiDocWriter.toString(doc);
- String expectedAdoc = "= Hello World\n";
+ String expectedAdoc = "= Hello World\n\n";
System.out.println(actualAdoc);
diff --git a/tooling/project-model/src/main/java/org/apache/isis/tooling/projectmodel/ArtifactKey.java b/tooling/project-model/src/main/java/org/apache/isis/tooling/projectmodel/ArtifactKey.java
index f005357..33d5805 100644
--- a/tooling/project-model/src/main/java/org/apache/isis/tooling/projectmodel/ArtifactKey.java
+++ b/tooling/project-model/src/main/java/org/apache/isis/tooling/projectmodel/ArtifactKey.java
@@ -27,23 +27,26 @@ import lombok.NonNull;
import lombok.Value;
@Value(staticConstructor = "of")
-public class ArtifactKey implements Comparator<ArtifactKey> {
+public class ArtifactKey implements Comparable<ArtifactKey> {
@NonNull private final String groupId;
@NonNull private final String artifactId;
+ @NonNull private final String type;
@NonNull private final String version;
private final AtomicReference<ComparableVersion> comparableVersion = new AtomicReference<ComparableVersion>();
@Override
public String toString() {
- return String.format("%s:%s:%s", groupId, artifactId, version);
+ return String.format("%s:%s:%s:%s", groupId, artifactId, type, version);
}
// -- COMPARATOR
private final static Comparator<ArtifactKey> comparator = Comparator
.comparing(ArtifactKey::getGroupId)
+ .thenComparing(ArtifactKey::getArtifactId)
+ .thenComparing(ArtifactKey::getType)
.thenComparing(ArtifactKey::getComparableVersion);
private ComparableVersion getComparableVersion() {
@@ -52,10 +55,10 @@ public class ArtifactKey implements Comparator<ArtifactKey> {
}
return comparableVersion.get();
}
-
+
@Override
- public int compare(ArtifactKey o1, ArtifactKey o2) {
- return comparator.compare(o1, o2);
+ public int compareTo(ArtifactKey o) {
+ return comparator.compare(this, o);
}
}
diff --git a/tooling/project-model/src/main/java/org/apache/isis/tooling/projectmodel/ProjectNode.java b/tooling/project-model/src/main/java/org/apache/isis/tooling/projectmodel/Dependency.java
similarity index 63%
copy from tooling/project-model/src/main/java/org/apache/isis/tooling/projectmodel/ProjectNode.java
copy to tooling/project-model/src/main/java/org/apache/isis/tooling/projectmodel/Dependency.java
index ff68946..9c57962 100644
--- a/tooling/project-model/src/main/java/org/apache/isis/tooling/projectmodel/ProjectNode.java
+++ b/tooling/project-model/src/main/java/org/apache/isis/tooling/projectmodel/Dependency.java
@@ -18,29 +18,26 @@
*/
package org.apache.isis.tooling.projectmodel;
-import java.util.TreeSet;
+import java.util.Comparator;
import lombok.Builder;
import lombok.Data;
-import lombok.ToString;
-import lombok.val;
@Data @Builder
-public class ProjectNode {
-
- @ToString.Exclude private final ProjectNode parent;
- @ToString.Exclude private final TreeSet<ProjectNode> children = new TreeSet<ProjectNode>(
- (a,b)->a.getName().compareTo(b.getName()));
+public class Dependency implements Comparable<Dependency> {
private final ArtifactKey artifactKey;
- private final String name;
- private final String description;
- public void depthFirst(ProjectVisitor projectVisitor) {
- projectVisitor.accept(this);
- for(val child : getChildren()){
- child.depthFirst(projectVisitor);
- }
+ // -- COMPARATOR
+
+ private final static Comparator<Dependency> comparator = Comparator
+ .comparing(Dependency::getArtifactKey);
+
+
+ @Override
+ public int compareTo(Dependency o) {
+ return comparator.compare(this, o);
}
+
}
diff --git a/tooling/project-model/src/main/java/org/apache/isis/tooling/projectmodel/ProjectNode.java b/tooling/project-model/src/main/java/org/apache/isis/tooling/projectmodel/ProjectNode.java
index ff68946..d361d84 100644
--- a/tooling/project-model/src/main/java/org/apache/isis/tooling/projectmodel/ProjectNode.java
+++ b/tooling/project-model/src/main/java/org/apache/isis/tooling/projectmodel/ProjectNode.java
@@ -31,6 +31,7 @@ public class ProjectNode {
@ToString.Exclude private final ProjectNode parent;
@ToString.Exclude private final TreeSet<ProjectNode> children = new TreeSet<ProjectNode>(
(a,b)->a.getName().compareTo(b.getName()));
+ @ToString.Exclude private final TreeSet<Dependency> dependencies = new TreeSet<Dependency>();
private final ArtifactKey artifactKey;
private final String name;
@@ -43,4 +44,6 @@ public class ProjectNode {
}
}
+
+
}
diff --git a/tooling/project-model/src/main/java/org/apache/isis/tooling/projectmodel/ProjectNodeFactory.java b/tooling/project-model/src/main/java/org/apache/isis/tooling/projectmodel/ProjectNodeFactory.java
index 61667d0..df86856 100644
--- a/tooling/project-model/src/main/java/org/apache/isis/tooling/projectmodel/ProjectNodeFactory.java
+++ b/tooling/project-model/src/main/java/org/apache/isis/tooling/projectmodel/ProjectNodeFactory.java
@@ -20,6 +20,7 @@ package org.apache.isis.tooling.projectmodel;
import java.io.File;
import java.util.Objects;
+import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -29,6 +30,7 @@ import org.apache.maven.model.Model;
import org.gradle.tooling.GradleConnector;
import org.gradle.tooling.model.GradleProject;
+import org.apache.isis.tooling._infra._Strings;
import org.apache.isis.tooling.projectmodel.maven.MavenModelFactory;
import org.apache.isis.tooling.projectmodel.maven.SimpleModelResolver;
@@ -78,22 +80,39 @@ public class ProjectNodeFactory {
val projNode = ProjectNode.builder()
.parent(parent)
.artifactKey(artifactKeyOf(mavenProj))
- .name(mavenProj.getName())
+ .name(_Strings.nullToEmpty(mavenProj.getName()))
+ .description(_Strings.nullToEmpty(mavenProj.getDescription()))
.build();
-
+
+ mavenProj.getDependencies()
+ .stream()
+ .map(ProjectNodeFactory::toDependency)
+ .forEach(projNode.getDependencies()::add);
+
if(parent!=null) {
parent.getChildren().add(projNode);
}
return projNode;
-
+ }
+
+ private static Dependency toDependency(final @NonNull org.apache.maven.model.Dependency dependency) {
+ return Dependency.builder()
+ .artifactKey(ArtifactKey.of(
+ dependency.getGroupId(),
+ dependency.getArtifactId(),
+ dependency.getType(),
+ Optional.ofNullable(dependency.getVersion()).orElse("<managed>") //TODO to resolve this requires interpolation
+ ))
+ .build();
}
private static ArtifactKey artifactKeyOf(final @NonNull Model mavenProj) {
val groupId = MavenModelFactory.getGroupId(mavenProj);
val artifactId = mavenProj.getArtifactId();
+ val type = mavenProj.getPackaging();
val version = MavenModelFactory.getVersion(mavenProj);
- return ArtifactKey.of(groupId, artifactId, version);
+ return ArtifactKey.of(groupId, artifactId, type, version);
}
private static Iterable<Model> childrenOf(
@@ -129,7 +148,8 @@ public class ProjectNodeFactory {
val projNode = ProjectNode.builder()
.parent(parent)
.artifactKey(artifactKeyOf(gradleProj))
- .name(gradleProj.getName())
+ .name(_Strings.nullToEmpty(gradleProj.getName()))
+ .description(_Strings.nullToEmpty(gradleProj.getDescription()))
.build();
if(parent!=null) {
parent.getChildren().add(projNode);
@@ -148,8 +168,9 @@ public class ProjectNodeFactory {
log.warn("cannot find pom.xml for project {} at {}", gradleProj.getName(), pomFile.getAbsolutePath());
val groupId = "?";
val artifactId = gradleProj.getName();
+ val type = "?";
val version = "?";
- return ArtifactKey.of(groupId, artifactId, version);
+ return ArtifactKey.of(groupId, artifactId, type, version);
}
}