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/01/20 11:00:22 UTC

[isis] branch master updated: ISIS-2158: introduces Vertex+Edge as common base for Tree and Graph data structures

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 797d1f6  ISIS-2158: introduces Vertex+Edge as common base for Tree and Graph data structures
797d1f6 is described below

commit 797d1f6d58cea111e3ad15e465e9cf0e89d9566d
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Jan 20 12:00:07 2020 +0100

    ISIS-2158: introduces Vertex+Edge as common base for Tree and Graph data
    structures
    
    also moves **/applib/tree -> **/applib/graph/tree
---
 .../{tree/TreeState.java => graph/Edge.java}       | 21 ++++++-------
 .../{tree/TreeState.java => graph/SimpleEdge.java} | 22 ++++++++------
 .../TreeState_Default.java => graph/Vertex.java}   | 31 ++++++++++++-------
 .../isis/applib/{ => graph}/tree/LazyTreeNode.java |  2 +-
 .../isis/applib/{ => graph}/tree/TreeAdapter.java  |  2 +-
 .../isis/applib/{ => graph}/tree/TreeNode.java     | 35 +++++++++++++++++-----
 .../tree/TreeNode_iteratorBreadthFirst.java        |  2 +-
 .../tree/TreeNode_iteratorDepthFirst.java          |  2 +-
 .../tree/TreeNode_iteratorHierarchyUp.java         |  2 +-
 .../isis/applib/{ => graph}/tree/TreePath.java     |  2 +-
 .../applib/{ => graph}/tree/TreePath_Default.java  |  2 +-
 .../isis/applib/{ => graph}/tree/TreeState.java    |  2 +-
 .../applib/{ => graph}/tree/TreeState_Default.java |  2 +-
 .../isis/applib/{ => graph}/tree/TreePathTest.java |  4 ++-
 ...odeValueFacetUsingSemanticsProviderFactory.java |  2 +-
 .../treenode/TreeNodeValueSemanticsProvider.java   |  6 ++--
 .../bookmarks/BookmarkServiceInternalDefault.java  | 26 ++++++++--------
 .../demoapp/dom/tree/FileSystemTreeAdapter.java    |  2 +-
 .../src/main/java/demoapp/dom/tree/TreeDemo.java   |  4 +--
 .../components/tree/IsisToWicketTreeAdapter.java   |  6 ++--
 .../ui/components/tree/TreePanelFactories.java     |  4 +--
 21 files changed, 111 insertions(+), 70 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/tree/TreeState.java b/api/applib/src/main/java/org/apache/isis/applib/graph/Edge.java
similarity index 74%
copy from api/applib/src/main/java/org/apache/isis/applib/tree/TreeState.java
copy to api/applib/src/main/java/org/apache/isis/applib/graph/Edge.java
index 99932d2..1650f5b 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/tree/TreeState.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/graph/Edge.java
@@ -16,17 +16,18 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.applib.tree;
+package org.apache.isis.applib.graph;
 
