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 2020/06/26 10:40:27 UTC

[isis] branch master updated: ISIS-2340: fx: properly load ui table data

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 aeeb9aa  ISIS-2340: fx: properly load ui table data
aeeb9aa is described below

commit aeeb9aaace9f354f19346ca9ccb88c029bf5002d
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Jun 26 12:40:12 2020 +0200

    ISIS-2340: fx: properly load ui table data
---
 .../viewer/javafx/model/context/UiContext.java     |  4 +++
 .../ui/components/collections/TableViewFx.java     | 39 ++++++++++++++--------
 .../javafx/ui/components/object/ObjectViewFx.java  |  7 ++--
 .../viewer/javafx/ui/main/MenuBuilderFx.java       |  4 +--
 .../viewer/javafx/ui/main/UiActionHandler.java     |  9 ++---
 .../viewer/javafx/ui/main/UiController.java        |  7 ++--
 .../viewer/javafx/ui/services/UiContexDefault.java |  8 ++---
 7 files changed, 50 insertions(+), 28 deletions(-)

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/UiContext.java
index 813a531..4a397d7 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/UiContext.java
@@ -18,10 +18,14 @@
  */
 package org.apache.isis.incubator.viewer.javafx.model.context;
 
+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.decorator.DecoratorService;
 
 public interface UiContext {
 
     DecoratorService getDecoratorService();
+    IsisInteractionFactory getIsisInteractionFactory();
+    ActionUiModelFactoryFx getActionUiModelFactory();
     
 }
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 03306f37..0aeed44 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
@@ -33,6 +33,7 @@ import org.apache.isis.core.metamodel.spec.ManagedObject;
 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.incubator.viewer.javafx.model.context.UiContext;
 import org.apache.isis.incubator.viewer.javafx.model.util._fx;
 
 import lombok.AccessLevel;
