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.