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/24 20:17:08 UTC

[isis] branch master updated (8035599 -> 6c25cd7)

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git.


    from 8035599  ISIS-2340: simplify menu building
     new 5c1343b  ISIS-2340: simplify ActionLinkUiModel
     new 6ffa3f3  ISIS-2340: fx: simplify ActionUI Factory stuff
     new 6c25cd7  ISIS-2340: fx/vaa: use simpler Action Models

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../javafx/model/action/ActionLinkFactoryFx.java   | 41 ------------
 .../viewer/javafx/model/action/ActionLinkFx.java   | 73 ----------------------
 .../model/action/ActionUiModelFactoryFx.java       | 13 ++--
 .../javafx/model/action/ActionUiModelFx.java       | 43 +++++++++++++
 .../viewer/javafx/ui/main/MenuBuilderFx.java       | 12 ++--
 .../vaadin/model/action/ActionLinkFactoryVaa.java  | 66 -------------------
 .../viewer/vaadin/model/action/ActionLinkVaa.java  | 39 ------------
 .../model/action/ActionUiModelFactoryVaa.java      | 17 ++---
 .../vaadin/model/action/ActionUiModelVaa.java      | 39 ++++++++++++
 .../viewer/vaadin/model/menu/MenuItemVaa.java      | 49 ---------------
 .../vaadin/ui/pages/main/MenuBuilderVaa.java       |  8 +--
 .../common/model/action/ActionUiMetaModel.java     | 16 ++++-
 .../ActionUiModel.java}                            | 14 +++--
 .../{ => link}/ActionLinkUiComponentDecorator.java |  2 +-
 .../{ => link}/ActionLinkUiComponentFactory.java   |  6 +-
 .../model/action/{ => link}/ActionLinkUiModel.java |  5 +-
 .../{ => link}/ActionLinkUiModelFactory.java       |  2 +-
 .../common}/model/mementos/ActionMemento.java      | 15 +++--
 .../isis/viewer/common/model/menu/MenuUiModel.java |  2 +-
 .../model/menu/MenuUiModel_buildMenuItems.java     |  2 +-
 .../common/model/menuitem/MenuItemUiModel.java     |  2 +-
 .../links/ActionLinkUiComponentFactoryWkt.java     |  2 +-
 .../viewer/wicket/model/links/LinkAndLabel.java    |  2 +-
 .../model/mementos/ActionParameterMemento.java     | 14 +++--
 .../wicket/model/models/ActionArgumentCache.java   |  2 +-
 .../viewer/wicket/model/models/ActionModel.java    |  4 +-
 .../wicket/model/models/PageParameterUtil.java     |  2 +-
 .../wicket/model/models/ScalarParameterModel.java  |  2 +-
 .../entityactions/EntityActionLinkFactory.java     |  5 +-
 .../serviceactions/MenuActionLinkFactory.java      |  4 +-
 .../serviceactions/ServiceActionUtil.java          | 12 ++--
 .../widgets/linkandlabel/ActionLink.java           | 10 +--
 .../linkandlabel/LinkAndLabelFactoryAbstract.java  |  6 +-
 .../isis/viewer/wicket/ui/util/Decorators.java     |  2 +-
 34 files changed, 184 insertions(+), 349 deletions(-)
 delete mode 100644 incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionLinkFactoryFx.java
 delete mode 100644 incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionLinkFx.java
 copy core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/chars/CharValueFacet.java => incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionUiModelFactoryFx.java (75%)
 create mode 100644 incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionUiModelFx.java
 delete mode 100644 incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionLinkFactoryVaa.java
 delete mode 100644 incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionLinkVaa.java
 copy testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/BuilderScriptWithoutResult.java => incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionUiModelFactoryVaa.java (73%)
 create mode 100644 incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionUiModelVaa.java
 delete mode 100644 incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/menu/MenuItemVaa.java
 copy viewers/common/src/main/java/org/apache/isis/viewer/common/model/{decorator/tooltip/TooltipDecorator.java => action/ActionUiModel.java} (72%)
 rename viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/{ => link}/ActionLinkUiComponentDecorator.java (97%)
 rename viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/{ => link}/ActionLinkUiComponentFactory.java (85%)
 rename viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/{ => link}/ActionLinkUiModel.java (95%)
 rename viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/{ => link}/ActionLinkUiModelFactory.java (96%)
 rename viewers/{wicket/model/src/main/java/org/apache/isis/viewer/wicket => common/src/main/java/org/apache/isis/viewer/common}/model/mementos/ActionMemento.java (88%)


[isis] 02/03: ISIS-2340: fx: simplify ActionUI Factory stuff

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 6ffa3f36d2d441085a0278ee1abd0a232f0fbb13
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Jun 24 21:54:36 2020 +0200

    ISIS-2340: fx: simplify ActionUI Factory stuff
---
 .../javafx/model/action/ActionLinkFactoryFx.java   |  2 +-
 .../viewer/javafx/model/action/ActionLinkFx.java   |  4 +-
 .../model/action/ActionUiModelFactoryFx.java       | 15 ++++----
 .../javafx/model/action/ActionUiModelFx.java       | 43 ++++++++++++++++++++++
 .../viewer/javafx/ui/main/MenuBuilderFx.java       | 12 +++---
 .../vaadin/model/action/ActionLinkFactoryVaa.java  |  4 +-
 .../viewer/vaadin/model/action/ActionLinkVaa.java  |  4 +-
 .../viewer/common/model/action/ActionUiModel.java} | 17 +++++----
 .../{ => link}/ActionLinkUiComponentDecorator.java |  2 +-
 .../{ => link}/ActionLinkUiComponentFactory.java   |  4 +-
 .../model/action/{ => link}/ActionLinkUiModel.java |  3 +-
 .../{ => link}/ActionLinkUiModelFactory.java       |  2 +-
 .../isis/viewer/common/model/menu/MenuUiModel.java |  2 +-
 .../model/menu/MenuUiModel_buildMenuItems.java     |  2 +-
 .../common/model/menuitem/MenuItemUiModel.java     |  2 +-
 .../links/ActionLinkUiComponentFactoryWkt.java     |  2 +-
 .../viewer/wicket/model/links/LinkAndLabel.java    |  2 +-
 .../serviceactions/ServiceActionUtil.java          |  2 +-
 .../isis/viewer/wicket/ui/util/Decorators.java     |  2 +-
 19 files changed, 87 insertions(+), 39 deletions(-)

diff --git a/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionLinkFactoryFx.java b/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionLinkFactoryFx.java
index 3715198..7c56e62 100644
--- a/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionLinkFactoryFx.java
+++ b/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionLinkFactoryFx.java
@@ -20,7 +20,7 @@ package org.apache.isis.incubator.viewer.javafx.model.action;
 
 
 import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.isis.viewer.common.model.action.ActionLinkUiModelFactory;
