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;
+ }
+
+}