-import java.io.Serializable;
-import java.util.Set;
-
-public interface TreeState extends Serializable {
-
-    public static TreeState rootCollapsed() {
-        return new TreeState_Default();
-    }
+/**
+ * Fundamental building block for graph structures. 
+ * 
+ * @since 2.0
+ *
+ * @param <T> type constraint for values contained by this edge's vertices
+ */
+public interface Edge<T> {
 
-    public Set<TreePath> getExpandedNodePaths();
+    public Vertex<T> getFrom();
+    public Vertex<T> getTo();
 
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/tree/TreeState.java b/api/applib/src/main/java/org/apache/isis/applib/graph/SimpleEdge.java
similarity index 71%
copy from api/applib/src/main/java/org/apache/isis/applib/tree/TreeState.java
copy to api/applib/src/main/java/org/apache/isis/applib/graph/SimpleEdge.java
index 99932d2..3eba78a 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/tree/TreeState.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/graph/SimpleEdge.java
@@ -16,17 +16,21 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.applib.tree;
+package org.apache.isis.applib.graph;
 
-import java.io.Serializable;
-import java.util.Set;
+import lombok.Value;
 
-public interface TreeState extends Serializable {
-
-    public static TreeState rootCollapsed() {
-        return new TreeState_Default();
-    }
+/**
+ * Fundamental building block for graph structures. 
+ * 
+ * @since 2.0
+ *
+ * @param <T> type constraint for values contained by this edge's vertices
+ */
+@Value(staticConstructor = "of")
+public class SimpleEdge<T> implements Edge<T> {
 
-    public Set<TreePath> getExpandedNodePaths();
+    Vertex<T> from;
+    Vertex<T> to;
 
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/tree/TreeState_Default.java b/api/applib/src/main/java/org/apache/isis/applib/graph/Vertex.java
similarity index 64%
copy from api/applib/src/main/java/org/apache/isis/applib/tree/TreeState_Default.java
copy to api/applib/src/main/java/org/apache/isis/applib/graph/Vertex.java
index 8f11f1d..d2d09b0 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/tree/TreeState_Default.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/graph/Vertex.java
@@ -16,19 +16,30 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.applib.tree;
+package org.apache.isis.applib.graph;
 
-import java.util.HashSet;
-import java.util.Set;
+import java.util.stream.Stream;
 
-class TreeState_Default implements TreeState {
-    private static final long serialVersionUID = 7971539034663543462L;
+/**
+ * Fundamental building block for graph structures. 
+ * 
+ * @since 2.0
+ *
+ * @param <T> type constraint for values contained by this vertex
+ */
+public interface Vertex<T> {
+
+    // -- VALUE
+
+    public T getValue();
+
+    // -- EDGES
+
+    public int getIncomingCount();
+    public int getOutgoingCount();
 
-    private final Set<TreePath> expandedNodes = new HashSet<>();
+    public Stream<Edge<T>> streamIncoming();
+    public Stream<Edge<T>> streamOutgoing();
 
-    @Override
-    public Set<TreePath> getExpandedNodePaths() {
-        return expandedNodes;
-    }
 
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/tree/LazyTreeNode.java b/api/applib/src/main/java/org/apache/isis/applib/graph/tree/LazyTreeNode.java
similarity index 99%
rename from api/applib/src/main/java/org/apache/isis/applib/tree/LazyTreeNode.java
rename to api/applib/src/main/java/org/apache/isis/applib/graph/tree/LazyTreeNode.java
index 673d3d1..63218a8 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/tree/LazyTreeNode.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/graph/tree/LazyTreeNode.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.applib.tree;
+package org.apache.isis.applib.graph.tree;
 
 import java.util.Objects;
 import java.util.concurrent.atomic.LongAdder;
diff --git a/api/applib/src/main/java/org/apache/isis/applib/tree/TreeAdapter.java b/api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreeAdapter.java
similarity index 97%
rename from api/applib/src/main/java/org/apache/isis/applib/tree/TreeAdapter.java
rename to api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreeAdapter.java
index 50cc113..730206b 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/tree/TreeAdapter.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreeAdapter.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.applib.tree;
+package org.apache.isis.applib.graph.tree;
 
 import java.util.Optional;
 import java.util.stream.Stream;
diff --git a/api/applib/src/main/java/org/apache/isis/applib/tree/TreeNode.java b/api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreeNode.java
similarity index 84%
rename from api/applib/src/main/java/org/apache/isis/applib/tree/TreeNode.java
rename to api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreeNode.java
index 2fbdd00..6ffc186 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/tree/TreeNode.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreeNode.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.applib.tree;
+package org.apache.isis.applib.graph.tree;
 
 import java.util.Iterator;
 import java.util.Set;
@@ -28,15 +28,36 @@ import java.util.stream.StreamSupport;
 import javax.annotation.Nullable;
 
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.graph.Edge;
+import org.apache.isis.applib.graph.SimpleEdge;
+import org.apache.isis.applib.graph.Vertex;
 import org.apache.isis.core.commons.internal.base._NullSafe;
 
-//@Container
-public interface TreeNode<T> {
-
-    // -- VALUE
-
-    public T getValue();
+/**
+ * Fundamental building block of Tree structures. 
+ * 
+ * @since 2.0
+ *
+ * @param <T> type constraint for values contained by this node
+ */
+public interface TreeNode<T> extends Vertex<T> {
 
+    // -- VERTEX - IMPLEMENTATION
+    
+    default int getIncomingCount() {
+        return isRoot() ? 0 : 1;
+    }
+    default int getOutgoingCount() {
+        return getChildCount();
+    }
+    default Stream<Edge<T>> streamIncoming() {
+        return isRoot() ? Stream.empty() : Stream.of(SimpleEdge.<T>of(getParentIfAny(), this));
+    }
+    default Stream<Edge<T>> streamOutgoing() {
+        return streamChildren()
+                .map(to->SimpleEdge.<T>of(this, to));
+    }
+    
     // -- PARENT
 
     public @Nullable TreeNode<T> getParentIfAny();
diff --git a/api/applib/src/main/java/org/apache/isis/applib/tree/TreeNode_iteratorBreadthFirst.java b/api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreeNode_iteratorBreadthFirst.java
similarity index 97%
rename from api/applib/src/main/java/org/apache/isis/applib/tree/TreeNode_iteratorBreadthFirst.java
rename to api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreeNode_iteratorBreadthFirst.java
index 84ac8e3..23565ba 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/tree/TreeNode_iteratorBreadthFirst.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreeNode_iteratorBreadthFirst.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.applib.tree;
+package org.apache.isis.applib.graph.tree;
 
 import java.util.ArrayDeque;
 import java.util.Deque;
diff --git a/api/applib/src/main/java/org/apache/isis/applib/tree/TreeNode_iteratorDepthFirst.java b/api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreeNode_iteratorDepthFirst.java
similarity index 97%
rename from api/applib/src/main/java/org/apache/isis/applib/tree/TreeNode_iteratorDepthFirst.java
rename to api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreeNode_iteratorDepthFirst.java
index a2bbbe0..f3e5e18 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/tree/TreeNode_iteratorDepthFirst.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreeNode_iteratorDepthFirst.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.applib.tree;
+package org.apache.isis.applib.graph.tree;
 
 import java.util.Iterator;
 import java.util.NoSuchElementException;
diff --git a/api/applib/src/main/java/org/apache/isis/applib/tree/TreeNode_iteratorHierarchyUp.java b/api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreeNode_iteratorHierarchyUp.java
similarity index 97%
rename from api/applib/src/main/java/org/apache/isis/applib/tree/TreeNode_iteratorHierarchyUp.java
rename to api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreeNode_iteratorHierarchyUp.java
index 0f9d374..3d3a252 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/tree/TreeNode_iteratorHierarchyUp.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreeNode_iteratorHierarchyUp.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.applib.tree;
+package org.apache.isis.applib.graph.tree;
 
 import java.util.Iterator;
 import java.util.NoSuchElementException;
diff --git a/api/applib/src/main/java/org/apache/isis/applib/tree/TreePath.java b/api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreePath.java
similarity index 97%
rename from api/applib/src/main/java/org/apache/isis/applib/tree/TreePath.java
rename to api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreePath.java
index dc0df9d..33e4410 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/tree/TreePath.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreePath.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.applib.tree;
+package org.apache.isis.applib.graph.tree;
 
 import java.io.Serializable;
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/tree/TreePath_Default.java b/api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreePath_Default.java
similarity index 98%
rename from api/applib/src/main/java/org/apache/isis/applib/tree/TreePath_Default.java
rename to api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreePath_Default.java
index f4e8483..1e81546 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/tree/TreePath_Default.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreePath_Default.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.applib.tree;
+package org.apache.isis.applib.graph.tree;
 
 import java.util.Arrays;
 import java.util.Objects;
diff --git a/api/applib/src/main/java/org/apache/isis/applib/tree/TreeState.java b/api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreeState.java
similarity index 96%
rename from api/applib/src/main/java/org/apache/isis/applib/tree/TreeState.java
rename to api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreeState.java
index 99932d2..22e3470 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/tree/TreeState.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreeState.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.applib.tree;
+package org.apache.isis.applib.graph.tree;
 
 import java.io.Serializable;
 import java.util.Set;
diff --git a/api/applib/src/main/java/org/apache/isis/applib/tree/TreeState_Default.java b/api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreeState_Default.java
similarity index 96%
rename from api/applib/src/main/java/org/apache/isis/applib/tree/TreeState_Default.java
rename to api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreeState_Default.java
index 8f11f1d..e1d280f 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/tree/TreeState_Default.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreeState_Default.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.applib.tree;
+package org.apache.isis.applib.graph.tree;
 
 import java.util.HashSet;
 import java.util.Set;
diff --git a/api/applib/src/test/java/org/apache/isis/applib/tree/TreePathTest.java b/api/applib/src/test/java/org/apache/isis/applib/graph/tree/TreePathTest.java
similarity index 94%
rename from api/applib/src/test/java/org/apache/isis/applib/tree/TreePathTest.java
rename to api/applib/src/test/java/org/apache/isis/applib/graph/tree/TreePathTest.java
index bd1becc..bc9f52c 100644
--- a/api/applib/src/test/java/org/apache/isis/applib/tree/TreePathTest.java
+++ b/api/applib/src/test/java/org/apache/isis/applib/graph/tree/TreePathTest.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.applib.tree;
+package org.apache.isis.applib.graph.tree;
 
 import org.hamcrest.Matchers;
 import org.junit.Test;
@@ -24,6 +24,8 @@ import org.junit.Test;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
 
+import org.apache.isis.applib.graph.tree.TreePath;
+
 public class TreePathTest {
 
     @Test
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/treenode/TreeNodeValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/treenode/TreeNodeValueFacetUsingSemanticsProviderFactory.java
index b88d862..e40662c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/treenode/TreeNodeValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/treenode/TreeNodeValueFacetUsingSemanticsProviderFactory.java
@@ -19,7 +19,7 @@
 
 package org.apache.isis.core.metamodel.facets.value.treenode;
 
-import org.apache.isis.applib.tree.TreeNode;
+import org.apache.isis.applib.graph.tree.TreeNode;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueFacetUsingSemanticsProviderFactory;
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/treenode/TreeNodeValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/treenode/TreeNodeValueSemanticsProvider.java
index 4ebb308..4b912e6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/treenode/TreeNodeValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/treenode/TreeNodeValueSemanticsProvider.java
@@ -22,10 +22,10 @@ package org.apache.isis.core.metamodel.facets.value.treenode;
 import org.apache.isis.applib.adapters.DefaultsProvider;
 import org.apache.isis.applib.adapters.EncoderDecoder;
 import org.apache.isis.applib.adapters.Parser;
+import org.apache.isis.applib.graph.tree.LazyTreeNode;
+import org.apache.isis.applib.graph.tree.TreeNode;
+import org.apache.isis.applib.graph.tree.TreeState;
 import org.apache.isis.applib.services.urlencoding.UrlEncodingService;
-import org.apache.isis.applib.tree.LazyTreeNode;
-import org.apache.isis.applib.tree.TreeNode;
-import org.apache.isis.applib.tree.TreeState;
 import org.apache.isis.core.commons.internal.memento._Mementos;
 import org.apache.isis.core.commons.internal.memento._Mementos.Memento;
 import org.apache.isis.core.commons.internal.memento._Mementos.SerializingAdapter;
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/bookmarks/BookmarkServiceInternalDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/bookmarks/BookmarkServiceInternalDefault.java
index e739ed5..583a690 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/bookmarks/BookmarkServiceInternalDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/bookmarks/BookmarkServiceInternalDefault.java
@@ -19,8 +19,6 @@
 package org.apache.isis.core.runtimeservices.bookmarks;
 
 import java.io.Serializable;
-import java.math.BigDecimal;
-import java.math.BigInteger;
 import java.util.List;
 import java.util.Set;
 
@@ -33,11 +31,11 @@ import org.springframework.core.annotation.Order;
 import org.springframework.stereotype.Service;
 
 import org.apache.isis.applib.annotation.OrderPrecedence;
+import org.apache.isis.applib.graph.tree.TreeState;
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.bookmark.BookmarkHolder;
 import org.apache.isis.applib.services.bookmark.BookmarkService;
 import org.apache.isis.applib.services.wrapper.WrapperFactory;
-import org.apache.isis.applib.tree.TreeState;
 import org.apache.isis.core.commons.internal.base._Casts;
 import org.apache.isis.core.commons.internal.collections._Lists;
 import org.apache.isis.core.commons.internal.collections._Sets;
@@ -210,18 +208,18 @@ public class BookmarkServiceInternalDefault implements BookmarkService, Serializ
     private final static Set<Class<? extends Serializable>> serializableFinalTypes = _Sets.of(
             String.class, String[].class,
             Class.class, Class[].class,
-            Boolean.class, boolean.class, Boolean[].class, boolean[].class,
-            Byte.class, byte.class, Byte[].class, byte[].class,
-            Short.class, short.class, Short[].class, short[].class,
-            Integer.class, int.class, Integer[].class, int[].class,
-            Long.class, long.class, Long[].class, long[].class,
-            Float.class, float.class, Float[].class, float[].class,
-            Double.class, double.class, Double[].class, double[].class
+            Character.class, Character[].class, char[].class,
+            Boolean.class, Boolean[].class, boolean[].class,
+            // Numbers
+            Byte[].class, byte[].class,
+            Short[].class, short[].class,
+            Integer[].class, int[].class,
+            Long[].class, long[].class,
+            Float[].class, float[].class,
+            Double[].class, double[].class
             );
 
     private final static List<Class<? extends Serializable>> serializableTypes = _Lists.of(
-            BigDecimal.class,
-            BigInteger.class,
             java.util.Date.class,
             java.sql.Date.class,
             Enum.class,
@@ -233,6 +231,10 @@ public class BookmarkServiceInternalDefault implements BookmarkService, Serializ
         if(!Serializable.class.isAssignableFrom(cls)) {
             return false;
         }
+        // primitive ... boolean, byte, char, short, int, long, float, and double. 
+        if(cls.isPrimitive() || Number.class.isAssignableFrom(cls)) {
+            return true;
+        }
         //[ahuber] any non-scalar values could be problematic, so we are careful with wild-cards here
         if(cls.getName().startsWith("java.time.")) {
             return true;
diff --git a/examples/demo/src/main/java/demoapp/dom/tree/FileSystemTreeAdapter.java b/examples/demo/src/main/java/demoapp/dom/tree/FileSystemTreeAdapter.java
index 2957501..4b9d25f 100644
--- a/examples/demo/src/main/java/demoapp/dom/tree/FileSystemTreeAdapter.java
+++ b/examples/demo/src/main/java/demoapp/dom/tree/FileSystemTreeAdapter.java
@@ -22,7 +22,7 @@ import java.io.File;
 import java.util.Optional;
 import java.util.stream.Stream;
 
-import org.apache.isis.applib.tree.TreeAdapter;
+import org.apache.isis.applib.graph.tree.TreeAdapter;
 
 import lombok.val;
 
diff --git a/examples/demo/src/main/java/demoapp/dom/tree/TreeDemo.java b/examples/demo/src/main/java/demoapp/dom/tree/TreeDemo.java
index 06bef30..90b39aa 100644
--- a/examples/demo/src/main/java/demoapp/dom/tree/TreeDemo.java
+++ b/examples/demo/src/main/java/demoapp/dom/tree/TreeDemo.java
@@ -22,8 +22,8 @@ import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Nature;
-import org.apache.isis.applib.tree.TreeNode;
-import org.apache.isis.applib.tree.TreePath;
+import org.apache.isis.applib.graph.tree.TreeNode;
+import org.apache.isis.applib.graph.tree.TreePath;
 
 import lombok.val;
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java
index 8449ecd..34b1ab4 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java
@@ -40,10 +40,10 @@ import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.LoadableDetachableModel;
 import org.apache.wicket.model.Model;
 
+import org.apache.isis.applib.graph.tree.TreeAdapter;
+import org.apache.isis.applib.graph.tree.TreeNode;
+import org.apache.isis.applib.graph.tree.TreePath;
 import org.apache.isis.applib.services.factory.FactoryService;
-import org.apache.isis.applib.tree.TreeAdapter;
-import org.apache.isis.applib.tree.TreeNode;
-import org.apache.isis.applib.tree.TreePath;
 import org.apache.isis.core.commons.internal.collections._Lists;
 import org.apache.isis.core.commons.internal.functions._Functions;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/TreePanelFactories.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/TreePanelFactories.java
index e147faa..69b4fad 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/TreePanelFactories.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/TreePanelFactories.java
@@ -53,7 +53,7 @@ public class TreePanelFactories {
 
             final ScalarModel scalarModel = (ScalarModel) model;
 
-            if(!scalarModel.isScalarTypeSubtypeOf(org.apache.isis.applib.tree.TreeNode.class)) {
+            if(!scalarModel.isScalarTypeSubtypeOf(org.apache.isis.applib.graph.tree.TreeNode.class)) {
                 return ApplicationAdvice.DOES_NOT_APPLY;
             }
 
@@ -88,7 +88,7 @@ public class TreePanelFactories {
                 return ApplicationAdvice.DOES_NOT_APPLY;
             }
 
-            return appliesIf( adapter.getPojo() instanceof org.apache.isis.applib.tree.TreeNode );
+            return appliesIf( adapter.getPojo() instanceof org.apache.isis.applib.graph.tree.TreeNode );
         }
 
         @Override