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 0cfb182  ISIS-2340: vaa: work on action dialog parameter binding
0cfb182 is described below

commit 0cfb182d155a1925bbd08995ad24822fc554dc01
Author: Andi Huber <[email protected]>
AuthorDate: Thu Aug 27 15:35:10 2020 +0200

    ISIS-2340: vaa: work on action dialog parameter binding
    
    bring vaa up to speed with fx
---
 .../javafx/integtest/DemoFxTestAbstract.java       |  4 +-
 .../model/action/ActionUiModelFactoryFx.java       |  4 +-
 .../javafx/model/action/ActionUiModelFx.java       |  4 +-
 .../context/{UiContext.java => UiContextFx.java}   |  2 +-
 .../javafx/ui/IsisModuleIncViewerJavaFxUi.java     | 16 ++--
 .../javafx/ui/components/UiComponentFactoryFx.java |  6 +-
 .../ui/components/collections/TableViewFx.java     | 16 ++--
 .../javafx/ui/components/object/ObjectViewFx.java  |  6 +-
 .../ui/main/{UiController.java => MainViewFx.java} |  8 +-
 .../viewer/javafx/ui/main/MenuBuilderFx.java       |  4 +-
 ...UiActionHandler.java => UiActionHandlerFx.java} | 13 ++--
 .../ui/main/{UiBuilder.java => UiBuilderFx.java}   |  2 +-
 ...ContextDefault.java => UiContextFxDefault.java} |  4 +-
 .../viewer/vaadin/model/context/UiContextVaa.java  | 38 +++++++++
 .../vaadin/ui/IsisModuleIncViewerVaadinUi.java     |  6 +-
 .../vaadin/ui/components/action/ActionDialog.java  | 27 +++++--
 .../vaadin/ui/components/action/ActionForm.java    | 29 ++++---
 .../ui/components/collection/TableViewVaa.java     | 89 ++++++++++++++++------
 .../vaadin/ui/components/object/ObjectViewVaa.java | 19 ++++-
 .../viewer/vaadin/ui/pages/main/MainViewVaa.java   | 53 ++++++++-----
 ...iActionHandler.java => UiActionHandlerVaa.java} | 66 ++++++++--------
 .../vaadin/ui/pages/main/UiContextVaaDefault.java  | 86 +++++++++++++++++++++
 22 files changed, 352 insertions(+), 150 deletions(-)

diff --git 
a/examples/demo/javafx/src/test/java/demoapp/javafx/integtest/DemoFxTestAbstract.java
 
b/examples/demo/javafx/src/test/java/demoapp/javafx/integtest/DemoFxTestAbstract.java
index e78e1be..e5b6d28 100644
--- 
a/examples/demo/javafx/src/test/java/demoapp/javafx/integtest/DemoFxTestAbstract.java
+++ 
b/examples/demo/javafx/src/test/java/demoapp/javafx/integtest/DemoFxTestAbstract.java
@@ -23,7 +23,7 @@ import javax.inject.Inject;
 import org.junit.jupiter.api.BeforeAll;
 import org.springframework.boot.test.context.SpringBootTest;
 
-import org.apache.isis.incubator.viewer.javafx.model.context.UiContext;
+import org.apache.isis.incubator.viewer.javafx.model.context.UiContextFx;
 import 
org.apache.isis.incubator.viewer.javafx.viewer.IsisModuleIncViewerJavaFxViewer;
 import org.apache.isis.security.bypass.IsisModuleSecurityBypass;
 import 
