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.