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/12/14 17:01:54 UTC

[isis] branch master updated: ISIS-2473: tooling: bit of house keeping

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 f9b0722  ISIS-2473: tooling: bit of house keeping
f9b0722 is described below

commit f9b07221becfccfbf00210a55bae3dfa2e670f8e
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Dec 14 18:01:32 2020 +0100

    ISIS-2473: tooling: bit of house keeping
    
    also adds ProjectResourceCoordinates, immutable comparable value type
---
 .../internal/resources/_ResourceCoordinates.java   | 67 +++++++++++++++++
 .../cli/adocfix/OrphanedIncludeStatementFixer.java |  4 +-
 .../test/adocfix/IncludeStatementFixerTest.java    |  2 +-
 .../model4adoc/include/IncludeStatement.java       | 60 ++++++++++++++++
 .../model4adoc/include}/IncludeStatements.java     | 41 +----------
 .../test/ast}/AbstractAsciiDocWriterTest.java      |  2 +-
 .../test/ast}/AdmonitionTest.java                  |  2 +-
 .../test/ast}/AttributedTableTest.java             |  2 +-
 .../test/ast}/DocumentHeaderTest.java              |  2 +-
 .../test => model4adoc/test/ast}/FootnoteTest.java |  2 +-
 .../test/ast}/NestedListTest.java                  |  2 +-
 .../test/ast}/OpenBlockTest.java                   |  2 +-
 .../test/ast}/SimpleListTest.java                  |  2 +-
 .../test/ast}/SimpleTableTest.java                 |  2 +-
 .../test => model4adoc/test/ast}/_Debug.java       |  2 +-
 .../projectmodel/ProjectResourceCoordinates.java   | 84 ++++++++++++++++++++++
 16 files changed, 225 insertions(+), 53 deletions(-)

diff --git a/commons/src/main/java/org/apache/isis/commons/internal/resources/_ResourceCoordinates.java b/commons/src/main/java/org/apache/isis/commons/internal/resources/_ResourceCoordinates.java
new file mode 100644
index 0000000..ae1b6d9
--- /dev/null
+++ b/commons/src/main/java/org/apache/isis/commons/internal/resources/_ResourceCoordinates.java
@@ -0,0 +1,67 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.commons.internal.resources;
+
+import org.apache.isis.commons.collections.Can;
+
+import lombok.NonNull;
+import lombok.Value;
+import lombok.val;
+
+/**
+ * <h1>- internal use only -</h1>
+ * <p>
+ * Utilities for locating resources.
+ * </p>
+ * <p>
+ * <b>WARNING</b>: Do <b>NOT</b> use any of the classes provided by this package! <br/>
+ * These may be changed or removed without notice!
+ * </p>
+ * @since 2.0
+ */
+@Value
+public final class _ResourceCoordinates implements Comparable<_ResourceCoordinates> {
+    
+    private final @NonNull Can<String> components;
+    
+    @Override
+    public int compareTo(final @NonNull _ResourceCoordinates o) {
+        
+        val compa = this.getComponents();
+        val compb = o.getComponents();
+        
+        val a = compa.iterator();
+        val b = compb.iterator();
+        
+        while(a.hasNext() || b.hasNext()) {
+            
+            val left = a.hasNext() ? a.next() : "";
+            val right = b.hasNext() ? b.next() : "";
+            
+            int c = left.compareTo(right);
+            if(c!=0) {
+                return c;
+            } 
+            
+        }
+        return 0;
+    }
+    
+
+}
diff --git a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/adocfix/OrphanedIncludeStatementFixer.java b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/adocfix/OrphanedIncludeStatementFixer.java
index 9fba68a..b9fc99f 100644
--- a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/adocfix/OrphanedIncludeStatementFixer.java
+++ b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/adocfix/OrphanedIncludeStatementFixer.java
@@ -24,10 +24,10 @@ import java.util.SortedSet;
 
 import org.apache.isis.commons.internal.base._Refs;
 import org.apache.isis.commons.internal.base._Text;
-import org.apache.isis.commons.internal.debug._Probe;
 import org.apache.isis.tooling.cli.CliConfig;
-import org.apache.isis.tooling.cli.adocfix.IncludeStatements.IncludeStatement;
 import org.apache.isis.tooling.j2adoc.J2AdocContext;
+import org.apache.isis.tooling.model4adoc.include.IncludeStatement;
+import org.apache.isis.tooling.model4adoc.include.IncludeStatements;
 
 import lombok.NonNull;
 import lombok.val;
