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();