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/04 12:24:52 UTC

[isis] 01/03: ISIS-898: hardcode AjaxFallbackLink to be enabled in hierarchy

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

commit dfe84e10c740cfadb19fe6bb68f6b15248227d43
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri May 4 11:56:18 2018 +0200

    ISIS-898: hardcode AjaxFallbackLink to be enabled in hierarchy
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-898
---
 .../components/tree/IsisToWicketTreeAdapter.java   | 70 ++++++++++++++++++++--
 1 file changed, 66 insertions(+), 4 deletions(-)

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 021d447..020d4ef 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
@@ -7,6 +7,7 @@ import java.util.Optional;
 import java.util.stream.Stream;
 
 import org.apache.isis.applib.internal.collections._Lists;
+import org.apache.isis.applib.internal.exceptions._Exceptions;
 import org.apache.isis.applib.tree.TreeAdapter;
 import org.apache.isis.applib.tree.TreeNode;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -19,8 +20,12 @@ import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.model.models.ValueModel;
 import org.apache.isis.viewer.wicket.ui.components.entity.icontitle.EntityIconAndTitlePanel;
 import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxFallbackLink;
 import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider;
 import org.apache.wicket.extensions.markup.html.repeater.tree.NestedTree;
+import org.apache.wicket.extensions.markup.html.repeater.tree.Node;
 import org.apache.wicket.extensions.markup.html.repeater.tree.theme.WindowsTheme;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.LoadableDetachableModel;
@@ -37,6 +42,9 @@ class IsisToWicketTreeAdapter {
 	
 	// -- RENDERING
 	
+	/**
+	 * Wicket's Tree Component implemented for Isis
+	 */
 	private static class EntityTree extends NestedTree<EntityModel> {
 
 		private static final long serialVersionUID = 1L;
@@ -44,6 +52,9 @@ class IsisToWicketTreeAdapter {
 		public EntityTree(String id, ITreeProvider<EntityModel> provider) {
 			super(id, provider);
 			add(new WindowsTheme()); // TODO not required if Isis provides it's own css styles for tree-nodes
+			
+			super.setEnabled(true);
+			super.setVisible(true);
 		}
 		
 		/**
@@ -52,7 +63,50 @@ class IsisToWicketTreeAdapter {
 		@Override
 		protected Component newContentComponent(String id, IModel<EntityModel> node) {
 			final EntityModel entityModel = node.getObject();
-			return new EntityIconAndTitlePanel(id, entityModel);
+			final Component entityIconAndTitle = new EntityIconAndTitlePanel(id, entityModel);
+			return entityIconAndTitle;
+		}
+		
+		/**
+		 * To hardcode Node's <pre>AjaxFallbackLink.isEnabledInHierarchy()->true</pre> we override this method.
+		 */
+		@Override
+		public Component newNodeComponent(String id, IModel<EntityModel> model) {
+			return new Node<EntityModel>(id, this, model)
+			{
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected Component createContent(String id, IModel<EntityModel> model) {
+					return EntityTree.this.newContentComponent(id, model);
+				}
+				
+				@Override
+				protected MarkupContainer createJunctionComponent(String id) {
+					
+					final Node<EntityModel> self = this;
+					
+					return new AjaxFallbackLink<Void>(id) {
+						private static final long serialVersionUID = 1L;
+						
+						@Override
+						public void onClick(AjaxRequestTarget target) {
+							toggle();
+						}
+
+						@Override
+						public boolean isEnabled() {
+							return EntityTree.this.getProvider().hasChildren(self.getModelObject());
+						}
+						
+						@Override
+						public boolean isEnabledInHierarchy() {
+							return true;
+						}
+						
+					};
+				}
+			};
 		}
 
 		
@@ -123,7 +177,9 @@ class IsisToWicketTreeAdapter {
 		
 	}
 
-	
+	/**
+	 * Wicket's ITreeProvider implemented for Isis
+	 */
 	private static class EntityModelTreeProvider implements ITreeProvider<EntityModel> {
 
 		private static final long serialVersionUID = 1L;
@@ -162,6 +218,10 @@ class IsisToWicketTreeAdapter {
 		
 	}
 	
+	/**
+	 * @param model
+	 * @return Wicket's ITreeProvider
+	 */
 	private static ITreeProvider<EntityModel> toITreeProvider(ModelAbstract<ObjectAdapter> model) {
 		
 		final TreeNode tree = (TreeNode) model.getObject().getObject();
@@ -183,7 +243,8 @@ class IsisToWicketTreeAdapter {
 
 		@Override
 		protected EntityModel load() {
-			return null; //TODO [ahuber] load model by id, possibly not required
+			//FIXME load EntityModel by id
+			throw _Exceptions.notImplemented();
 		}
 
 		/**
@@ -192,7 +253,8 @@ class IsisToWicketTreeAdapter {
 		@Override
 		public boolean equals(Object obj) {
 			if (obj instanceof EntityModel) {
-				return ((EntityModel) obj).getObject().getOid().equals(id);
+				final EntityModel other = (EntityModel) obj;
+				return other.getObject().getOid().equals(id);
 			}
 			return false;
 		}

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