diff --git a/tooling/cli/src/test/java/org/apache/isis/tooling/cli/test/adocfix/IncludeStatementFixerTest.java b/tooling/cli/src/test/java/org/apache/isis/tooling/cli/test/adocfix/IncludeStatementFixerTest.java
index b4fe499..33935ae 100644
--- a/tooling/cli/src/test/java/org/apache/isis/tooling/cli/test/adocfix/IncludeStatementFixerTest.java
+++ b/tooling/cli/src/test/java/org/apache/isis/tooling/cli/test/adocfix/IncludeStatementFixerTest.java
@@ -28,7 +28,7 @@ import org.junit.jupiter.api.Test;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.internal.base._Text;
 import org.apache.isis.commons.internal.collections._Sets;
-import org.apache.isis.tooling.cli.adocfix.IncludeStatements;
+import org.apache.isis.tooling.model4adoc.include.IncludeStatements;
 
 import lombok.NonNull;
 import lombok.val;
diff --git a/tooling/model4adoc/src/main/java/org/apache/isis/tooling/model4adoc/include/IncludeStatement.java b/tooling/model4adoc/src/main/java/org/apache/isis/tooling/model4adoc/include/IncludeStatement.java
new file mode 100644
index 0000000..41cb998
--- /dev/null
+++ b/tooling/model4adoc/src/main/java/org/apache/isis/tooling/model4adoc/include/IncludeStatement.java
@@ -0,0 +1,60 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.tooling.model4adoc.include;
+
+import org.apache.isis.commons.internal.base._Strings;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
+
+import lombok.Builder;
+import lombok.Value;
+
+@Value @Builder
+public final class IncludeStatement {
+    int zeroBasedLineIndex;
+    String matchingLine;
+    String referencePath;
+    String referenceShortName;
+    
+    String version;
+    String component;
+    String module;
+    String type; // usually 'page'
+    String ext;
+    String options;
+    
+    public boolean isLocal() {
+        return _Strings.isNullOrEmpty(component);
+    }
+    
+    public String toAdocAsString() {
+        //TODO if local might look slightly different 
+        if(isLocal()) {
+            throw _Exceptions.notImplemented();
+        }
+        
+        return String.format("include::%s%s:%s:%s$%s%s", 
+                _Strings.nullToEmpty(version).isEmpty() ? "" : version + "@",
+                _Strings.nullToEmpty(component),
+                _Strings.nullToEmpty(module),
+                type,
+                referencePath,
+                _Strings.nullToEmpty(options));
+    }
+    
+}
diff --git a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/adocfix/IncludeStatements.java b/tooling/model4adoc/src/main/java/org/apache/isis/tooling/model4adoc/include/IncludeStatements.java
similarity index 76%
rename from tooling/cli/src/main/java/org/apache/isis/tooling/cli/adocfix/IncludeStatements.java
rename to tooling/model4adoc/src/main/java/org/apache/isis/tooling/model4adoc/include/IncludeStatements.java
index 4df60ed..64becc3 100644
--- a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/adocfix/IncludeStatements.java
+++ b/tooling/model4adoc/src/main/java/org/apache/isis/tooling/model4adoc/include/IncludeStatements.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.tooling.cli.adocfix;
+package org.apache.isis.tooling.model4adoc.include;
 
 import java.util.Optional;
 import java.util.function.BiConsumer;
@@ -24,52 +24,13 @@ import java.util.function.UnaryOperator;
 
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.internal.base._Refs;
-import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.commons.internal.exceptions._Exceptions;
 
-import lombok.Builder;
 import lombok.NonNull;