@@ -59,7 +60,7 @@ public class TableViewFx extends VBox {
      * Constructs a (page-able) {@link Grid} from given {@code collection}  
      * @param collection - of (wrapped) domain objects
      */
-    public static TableViewFx fromCollection(final ManagedObject collection) {
+    public static TableViewFx fromCollection(UiContext uiContext, ManagedObject collection) {
         val collectionFacet = collection.getSpecification()
                 .getFacet(CollectionFacet.class);
         
@@ -67,7 +68,7 @@ public class TableViewFx extends VBox {
                 .collect(Collectors.toList());
         
         return inferElementSpecification(objects)
-                .map(elementSpec->new TableViewFx(elementSpec, objects))
+                .map(elementSpec->new TableViewFx(uiContext, elementSpec, objects))
                 .orElseGet(TableViewFx::empty);
     }
     
@@ -75,14 +76,14 @@ public class TableViewFx extends VBox {
      * Constructs a (page-able) {@link Grid} from given {@code managedCollection}   
      * @param managedCollection
      */
-    public static TableViewFx forManagedCollection(ManagedCollection managedCollection) {
+    public static TableViewFx forManagedCollection(UiContext uiContext, ManagedCollection managedCollection) {
         
         val elementSpec = managedCollection.getElementSpecification(); 
         val elements = managedCollection.streamElements()
                 .collect(Collectors.toList());
         return elements.isEmpty()
                 ? empty()
-                : new TableViewFx(elementSpec, elements);
+                : new TableViewFx(uiContext, elementSpec, elements);
     }
     
     
@@ -92,6 +93,7 @@ public class TableViewFx extends VBox {
      * @param objects - (wrapped) domain objects to be rendered by this table
      */
     private TableViewFx(
+            @NonNull final UiContext uiContext,
             @NonNull final ObjectSpecification elementSpec, 
             @Nullable final Collection<ManagedObject> objects) {
         
@@ -122,10 +124,13 @@ public class TableViewFx extends VBox {
             column.setCellValueFactory(cellDataFeatures -> {
                 log.debug("about to get property value for property {}", property.getId());                
                 val targetObject = cellDataFeatures.getValue();
-                return _fx.newStringReadonly(stringifyPropertyValue(property, targetObject));
+                return _fx.newStringReadonly(stringifyPropertyValue(uiContext, property, targetObject));
             });
         });
+        
+        // populate the model        
         objectGrid.getItems().addAll(objects);
+        
         //objectGrid.recalculateColumnWidths();
         //objectGrid.setColumnReorderingAllowed(true);
         
@@ -140,16 +145,24 @@ public class TableViewFx extends VBox {
     }
     
     private String stringifyPropertyValue(
+            UiContext uiContext,
             ObjectAssociation property, 
             ManagedObject targetObject) {
-        try {
-            val propertyValue = property.get(targetObject);
-            return propertyValue == null 
-                    ? NULL_LITERAL
-                    : propertyValue.titleString();
-        } catch (Exception e) {
-            return Optional.ofNullable(e.getMessage()).orElse(e.getClass().getName());
-        }
+        
+        return uiContext.getIsisInteractionFactory().callAnonymous(()->{
+            
+            try {
+                val propertyValue = property.get(targetObject);
+                return propertyValue == null 
+                        ? NULL_LITERAL
+                        : 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 4bde8d0..f8f93b7 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
@@ -36,6 +36,7 @@ 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.incubator.viewer.javafx.model.context.UiContext;
 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;
@@ -56,10 +57,11 @@ import javafx.scene.layout.VBox;
 public class ObjectViewFx extends VBox {
     
     public static ObjectViewFx fromObject(
+            @NonNull final UiContext uiContext,
             @NonNull final UiComponentFactoryFx uiComponentFactory,
             @NonNull final Consumer<ManagedAction> actionEventHandler,
             @NonNull final ManagedObject managedObject) {
-        return new ObjectViewFx(uiComponentFactory, actionEventHandler, managedObject);
+        return new ObjectViewFx(uiContext, uiComponentFactory, actionEventHandler, managedObject);
     }
     
     /**
@@ -67,6 +69,7 @@ public class ObjectViewFx extends VBox {
      * @param managedObject - domain object
      */
     protected ObjectViewFx(
+            final UiContext uiContext, 
             final UiComponentFactoryFx uiComponentFactory,
             final Consumer<ManagedAction> actionEventHandler,
             final ManagedObject managedObject) {
@@ -191,7 +194,7 @@ public class ObjectViewFx extends VBox {
                     _fx.newLabel(container, managedCollection.getName())
                     .setStyle("isis-collection-label"); // corresponds to H3 (html)
                     
-                    val uiCollection = TableViewFx.forManagedCollection(managedCollection);
+                    val uiCollection = TableViewFx.forManagedCollection(uiContext, managedCollection);
                     container.getChildren().add(uiCollection);
                 });
                 
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 51d7683..f029438 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.ui.services.UiContexDefault;
+import org.apache.isis.incubator.viewer.javafx.model.context.UiContext;
 import org.apache.isis.viewer.common.model.menu.MenuItemDto;
 import org.apache.isis.viewer.common.model.menu.MenuVisitor;
 
@@ -37,7 +37,7 @@ import javafx.scene.control.SeparatorMenuItem;
 @Log4j2
 public class MenuBuilderFx implements MenuVisitor {
     
-    private final UiContexDefault uiContext;
+    private final UiContext 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/UiActionHandler.java
index 2f139f5..8e2c3a8 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/UiActionHandler.java
@@ -27,7 +27,7 @@ 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.javafx.model.context.UiContext;
 import org.apache.isis.incubator.viewer.javafx.ui.components.UiComponentFactoryFx;
 import org.apache.isis.incubator.viewer.javafx.ui.components.collections.TableViewFx;
 import org.apache.isis.incubator.viewer.javafx.ui.components.dialog.Dialogs;
@@ -44,7 +44,7 @@ import javafx.scene.Node;
 @Log4j2
 public class UiActionHandler {
 
-    private final IsisInteractionFactory isisInteractionFactory;
+    private final UiContext uiContext;
     private final UiComponentFactoryFx uiComponentFactory;
 
     public void handleActionLinkClicked(ManagedAction managedAction, Consumer<Node> onNewPageContent) {
@@ -59,7 +59,7 @@ public class UiActionHandler {
             return;
         }
         
-        isisInteractionFactory.runAnonymous(()->{
+        uiContext.getIsisInteractionFactory().runAnonymous(()->{
 
             //Thread.sleep(1000); // simulate long running
 
@@ -75,9 +75,10 @@ public class UiActionHandler {
     
     private Node uiComponentForActionResult(ManagedObject actionResult, Consumer<Node> onNewPageContent) {
         if (actionResult.getSpecification().isParentedOrFreeCollection()) {
-            return TableViewFx.fromCollection(actionResult);
+            return TableViewFx.fromCollection(uiContext, actionResult);
         } else {
             return ObjectViewFx.fromObject(
+                    uiContext,
                     uiComponentFactory, 
                     action->handleActionLinkClicked(action, onNewPageContent), 
                     actionResult);
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/UiController.java
index cbd2411..ed20e6f 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/UiController.java
@@ -26,7 +26,7 @@ import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
 import org.apache.isis.core.runtime.context.IsisAppCommonContext;
 import org.apache.isis.core.runtime.iactn.IsisInteractionFactory;
-import org.apache.isis.incubator.viewer.javafx.ui.services.UiContexDefault;
+import org.apache.isis.incubator.viewer.javafx.model.context.UiContext;
 import org.apache.isis.viewer.common.model.header.HeaderUiModelProvider;
 
 import lombok.RequiredArgsConstructor;
@@ -48,7 +48,8 @@ public class UiController {
     private final MetaModelContext metaModelContext;
     private final HeaderUiModelProvider headerUiModelProvider;
     private final IsisInteractionFactory isisInteractionFactory;
-    private final UiContexDefault uiContext;
+    private final UiContext uiContext;
+    private final UiActionHandler uiActionHandler; 
 
     @FXML private MenuBar menuBarLeft;
     @FXML private MenuBar menuBarRight;
@@ -76,7 +77,7 @@ public class UiController {
     }
 
     private void onActionLinkClicked(ManagedAction managedAction) {
-        uiContext.getUiActionHandler().handleActionLinkClicked(managedAction, this::replaceContent);
+        uiActionHandler.handleActionLinkClicked(managedAction, this::replaceContent);
     }
     
     private void replaceContent(Node node) {
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/services/UiContexDefault.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/services/UiContexDefault.java
index d1e0030..a72ddd9 100644
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/services/UiContexDefault.java
+++ b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/services/UiContexDefault.java
@@ -22,11 +22,10 @@ import javax.inject.Inject;
 
 import org.springframework.stereotype.Service;
 
+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.decorator.DecoratorService;
-import org.apache.isis.incubator.viewer.javafx.model.icon.IconService;
-import org.apache.isis.incubator.viewer.javafx.ui.main.UiActionHandler;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
@@ -36,9 +35,10 @@ import lombok.RequiredArgsConstructor;
 @Getter
 public class UiContexDefault implements UiContext {
     
-    private final IconService iconService;
+    //private final IconService iconService;
     private final DecoratorService decoratorService;
-    private final UiActionHandler uiActionHandler;
+    //private final UiActionHandler uiActionHandler;
+    private final IsisInteractionFactory isisInteractionFactory;
     
     private final ActionUiModelFactoryFx actionUiModelFactory = new ActionUiModelFactoryFx();