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 2018/05/15 16:03:32 UTC
[isis] branch master updated: ISIS-1947 fixes several issues
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 <ah...@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
ahuber@apache.org.