-import lombok.Value;
 import lombok.val;
 
 public final class IncludeStatements {
     
-    @Value @Builder
-    public static class IncludeStatement {
-        int zeroBasedLineIndex;
-        String matchingLine;
-        String referencePath;
-        String referenceShortName;
-        
-        String version;
-        String component;
-        String module;
-        String type; // usually 'page'
-        String ext;
-        String options;
-        
-        public boolean isLocal() {
-            return _Strings.isNullOrEmpty(component);
-        }
-        
-        public String toAdocAsString() {
-            //TODO if local might look slightly different 
-            if(isLocal()) {
-                throw _Exceptions.notImplemented();
-            }
-            
-            return String.format("include::%s%s:%s:%s$%s%s", 
-                    _Strings.nullToEmpty(version).isEmpty() ? "" : version + "@",
-                    _Strings.nullToEmpty(component),
-                    _Strings.nullToEmpty(module),
-                    type,
-                    referencePath,
-                    _Strings.nullToEmpty(options));
-        }
-        
-    }
-    
     // -- UTILITIES
     
     public static Can<IncludeStatement> find(
diff --git a/tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/AbstractAsciiDocWriterTest.java b/tooling/model4adoc/src/test/java/org/apache/isis/tooling/model4adoc/test/ast/AbstractAsciiDocWriterTest.java
similarity index 98%
rename from tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/AbstractAsciiDocWriterTest.java
rename to tooling/model4adoc/src/test/java/org/apache/isis/tooling/model4adoc/test/ast/AbstractAsciiDocWriterTest.java
index d2187e0..403fde2 100644
--- a/tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/AbstractAsciiDocWriterTest.java
+++ b/tooling/model4adoc/src/test/java/org/apache/isis/tooling/model4adoc/test/ast/AbstractAsciiDocWriterTest.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.tooling.adocmodel.test;
+package org.apache.isis.tooling.model4adoc.test.ast;
 
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
diff --git a/tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/AdmonitionTest.java b/tooling/model4adoc/src/test/java/org/apache/isis/tooling/model4adoc/test/ast/AdmonitionTest.java
similarity index 97%
rename from tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/AdmonitionTest.java
rename to tooling/model4adoc/src/test/java/org/apache/isis/tooling/model4adoc/test/ast/AdmonitionTest.java
index 7071d39..5f949d6 100644
--- a/tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/AdmonitionTest.java
+++ b/tooling/model4adoc/src/test/java/org/apache/isis/tooling/model4adoc/test/ast/AdmonitionTest.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.tooling.adocmodel.test;
+package org.apache.isis.tooling.model4adoc.test.ast;
 
 import java.io.IOException;
 
diff --git a/tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/AttributedTableTest.java b/tooling/model4adoc/src/test/java/org/apache/isis/tooling/model4adoc/test/ast/AttributedTableTest.java
similarity index 97%
rename from tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/AttributedTableTest.java
rename to tooling/model4adoc/src/test/java/org/apache/isis/tooling/model4adoc/test/ast/AttributedTableTest.java
index 8e9bba1..c9bbfba 100644
--- a/tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/AttributedTableTest.java
+++ b/tooling/model4adoc/src/test/java/org/apache/isis/tooling/model4adoc/test/ast/AttributedTableTest.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.tooling.adocmodel.test;
+package org.apache.isis.tooling.model4adoc.test.ast;
 
 import java.io.IOException;
 
diff --git a/tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/DocumentHeaderTest.java b/tooling/model4adoc/src/test/java/org/apache/isis/tooling/model4adoc/test/ast/DocumentHeaderTest.java
similarity index 97%
rename from tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/DocumentHeaderTest.java
rename to tooling/model4adoc/src/test/java/org/apache/isis/tooling/model4adoc/test/ast/DocumentHeaderTest.java
index ca08df0..a718df5 100644
--- a/tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/DocumentHeaderTest.java
+++ b/tooling/model4adoc/src/test/java/org/apache/isis/tooling/model4adoc/test/ast/DocumentHeaderTest.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.tooling.adocmodel.test;
+package org.apache.isis.tooling.model4adoc.test.ast;
 
 import java.io.IOException;
 
diff --git a/tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/FootnoteTest.java b/tooling/model4adoc/src/test/java/org/apache/isis/tooling/model4adoc/test/ast/FootnoteTest.java
similarity index 97%
rename from tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/FootnoteTest.java
rename to tooling/model4adoc/src/test/java/org/apache/isis/tooling/model4adoc/test/ast/FootnoteTest.java
index 952f788..b203cf9 100644
--- a/tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/FootnoteTest.java
+++ b/tooling/model4adoc/src/test/java/org/apache/isis/tooling/model4adoc/test/ast/FootnoteTest.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.tooling.adocmodel.test;
+package org.apache.isis.tooling.model4adoc.test.ast;
 
 import java.io.IOException;
 
diff --git a/tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/NestedListTest.java b/tooling/model4adoc/src/test/java/org/apache/isis/tooling/model4adoc/test/ast/NestedListTest.java
similarity index 97%
rename from tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/NestedListTest.java
rename to tooling/model4adoc/src/test/java/org/apache/isis/tooling/model4adoc/test/ast/NestedListTest.java
index 1940d1c..e761dfa 100644
--- a/tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/NestedListTest.java
+++ b/tooling/model4adoc/src/test/java/org/apache/isis/tooling/model4adoc/test/ast/NestedListTest.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.tooling.adocmodel.test;
+package org.apache.isis.tooling.model4adoc.test.ast;
 
 import java.io.IOException;
 
diff --git a/tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/OpenBlockTest.java b/tooling/model4adoc/src/test/java/org/apache/isis/tooling/model4adoc/test/ast/OpenBlockTest.java
similarity index 98%
rename from tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/OpenBlockTest.java
rename to tooling/model4adoc/src/test/java/org/apache/isis/tooling/model4adoc/test/ast/OpenBlockTest.java
index acaab07..f77f823 100644
--- a/tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/OpenBlockTest.java
+++ b/tooling/model4adoc/src/test/java/org/apache/isis/tooling/model4adoc/test/ast/OpenBlockTest.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.tooling.adocmodel.test;
+package org.apache.isis.tooling.model4adoc.test.ast;
 
 import java.io.IOException;
 
diff --git a/tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/SimpleListTest.java b/tooling/model4adoc/src/test/java/org/apache/isis/tooling/model4adoc/test/ast/SimpleListTest.java
similarity index 97%
rename from tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/SimpleListTest.java
rename to tooling/model4adoc/src/test/java/org/apache/isis/tooling/model4adoc/test/ast/SimpleListTest.java
index b68a4ca..8d6dcdb 100644
--- a/tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/SimpleListTest.java
+++ b/tooling/model4adoc/src/test/java/org/apache/isis/tooling/model4adoc/test/ast/SimpleListTest.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.tooling.adocmodel.test;
+package org.apache.isis.tooling.model4adoc.test.ast;
 
 import java.io.IOException;
 
diff --git a/tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/SimpleTableTest.java b/tooling/model4adoc/src/test/java/org/apache/isis/tooling/model4adoc/test/ast/SimpleTableTest.java
similarity index 97%
rename from tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/SimpleTableTest.java
rename to tooling/model4adoc/src/test/java/org/apache/isis/tooling/model4adoc/test/ast/SimpleTableTest.java
index 9cc568a..abcffa7 100644
--- a/tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/SimpleTableTest.java
+++ b/tooling/model4adoc/src/test/java/org/apache/isis/tooling/model4adoc/test/ast/SimpleTableTest.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.tooling.adocmodel.test;
+package org.apache.isis.tooling.model4adoc.test.ast;
 
 import java.io.IOException;
 
diff --git a/tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/_Debug.java b/tooling/model4adoc/src/test/java/org/apache/isis/tooling/model4adoc/test/ast/_Debug.java
similarity index 98%
rename from tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/_Debug.java
rename to tooling/model4adoc/src/test/java/org/apache/isis/tooling/model4adoc/test/ast/_Debug.java
index 386cc84..c14ed76 100644
--- a/tooling/model4adoc/src/test/java/org/apache/isis/tooling/adocmodel/test/_Debug.java
+++ b/tooling/model4adoc/src/test/java/org/apache/isis/tooling/model4adoc/test/ast/_Debug.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.tooling.adocmodel.test;
+package org.apache.isis.tooling.model4adoc.test.ast;
 
 import java.util.Optional;
 
diff --git a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ProjectResourceCoordinates.java b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ProjectResourceCoordinates.java
new file mode 100644
index 0000000..ff5a6c2
--- /dev/null
+++ b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ProjectResourceCoordinates.java
@@ -0,0 +1,84 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.tooling.projectmodel;
+
+import java.util.Comparator;
+
+import javax.annotation.Nullable;
+
+import org.apache.isis.commons.collections.Can;
+
+import lombok.Builder;
+import lombok.NonNull;
+import lombok.Value;
+
+@Value @Builder
+public class ProjectResourceCoordinates 
+implements Comparable<ProjectResourceCoordinates> {
+
+    /**
+     * multi-part top level location specifier 
+     * like eg. adoc include {@code component:module:page$}
+     * or a file-system location {@code ~/my-projects/my-project},
+     * (whether relative or absolute is not specified)      
+     */
+    private final @NonNull Can<String> location;
+    
+    /**
+     * multi-part (location relative) path like eg. {@code org.apache.isis}     
+     */
+    private final @NonNull Can<String> namespace;
+    
+    /**
+     * multi-part name like eg. a filename {@code docs.adoc},
+     * or a nested class name {@code A$B},       
+     */
+    private final @NonNull Can<String> name;
+    
+    /**
+     * usually part of the multi-part name;  
+     * eg. a filename without extension, 
+     * or a java class simple name when nested
+     */
+    private final @NonNull String simpleName;
+    
+    /**
+     * ever only used for display, presumably human readable;
+     * other than that not specified
+     */
+    private final @NonNull String friendlyName;
+
+    private final static Comparator<ProjectResourceCoordinates> comparator =
+            Comparator.comparing(ProjectResourceCoordinates::getLocation)
+           .thenComparing(ProjectResourceCoordinates::getNamespace)
+           .thenComparing(ProjectResourceCoordinates::getName);
+    
+    @Override
+    public int compareTo(final @Nullable ProjectResourceCoordinates other) {
+     // when returning
+        // -1 ... this is before other 
+        // +1 ... this is after other
+        if(other==null) {
+            return 1; // nulls first 
+        }
+        return comparator.compare(this, other);
+    }
+
+    
+}