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 aedaeb9  ISIS-1947 fixes several issues
aedaeb9 is described below

commit aedaeb980ce9c1e0fe177e20508bd06a5d7b4854
Author: Andi Huber <ahu...@apache.org>
AuthorDate: Tue May 15 18:03:24 2018 +0200

    ISIS-1947 fixes several issues
---
 .../org/apache/isis/applib/tree/LazyTreeNode.java  | 12 --------
 .../treenode/TreeNodeValueSemanticsProvider.java   |  8 +++--
 .../bookmarks/BookmarkServiceInternalDefault.java  |  4 ++-
 .../components/tree/IsisToWicketTreeAdapter.java   | 35 +++++++++++++++-------
 4 files changed, 34 insertions(+), 25 deletions(-)

diff --git 
a/core/applib/src/main/java/org/apache/isis/applib/tree/LazyTreeNode.java 
b/core/applib/src/main/java/org/apache/isis/applib/tree/LazyTreeNode.java
index 2446c21..ffe6554 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/tree/LazyTreeNode.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/tree/LazyTreeNode.java
@@ -85,18 +85,6 @@ public class LazyTreeNode<T> implements TreeNode<T> {
        public TreeState getTreeState() {
                return sharedState;
        }
-
-//     @Override
-//     public boolean isExpanded() {
-//             // TODO Auto-generated method stub
-//             return false;
-//     }
-//     
-//     @Override
-//     public void setExpanded(boolean expanded) {
-//             // TODO Auto-generated method stub
-//             
-//     }
        
        // -- HELPER
        
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 66f3a8b..fcd12f7 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
@@ -26,7 +26,9 @@ import org.apache.isis.applib.internal.memento._Mementos;
 import org.apache.isis.applib.internal.memento._Mementos.Memento;
 import org.apache.isis.applib.internal.memento._Mementos.SerializingAdapter;
 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.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import 
org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
@@ -97,6 +99,7 @@ implements TreeNodeValueFacet {
                final Memento memento = newMemento();
                memento.put("primaryValue", treeNode.getValue());
                memento.put("adapterClass", treeNode.getTreeAdapterClass());
+               memento.put("treeState", treeNode.getTreeState());
                return memento.asString(); 
        }
 
@@ -104,9 +107,10 @@ implements TreeNodeValueFacet {
        @Override
        protected TreeNode<?> doRestore(final String input) {
                final Memento memento = parseMemento(input);
-               return TreeNode.lazy(
+               return LazyTreeNode.of(
                                memento.get("primaryValue", Object.class), 
-                               memento.get("adapterClass", Class.class));
+                               memento.get("adapterClass", Class.class),
+                               memento.get("treeState", TreeState.class));
        }
 
        // /////// toString ///////
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/bookmarks/BookmarkServiceInternalDefault.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/bookmarks/BookmarkServiceInternalDefault.java
index e08334a..14c4edc 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/bookmarks/BookmarkServiceInternalDefault.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/bookmarks/BookmarkServiceInternalDefault.java
@@ -39,6 +39,7 @@ import 
org.apache.isis.applib.services.bookmark.BookmarkHolder;
 import org.apache.isis.applib.services.bookmark.BookmarkService;
 import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.applib.services.wrapper.WrapperFactory;
+import org.apache.isis.applib.tree.TreeState;
 import 
org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
 import org.apache.isis.core.runtime.persistence.ObjectNotFoundException;
 
@@ -219,7 +220,8 @@ public class BookmarkServiceInternalDefault implements 
BookmarkService, Serializ
                java.util.Date.class,
                java.sql.Date.class,
                Enum.class,
-               Bookmark.class
+               Bookmark.class,
+               TreeState.class
     );
     
     private static boolean isPredefinedSerializable(final Class<?> cls) {
diff --git 
a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java
 
b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java
index dc504df..7e7f8af 100644
--- 
a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java
+++ 
b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java
@@ -14,6 +14,7 @@ import javax.resource.spi.IllegalStateException;
 
 import org.apache.isis.applib.internal.collections._Lists;
 import org.apache.isis.applib.internal.functions._Functions;
+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;
@@ -38,6 +39,7 @@ import 
org.apache.wicket.extensions.markup.html.repeater.tree.theme.WindowsTheme
 import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.LoadableDetachableModel;
+import org.apache.wicket.model.Model;
 
 class IsisToWicketTreeAdapter {
 
@@ -169,14 +171,24 @@ class IsisToWicketTreeAdapter {
                
                private final TreePath treePath;
 
+               public TreeModel(TreePath treePath) {
+                       super((ObjectAdapter)null);
+                       this.treePath = treePath;
+               }
+               
                public TreeModel(ObjectAdapter adapter, TreePath treePath) {
-                       super(adapter);
+                       super(Objects.requireNonNull(adapter));
                        this.treePath = treePath;
                }
                
                public TreePath getTreePath() {
                        return treePath;
                }
+               
+               public boolean isTreePathModelOnly() {
+                       return getObject()==null;
+               }
+               
        }
        
        // -- ISIS' TREE ADAPTER (FOR TREES OF TREE-MODEL NODES) 
@@ -200,8 +212,10 @@ class IsisToWicketTreeAdapter {
                                return wrappedTreeAdapter;
                        }
                        try {
-                               return wrappedTreeAdapter = 
treeAdapterClass.newInstance();
-                       } catch (InstantiationException | 
IllegalAccessException e) {
+                               final FactoryService factoryService = 
IsisContext.getServicesInjector()
+                                               
.lookupService(FactoryService.class);
+                               return wrappedTreeAdapter = 
factoryService.instantiate(treeAdapterClass);
+                       } catch (Exception e) {
                                throw new RuntimeException("failed to 
instantiate tree adapter", e);
                        }
                }
@@ -234,7 +248,7 @@ class IsisToWicketTreeAdapter {
                
                private TreeModel wrap(Object pojo, TreePath treePath) {
                        Objects.requireNonNull(pojo);
-                       return new 
TreeModel(persistenceSession().getAdapterFor(pojo), treePath);
+                       return new 
TreeModel(persistenceSession().adapterFor(pojo), treePath);
                }
                
                private Object unwrap(TreeModel model) {
@@ -294,7 +308,9 @@ class IsisToWicketTreeAdapter {
 
                @Override
                public IModel<TreeModel> model(final TreeModel treeModel) {
-                       return new LoadableDetachableTreeModel(treeModel);
+                       return treeModel.isTreePathModelOnly() 
+                                       ? Model.of(treeModel)
+                                       : new 
LoadableDetachableTreeModel(treeModel);
                }
                
        }
@@ -329,8 +345,8 @@ class IsisToWicketTreeAdapter {
 
                public LoadableDetachableTreeModel(TreeModel tModel) {
                        super(tModel);
-                       this.id = (RootOid) tModel.getObject().getOid();
                        this.treePath = tModel.getTreePath();
+                       this.id = (RootOid) tModel.getObject().getOid();
                        this.hashCode = Objects.hash(id.hashCode(), 
treePath.hashCode());
                }
 
@@ -342,14 +358,14 @@ class IsisToWicketTreeAdapter {
                        
                        final PersistenceSession persistenceSession = 
IsisContext.getPersistenceSession()
                                        .orElseThrow(()->new 
RuntimeException(new IllegalStateException(
-                                                       String.format("Tree 
creation: missing a PersistenceSession to recreate EntityModel "
+                                                       String.format("Tree 
creation: missing a PersistenceSession to recreate TreeModel "
                                                                        + "from 
Oid: '%s'", id)))
                                        );
                        
                        final ObjectAdapter objAdapter = 
persistenceSession.adapterFor(id);
                        if(objAdapter==null) {
                                throw new NoSuchElementException(
-                                               String.format("Tree creation: 
could not recreate EntityModel from Oid: '%s'", id)); 
+                                               String.format("Tree creation: 
could not recreate TreeModel from Oid: '%s'", id)); 
                        }
                        
                        final Object pojo = objAdapter.getObject();
@@ -392,7 +408,6 @@ class IsisToWicketTreeAdapter {
         */
        @SuppressWarnings({ "rawtypes" })
        private static TreeExpansionModel 
toIModelRepresentingCollapseExpandState(ModelAbstract<ObjectAdapter> model) {
-               
                final TreeNode treeNode = (TreeNode) 
model.getObject().getObject();
                final TreeState treeState = treeNode.getTreeState();
                return TreeExpansionModel.of(treeState.getExpandedNodePaths());
@@ -434,7 +449,7 @@ class IsisToWicketTreeAdapter {
                private TreeExpansionModel(Set<TreePath> expandedTreePaths) {
                        this.expandedTreePaths = expandedTreePaths;
                        this.expandedNodes = expandedTreePaths.stream()
-                       .map(tPath->new TreeModel(null, tPath))
+                       .map(tPath->new TreeModel(tPath))
                        .collect(Collectors.toSet());
                }
 

-- 
To stop receiving notification emails like this one, please contact
ahu...@apache.org.

Reply via email to