+import org.apache.isis.viewer.common.model.action.link.ActionLinkUiModelFactory;
 
 import lombok.RequiredArgsConstructor;
 
diff --git a/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionLinkFx.java b/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionLinkFx.java
index 7322d45..e0b4872 100644
--- a/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionLinkFx.java
+++ b/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionLinkFx.java
@@ -21,9 +21,9 @@ package org.apache.isis.incubator.viewer.javafx.model.action;
 import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.viewer.common.model.HasUiMenuItem;
-import org.apache.isis.viewer.common.model.action.ActionLinkUiComponentFactory;
-import org.apache.isis.viewer.common.model.action.ActionLinkUiModel;
 import org.apache.isis.viewer.common.model.action.ActionUiMetaModel;
+import org.apache.isis.viewer.common.model.action.link.ActionLinkUiComponentFactory;
+import org.apache.isis.viewer.common.model.action.link.ActionLinkUiModel;
 import org.apache.isis.viewer.common.model.object.ObjectUiModel;
 import org.apache.isis.viewer.common.model.object.SimpleObjectUiModel;
 
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/links/ActionLinkUiComponentFactoryWkt.java b/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionUiModelFactoryFx.java
similarity index 71%
copy from viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/links/ActionLinkUiComponentFactoryWkt.java
copy to incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionUiModelFactoryFx.java
index 28dd63f..6224d32 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/links/ActionLinkUiComponentFactoryWkt.java
+++ b/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionUiModelFactoryFx.java
@@ -16,15 +16,14 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.viewer.wicket.model.links;
+package org.apache.isis.incubator.viewer.javafx.model.action;
 
-import java.io.Serializable;
+import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
 