org.apache.isis.testing.integtestsupport.applib.IsisIntegrationTestAbstract;
@@ -42,7 +42,7 @@ import demoapp.dom.DemoModule;
 )
 public abstract class DemoFxTestAbstract extends IsisIntegrationTestAbstract {
     
-    @Inject protected UiContext uiContext;
+    @Inject protected UiContextFx uiContext;
     
     @BeforeAll
     static void beforeAll() {
diff --git 
a/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionUiModelFactoryFx.java
 
b/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionUiModelFactoryFx.java
index 434d85a..c1584f3 100644
--- 
a/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionUiModelFactoryFx.java
+++ 
b/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionUiModelFactoryFx.java
@@ -19,11 +19,11 @@
 package org.apache.isis.incubator.viewer.javafx.model.action;
 
 import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.isis.incubator.viewer.javafx.model.context.UiContext;
+import org.apache.isis.incubator.viewer.javafx.model.context.UiContextFx;
 
 public class ActionUiModelFactoryFx {
 
-    public ActionUiModelFx newActionUiModel(UiContext uiContext, ManagedAction 
managedAction) {
+    public ActionUiModelFx newActionUiModel(UiContextFx uiContext, 
ManagedAction managedAction) {
         return ActionUiModelFx.of(uiContext, managedAction);
     }
     
diff --git 
a/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionUiModelFx.java
 
b/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionUiModelFx.java
index e54c3b7..5b2e85d 100644
--- 
a/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionUiModelFx.java
+++ 
b/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionUiModelFx.java
@@ -19,7 +19,7 @@
 package org.apache.isis.incubator.viewer.javafx.model.action;
 
 import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.isis.incubator.viewer.javafx.model.context.UiContext;
+import org.apache.isis.incubator.viewer.javafx.model.context.UiContextFx;
 import org.apache.isis.viewer.common.model.action.ActionUiMetaModel;
 import org.apache.isis.viewer.common.model.action.ActionUiModel;
 
@@ -34,7 +34,7 @@ import javafx.scene.control.MenuItem;
 @RequiredArgsConstructor(staticName = "of")
 public class ActionUiModelFx implements ActionUiModel<MenuItem, Node> {
 
-    private final UiContext uiContext;
+    private final UiContextFx uiContext;
     
     @Getter 
     private final ManagedAction managedAction;
diff --git 
a/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/context/UiContext.java
 
b/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/context/UiContextFx.java
similarity index 98%
rename from 
incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/context/UiContext.java
rename to 
incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/context/UiContextFx.java
index b3bcfc6..cc9c666 100644
--- 
a/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/context/UiContext.java
+++ 
b/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/context/UiContextFx.java
@@ -35,7 +35,7 @@ import javafx.scene.control.Button;
 import javafx.scene.control.Labeled;
 import javafx.scene.control.MenuItem;
 
-public interface UiContext {
+public interface UiContextFx {
 
     JavaFxViewerConfig getJavaFxViewerConfig();
     
diff --git 
a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/IsisModuleIncViewerJavaFxUi.java
 
b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/IsisModuleIncViewerJavaFxUi.java
index bf8701a..bffc9e0 100644
--- 
a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/IsisModuleIncViewerJavaFxUi.java
+++ 
b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/IsisModuleIncViewerJavaFxUi.java
@@ -37,10 +37,10 @@ import 
org.apache.isis.incubator.viewer.javafx.ui.decorator.icon.IconServiceDefa
 import 
org.apache.isis.incubator.viewer.javafx.ui.decorator.prototyping.PrototypingDecoratorForButton;
 import 
org.apache.isis.incubator.viewer.javafx.ui.decorator.prototyping.PrototypingDecoratorForFormField;
 import 
org.apache.isis.incubator.viewer.javafx.ui.decorator.prototyping.PrototypingInfoPopupProvider;
-import org.apache.isis.incubator.viewer.javafx.ui.main.UiActionHandler;
-import org.apache.isis.incubator.viewer.javafx.ui.main.UiBuilder;
-import org.apache.isis.incubator.viewer.javafx.ui.main.UiContextDefault;
-import org.apache.isis.incubator.viewer.javafx.ui.main.UiController;
+import org.apache.isis.incubator.viewer.javafx.ui.main.UiActionHandlerFx;
+import org.apache.isis.incubator.viewer.javafx.ui.main.UiBuilderFx;
+import org.apache.isis.incubator.viewer.javafx.ui.main.UiContextFxDefault;
+import org.apache.isis.incubator.viewer.javafx.ui.main.MainViewFx;
 import org.apache.isis.viewer.common.model.IsisModuleViewerCommon;
 
 /**
@@ -54,8 +54,8 @@ import 
org.apache.isis.viewer.common.model.IsisModuleViewerCommon;
         IsisModuleIncViewerJavaFxModel.class,
         
         // @Components's
-        UiBuilder.class,
-        UiController.class,
+        UiBuilderFx.class,
+        MainViewFx.class,
         
         // Component Factories 
         TextFieldFactory.class,
@@ -79,9 +79,9 @@ import 
org.apache.isis.viewer.common.model.IsisModuleViewerCommon;
         
         // @Service's
         UiComponentFactoryFx.class,
-        UiActionHandler.class,
+        UiActionHandlerFx.class,
         
-        UiContextDefault.class,
+        UiContextFxDefault.class,
 
         // @Mixin's
 })
diff --git 
a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/UiComponentFactoryFx.java
 
b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/UiComponentFactoryFx.java
index 9e4c6e6..22d8a71 100644
--- 
a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/UiComponentFactoryFx.java
+++ 
b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/UiComponentFactoryFx.java
@@ -31,7 +31,7 @@ import 
org.apache.isis.core.commons.internal.environment.IsisSystemEnvironment;
 import org.apache.isis.core.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet;
 import org.apache.isis.core.metamodel.interactions.managed.ManagedMember;
-import org.apache.isis.incubator.viewer.javafx.model.context.UiContext;
+import org.apache.isis.incubator.viewer.javafx.model.context.UiContextFx;
 import org.apache.isis.viewer.common.model.components.UiComponentFactory;
 import 
org.apache.isis.viewer.common.model.decorator.prototyping.PrototypingUiModel;
 
@@ -46,7 +46,7 @@ import javafx.scene.control.Label;
 public class UiComponentFactoryFx implements UiComponentFactory<Node, Node> {
 
     private final boolean isPrototyping;
-    private final UiContext uiContext;
+    private final UiContextFx uiContext;
     private final ChainOfResponsibility<ComponentRequest, Node> 
chainOfHandlers;
     
     /** handlers in order of precedence (debug info)*/
@@ -56,7 +56,7 @@ public class UiComponentFactoryFx implements 
UiComponentFactory<Node, Node> {
     @Inject
     private UiComponentFactoryFx(
             IsisSystemEnvironment isisSystemEnvironment,
-            UiContext uiContext,
+            UiContextFx uiContext,
             List<UiComponentHandlerFx> handlers) {
         
         this.isPrototyping = isisSystemEnvironment.isPrototyping();
diff --git 
a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/collections/TableViewFx.java
 
b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/collections/TableViewFx.java
index 85d6ef3..1ac8b77 100644
--- 
a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/collections/TableViewFx.java
+++ 
b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/collections/TableViewFx.java
@@ -36,7 +36,7 @@ import 
org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
-import org.apache.isis.incubator.viewer.javafx.model.context.UiContext;
+import org.apache.isis.incubator.viewer.javafx.model.context.UiContextFx;
 import org.apache.isis.incubator.viewer.javafx.model.util._fx;
 
 import lombok.AccessLevel;
@@ -66,7 +66,7 @@ public class TableViewFx extends VBox {
      * @param where 
      */
     public static TableViewFx fromCollection(
-            final @NonNull UiContext uiContext, 
+            final @NonNull UiContextFx uiContext, 
             final @NonNull ManagedObject collection, 
             final @NonNull Where where) {
 
@@ -88,7 +88,7 @@ public class TableViewFx extends VBox {
      * @param collectionData 
      */
     public static TableViewFx forManagedCollection(
-            final @NonNull UiContext uiContext, 
+            final @NonNull UiContextFx uiContext, 
             final @NonNull ManagedCollection managedCollection, 
             final @NonNull Where where) {
 
@@ -113,9 +113,10 @@ public class TableViewFx extends VBox {
      * 
      * @param elementSpec - as is common to all given {@code objects} aka 
elements 
      * @param objects - (wrapped) domain objects to be rendered by this table
+     * @param where
      */
     private TableViewFx(
-            @NonNull final UiContext uiContext,
+            @NonNull final UiContextFx uiContext,
             @NonNull final ObjectSpecification elementSpec, 
             @Nullable final Can<ManagedObject> objects,
             @NonNull final Where where) {
@@ -143,7 +144,7 @@ public class TableViewFx extends VBox {
             }
 
             columnProperties.forEach(property->{
-                table.putElement(id, property.getId(), 
stringifyPropertyValue(uiContext, property, object));
+                table.putElement(id, property.getId(), 
stringifyPropertyValue(property, object));
             });
 
         });
@@ -186,10 +187,7 @@ public class TableViewFx extends VBox {
 
     }
 
-
-
     private String stringifyPropertyValue(
-            UiContext uiContext,
             ObjectAssociation property, 
             ManagedObject targetObject) {
 
@@ -197,7 +195,7 @@ public class TableViewFx extends VBox {
             val propertyValue = property.get(targetObject);
             return propertyValue == null 
                     ? NULL_LITERAL
-                            : propertyValue.titleString();
+                    : propertyValue.titleString();
         } catch (Exception e) {
             return 
Optional.ofNullable(e.getMessage()).orElse(e.getClass().getName());
         }
diff --git 
a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/object/ObjectViewFx.java
 
b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/object/ObjectViewFx.java
index abe3dc0..843fd4b 100644
--- 
a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/object/ObjectViewFx.java
+++ 
b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/object/ObjectViewFx.java
@@ -38,7 +38,7 @@ import 
org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
 import org.apache.isis.core.metamodel.interactions.managed.PropertyInteraction;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ManagedObjects;
-import org.apache.isis.incubator.viewer.javafx.model.context.UiContext;
+import org.apache.isis.incubator.viewer.javafx.model.context.UiContextFx;
 import org.apache.isis.incubator.viewer.javafx.model.util._fx;
 import 
org.apache.isis.incubator.viewer.javafx.ui.components.UiComponentFactoryFx;
 import 
org.apache.isis.incubator.viewer.javafx.ui.components.collections.TableViewFx;
@@ -59,7 +59,7 @@ import lombok.extern.log4j.Log4j2;
 public class ObjectViewFx extends VBox {
     
     public static ObjectViewFx fromObject(
-            @NonNull final UiContext uiContext,
+            @NonNull final UiContextFx uiContext,
             @NonNull final UiComponentFactoryFx uiComponentFactory,
             @NonNull final Consumer<ManagedAction> actionEventHandler,
             @NonNull final ManagedObject managedObject) {
@@ -71,7 +71,7 @@ public class ObjectViewFx extends VBox {
      * @param managedObject - domain object
      */
     protected ObjectViewFx(
-            final UiContext uiContext, 
+            final UiContextFx uiContext, 
             final UiComponentFactoryFx uiComponentFactory,
             final Consumer<ManagedAction> actionEventHandler,
             final ManagedObject managedObject) {
diff --git 
a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/UiController.java
 
b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/MainViewFx.java
similarity index 97%
rename from 
incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/UiController.java
rename to 
incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/MainViewFx.java
index 76f0a74..2a1cd5e 100644
--- 
a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/UiController.java
+++ 
b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/MainViewFx.java
@@ -27,7 +27,7 @@ import 
org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.runtime.context.IsisAppCommonContext;
 import org.apache.isis.core.runtime.iactn.IsisInteractionFactory;
-import org.apache.isis.incubator.viewer.javafx.model.context.UiContext;
+import org.apache.isis.incubator.viewer.javafx.model.context.UiContextFx;
 import org.apache.isis.incubator.viewer.javafx.model.events.JavaFxViewerConfig;
 import org.apache.isis.incubator.viewer.javafx.model.util._fx;
 import 
org.apache.isis.incubator.viewer.javafx.ui.components.UiComponentFactoryFx;
@@ -52,14 +52,14 @@ import javafx.scene.layout.VBox;
 @Component
 @RequiredArgsConstructor(onConstructor_ = {@Inject})
 @Log4j2
-public class UiController {
+public class MainViewFx {
     
     private final JavaFxViewerConfig viewerConfig;
     private final MetaModelContext metaModelContext;
     private final HeaderUiModelProvider headerUiModelProvider;
     private final IsisInteractionFactory isisInteractionFactory;
-    private final UiContext uiContext;
-    private final UiActionHandler uiActionHandler;
+    private final UiContextFx uiContext;
+    private final UiActionHandlerFx uiActionHandler;
     private final UiComponentFactoryFx uiComponentFactory;
 
     @FXML private MenuBar menuBarLeft;
diff --git 
a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/MenuBuilderFx.java
 
b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/MenuBuilderFx.java
index c5ef6e6..de7a056 100644
--- 
a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/MenuBuilderFx.java
+++ 
b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/MenuBuilderFx.java
@@ -21,7 +21,7 @@ package org.apache.isis.incubator.viewer.javafx.ui.main;
 import java.util.function.Consumer;
 
 import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.isis.incubator.viewer.javafx.model.context.UiContext;
+import org.apache.isis.incubator.viewer.javafx.model.context.UiContextFx;
 import org.apache.isis.viewer.common.model.menu.MenuItemDto;
 import org.apache.isis.viewer.common.model.menu.MenuVisitor;
 
@@ -38,7 +38,7 @@ import javafx.scene.control.SeparatorMenuItem;
 @Log4j2
 public class MenuBuilderFx implements MenuVisitor {
     
-    private final UiContext uiContext;
+    private final UiContextFx uiContext;
     private final MenuBar menuBar;
     private final Consumer<ManagedAction> menuActionEventHandler;
     
diff --git 
a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/UiActionHandler.java
 
b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/UiActionHandlerFx.java
similarity index 92%
rename from 
incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/UiActionHandler.java
rename to 
incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/UiActionHandlerFx.java
index a6749ab..5f7c04e 100644
--- 
a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/UiActionHandler.java
+++ 
b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/UiActionHandlerFx.java
@@ -27,7 +27,7 @@ import 
org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
 import 
org.apache.isis.core.metamodel.interactions.managed.ParameterNegotiationModel;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.runtime.iactn.IsisInteractionFactory;
-import org.apache.isis.incubator.viewer.javafx.model.context.UiContext;
+import org.apache.isis.incubator.viewer.javafx.model.context.UiContextFx;
 import 
org.apache.isis.incubator.viewer.javafx.ui.components.UiComponentFactoryFx;
 import 
org.apache.isis.viewer.common.model.components.UiComponentFactory.ComponentRequest;
 
@@ -43,9 +43,9 @@ import javafx.scene.layout.GridPane;
 @Service
 @RequiredArgsConstructor(onConstructor_ = {@Inject})
 @Log4j2
-public class UiActionHandler {
+public class UiActionHandlerFx {
 
-    private final UiContext uiContext;
+    private final UiContextFx uiContext;
     private final IsisInteractionFactory isisInteractionFactory;
     private final UiComponentFactoryFx uiComponentFactory;
 
@@ -58,13 +58,10 @@ public class UiActionHandler {
         if(paramCount==0) {
             invoke(managedAction, Can.empty());     
         } else {
-            // TODO get an ActionPrompt, then on invocation show the result in 
the content view
-            
-            //Dialogs.message("Warn", "ActionPrompt not supported yet!", null);
+            // get an ActionPrompt, then on invocation show the result in the 
content view
             
             val pendingArgs = managedAction.startParameterNegotiation();
             
-            
             Dialog<ParameterNegotiationModel> dialog = new Dialog<>();
             dialog.setTitle("<Title>");
             dialog.setHeaderText("<HeaderText>");
@@ -99,7 +96,7 @@ public class UiActionHandler {
             
             dialog.showAndWait().ifPresent(params->{
                 log.info("param negotiation done");
-                invoke(managedAction, params.getParamValues());
+                invoke(managedAction, params.getParamValues()); //TODO handle 
vetoes
             });
             
         } 
diff --git 
a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/UiBuilder.java
 
b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/UiBuilderFx.java
similarity index 99%
rename from 
incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/UiBuilder.java
rename to 
incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/UiBuilderFx.java
index 431948c..fec79ab 100644
--- 
a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/UiBuilder.java
+++ 
b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/UiBuilderFx.java
@@ -44,7 +44,7 @@ import javafx.stage.Stage;
 @Component
 @RequiredArgsConstructor(onConstructor_ = {@Inject})
 @Log4j2
-public class UiBuilder {
+public class UiBuilderFx {
     
     private final ApplicationContext springContext;
     private final JavaFxViewerConfig viewerConfig;
diff --git 
a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/UiContextDefault.java
 
b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/UiContextFxDefault.java
similarity index 98%
rename from 
incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/UiContextDefault.java
rename to 
incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/UiContextFxDefault.java
index 78410fb..f19ca12 100644
--- 
a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/UiContextDefault.java
+++ 
b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/UiContextFxDefault.java
@@ -29,7 +29,7 @@ import org.springframework.stereotype.Service;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.runtime.iactn.IsisInteractionFactory;
 import 
org.apache.isis.incubator.viewer.javafx.model.action.ActionUiModelFactoryFx;
-import org.apache.isis.incubator.viewer.javafx.model.context.UiContext;
+import org.apache.isis.incubator.viewer.javafx.model.context.UiContextFx;
 import org.apache.isis.incubator.viewer.javafx.model.events.JavaFxViewerConfig;
 import 
org.apache.isis.viewer.common.model.decorator.disable.DisablingDecorator;
 import org.apache.isis.viewer.common.model.decorator.icon.IconDecorator;
@@ -49,7 +49,7 @@ import javafx.scene.control.MenuItem;
 @Service
 @RequiredArgsConstructor(onConstructor_ = {@Inject})
 @Log4j2
-public class UiContextDefault implements UiContext {
+public class UiContextFxDefault implements UiContextFx {
 
     @Getter(onMethod_ = {@Override})
     private final JavaFxViewerConfig javaFxViewerConfig;
diff --git 
a/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/context/UiContextVaa.java
 
b/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/context/UiContextVaa.java
new file mode 100644
index 0000000..ed5731a
--- /dev/null
+++ 
b/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/context/UiContextVaa.java
@@ -0,0 +1,38 @@
+package org.apache.isis.incubator.viewer.vaadin.model.context;
+
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.function.Supplier;
+
+import com.vaadin.flow.component.Component;
+
+import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.core.runtime.iactn.IsisInteractionFactory;
+
+public interface UiContextVaa {
+
+    //JavaFxViewerConfig getJavaFxViewerConfig();
+    
+    IsisInteractionFactory getIsisInteractionFactory();
+    //ActionUiModelFactoryFx getActionUiModelFactory();
+    
+    void setNewPageHandler(Consumer<Component> onNewPage);
+    void setPageFactory(Function<ManagedObject, Component> pageFactory);
+    
+    void route(ManagedObject object);
+    void route(Supplier<ManagedObject> objectSupplier);
+    
+    // -- DECORATORS
+    
+//    IconDecorator<Labeled, Labeled> getIconDecoratorForLabeled();
+//    IconDecorator<MenuItem, MenuItem> getIconDecoratorForMenuItem();
+//   
+//    DisablingDecorator<Button> getDisablingDecoratorForButton();
+//    DisablingDecorator<Node> getDisablingDecoratorForFormField();
+//    
+//    PrototypingDecorator<Button, Node> getPrototypingDecoratorForButton();
+//    PrototypingDecorator<Node, Node> getPrototypingDecoratorForFormField();
+   
+    
+    
+}
diff --git 
a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/IsisModuleIncViewerVaadinUi.java
 
b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/IsisModuleIncViewerVaadinUi.java
index 72ac855..59bb5ed 100644
--- 
a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/IsisModuleIncViewerVaadinUi.java
+++ 
b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/IsisModuleIncViewerVaadinUi.java
@@ -34,7 +34,8 @@ import 
org.apache.isis.incubator.viewer.vaadin.ui.components.other.FallbackField
 import 
org.apache.isis.incubator.viewer.vaadin.ui.components.temporal.TemporalFieldFactory;
 import 
org.apache.isis.incubator.viewer.vaadin.ui.components.text.TextFieldFactory;
 import 
org.apache.isis.incubator.viewer.vaadin.ui.components.text.uuid.UuidFieldFactory;
-import org.apache.isis.incubator.viewer.vaadin.ui.pages.main.UiActionHandler;
+import 
org.apache.isis.incubator.viewer.vaadin.ui.pages.main.UiActionHandlerVaa;
+import 
org.apache.isis.incubator.viewer.vaadin.ui.pages.main.UiContextVaaDefault;
 import org.apache.isis.viewer.common.model.IsisModuleViewerCommon;
 
 
@@ -48,7 +49,8 @@ import 
org.apache.isis.viewer.common.model.IsisModuleViewerCommon;
         VaadinAuthenticationHandler.class,
         LogoutHandlerVaa.class,
         UiComponentFactoryVaa.class,
-        UiActionHandler.class,
+        UiActionHandlerVaa.class,
+        UiContextVaaDefault.class,
         
         // Component Factories
         BlobFieldFactory.class,
diff --git 
a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/action/ActionDialog.java
 
b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/action/ActionDialog.java
index 6fccec8..73a32c6 100644
--- 
a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/action/ActionDialog.java
+++ 
b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/action/ActionDialog.java
@@ -18,6 +18,7 @@
  */
 package org.apache.isis.incubator.viewer.vaadin.ui.components.action;
 
+import java.util.function.Predicate;
 import java.util.stream.Stream;
 
 import com.vaadin.flow.component.Component;
@@ -34,6 +35,8 @@ import com.vaadin.flow.theme.lumo.Lumo;
 
 import org.apache.isis.core.commons.collections.Can;
 import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
+import 
org.apache.isis.core.metamodel.interactions.managed.ParameterNegotiationModel;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
 import 
org.apache.isis.incubator.viewer.vaadin.ui.components.UiComponentFactoryVaa;
 
 import lombok.NonNull;
@@ -48,15 +51,17 @@ public class ActionDialog extends Dialog {
     
     public static ActionDialog forManagedAction(
             @NonNull final UiComponentFactoryVaa uiComponentFactory, 
-            @NonNull final ManagedAction managedAction) {
+            @NonNull final ManagedAction managedAction, 
+            @NonNull final Predicate<Can<ManagedObject>> submitCallback) {
         
-        val actionDialog = new ActionDialog(uiComponentFactory, managedAction);
+        val actionDialog = new ActionDialog(uiComponentFactory, managedAction, 
submitCallback);
         return actionDialog;
     }
 
     protected ActionDialog(
             final UiComponentFactoryVaa uiComponentFactory,
-            final ManagedAction managedAction) {
+            final ManagedAction managedAction,
+            final Predicate<Can<ManagedObject>> submitCallback) {
         
         setDraggable(true);
         setModal(false);
@@ -76,7 +81,7 @@ public class ActionDialog extends Dialog {
 
         // Footer
         
-        val footer = footer(managedAction); 
+        val footer = footer(managedAction, actionForm.getPendingArgs(), 
submitCallback); 
         
         // Header
         
@@ -117,7 +122,10 @@ public class ActionDialog extends Dialog {
         return header;
     }
     
-    private Component footer(ManagedAction managedAction) {
+    private Component footer(
+            ManagedAction managedAction, 
+            ParameterNegotiationModel pendingArgs,
+            Predicate<Can<ManagedObject>> submitCallback) {
         
         val okButton = new Button("Ok");
         val cancelButton = new Button("Cancel");
@@ -128,7 +136,14 @@ public class ActionDialog extends Dialog {
         cancelButton.addThemeVariants(ButtonVariant.LUMO_TERTIARY);
         
         // Button Events
-        okButton.addClickListener(event -> close()); //TODO should invoke the 
action and route to the result page
+        okButton.addClickListener(event -> {
+            //invoke the action and route to the result page
+            if(submitCallback.test(pendingArgs.getParamValues())) {
+                close();
+            } else {
+                //TODO handle validation feedback (vetos)
+            }
+        }); 
         cancelButton.addClickListener(event -> close());
         
         return footer;
diff --git 
a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/action/ActionForm.java
 
b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/action/ActionForm.java
index 3e8c34a..2fce046 100644
--- 
a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/action/ActionForm.java
+++ 
b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/action/ActionForm.java
@@ -19,19 +19,22 @@
 package org.apache.isis.incubator.viewer.vaadin.ui.components.action;
 
 import com.vaadin.flow.component.formlayout.FormLayout;
-import com.vaadin.flow.component.textfield.TextField;
 
 import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
+import 
org.apache.isis.core.metamodel.interactions.managed.ParameterNegotiationModel;
 import 
org.apache.isis.incubator.viewer.vaadin.ui.components.UiComponentFactoryVaa;
+import 
org.apache.isis.viewer.common.model.components.UiComponentFactory.ComponentRequest;
 
+import lombok.Getter;
 import lombok.NonNull;
 import lombok.val;
 
 public class ActionForm extends FormLayout {
 
     private static final long serialVersionUID = 1L;
-    
-    private final transient ManagedAction managedAction;
+
+    @Getter
+    private final ParameterNegotiationModel pendingArgs;
     
     public static ActionForm forManagedAction(
             @NonNull final UiComponentFactoryVaa uiComponentFactory,
@@ -45,26 +48,20 @@ public class ActionForm extends FormLayout {
             final UiComponentFactoryVaa uiComponentFactory,
             final ManagedAction managedAction) {
         
-        this.managedAction = managedAction;
-        
-        managedAction.getAction().getParameters()
-        .forEach(param->{
+        pendingArgs = managedAction.startParameterNegotiation();
         
-            val paramField = new TextField();
-            paramField.setLabel(param.getName());
-            paramField.setPlaceholder("under construction");
+        pendingArgs.getParamModels().forEach(paramModel->{
             
-            super.add(paramField);
+            //val paramNr = paramModel.getParamNr(); // zero based
             
+            val request = ComponentRequest.of(paramModel);
             
-//            val uiParameter = uiComponentFactory
-//                    
.componentFor(UiComponentFactory.Request.of(Where.ANYWHERE, param));
+            //val labelAndPosition = uiComponentFactory.labelFor(request);
+            val uiField = uiComponentFactory.parameterFor(request);
+            super.add(uiField);
             
         });
         
-        
-        
-        
     }
     
 }
diff --git 
a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/collection/TableViewVaa.java
 
b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/collection/TableViewVaa.java
index cbcaed8..0c52b46 100644
--- 
a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/collection/TableViewVaa.java
+++ 
b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/collection/TableViewVaa.java
@@ -18,10 +18,7 @@
  */
 package org.apache.isis.incubator.viewer.vaadin.ui.components.collection;
 
-import java.util.Collection;
-import java.util.List;
 import java.util.Optional;
-import java.util.stream.Collectors;
 
 import javax.annotation.Nullable;
 
@@ -29,13 +26,20 @@ import com.vaadin.flow.component.Component;
 import com.vaadin.flow.component.grid.Grid;
 import com.vaadin.flow.component.orderedlayout.VerticalLayout;
 
+import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.core.commons.collections.Can;
 import org.apache.isis.core.commons.internal.base._NullSafe;
+import org.apache.isis.core.commons.internal.collections._Multimaps;
+import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.facets.collections.CollectionFacet;
 import org.apache.isis.core.metamodel.interactions.managed.ManagedCollection;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.core.metamodel.spec.ManagedObjects;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
+import org.apache.isis.incubator.viewer.vaadin.model.context.UiContextVaa;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
@@ -58,33 +62,49 @@ public class TableViewVaa extends VerticalLayout {
     /**
      * Constructs a (page-able) {@link Grid} from given {@code collection}  
      * @param collection - of (wrapped) domain objects
+     * @param where
      */
-    public static TableViewVaa fromCollection(final ManagedObject collection) {
+    public static TableViewVaa fromCollection(
+            final @NonNull UiContextVaa uiContext,
+            final @NonNull ManagedObject collection, 
+            final @NonNull Where where) {
+        
         val collectionFacet = collection.getSpecification()
                 .getFacet(CollectionFacet.class);
         
         val objects = collectionFacet.stream(collection)
-                .collect(Collectors.toList());
+                .collect(Can.toCan());
         
-        return inferElementSpecification(objects)
-                .map(elementSpec->new TableViewVaa(elementSpec, objects))
+        return ManagedObjects.commonSpecification(objects)
+                .map(elementSpec->new TableViewVaa(elementSpec, objects, 
where))
                 .orElseGet(TableViewVaa::empty);
     }
     
     /**
      * Constructs a (page-able) {@link Grid} from given {@code 
managedCollection}   
      * @param managedCollection
+     * @param where
      */
-    public static Component forManagedCollection(ManagedCollection 
managedCollection) {
+    public static Component forManagedCollection(
+            final @NonNull UiContextVaa uiContext,
+            final @NonNull ManagedCollection managedCollection, 
+            final @NonNull Where where) {
         
         val elementSpec = managedCollection.getElementSpecification(); 
         val elements = managedCollection.streamElements()
-                .collect(Collectors.toList());
+                .collect(Can.toCan());
         return elements.isEmpty()
                 ? empty()
-                : new TableViewVaa(elementSpec, elements);
+                : new TableViewVaa(elementSpec, elements, where);
     }
     
+    private Can<OneToOneAssociation> columnProperties(ObjectSpecification 
elementSpec, Where where) {
+
+        //TODO honor column order (as per layout)
+        return elementSpec.streamProperties(Contributed.INCLUDED)
+                .filter(ObjectAssociation.Predicates.staticallyVisible(where))
+                .collect(Can.toCan());
+    }
     
     /**
      * 
@@ -93,7 +113,8 @@ public class TableViewVaa extends VerticalLayout {
      */
     private TableViewVaa(
             @NonNull final ObjectSpecification elementSpec, 
-            @Nullable final Collection<ManagedObject> objects) {
+            @Nullable final Can<ManagedObject> objects,
+            @NonNull final Where where) {
         
         //            final ComboBox<ManagedObject> listBox = new ComboBox<>();
         //            listBox.setLabel(label + " #" + objects.size());
@@ -107,34 +128,52 @@ public class TableViewVaa extends VerticalLayout {
         add(objectGrid);
         
         if (_NullSafe.isEmpty(objects)) {
+            //TODO show placeholder: "No rows to display"
             return;
         }
         
-        elementSpec
-        .streamAssociations(Contributed.INCLUDED)
-        .filter(assoc -> assoc.getFeatureType().isProperty())
-        .forEach(property -> {
-            
+        val columnProperties = columnProperties(elementSpec, where);
+        
+        // rather prepare all table cells into a multi-map eagerly, 
+        // than having to spawn new transactions/interactions for each table 
cell when rendered lazily 
+        val table = _Multimaps.<RootOid, String, String>newMapMultimap();
+
+        _NullSafe.stream(objects)
+        .forEach(object->{
+
+            val id = object.getRootOid().orElse(null);
+            if(id==null) {
+                return;
+            }
+
+            columnProperties.forEach(property->{
+                table.putElement(id, property.getId(), 
stringifyPropertyValue(property, object));
+            });
+
+        });
+
+        // object link as first column
+        objectGrid.addColumn(targetObject->{
+            // TODO provide icon with link
+            return "obj. ref ["+targetObject.getRootOid().orElse(null)+"]";
+        });
+        
+        // property columns
+        columnProperties.forEach(property->{
             objectGrid.addColumn(targetObject -> {
                 log.debug("about to get property value for property {}", 
property.getId());
                 return stringifyPropertyValue(property, targetObject);
             })
             .setHeader(property.getName());
         });
-        objectGrid.setItems(objects);
+       
+        // populate the model        
+        objectGrid.setItems(objects.toList());
         objectGrid.recalculateColumnWidths();
         objectGrid.setColumnReorderingAllowed(true);
         
     }
     
-    private static Optional<ObjectSpecification> 
inferElementSpecification(List<ManagedObject> objects) {
-        if (_NullSafe.isEmpty(objects)) {
-            return Optional.empty();
-        }
-        val elementSpec = objects.iterator().next().getSpecification();
-        return Optional.of(elementSpec);
-    }
-    
     private String stringifyPropertyValue(
             ObjectAssociation property, 
             ManagedObject targetObject) {
diff --git 
a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/object/ObjectViewVaa.java
 
b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/object/ObjectViewVaa.java
index 748c371..b123582 100644
--- 
a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/object/ObjectViewVaa.java
+++ 
b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/object/ObjectViewVaa.java
@@ -42,12 +42,14 @@ import org.apache.isis.applib.layout.grid.bootstrap3.BS3Col;
 import org.apache.isis.applib.layout.grid.bootstrap3.BS3Row;
 import org.apache.isis.applib.layout.grid.bootstrap3.BS3Tab;
 import org.apache.isis.applib.layout.grid.bootstrap3.BS3TabGroup;
+import org.apache.isis.core.commons.internal.assertions._Assert;
 import org.apache.isis.core.metamodel.interactions.managed.ActionInteraction;
 import 
org.apache.isis.core.metamodel.interactions.managed.CollectionInteraction;
 import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
 import org.apache.isis.core.metamodel.interactions.managed.PropertyInteraction;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ManagedObjects;
+import org.apache.isis.incubator.viewer.vaadin.model.context.UiContextVaa;
 import org.apache.isis.incubator.viewer.vaadin.model.util._vaa;
 import 
org.apache.isis.incubator.viewer.vaadin.ui.components.UiComponentFactoryVaa;
 import 
org.apache.isis.incubator.viewer.vaadin.ui.components.collection.TableViewVaa;
@@ -57,16 +59,19 @@ import 
org.apache.isis.viewer.common.model.gridlayout.UiGridLayout;
 
 import lombok.NonNull;
 import lombok.val;
+import lombok.extern.log4j.Log4j2;
 
+@Log4j2
 public class ObjectViewVaa extends VerticalLayout {
 
     private static final long serialVersionUID = 1L;
 
-    public static ObjectViewVaa from(
+    public static ObjectViewVaa fromObject(
+            @NonNull final UiContextVaa uiContext,
             @NonNull final UiComponentFactoryVaa uiComponentFactory,
             @NonNull final Consumer<ManagedAction> actionEventHandler,
             @NonNull final ManagedObject managedObject) {
-        return new ObjectViewVaa(uiComponentFactory, actionEventHandler, 
managedObject);
+        return new ObjectViewVaa(uiContext, uiComponentFactory, 
actionEventHandler, managedObject);
     }
     
     /**
@@ -74,11 +79,14 @@ public class ObjectViewVaa extends VerticalLayout {
      * @param managedObject - domain object
      */
     protected ObjectViewVaa(
+            final UiContextVaa uiContext,
             final UiComponentFactoryVaa uiComponentFactory,
             final Consumer<ManagedAction> actionEventHandler,
             final ManagedObject managedObject) {
 
-
+        log.info("binding object interaction to owner {}", 
managedObject.getSpecification().getIdentifier());
+        
_Assert.assertTrue(uiContext.getIsisInteractionFactory().isInInteraction(), 
"requires an active interaction");
+        
         val objectTitle = ManagedObjects.titleOf(managedObject);
 
         val uiGridLayout = UiGridLayout.bind(managedObject);
@@ -243,7 +251,10 @@ public class ObjectViewVaa extends VerticalLayout {
                     }
                     
                     val uiCollection = _vaa.add(container, 
-                            
TableViewVaa.forManagedCollection(managedCollection));
+                            TableViewVaa.forManagedCollection(
+                                    uiContext,
+                                    managedCollection,
+                                    Where.PARENTED_TABLES));
                     
                 });
                 
diff --git 
a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/pages/main/MainViewVaa.java
 
b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/pages/main/MainViewVaa.java
index 232f727..a9a8964 100644
--- 
a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/pages/main/MainViewVaa.java
+++ 
b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/pages/main/MainViewVaa.java
@@ -33,10 +33,14 @@ import com.vaadin.flow.server.PWA;
 import com.vaadin.flow.theme.Theme;
 import com.vaadin.flow.theme.lumo.Lumo;
 
+import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.runtime.context.IsisAppCommonContext;
-import org.apache.isis.core.runtime.iactn.IsisInteractionFactory;
+import org.apache.isis.incubator.viewer.vaadin.model.context.UiContextVaa;
+import 
org.apache.isis.incubator.viewer.vaadin.ui.components.UiComponentFactoryVaa;
+import 
org.apache.isis.incubator.viewer.vaadin.ui.components.collection.TableViewVaa;
+import 
org.apache.isis.incubator.viewer.vaadin.ui.components.object.ObjectViewVaa;
 import org.apache.isis.incubator.viewer.vaadin.ui.util.LocalResourceUtil;
 import org.apache.isis.viewer.common.model.decorator.icon.IconDecorator;
 import org.apache.isis.viewer.common.model.header.HeaderUiModelProvider;
@@ -61,9 +65,13 @@ implements BeforeEnterObserver {
     private static final long serialVersionUID = 1L;
     
     private final transient IsisAppCommonContext commonContext;
-    private final transient IsisInteractionFactory isisInteractionFactory;
-    private final transient UiActionHandler uiActionHandler;
+    private final transient MetaModelContext metaModelContext;
+    private final transient UiContextVaa uiContext;
+    private final transient UiActionHandlerVaa uiActionHandler;
+    private final transient UiComponentFactoryVaa uiComponentFactory;
     private final transient HeaderUiModelProvider headerUiModelProvider;
+    
+    
     private Div pageContent = new Div();
     
     /**
@@ -72,14 +80,20 @@ implements BeforeEnterObserver {
     @Inject
     public MainViewVaa(
             final MetaModelContext metaModelContext,
-            final IsisInteractionFactory isisInteractionFactory,
-            final UiActionHandler uiActionHandler,
-            final HeaderUiModelProvider headerUiModelProvider) {
+            final UiActionHandlerVaa uiActionHandler,
+            final HeaderUiModelProvider headerUiModelProvider,
+            final UiContextVaa uiContext,
+            final UiComponentFactoryVaa uiComponentFactory) {
 
+        this.metaModelContext = metaModelContext;
         this.commonContext = IsisAppCommonContext.of(metaModelContext);
         this.uiActionHandler = uiActionHandler;
-        this.isisInteractionFactory = isisInteractionFactory;
         this.headerUiModelProvider = headerUiModelProvider;
+        this.uiContext = uiContext;
+        this.uiComponentFactory = uiComponentFactory;
+        
+        uiContext.setNewPageHandler(this::replaceContent);
+        uiContext.setPageFactory(this::uiComponentForActionResult);
     }
     
     @Override
@@ -93,7 +107,7 @@ implements BeforeEnterObserver {
         val menuBarContainer = MainView_createHeader.createHeader(
                 commonContext, 
                 headerUiModelProvider.getHeader(), 
-                this::onActionLinkClicked,
+                uiActionHandler::handleActionLinkClicked,
                 this::renderHomepage);
         
         addToNavbar(menuBarContainer);
@@ -101,10 +115,6 @@ implements BeforeEnterObserver {
         setDrawerOpened(false);
         renderHomepage();
     }
-
-    private void onActionLinkClicked(ManagedAction managedAction) {
-        uiActionHandler.handleActionLinkClicked(managedAction, 
this::replaceContent);
-    }
     
     private void replaceContent(Component component) {
         pageContent.removeAll();
@@ -113,11 +123,20 @@ implements BeforeEnterObserver {
 
     private void renderHomepage() {
         log.info("about to render homepage");
-        isisInteractionFactory.runAnonymous(()->{
-            val homepageViewmodel = commonContext.getHomePageAdapter();
-            uiActionHandler.handleActionResult(homepageViewmodel, 
this::replaceContent);
-        });
+        uiContext.route(metaModelContext::getHomePageAdapter);
     }
 
+    private Component uiComponentForActionResult(ManagedObject actionResult) {
+        if (actionResult.getSpecification().isParentedOrFreeCollection()) {
+            return TableViewVaa.fromCollection(uiContext, actionResult, 
Where.STANDALONE_TABLES);
+        } else {
+            return ObjectViewVaa.fromObject(
+                    uiContext,
+                    uiComponentFactory, 
+                    uiActionHandler::handleActionLinkClicked, 
+                    actionResult);
+        }
+    }
+    
     
 }
diff --git 
a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/pages/main/UiActionHandler.java
 
b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/pages/main/UiActionHandlerVaa.java
similarity index 59%
rename from 
incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/pages/main/UiActionHandler.java
rename to 
incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/pages/main/UiActionHandlerVaa.java
index e7bd535..6dd2972 100644
--- 
a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/pages/main/UiActionHandler.java
+++ 
b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/pages/main/UiActionHandlerVaa.java
@@ -18,22 +18,17 @@
  */
 package org.apache.isis.incubator.viewer.vaadin.ui.pages.main;
 
-import java.util.function.Consumer;
-
 import javax.inject.Inject;
 
-import com.vaadin.flow.component.Component;
-
 import org.springframework.stereotype.Service;
 
 import org.apache.isis.core.commons.collections.Can;
 import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.runtime.iactn.IsisInteractionFactory;
+import org.apache.isis.incubator.viewer.vaadin.model.context.UiContextVaa;
 import 
org.apache.isis.incubator.viewer.vaadin.ui.components.UiComponentFactoryVaa;
 import 
org.apache.isis.incubator.viewer.vaadin.ui.components.action.ActionDialog;
-import 
org.apache.isis.incubator.viewer.vaadin.ui.components.collection.TableViewVaa;
-import 
org.apache.isis.incubator.viewer.vaadin.ui.components.object.ObjectViewVaa;
 
 import lombok.RequiredArgsConstructor;
 import lombok.val;
@@ -42,48 +37,53 @@ import lombok.extern.log4j.Log4j2;
 @Service
 @RequiredArgsConstructor(onConstructor_ = {@Inject})
 @Log4j2
-public class UiActionHandler {
+public class UiActionHandlerVaa {
 
-    private final UiComponentFactoryVaa uiComponentFactory;
+    private final UiContextVaa uiContext;
     private final IsisInteractionFactory isisInteractionFactory;
+    private final UiComponentFactoryVaa uiComponentFactory;
 
-    public void handleActionLinkClicked(ManagedAction managedAction, 
Consumer<Component> onNewPageContent) {
+    public void handleActionLinkClicked(ManagedAction managedAction) {
 
         log.info("about to build an action prompt for {}", 
managedAction.getIdentifier());
         
-        if(managedAction.getAction().getParameterCount()>0) {
-            // TODO get an ActionPrompt, then on invocation show the result in 
the content view
+        final int paramCount = managedAction.getAction().getParameterCount();
+        
+        if(paramCount==0) {
+            invoke(managedAction, Can.empty());     
+        } else {
+            // get an ActionPrompt, then on invocation show the result in the 
content view
             
-            val actionDialog = 
ActionDialog.forManagedAction(uiComponentFactory, managedAction);
+            val actionDialog = ActionDialog.forManagedAction(
+                    uiComponentFactory, 
+                    managedAction,
+                    params->{
+                        log.info("param negotiation done");
+                        invoke(managedAction, params);
+                        return true; //TODO handle vetoes
+                    });
             actionDialog.open();
-            
-           // Dialogs.message("Warn", "ActionPrompt not supported yet!", null);
+
             
             return;
         }
-        
-        val actionResultOrVeto = managedAction.invoke(Can.empty());
+
+    }
+    
+    private void invoke(
+            ManagedAction managedAction, 
+            Can<ManagedObject> params) {
         
         isisInteractionFactory.runAnonymous(()->{
+
+            //Thread.sleep(1000); // simulate long running
+
+            val actionResultOrVeto = managedAction.invoke(params);
+            
             actionResultOrVeto.left()
-            .ifPresent(actionResult->
-                handleActionResult(actionResult, onNewPageContent));
-        });
-    }
-    
-    public void handleActionResult(ManagedObject actionResult, 
Consumer<Component> onNewPageContent) {
-        onNewPageContent.accept(uiComponentForActionResult(actionResult, 
onNewPageContent));        
-    }
+            .ifPresent(actionResult->uiContext.route(actionResult));
 
-    private Component uiComponentForActionResult(ManagedObject actionResult, 
Consumer<Component> onNewPageContent) {
-        if (actionResult.getSpecification().isParentedOrFreeCollection()) {
-            return TableViewVaa.fromCollection(actionResult);
-        } else {
-            return ObjectViewVaa.from(
-                    uiComponentFactory, 
-                    action->handleActionLinkClicked(action, onNewPageContent), 
-                    actionResult);
-        }
+        });
     }
 
 }
diff --git 
a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/pages/main/UiContextVaaDefault.java
 
b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/pages/main/UiContextVaaDefault.java
new file mode 100644
index 0000000..0d6d01a
--- /dev/null
+++ 
b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/pages/main/UiContextVaaDefault.java
@@ -0,0 +1,86 @@
+package org.apache.isis.incubator.viewer.vaadin.ui.pages.main;
+
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.function.Supplier;
+
+import javax.inject.Inject;
+
+import com.vaadin.flow.component.Component;
+
+import org.springframework.stereotype.Service;
+
+import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.core.runtime.iactn.IsisInteractionFactory;
+import org.apache.isis.incubator.viewer.vaadin.model.context.UiContextVaa;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import lombok.Setter;
+import lombok.val;
+import lombok.extern.log4j.Log4j2;
+
+@Service
+@RequiredArgsConstructor(onConstructor_ = {@Inject})
+@Log4j2
+public class UiContextVaaDefault implements UiContextVaa {
+
+//    @Getter(onMethod_ = {@Override})
+//    private final JavaFxViewerConfig javaFxViewerConfig;
+    @Getter(onMethod_ = {@Override})
+    private final IsisInteractionFactory isisInteractionFactory;
+//    @Getter(onMethod_ = {@Override})
+//    private final ActionUiModelFactoryFx actionUiModelFactory = new 
ActionUiModelFactoryFx();
+    
+    @Setter(onMethod_ = {@Override})
+    private Consumer<Component> newPageHandler;
+    
+    @Setter(onMethod_ = {@Override})
+    private Function<ManagedObject, Component> pageFactory;
+
+    @Override
+    public void route(ManagedObject object) {
+        log.info("about to render object {}", object);
+        newPage(pageFor(object));
+    }
+    
+    @Override
+    public void route(Supplier<ManagedObject> objectSupplier) {
+        isisInteractionFactory.runAnonymous(()->{
+            val object = objectSupplier.get();
+            route(object);
+        });
+    }
+    
+    // -- DECORATORS
+
+//    @Getter(onMethod_ = {@Override})
+//    private final IconDecorator<Labeled, Labeled> iconDecoratorForLabeled;
+//    @Getter(onMethod_ = {@Override})
+//    private final IconDecorator<MenuItem, MenuItem> iconDecoratorForMenuItem;
+//   
+//    @Getter(onMethod_ = {@Override})
+//    private final DisablingDecorator<Button> disablingDecoratorForButton;
+//    @Getter(onMethod_ = {@Override})
+//    private final DisablingDecorator<Node> disablingDecoratorForFormField;
+//    
+//    @Getter(onMethod_ = {@Override})
+//    private final PrototypingDecorator<Button, Node> 
prototypingDecoratorForButton;
+//    @Getter(onMethod_ = {@Override})
+//    private final PrototypingDecorator<Node, Node> 
prototypingDecoratorForFormField;
+    
+    // -- HELPER
+    
+    private void newPage(Component content) {
+        if(newPageHandler!=null && content!=null) {
+            newPageHandler.accept(content);
+        }
+    }
+    
+    private Component pageFor(ManagedObject object) {
+        return pageFactory!=null
+                ? pageFactory.apply(object)
+                : null;
+    }
+    
+}

Reply via email to