-import org.apache.wicket.markup.html.link.AbstractLink;
-
-import org.apache.isis.viewer.common.model.action.ActionLinkUiComponentFactory;
-
-public interface ActionLinkUiComponentFactoryWkt 
-extends ActionLinkUiComponentFactory<AbstractLink>, Serializable {
+public class ActionUiModelFactoryFx {
 
+    public ActionUiModelFx newActionUiModel(ManagedAction managedAction) {
+        return ActionUiModelFx.of(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
new file mode 100644
index 0000000..356c012
--- /dev/null
+++ b/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionUiModelFx.java
@@ -0,0 +1,43 @@
+package org.apache.isis.incubator.viewer.javafx.model.action;
+
+import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
+import org.apache.isis.viewer.common.model.action.ActionUiMetaModel;
+import org.apache.isis.viewer.common.model.action.ActionUiModel;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import lombok.val;
+
+import javafx.scene.Node;
+import javafx.scene.control.Label;
+import javafx.scene.control.Menu;
+import javafx.scene.control.MenuItem;
+
+@RequiredArgsConstructor(staticName = "of")
+public class ActionUiModelFx implements ActionUiModel<MenuItem, Node> {
+
+    @Getter 
+    private final ManagedAction managedAction;
+    
+    @Getter(lazy = true, onMethod_ = {@Override}) 
+    private final ActionUiMetaModel actionUiMetaModel = ActionUiMetaModel.of(getManagedAction());
+
+
+    @Override
+    public MenuItem createMenuUiComponent() {
+        val actionMeta = getActionUiMetaModel();
+        return new Menu(actionMeta.getLabel());
+        
+    }
+
+    @Override
+    public Node createRegularUiComponent() {
+        val actionMeta = getActionUiMetaModel();
+        val uiLabel = new Label(actionMeta.getLabel());
+        
+        return uiLabel;
+        //return Decorators.getIcon().decorate(uiLabel, actionMeta.getFontAwesomeUiModel());
+    }
+
+
+}
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 dbefe50..0669d97 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
@@ -18,7 +18,7 @@
  */
 package org.apache.isis.incubator.viewer.javafx.ui.main;
 
-import org.apache.isis.incubator.viewer.javafx.model.action.ActionLinkFactoryFx;
+import org.apache.isis.incubator.viewer.javafx.model.action.ActionUiModelFactoryFx;
 import org.apache.isis.viewer.common.model.menu.MenuItemDto;
 import org.apache.isis.viewer.common.model.menu.MenuVisitor;
 
@@ -28,6 +28,7 @@ import lombok.extern.log4j.Log4j2;
 
 import javafx.scene.control.Menu;
 import javafx.scene.control.MenuBar;
+import javafx.scene.control.SeparatorMenuItem;
 
 @RequiredArgsConstructor(staticName = "of")
 @Log4j2
@@ -36,7 +37,7 @@ public class MenuBuilderFx implements MenuVisitor {
     private final MenuBar menuBar;
     
     private Menu currentTopLevelMenu = null;
-    private ActionLinkFactoryFx actionLinkFactory = new ActionLinkFactoryFx();
+    private ActionUiModelFactoryFx actionUiModelFactory = new ActionUiModelFactoryFx();
 
     @Override
     public void addTopLevel(MenuItemDto menu) {
@@ -52,14 +53,15 @@ public class MenuBuilderFx implements MenuVisitor {
         
         log.info("sub menu {}", menu.getName());
         
-        val actionLink = actionLinkFactory.newActionLink(menu.getName(), managedAction);
-        currentTopLevelMenu.getItems().add(actionLink.getUiMenuItem());
+        val actionLink = actionUiModelFactory.newActionUiModel(managedAction);
+        currentTopLevelMenu.getItems().add(actionLink.createMenuUiComponent());
     }
     
     @Override
     public void addSectionSpacer() {
-        // TODO Auto-generated method stub
         log.info("spacer");
+        currentTopLevelMenu.getItems()
+        .add(new SeparatorMenuItem());
     }
     
 }
diff --git a/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionLinkFactoryVaa.java b/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionLinkFactoryVaa.java
index 659a834..b20a5f2 100644
--- a/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionLinkFactoryVaa.java
+++ b/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionLinkFactoryVaa.java
@@ -23,9 +23,9 @@ import com.vaadin.flow.component.html.Label;
 
 import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
 import org.apache.isis.incubator.viewer.vaadin.model.decorator.Decorators;
-import org.apache.isis.viewer.common.model.action.ActionLinkUiModel;
-import org.apache.isis.viewer.common.model.action.ActionLinkUiModelFactory;
 import org.apache.isis.viewer.common.model.action.ActionUiMetaModel;
+import org.apache.isis.viewer.common.model.action.link.ActionLinkUiModel;
+import org.apache.isis.viewer.common.model.action.link.ActionLinkUiModelFactory;
 import org.apache.isis.viewer.common.model.object.SimpleObjectUiModel;
 
 import lombok.RequiredArgsConstructor;
diff --git a/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionLinkVaa.java b/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionLinkVaa.java
index 011f230..b3054d0 100644
--- a/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionLinkVaa.java
+++ b/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionLinkVaa.java
@@ -21,8 +21,8 @@ package org.apache.isis.incubator.viewer.vaadin.model.action;
 import com.vaadin.flow.component.Component;
 
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-import org.apache.isis.viewer.common.model.action.ActionLinkUiComponentFactory;
-import org.apache.isis.viewer.common.model.action.ActionLinkUiModel;
+import org.apache.isis.viewer.common.model.action.link.ActionLinkUiComponentFactory;
+import org.apache.isis.viewer.common.model.action.link.ActionLinkUiModel;
 import org.apache.isis.viewer.common.model.object.ObjectUiModel;
 
 public class ActionLinkVaa extends ActionLinkUiModel<Component> {
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/links/ActionLinkUiComponentFactoryWkt.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/ActionUiModel.java
similarity index 71%
copy from viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/links/ActionLinkUiComponentFactoryWkt.java
copy to viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/ActionUiModel.java
index 28dd63f..078800d 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/links/ActionLinkUiComponentFactoryWkt.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/ActionUiModel.java
@@ -16,15 +16,16 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.viewer.wicket.model.links;
+package org.apache.isis.viewer.common.model.action;
 
-import java.io.Serializable;
+import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
 
-import org.apache.wicket.markup.html.link.AbstractLink;
-
-import org.apache.isis.viewer.common.model.action.ActionLinkUiComponentFactory;
-
-public interface ActionLinkUiComponentFactoryWkt 
-extends ActionLinkUiComponentFactory<AbstractLink>, Serializable {
+public interface ActionUiModel<M, R> {
+    
+    ActionUiMetaModel getActionUiMetaModel();
+    ManagedAction getManagedAction();
+    
+    M createMenuUiComponent();    
+    R createRegularUiComponent();
 
 }
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/ActionLinkUiComponentDecorator.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/link/ActionLinkUiComponentDecorator.java
similarity index 97%
rename from viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/ActionLinkUiComponentDecorator.java
rename to viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/link/ActionLinkUiComponentDecorator.java
index 6becab5..cb4237d 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/ActionLinkUiComponentDecorator.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/link/ActionLinkUiComponentDecorator.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.viewer.common.model.action;
+package org.apache.isis.viewer.common.model.action.link;
 
 import org.apache.isis.viewer.common.model.decorator.confirm.ConfirmDecorator;
 import org.apache.isis.viewer.common.model.decorator.disable.DisableDecorator;
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/ActionLinkUiComponentFactory.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/link/ActionLinkUiComponentFactory.java
similarity index 90%
rename from viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/ActionLinkUiComponentFactory.java
rename to viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/link/ActionLinkUiComponentFactory.java
index b623b3b..b126c5e 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/ActionLinkUiComponentFactory.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/link/ActionLinkUiComponentFactory.java
@@ -16,7 +16,9 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.viewer.common.model.action;
+package org.apache.isis.viewer.common.model.action.link;
+
+import org.apache.isis.viewer.common.model.action.ActionUiMetaModel;
 
 /**
  * Creates a click-able UI component of type {@code <T>} based on an {@link ActionLinkUiModel}.
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/ActionLinkUiModel.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/link/ActionLinkUiModel.java
similarity index 96%
rename from viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/ActionLinkUiModel.java
rename to viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/link/ActionLinkUiModel.java
index bb281a9..f3cb6d8 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/ActionLinkUiModel.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/link/ActionLinkUiModel.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.viewer.common.model.action;
+package org.apache.isis.viewer.common.model.action.link;
 
 import java.util.Optional;
 
@@ -27,6 +27,7 @@ import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.viewer.common.model.HasUiComponent;
+import org.apache.isis.viewer.common.model.action.ActionUiMetaModel;
 import org.apache.isis.viewer.common.model.object.ObjectUiModel;
 
 import lombok.Getter;
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/ActionLinkUiModelFactory.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/link/ActionLinkUiModelFactory.java
similarity index 96%
rename from viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/ActionLinkUiModelFactory.java
rename to viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/link/ActionLinkUiModelFactory.java
index ae602d4..297cc21 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/ActionLinkUiModelFactory.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/link/ActionLinkUiModelFactory.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.viewer.common.model.action;
+package org.apache.isis.viewer.common.model.action.link;
 
 import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
 
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/menu/MenuUiModel.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/menu/MenuUiModel.java
index 91bd397..001b826 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/menu/MenuUiModel.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/menu/MenuUiModel.java
@@ -27,7 +27,7 @@ import java.util.function.Function;
 import org.apache.isis.applib.annotation.DomainServiceLayout;
 import org.apache.isis.applib.layout.menubars.bootstrap3.BS3MenuBar;
 import org.apache.isis.core.runtime.context.IsisAppCommonContext;
-import org.apache.isis.viewer.common.model.action.ActionLinkUiModelFactory;
+import org.apache.isis.viewer.common.model.action.link.ActionLinkUiModelFactory;
 import org.apache.isis.viewer.common.model.menuitem.MenuItemUiModel;
 
 import lombok.Getter;
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/menu/MenuUiModel_buildMenuItems.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/menu/MenuUiModel_buildMenuItems.java
index e7e3dd1..7d8ade4 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/menu/MenuUiModel_buildMenuItems.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/menu/MenuUiModel_buildMenuItems.java
@@ -27,7 +27,7 @@ import org.apache.isis.applib.layout.menubars.bootstrap3.BS3MenuBar;
 import org.apache.isis.core.commons.internal.base._Strings;
 import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
 import org.apache.isis.core.runtime.context.IsisAppCommonContext;
-import org.apache.isis.viewer.common.model.action.ActionLinkUiModelFactory;
+import org.apache.isis.viewer.common.model.action.link.ActionLinkUiModelFactory;
 import org.apache.isis.viewer.common.model.menuitem.MenuItemUiModel;
 import org.apache.isis.viewer.common.model.userprofile.UserProfileUiModelProvider;
 
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/menuitem/MenuItemUiModel.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/menuitem/MenuItemUiModel.java
index 7d0166f..9603f0d 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/menuitem/MenuItemUiModel.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/menuitem/MenuItemUiModel.java
@@ -28,8 +28,8 @@ import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.core.commons.internal.base._Casts;
 import org.apache.isis.core.commons.internal.collections._Lists;
 import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.isis.viewer.common.model.action.ActionLinkUiModel;
 import org.apache.isis.viewer.common.model.action.ActionUiMetaModel;
+import org.apache.isis.viewer.common.model.action.link.ActionLinkUiModel;
 
 import lombok.Getter;
 import lombok.NonNull;
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/links/ActionLinkUiComponentFactoryWkt.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/links/ActionLinkUiComponentFactoryWkt.java
index 28dd63f..8899c17 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/links/ActionLinkUiComponentFactoryWkt.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/links/ActionLinkUiComponentFactoryWkt.java
@@ -22,7 +22,7 @@ import java.io.Serializable;
 
 import org.apache.wicket.markup.html.link.AbstractLink;
 
-import org.apache.isis.viewer.common.model.action.ActionLinkUiComponentFactory;
+import org.apache.isis.viewer.common.model.action.link.ActionLinkUiComponentFactory;
 
 public interface ActionLinkUiComponentFactoryWkt 
 extends ActionLinkUiComponentFactory<AbstractLink>, Serializable {
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java
index 6814365..551c7fe 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java
@@ -34,7 +34,7 @@ import org.apache.isis.core.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.viewer.common.model.action.ActionUiMetaModel;
-import org.apache.isis.viewer.common.model.action.ActionLinkUiModel;
+import org.apache.isis.viewer.common.model.action.link.ActionLinkUiModel;
 import org.apache.isis.viewer.wicket.model.common.CommonContextUtils;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionUtil.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionUtil.java
index bc80f9e..357243f 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionUtil.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionUtil.java
@@ -31,7 +31,7 @@ import org.apache.wicket.markup.html.panel.Fragment;
 
 import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
 import org.apache.isis.core.runtime.context.IsisAppCommonContext;
-import org.apache.isis.viewer.common.model.action.ActionLinkUiModelFactory;
+import org.apache.isis.viewer.common.model.action.link.ActionLinkUiModelFactory;
 import org.apache.isis.viewer.common.model.menu.MenuUiModel;
 import org.apache.isis.viewer.wicket.model.common.CommonContextUtils;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Decorators.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Decorators.java
index 0291c2c..fc2215a 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Decorators.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Decorators.java
@@ -25,7 +25,7 @@ import org.apache.wicket.markup.html.form.Button;
 
 import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.core.commons.internal.base._Strings;
-import org.apache.isis.viewer.common.model.action.ActionLinkUiComponentDecorator;
+import org.apache.isis.viewer.common.model.action.link.ActionLinkUiComponentDecorator;
 import org.apache.isis.viewer.common.model.decorator.confirm.ConfirmDecorator;
 import org.apache.isis.viewer.common.model.decorator.confirm.ConfirmUiModel;
 import org.apache.isis.viewer.common.model.decorator.danger.DangerDecorator;


[isis] 01/03: ISIS-2340: simplify ActionLinkUiModel

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 5c1343be16cf06754f73b2f647400db37999b260
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Jun 24 21:26:15 2020 +0200

    ISIS-2340: simplify ActionLinkUiModel
---
 .../viewer/javafx/model/action/ActionLinkFx.java         |  5 ++---
 .../viewer/vaadin/model/action/ActionLinkFactoryVaa.java |  6 ++----
 .../model/action/ActionLinkUiComponentFactory.java       |  2 +-
 .../viewer/common/model/action/ActionLinkUiModel.java    |  2 +-
 .../viewer/common/model/action/ActionUiMetaModel.java    | 16 +++++++++++++---
 .../viewer/common}/model/mementos/ActionMemento.java     | 15 +++++++++------
 .../wicket/model/mementos/ActionParameterMemento.java    | 14 ++++++++------
 .../viewer/wicket/model/models/ActionArgumentCache.java  |  2 +-
 .../isis/viewer/wicket/model/models/ActionModel.java     |  4 ++--
 .../viewer/wicket/model/models/PageParameterUtil.java    |  2 +-
 .../viewer/wicket/model/models/ScalarParameterModel.java |  2 +-
 .../entityactions/EntityActionLinkFactory.java           |  5 ++++-
 .../actionmenu/serviceactions/MenuActionLinkFactory.java |  4 +++-
 .../actionmenu/serviceactions/ServiceActionUtil.java     | 10 +++++++---
 .../ui/components/widgets/linkandlabel/ActionLink.java   | 10 +++-------
 .../linkandlabel/LinkAndLabelFactoryAbstract.java        |  6 +++---
 16 files changed, 61 insertions(+), 44 deletions(-)

diff --git a/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionLinkFx.java b/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionLinkFx.java
index ad586cf..7322d45 100644
--- a/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionLinkFx.java
+++ b/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionLinkFx.java
@@ -23,6 +23,7 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.viewer.common.model.HasUiMenuItem;
 import org.apache.isis.viewer.common.model.action.ActionLinkUiComponentFactory;
 import org.apache.isis.viewer.common.model.action.ActionLinkUiModel;
+import org.apache.isis.viewer.common.model.action.ActionUiMetaModel;
 import org.apache.isis.viewer.common.model.object.ObjectUiModel;
 import org.apache.isis.viewer.common.model.object.SimpleObjectUiModel;
 
@@ -54,10 +55,8 @@ implements HasUiMenuItem<Menu>{
     }
 
 
-    private static Node createUiComponent(
-            final ActionLinkUiModel<Node> actionUiModel) {
+    private static Node createUiComponent(final ActionUiMetaModel actionMeta) {
         
-        val actionMeta = actionUiModel.getActionUiMetaModel();
         val uiLabel = new Label(actionMeta.getLabel());
         
         return uiLabel;
diff --git a/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionLinkFactoryVaa.java b/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionLinkFactoryVaa.java
index 5faba5c..659a834 100644
--- a/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionLinkFactoryVaa.java
+++ b/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionLinkFactoryVaa.java
@@ -25,6 +25,7 @@ import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
 import org.apache.isis.incubator.viewer.vaadin.model.decorator.Decorators;
 import org.apache.isis.viewer.common.model.action.ActionLinkUiModel;
 import org.apache.isis.viewer.common.model.action.ActionLinkUiModelFactory;
+import org.apache.isis.viewer.common.model.action.ActionUiMetaModel;
 import org.apache.isis.viewer.common.model.object.SimpleObjectUiModel;
 
 import lombok.RequiredArgsConstructor;
@@ -51,14 +52,11 @@ public class ActionLinkFactoryVaa implements ActionLinkUiModelFactory<Component>
     
     // -- HELPER
     
-    private Component createUiComponent(
-            final ActionLinkUiModel<Component> actionUiModel) {
+    private Component createUiComponent(final ActionUiMetaModel actionMeta) {
         
-        val actionMeta = actionUiModel.getActionUiMetaModel();
         val uiLabel = new Label(actionMeta.getLabel());
         
         return Decorators.getIcon().decorate(uiLabel, actionMeta.getFontAwesomeUiModel());
-                
     }
 
 
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/ActionLinkUiComponentFactory.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/ActionLinkUiComponentFactory.java
index 7aa8777..b623b3b 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/ActionLinkUiComponentFactory.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/ActionLinkUiComponentFactory.java
@@ -29,6 +29,6 @@ package org.apache.isis.viewer.common.model.action;
  */
 public interface ActionLinkUiComponentFactory<T> {
 
-    T newActionLinkUiComponent(ActionLinkUiModel<T> actionUiModel);
+    T newActionLinkUiComponent(ActionUiMetaModel actionUiMetaModel);
    
 }
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/ActionLinkUiModel.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/ActionLinkUiModel.java
index 03de318..bb281a9 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/ActionLinkUiModel.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/ActionLinkUiModel.java
@@ -63,7 +63,7 @@ public abstract class ActionLinkUiModel<T> implements HasUiComponent<T> {
     
     // implements HasUiComponent<T>
     @Getter(onMethod = @__(@Override), lazy = true) 
-    private final T uiComponent = uiComponentFactory.newActionLinkUiComponent(this);
+    private final T uiComponent = uiComponentFactory.newActionLinkUiComponent(getActionUiMetaModel());
     
     public ActionUiMetaModel getActionUiMetaModel() {
         return actionUiMetaModel.get();
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/ActionUiMetaModel.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/ActionUiMetaModel.java
index 1b8a694..2a58cf7 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/ActionUiMetaModel.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/ActionUiMetaModel.java
@@ -22,6 +22,7 @@ import java.io.Serializable;
 import java.util.Optional;
 import java.util.function.Function;
 import java.util.function.Predicate;
+import java.util.function.Supplier;
 
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.PromptStyle;
@@ -33,8 +34,10 @@ import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet;
 import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.viewer.common.model.decorator.disable.DisableUiModel;
 import org.apache.isis.viewer.common.model.decorator.fa.FontAwesomeUiModel;
+import org.apache.isis.viewer.common.model.mementos.ActionMemento;
 
 import lombok.AccessLevel;
 import lombok.Getter;
@@ -43,10 +46,11 @@ import lombok.RequiredArgsConstructor;
 import lombok.val;
 
 @RequiredArgsConstructor(access = AccessLevel.PRIVATE)
-public class ActionUiMetaModel implements Serializable {
+public final class ActionUiMetaModel implements Serializable {
 
     private static final long serialVersionUID = 1L;
     
+    @Getter private final ActionMemento actionMemento;
     @Getter private final String label;
     @Getter private final String description;
     @Getter private final boolean blobOrClob;
@@ -76,10 +80,12 @@ public class ActionUiMetaModel implements Serializable {
         return new ActionUiMetaModel(actionHolder, objectAction);
     };
     
-    protected ActionUiMetaModel(
+    private ActionUiMetaModel(
             final ManagedObject actionHolder,
             final ObjectAction objectAction) {
-        this(   ObjectAction.Util.nameFor(objectAction),
+        
+        this(   new ActionMemento(objectAction),
+                ObjectAction.Util.nameFor(objectAction),
                 getDescription(objectAction).orElse(ObjectAction.Util.descriptionOf(objectAction)),
                 ObjectAction.Util.returnsBlobOrClob(objectAction),
                 objectAction.isPrototype(),
@@ -102,6 +108,10 @@ public class ActionUiMetaModel implements Serializable {
         return x -> posAccessor.apply(x).getPosition() == position;
     }
     
+    public ObjectAction getObjectAction(Supplier<SpecificationLoader> specLoader) { 
+        return actionMemento.getAction(specLoader);
+    }
+    
     // -- PARAMETERS
     
     public enum Parameters {
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ActionMemento.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/mementos/ActionMemento.java
similarity index 88%
rename from viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ActionMemento.java
rename to viewers/common/src/main/java/org/apache/isis/viewer/common/model/mementos/ActionMemento.java
index 3b2c3c5..d5d564b 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ActionMemento.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/mementos/ActionMemento.java
@@ -17,16 +17,18 @@
  *  under the License.
  */
 
-package org.apache.isis.viewer.wicket.model.mementos;
+package org.apache.isis.viewer.common.model.mementos;
 
 import java.io.Serializable;
+import java.util.function.Supplier;
 
 import org.apache.isis.core.metamodel.spec.ActionType;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 
+import lombok.val;
+
 /**
  * {@link Serializable} represention of a {@link ObjectAction}
  */
@@ -75,9 +77,9 @@ public class ActionMemento implements Serializable {
         return nameParmsId;
     }
 
-    public ObjectAction getAction(final SpecificationLoader specificationLoader) {
+    public ObjectAction getAction(final Supplier<SpecificationLoader> specificationLoaderSupplier) {
         if (action == null) {
-            action = actionFor(owningType, actionType, nameParmsId, specificationLoader);
+            action = actionFor(owningType, actionType, nameParmsId, specificationLoaderSupplier.get());
         }
         return action;
     }
@@ -86,8 +88,9 @@ public class ActionMemento implements Serializable {
             ObjectSpecId owningType,
             ActionType actionType,
             String nameParmsId,
-            final SpecificationLoader specificationLoader) {
-        final ObjectSpecification objectSpec = specificationLoader.lookupBySpecIdElseLoad(owningType);
+            SpecificationLoader specificationLoader) {
+        
+        val objectSpec = specificationLoader.lookupBySpecIdElseLoad(owningType);
         return objectSpec.getObjectActionElseFail(actionType, nameParmsId);
     }
 
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ActionParameterMemento.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ActionParameterMemento.java
index 2ee8092..e4d8383 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ActionParameterMemento.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ActionParameterMemento.java
@@ -20,11 +20,13 @@
 package org.apache.isis.viewer.wicket.model.mementos;
 
 import java.io.Serializable;
+import java.util.function.Supplier;
 
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
+import org.apache.isis.viewer.common.model.mementos.ActionMemento;
 
 /**
  * {@link Serializable} representation of a {@link ObjectActionParameter parameter}
@@ -62,9 +64,9 @@ public class ActionParameterMemento implements Serializable {
         return number;
     }
 
-    public ObjectActionParameter getActionParameter(final SpecificationLoader specificationLoader) {
+    public ObjectActionParameter getActionParameter(final Supplier<SpecificationLoader> specLoader) {
         if (actionParameter == null) {
-            this.actionParameter = actionParameterFor(actionMemento, number, specificationLoader);
+            this.actionParameter = actionParameterFor(actionMemento, number, specLoader);
         }
         return actionParameter;
     }
@@ -72,8 +74,8 @@ public class ActionParameterMemento implements Serializable {
     private static ObjectActionParameter actionParameterFor(
             final ActionMemento actionMemento,
             final int paramIndex,
-            final SpecificationLoader specificationLoader) {
-        final ObjectAction action = actionMemento.getAction(specificationLoader);
+            final Supplier<SpecificationLoader> specLoader) {
+        final ObjectAction action = actionMemento.getAction(specLoader);
         return action.getParameters().getElseFail(paramIndex);
     }
 
@@ -81,8 +83,8 @@ public class ActionParameterMemento implements Serializable {
      * Convenience.
      * @param specificationLoader
      */
-    public ObjectSpecification getSpecification(final SpecificationLoader specificationLoader) {
-        return getActionParameter(specificationLoader).getSpecification();
+    public ObjectSpecification getSpecification(final Supplier<SpecificationLoader> specLoader) {
+        return getActionParameter(specLoader).getSpecification();
     }
 
     @Override
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionArgumentCache.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionArgumentCache.java
index aa3ce81..9708f0f 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionArgumentCache.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionArgumentCache.java
@@ -31,7 +31,7 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.isis.viewer.common.model.action.form.PendingParameterManager;
 import org.apache.isis.viewer.common.model.feature.ParameterUiModel;
-import org.apache.isis.viewer.wicket.model.mementos.ActionMemento;
+import org.apache.isis.viewer.common.model.mementos.ActionMemento;
 import org.apache.isis.viewer.wicket.model.mementos.ActionParameterMemento;
 
 import lombok.NonNull;
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
index c4b8032..a3426d6 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
@@ -60,7 +60,7 @@ import org.apache.isis.core.metamodel.specloader.specimpl.PendingParameterModel;
 import org.apache.isis.core.runtime.context.IsisAppCommonContext;
 import org.apache.isis.viewer.common.model.action.form.FormPendingParamUiModel;
 import org.apache.isis.viewer.common.model.action.form.FormUiModel;
-import org.apache.isis.viewer.wicket.model.mementos.ActionMemento;
+import org.apache.isis.viewer.common.model.mementos.ActionMemento;
 
 import lombok.val;
 
@@ -112,7 +112,7 @@ implements FormUiModel, FormExecutorContext, BookmarkableModel {
     @Override
     public ObjectAction getMetaModel() {
         if(objectAction==null) {
-            objectAction = actionMemento.getAction(getSpecificationLoader()); 
+            objectAction = actionMemento.getAction(this::getSpecificationLoader); 
         }
         return objectAction;
     }
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PageParameterUtil.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PageParameterUtil.java
index 1cc9294..eab9395 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PageParameterUtil.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PageParameterUtil.java
@@ -39,8 +39,8 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.runtime.context.IsisAppCommonContext;
+import org.apache.isis.viewer.common.model.mementos.ActionMemento;
 import org.apache.isis.viewer.wicket.model.common.PageParametersUtils;
-import org.apache.isis.viewer.wicket.model.mementos.ActionMemento;
 import org.apache.isis.viewer.wicket.model.mementos.PageParameterNames;
 
 import lombok.Value;
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java
index 4794e97..e7822d8 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java
@@ -62,7 +62,7 @@ implements ParameterUiModel {
     @Override
     public ObjectActionParameter getMetaModel() {
         if(actionParameter==null) {
-            actionParameter = paramMemento.getActionParameter(getSpecificationLoader()); 
+            actionParameter = paramMemento.getActionParameter(this::getSpecificationLoader); 
         }
         return actionParameter;  
     }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionLinkFactory.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionLinkFactory.java
index 4313bef..28b7691 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionLinkFactory.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionLinkFactory.java
@@ -21,6 +21,7 @@ package org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions;
 
 import org.apache.isis.core.metamodel.spec.ManagedObjects;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.viewer.wicket.model.common.CommonContextUtils;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
@@ -59,7 +60,9 @@ public final class EntityActionLinkFactory extends LinkAndLabelFactoryAbstract {
         // this is now done at the point of rendering
 
         return LinkAndLabel.of(
-                model->super.newLinkComponent(model.getObjectAction(), toggledMementosProviderIfAny),
+                model->super.newLinkComponent(
+                        model.getObjectAction(()->CommonContextUtils.getCommonContext().getSpecificationLoader()), 
+                        toggledMementosProviderIfAny),
                 named, 
                 this.targetEntityModel, 
                 objectAction);
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/MenuActionLinkFactory.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/MenuActionLinkFactory.java
index 7970dc6..2573b3c 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/MenuActionLinkFactory.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/MenuActionLinkFactory.java
@@ -40,7 +40,9 @@ class MenuActionLinkFactory extends LinkAndLabelFactoryAbstract {
             final String named) {
 
         return LinkAndLabel.of(
-                model->super.newLinkComponent(model.getObjectAction(), toggledMementosProviderIfAny), 
+                model->super.newLinkComponent(
+                        model.getObjectAction(super::getSpecificationLoader), 
+                        toggledMementosProviderIfAny), 
                 named, 
                 this.targetEntityModel, 
                 objectAction);
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionUtil.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionUtil.java
index a09ff5c..bc80f9e 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionUtil.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionUtil.java
@@ -33,6 +33,7 @@ import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
 import org.apache.isis.core.runtime.context.IsisAppCommonContext;
 import org.apache.isis.viewer.common.model.action.ActionLinkUiModelFactory;
 import org.apache.isis.viewer.common.model.menu.MenuUiModel;
+import org.apache.isis.viewer.wicket.model.common.CommonContextUtils;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.ui.pages.PageAbstract;
@@ -113,8 +114,8 @@ public final class ServiceActionUtil {
         
         @Override
         public LinkAndLabel newActionLink(
-                String named, 
-                ManagedAction managedAction) {
+                final String named, 
+                final ManagedAction managedAction) {
         
             val serviceModel = EntityModel.ofAdapter(commonContext, managedAction.getOwner());
             
@@ -123,7 +124,10 @@ public final class ServiceActionUtil {
                     serviceModel);
             
             return LinkAndLabel.of(
-                    model->actionLinkFactory.newActionLink(model.getObjectAction(), named).getUiComponent(),
+                    model->actionLinkFactory.newActionLink(
+                            model.getObjectAction(()->CommonContextUtils.getCommonContext().getSpecificationLoader()),
+                            named)
+                            .getUiComponent(),
                     named,
                     serviceModel,
                     managedAction.getAction());
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java
index ef2a262..f3cc880 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java
@@ -57,11 +57,7 @@ public abstract class ActionLink extends AjaxLink<ManagedObject> implements IAja
 
     @Getter protected final transient IsisAppCommonContext commonContext;
 
-//    public ActionLink(String id, ActionModel model) {
-//        this(id, model, null);
-//    }
-    
-    ActionLink(IsisAppCommonContext commonContext, String id, ActionModel model, ObjectAction action) {
+    ActionLink(IsisAppCommonContext commonContext, String id, ActionModel model) {
         super(id, model);
 
         this.commonContext = commonContext;
@@ -77,7 +73,7 @@ public abstract class ActionLink extends AjaxLink<ManagedObject> implements IAja
                 }
 
                 // trivial optimization; also store the objectAction if it is available (saves looking it up)
-                objectAction = action;
+                objectAction = model.getMetaModel();
 
                 // this returns non-null if the action is no-arg and returns a URL or a Blob or a Clob.
                 // Otherwise can use default handling
@@ -116,7 +112,7 @@ public abstract class ActionLink extends AjaxLink<ManagedObject> implements IAja
     public ObjectAction getObjectAction() {
         return objectAction != null
                 ? objectAction
-                        : (objectAction = getActionModel().getMetaModel());
+                : (objectAction = getActionModel().getMetaModel());
     }
 
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/LinkAndLabelFactoryAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/LinkAndLabelFactoryAbstract.java
index 6a49653..8c253d4 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/LinkAndLabelFactoryAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/LinkAndLabelFactoryAbstract.java
@@ -92,13 +92,13 @@ implements Serializable {
     public abstract LinkAndLabel newActionLink(ObjectAction action, String named);
     
     protected ActionLink newLinkComponent(
-            final ObjectAction action,
+            final ObjectAction objectAction,
             final ToggledMementosProvider toggledMementosProviderIfAny) {
 
-        val actionModel = ActionModel.of(this.targetEntityModel, action);
+        val actionModel = ActionModel.of(this.targetEntityModel, objectAction);
         val commonContext = actionModel.getCommonContext();
 
-        final ActionLink link = new ActionLink(commonContext, linkId, actionModel, action) {
+        final ActionLink link = new ActionLink(commonContext, linkId, actionModel) {
             
             private static final long serialVersionUID = 1L;
 


[isis] 03/03: ISIS-2340: fx/vaa: use simpler Action Models

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 6c25cd70af29a4df9dd47793d023f96c461dd305
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Jun 24 22:16:49 2020 +0200

    ISIS-2340: fx/vaa: use simpler Action Models
---
 .../viewer/javafx/model/action/ActionLinkFx.java   | 72 ----------------------
 .../viewer/javafx/ui/main/MenuBuilderFx.java       |  4 +-
 .../vaadin/model/action/ActionLinkFactoryVaa.java  | 64 -------------------
 .../viewer/vaadin/model/action/ActionLinkVaa.java  | 39 ------------
 .../model/action/ActionUiModelFactoryVaa.java}     | 22 ++-----
 .../vaadin/model/action/ActionUiModelVaa.java      | 39 ++++++++++++
 .../viewer/vaadin/model/menu/MenuItemVaa.java      | 49 ---------------
 .../vaadin/ui/pages/main/MenuBuilderVaa.java       |  8 +--
 8 files changed, 50 insertions(+), 247 deletions(-)

diff --git a/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionLinkFx.java b/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionLinkFx.java
deleted file mode 100644
index e0b4872..0000000
--- a/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionLinkFx.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.incubator.viewer.javafx.model.action;
-
-import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-import org.apache.isis.viewer.common.model.HasUiMenuItem;
-import org.apache.isis.viewer.common.model.action.ActionUiMetaModel;
-import org.apache.isis.viewer.common.model.action.link.ActionLinkUiComponentFactory;
-import org.apache.isis.viewer.common.model.action.link.ActionLinkUiModel;
-import org.apache.isis.viewer.common.model.object.ObjectUiModel;
-import org.apache.isis.viewer.common.model.object.SimpleObjectUiModel;
-
-import lombok.val;
-
-import javafx.scene.Node;
-import javafx.scene.control.Label;
-import javafx.scene.control.Menu;
-
-public class ActionLinkFx 
-extends ActionLinkUiModel<Node> 
-implements HasUiMenuItem<Menu>{
-
-    public static ActionLinkFx of(
-            final String named,
-            final ManagedAction managedAction) {
-        
-        val actionOwnerModel = new SimpleObjectUiModel(managedAction.getOwner());
-        return new ActionLinkFx(ActionLinkFx::createUiComponent, named, actionOwnerModel, managedAction.getAction());
-    }
-    
-    protected ActionLinkFx(
-            final ActionLinkUiComponentFactory<Node> uiComponentFactory,
-            final String named,
-            final ObjectUiModel actionHolder,
-            final ObjectAction objectAction) {
-        
-        super(uiComponentFactory, named, actionHolder, objectAction);
-    }
-
-
-    private static Node createUiComponent(final ActionUiMetaModel actionMeta) {
-        
-        val uiLabel = new Label(actionMeta.getLabel());
-        
-        return uiLabel;
-        //return Decorators.getIcon().decorate(uiLabel, actionMeta.getFontAwesomeUiModel());
-                
-    }
-    
-    @Override
-    public Menu getUiMenuItem() {
-        return new Menu(super.getLabel());
-    }
-    
-}
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 0669d97..2e8086d 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
@@ -53,8 +53,8 @@ public class MenuBuilderFx implements MenuVisitor {
         
         log.info("sub menu {}", menu.getName());
         
-        val actionLink = actionUiModelFactory.newActionUiModel(managedAction);
-        currentTopLevelMenu.getItems().add(actionLink.createMenuUiComponent());
+        val actionUiModel = actionUiModelFactory.newActionUiModel(managedAction);
+        currentTopLevelMenu.getItems().add(actionUiModel.createMenuUiComponent());
     }
     
     @Override
diff --git a/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionLinkFactoryVaa.java b/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionLinkFactoryVaa.java
deleted file mode 100644
index b20a5f2..0000000
--- a/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionLinkFactoryVaa.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.incubator.viewer.vaadin.model.action;
-
-import com.vaadin.flow.component.Component;
-import com.vaadin.flow.component.html.Label;
-
-import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.isis.incubator.viewer.vaadin.model.decorator.Decorators;
-import org.apache.isis.viewer.common.model.action.ActionUiMetaModel;
-import org.apache.isis.viewer.common.model.action.link.ActionLinkUiModel;
-import org.apache.isis.viewer.common.model.action.link.ActionLinkUiModelFactory;
-import org.apache.isis.viewer.common.model.object.SimpleObjectUiModel;
-
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-
-@RequiredArgsConstructor
-public class ActionLinkFactoryVaa implements ActionLinkUiModelFactory<Component> {
-
-    @Override
-    public ActionLinkUiModel<Component> newActionLink(
-            String named,
-            ManagedAction managedAction) {
-        
-        val actionOwnerModel = new SimpleObjectUiModel(managedAction.getOwner());
-        
-        val actionUiModel = new ActionLinkVaa(
-                this::createUiComponent,
-                named,
-                actionOwnerModel, 
-                managedAction.getAction());
-        
-        return actionUiModel;
-    }
-    
-    // -- HELPER
-    
-    private Component createUiComponent(final ActionUiMetaModel actionMeta) {
-        
-        val uiLabel = new Label(actionMeta.getLabel());
-        
-        return Decorators.getIcon().decorate(uiLabel, actionMeta.getFontAwesomeUiModel());
-    }
-
-
-    
-}
\ No newline at end of file
diff --git a/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionLinkVaa.java b/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionLinkVaa.java
deleted file mode 100644
index b3054d0..0000000
--- a/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionLinkVaa.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.incubator.viewer.vaadin.model.action;
-
-import com.vaadin.flow.component.Component;
-
-import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-import org.apache.isis.viewer.common.model.action.link.ActionLinkUiComponentFactory;
-import org.apache.isis.viewer.common.model.action.link.ActionLinkUiModel;
-import org.apache.isis.viewer.common.model.object.ObjectUiModel;
-
-public class ActionLinkVaa extends ActionLinkUiModel<Component> {
-
-    public ActionLinkVaa(
-            final ActionLinkUiComponentFactory<Component> uiComponentFactory,
-            final String named,
-            final ObjectUiModel actionHolder,
-            final ObjectAction objectAction) {
-        
-        super(uiComponentFactory, named, actionHolder, objectAction);
-    }
-    
-}
diff --git a/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionLinkFactoryFx.java b/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionUiModelFactoryVaa.java
similarity index 64%
rename from incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionLinkFactoryFx.java
rename to incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionUiModelFactoryVaa.java
index 7c56e62..94b39cf 100644
--- a/incubator/viewers/javafx/model/src/main/java/org/apache/isis/incubator/viewer/javafx/model/action/ActionLinkFactoryFx.java
+++ b/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionUiModelFactoryVaa.java
@@ -16,26 +16,14 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.incubator.viewer.javafx.model.action;
-
+package org.apache.isis.incubator.viewer.vaadin.model.action;
 
 import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.isis.viewer.common.model.action.link.ActionLinkUiModelFactory;
-
-import lombok.RequiredArgsConstructor;
 
-import javafx.scene.Node;
+public class ActionUiModelFactoryVaa {
 
-@RequiredArgsConstructor
-public class ActionLinkFactoryFx implements ActionLinkUiModelFactory<Node> {
-
-    @Override
-    public ActionLinkFx newActionLink(
-            String named,
-            ManagedAction managedAction) {
-        
-        return ActionLinkFx.of(named, managedAction);
+    public ActionUiModelVaa newActionUiModel(ManagedAction managedAction) {
+        return ActionUiModelVaa.of(managedAction);
     }
-
     
-}
\ No newline at end of file
+}
diff --git a/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionUiModelVaa.java b/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionUiModelVaa.java
new file mode 100644
index 0000000..61991db
--- /dev/null
+++ b/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/action/ActionUiModelVaa.java
@@ -0,0 +1,39 @@
+package org.apache.isis.incubator.viewer.vaadin.model.action;
+
+import com.vaadin.flow.component.Component;
+import com.vaadin.flow.component.html.Label;
+
+import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
+import org.apache.isis.incubator.viewer.vaadin.model.decorator.Decorators;
+import org.apache.isis.viewer.common.model.action.ActionUiMetaModel;
+import org.apache.isis.viewer.common.model.action.ActionUiModel;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import lombok.val;
+
+@RequiredArgsConstructor(staticName = "of")
+public class ActionUiModelVaa implements ActionUiModel<Component, Component> {
+
+    @Getter 
+    private final ManagedAction managedAction;
+    
+    @Getter(lazy = true, onMethod_ = {@Override}) 
+    private final ActionUiMetaModel actionUiMetaModel = ActionUiMetaModel.of(getManagedAction());
+
+
+    @Override
+    public Component createMenuUiComponent() {
+        return createRegularUiComponent(); 
+    }
+
+    @Override
+    public Component createRegularUiComponent() {
+        val actionMeta = getActionUiMetaModel();
+        val uiLabel = new Label(actionMeta.getLabel());
+        
+        return Decorators.getIcon().decorate(uiLabel, actionMeta.getFontAwesomeUiModel());
+    }
+
+
+}
diff --git a/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/menu/MenuItemVaa.java b/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/menu/MenuItemVaa.java
deleted file mode 100644
index e70dfe6..0000000
--- a/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/menu/MenuItemVaa.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.incubator.viewer.vaadin.model.menu;
-
-import com.vaadin.flow.component.Component;
-
-import org.apache.isis.viewer.common.model.menuitem.MenuItemUiModel;
-
-import lombok.val;
-
-/**
- * @since 2.0.0
- */
-//@Log4j2
-public class MenuItemVaa 
-extends MenuItemUiModel<Component, MenuItemVaa> {
-
-    public static MenuItemVaa newMenuItem(final String label) {
-        return new MenuItemVaa(label);
-    }
-
-    private MenuItemVaa(final String label) {
-        super(label);
-    }
-    
-    @Override
-    protected MenuItemVaa newSubMenuItem(final String label) {
-        val subMenuItem = newMenuItem(label);
-        subMenuItem.setParent(this);
-        return subMenuItem;
-    }
-
-}
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/pages/main/MenuBuilderVaa.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/pages/main/MenuBuilderVaa.java
index 01d4ee8..d9a7887 100644
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/pages/main/MenuBuilderVaa.java
+++ b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/pages/main/MenuBuilderVaa.java
@@ -9,7 +9,6 @@ import com.vaadin.flow.component.menubar.MenuBar;
 
 import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
 import org.apache.isis.core.runtime.context.IsisAppCommonContext;
-import org.apache.isis.incubator.viewer.vaadin.model.action.ActionLinkFactoryVaa;
 import org.apache.isis.incubator.viewer.vaadin.model.decorator.Decorators;
 import org.apache.isis.viewer.common.model.menu.MenuItemDto;
 import org.apache.isis.viewer.common.model.menu.MenuVisitor;
@@ -25,7 +24,7 @@ class MenuBuilderVaa implements MenuVisitor {
     private final MenuBar menuBar;
 
     private MenuItem currentTopLevelMenu = null;
-    private ActionLinkFactoryVaa actionLinkFactory = new ActionLinkFactoryVaa();
+    private org.apache.isis.incubator.viewer.vaadin.model.action.ActionUiModelFactoryVaa actionUiModelFactory = new org.apache.isis.incubator.viewer.vaadin.model.action.ActionUiModelFactoryVaa();
 
     @Override
     public void addTopLevel(MenuItemDto menuDto) {
@@ -42,9 +41,10 @@ class MenuBuilderVaa implements MenuVisitor {
     @Override
     public void addSubMenu(MenuItemDto menu) {
         val managedAction = menu.getManagedAction();
-        val actionLink = actionLinkFactory.newActionLink(menu.getName(), managedAction);
+                
+        val actionUiModel = actionUiModelFactory.newActionUiModel(managedAction);
         currentTopLevelMenu.getSubMenu()
-        .addItem(actionLink.getUiComponent(), e->subMenuEventHandler.accept(managedAction));
+        .addItem(actionUiModel.createMenuUiComponent(), e->subMenuEventHandler.accept(managedAction));
     }
 
     @Override