You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by ah...@apache.org on 2023/03/27 08:13:06 UTC

[causeway] branch master updated: CAUSEWAY-3400: discontinue incubator projects viewer-vaadin and viewer-javafx in v2 but continue them in v3

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/causeway.git


The following commit(s) were added to refs/heads/master by this push:
     new ec8002b298 CAUSEWAY-3400: discontinue incubator projects viewer-vaadin and viewer-javafx in v2 but continue them in v3
ec8002b298 is described below

commit ec8002b29892e834357dc031589b2cace9a9131f
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Mar 27 10:12:58 2023 +0200

    CAUSEWAY-3400: discontinue incubator projects viewer-vaadin and
    viewer-javafx in v2 but continue them in v3
---
 bom/pom.xml                                        |  10 -
 examples/demo/javafx/pom.xml                       | 154 ---------
 .../main/java/demoapp/javafx/DemoAppJavaFx.java    |  71 ----
 .../src/main/java/demoapp/javafx/gift_32.png       | Bin 1069 -> 0 bytes
 .../javafx/src/main/java/demoapp/javafx/icon.png   | Bin 1926 -> 0 bytes
 .../java/demoapp/javafx/object_fallback_icon.png   | Bin 485 -> 0 bytes
 .../javafx/src/main/resources/log4j2-spring.xml    |  60 ----
 .../javafx/integtest/DemoFxBootstrapTest.java      |  33 --
 .../javafx/integtest/DemoFxTestAbstract.java       |  52 ---
 .../integtest/DemoFxTestConfig_usingJdo.java       |  67 ----
 examples/demo/pom.xml                              |  28 --
 examples/demo/vaadin/.gitignore                    |  13 -
 examples/demo/vaadin/pom.xml                       | 211 ------------
 .../java/demoapp/webapp/vaadin/DemoAppVaadin.java  |  99 ------
 .../vaadin/src/main/resources/log4j2-spring.xml    |  52 ---
 incubator/pom.xml                                  |  32 --
 incubator/viewers/javafx/adoc/antora.yml           |  19 --
 .../viewers/javafx/adoc/modules/javafx/nav.adoc    |   4 -
 .../javafx/adoc/modules/javafx/pages/about.adoc    |   6 -
 .../adoc/modules/javafx/partials/module-nav.adoc   |   3 -
 incubator/viewers/javafx/model/pom.xml             |  75 ----
 .../model/action/ActionUiModelFactoryFx.java       |  30 --
 .../javafx/model/action/ActionUiModelFx.java       |  65 ----
 .../viewer/javafx/model/binding/BindingsFx.java    | 241 -------------
 .../viewer/javafx/model/context/UiContextFx.java   |  65 ----
 .../events/CausewayModuleIncViewerJavaFxModel.java |  41 ---
 .../javafx/model/events/JavaFxViewerConfig.java    |  40 ---
 .../model/events/PrimaryStageReadyEvent.java       |  36 --
 .../viewer/javafx/model/icon/IconService.java      |  31 --
 .../incubator/viewer/javafx/model/util/_fx.java    | 379 ---------------------
 incubator/viewers/javafx/pom.xml                   | 103 ------
 incubator/viewers/javafx/ui/pom.xml                |  50 ---
 .../javafx/ui/CausewayModuleIncViewerJavaFxUi.java |  91 -----
 .../javafx/ui/components/UiComponentFactoryFx.java | 121 -------
 .../javafx/ui/components/UiComponentHandlerFx.java |  51 ---
 .../ui/components/collections/TableViewFx.java     | 203 -----------
 .../javafx/ui/components/dialog/Dialogs.java       | 141 --------
 .../viewer/javafx/ui/components/form/FormPane.java | 135 --------
 .../ui/components/form/field/CustomFieldFx.java    |  88 -----
 .../ui/components/markup/MarkupFieldFactory.java   | 188 ----------
 .../ui/components/number/NumberFieldFactory.java   |  72 ----
 .../javafx/ui/components/object/ObjectViewFx.java  | 266 ---------------
 .../objectref/ObjectReferenceFieldFactory.java     |  77 -----
 .../ui/components/other/FallbackFieldFactory.java  |  45 ---
 .../javafx/ui/components/panel/TitledPanel.java    |  53 ---
 .../components/temporal/TemporalFieldFactory.java  |  78 -----
 .../ui/components/text/TextFieldFactory.java       |  66 ----
 .../disabling/DisablingDecoratorForButton.java     |  49 ---
 .../disabling/DisablingDecoratorForFormField.java  |  50 ---
 .../ui/decorator/icon/IconDecoratorForLabeled.java |  57 ----
 .../decorator/icon/IconDecoratorForMenuItem.java   |  59 ----
 .../ui/decorator/icon/IconServiceDefault.java      |  65 ----
 .../prototyping/PrototypingDecoratorForButton.java |  57 ----
 .../PrototypingDecoratorForFormField.java          |  54 ---
 .../prototyping/PrototypingInfoPopupProvider.java  | 135 --------
 .../viewer/javafx/ui/main/MainViewFx.java          | 136 --------
 .../viewer/javafx/ui/main/MenuBuilderFx.java       |  80 -----
 .../viewer/javafx/ui/main/UiActionHandlerFx.java   | 122 -------
 .../viewer/javafx/ui/main/UiBuilderFx.java         | 101 ------
 .../viewer/javafx/ui/main/UiContextFxDefault.java  | 111 ------
 .../viewers/javafx/ui/src/main/resources/ui.css    |  23 --
 .../viewers/javafx/ui/src/main/resources/ui.fxml   |  78 -----
 incubator/viewers/javafx/viewer/pom.xml            |  42 ---
 .../CausewayModuleIncViewerJavaFxViewer.java       |  43 ---
 .../viewer/javafx/viewer/JavafxViewer.java         |  32 --
 .../javafx/viewer/JavafxViewerApplication.java     |  71 ----
 incubator/viewers/vaadin/.gitignore                |  15 -
 incubator/viewers/vaadin/adoc/antora.yml           |  19 --
 .../viewers/vaadin/adoc/modules/vaadin/nav.adoc    |   4 -
 .../vaadin/adoc/modules/vaadin/pages/about.adoc    |   6 -
 .../adoc/modules/vaadin/partials/module-nav.adoc   |   3 -
 incubator/viewers/vaadin/model/pom.xml             | 150 --------
 .../model/CausewayModuleIncViewerVaadinModel.java  |  33 --
 .../model/action/ActionUiModelFactoryVaa.java      |  29 --
 .../vaadin/model/action/ActionUiModelVaa.java      |  57 ----
 .../model/context/MemberInvocationHandler.java     |  30 --
 .../viewer/vaadin/model/context/UiContextVaa.java  |  54 ---
 .../viewer/vaadin/model/decorator/Decorators.java  | 175 ----------
 .../incubator/viewer/vaadin/model/util/Vaa.java    |  77 -----
 incubator/viewers/vaadin/pom.xml                   |  68 ----
 incubator/viewers/vaadin/ui/frontend/index.html    |  23 --
 incubator/viewers/vaadin/ui/pom.xml                | 163 ---------
 .../vaadin/ui/CausewayModuleIncViewerVaadinUi.java |  69 ----
 .../vaadin/ui/auth/AuthSessionStoreUtil.java       |  79 -----
 .../viewer/vaadin/ui/auth/LogoutHandlerVaa.java    |  67 ----
 .../ui/auth/VaadinAuthenticationHandler.java       | 141 --------
 .../viewer/vaadin/ui/binding/BindingsVaa.java      | 373 --------------------
 .../ui/components/UiComponentFactoryVaa.java       |  95 ------
 .../ui/components/UiComponentHandlerVaa.java       |  28 --
 .../vaadin/ui/components/action/ActionDialog.java  | 222 ------------
 .../vaadin/ui/components/action/ActionForm.java    |  67 ----
 .../vaadin/ui/components/blob/BlobField.java       |  68 ----
 .../ui/components/blob/BlobFieldFactory.java       |  46 ---
 .../vaadin/ui/components/clob/ClobField.java       |  58 ----
 .../ui/components/clob/ClobFieldFactory.java       |  46 ---
 .../ui/components/collection/TableViewVaa.java     | 132 -------
 .../vaadin/ui/components/debug/DebugField.java     |  79 -----
 .../vaadin/ui/components/markup/MarkupField.java   |  60 ----
 .../ui/components/markup/MarkupFieldFactory.java   |  45 ---
 .../vaadin/ui/components/object/ObjectViewVaa.java | 276 ---------------
 .../ui/components/other/FallbackFieldFactory.java  |  95 ------
 .../vaadin/ui/components/temporal/DateField.java   |  57 ----
 .../components/temporal/TemporalFieldFactory.java  | 131 -------
 .../ui/components/text/TextFieldFactory.java       |  52 ---
 .../ui/components/text/uuid/UuidFieldFactory.java  |  60 ----
 .../vaadin/ui/pages/login/VaadinLoginView.java     | 118 -------
 .../viewer/vaadin/ui/pages/main/MainViewVaa.java   | 160 ---------
 .../ui/pages/main/MainView_createHeader.java       | 111 ------
 .../vaadin/ui/pages/main/MenuBuilderVaa.java       |  89 -----
 .../viewer/vaadin/ui/pages/main/TabUtil.java       |  72 ----
 .../vaadin/ui/pages/main/UiActionHandlerVaa.java   |  89 -----
 .../vaadin/ui/pages/main/UiContextVaaDefault.java  | 110 ------
 .../viewer/vaadin/ui/util/LocalResourceUtil.java   |  61 ----
 .../viewer/vaadin/ui/util/PrismResourcesVaa.java   |  41 ---
 .../resources/frontend/css/action-dialog.css       |  83 -----
 .../resources/frontend/css/dialog-overlay.css      |  50 ---
 .../META-INF/resources/frontend/css/menu.css       |  29 --
 .../src/main/resources/static/frontend/index.html  |  23 --
 incubator/viewers/vaadin/ui/vite.config.ts         |   9 -
 incubator/viewers/vaadin/viewer/pom.xml            |  93 -----
 .../CausewayModuleIncViewerVaadinViewer.java       | 133 --------
 .../vaadin/viewer/CausewayServletForVaadin.java    |  91 -----
 .../viewer/src/main/resources/vaadin.properties    |  21 --
 pom.xml                                            |  55 ---
 valuetypes/asciidoc/ui/vaadin/pom.xml              |  42 ---
 .../ui/vaa/CausewayModuleValAsciidocUiVaa.java     |  33 --
 .../ui/vaa/components/AsciiDocFieldFactoryVaa.java |  57 ----
 .../ui/vaa/components/AsciiDocFieldVaa.java        |  67 ----
 128 files changed, 9999 deletions(-)

diff --git a/bom/pom.xml b/bom/pom.xml
index 9f90f74a68..1d0429b4bc 100644
--- a/bom/pom.xml
+++ b/bom/pom.xml
@@ -181,8 +181,6 @@ It is therefore a copy of org.apache:apache, with customisations clearly identif
 
         <togglz.version>3.3.3</togglz.version>
 
-        <vaadin.version>23.3.8</vaadin.version>
-
         <wicket.version>9.12.0</wicket.version> <!--  9.4.0 is last known good, before wicket put jupiter-api on the module graph -->
         <wicket-bootstrap.version>6.0.2</wicket-bootstrap.version> <!-- de.agilecoders.wicket:wicket-bootstrap... -->
         <wicket-webjars.version>3.0.6</wicket-webjars.version>
@@ -1793,14 +1791,6 @@ It is therefore a copy of org.apache:apache, with customisations clearly identif
 				<version>${jsoup.version}</version>
 			</dependency>
 
-			<dependency>
-				<groupId>com.vaadin</groupId>
-				<artifactId>vaadin-bom</artifactId>
-				<version>${vaadin.version}</version>
-				<type>pom</type>
-				<scope>import</scope>
-			</dependency>
-
 			<dependency>
 				<groupId>org.apache.wicket</groupId>
 				<artifactId>wicket</artifactId>
diff --git a/examples/demo/javafx/pom.xml b/examples/demo/javafx/pom.xml
deleted file mode 100644
index 17e98d9f99..0000000000
--- a/examples/demo/javafx/pom.xml
+++ /dev/null
@@ -1,154 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>org.apache.causeway.examples.apps</groupId>
-		<artifactId>demo-parent</artifactId>
-		<version>2.0.0-SNAPSHOT</version>
-		<relativePath>../pom.xml</relativePath>
-	</parent>
-
-	<artifactId>demo-javafx</artifactId>
-
-	<name>Demo - JavaFX</name>
-
-	<packaging>jar</packaging>
-
-	<properties>
-		<maven.compiler.release>11</maven.compiler.release>
-		<maven.deploy.skip>true</maven.deploy.skip>
-		<sonar.skip>true</sonar.skip>
-	</properties>
-
-	<build>
-		<resources>
-			<resource>
-				<filtering>false</filtering>
-				<directory>src/main/resources</directory>
-			</resource>
-			<resource>
-				<filtering>false</filtering>
-				<directory>src/main/java</directory>
-				<includes>
-					<include>**</include>
-				</includes>
-				<excludes>
-					<exclude>**/*.java</exclude>
-				</excludes>
-			</resource>
-		</resources>
-	</build>
-
-	<dependencies>
-
-		<!-- DEMO DOMAIN -->
-
-		<dependency>
-			<groupId>org.apache.causeway.examples.apps</groupId>
-			<artifactId>demo-domain</artifactId>
-			<version>${project.version}</version>
-			<type>jar</type>
-			<exclusions>
-				<exclusion>
-					<groupId>org.apache.causeway.mavendeps</groupId>
-					<artifactId>causeway-mavendeps-webapp</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>org.apache.causeway.testing</groupId>
-					<artifactId>causeway-testing-h2console-ui</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-
-		<dependency>
-			<groupId>org.apache.causeway.persistence</groupId>
-			<artifactId>causeway-persistence-jdo-applib</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.apache.causeway.core</groupId>
-			<artifactId>causeway-core-runtimeservices</artifactId>
-		</dependency>
-		
-		<!-- SECURITY -->
-		
-		<dependency>
-			<groupId>org.apache.causeway.core</groupId>
-			<artifactId>causeway-core-security</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.causeway.security</groupId>
-			<artifactId>causeway-security-bypass</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.causeway.security</groupId>
-			<artifactId>causeway-security-shiro</artifactId>
-		</dependency>
-
-		<!-- INCUBATOR: JAVAFX VIEWER -->
-
-		<dependency>
-			<groupId>org.apache.causeway.incubator.viewer</groupId>
-			<artifactId>causeway-viewer-javafx-viewer</artifactId>
-			<!-- incubator version is not managed by app starter bundles -->
-			<version>${project.version}</version>
-		</dependency>
-
-		<!-- EXTENSIONS -->
-		
-		<dependency>
-			<groupId>org.apache.causeway.valuetypes</groupId>
-			<artifactId>causeway-valuetypes-asciidoc-metamodel</artifactId>
-		</dependency>
-		
-		<dependency>
-			<groupId>org.apache.causeway.valuetypes</groupId>
-			<artifactId>causeway-valuetypes-asciidoc-ui</artifactId>
-			<type>pom</type>
-			<version>${project.version}</version>
-		</dependency>
-		
-		<dependency>
-			<groupId>org.apache.causeway.valuetypes</groupId>
-			<artifactId>causeway-valuetypes-markdown-metamodel</artifactId>
-		</dependency>
-		
-		<dependency>
-			<groupId>org.apache.causeway.valuetypes</groupId>
-			<artifactId>causeway-valuetypes-markdown-ui</artifactId>
-			<type>pom</type>
-			<version>${project.version}</version>
-		</dependency>
-
-		<!-- INTEGRATION TESTING -->
-		
-		<dependency>
-			<groupId>org.apache.causeway.testing</groupId>
-			<artifactId>causeway-testing-integtestsupport-applib</artifactId>
-			<scope>test</scope>
-		</dependency>
-
-		<!-- OTHER DEPENDENCIES -->
-
-		<dependency>
-			<groupId>org.projectlombok</groupId>
-			<artifactId>lombok</artifactId>
-			<scope>provided</scope>
-		</dependency>
-
-	</dependencies>
-
-</project>
\ No newline at end of file
diff --git a/examples/demo/javafx/src/main/java/demoapp/javafx/DemoAppJavaFx.java b/examples/demo/javafx/src/main/java/demoapp/javafx/DemoAppJavaFx.java
deleted file mode 100644
index 11a20e1092..0000000000
--- a/examples/demo/javafx/src/main/java/demoapp/javafx/DemoAppJavaFx.java
+++ /dev/null
@@ -1,71 +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 demoapp.javafx;
-
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Import;
-
-import org.apache.causeway.commons.internal.debug._Probe;
-import org.apache.causeway.core.config.presets.CausewayPresets;
-import org.apache.causeway.core.runtimeservices.session.InteractionServiceDefault;
-import org.apache.causeway.incubator.viewer.javafx.model.events.JavaFxViewerConfig;
-import org.apache.causeway.incubator.viewer.javafx.model.util._fx;
-import org.apache.causeway.incubator.viewer.javafx.viewer.CausewayModuleIncViewerJavaFxViewer;
-import org.apache.causeway.incubator.viewer.javafx.viewer.JavafxViewer;
-import org.apache.causeway.security.bypass.CausewayModuleSecurityBypass;
-
-import demoapp.dom.DemoModuleJpa;
-
-/**
- * Bootstrap the application.
- */
-@SpringBootApplication
-@Import({
-    DemoModuleJpa.class,
-
-    // INCUBATING
-    CausewayModuleSecurityBypass.class,
-    CausewayModuleIncViewerJavaFxViewer.class,
-
-})
-public class DemoAppJavaFx {
-
-    @Bean
-    public JavaFxViewerConfig viewerConfig() {
-        return JavaFxViewerConfig.builder()
-                .applicationTitle("Apache Causeway Demo")
-                .applicationIcon(_fx.imageFromClassPath(DemoAppJavaFx.class, "icon.png"))
-                .brandingIcon(_fx.imageFromClassPath(DemoAppJavaFx.class, "gift_32.png"))
-                .objectFallbackIcon(_fx.imageFromClassPath(DemoAppJavaFx.class, "object_fallback_icon.png"))
-                .build();
-    }
-
-    public static void main(final String[] args) {
-
-        CausewayPresets.logging(InteractionServiceDefault.class, "debug");
-        CausewayPresets.logging(_Probe.class, "debug"); // enable debug entry logging
-
-        CausewayPresets.prototyping(); // use prototyping mode as default, unless explicitly overridden (INCUBATING)
-        System.setProperty("spring.profiles.active", "demo-jpa");
-
-        JavafxViewer.launch(DemoAppJavaFx.class, args);
-    }
-
-}
diff --git a/examples/demo/javafx/src/main/java/demoapp/javafx/gift_32.png b/examples/demo/javafx/src/main/java/demoapp/javafx/gift_32.png
deleted file mode 100644
index 32a3f22796..0000000000
Binary files a/examples/demo/javafx/src/main/java/demoapp/javafx/gift_32.png and /dev/null differ
diff --git a/examples/demo/javafx/src/main/java/demoapp/javafx/icon.png b/examples/demo/javafx/src/main/java/demoapp/javafx/icon.png
deleted file mode 100644
index 3509e1bf8f..0000000000
Binary files a/examples/demo/javafx/src/main/java/demoapp/javafx/icon.png and /dev/null differ
diff --git a/examples/demo/javafx/src/main/java/demoapp/javafx/object_fallback_icon.png b/examples/demo/javafx/src/main/java/demoapp/javafx/object_fallback_icon.png
deleted file mode 100644
index 255999f7c4..0000000000
Binary files a/examples/demo/javafx/src/main/java/demoapp/javafx/object_fallback_icon.png and /dev/null differ
diff --git a/examples/demo/javafx/src/main/resources/log4j2-spring.xml b/examples/demo/javafx/src/main/resources/log4j2-spring.xml
deleted file mode 100644
index 0c0e64c924..0000000000
--- a/examples/demo/javafx/src/main/resources/log4j2-spring.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-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.
--->
-<Configuration status="WARN">
-	<Properties>
-		<Property name="PID">????</Property>
-		<Property name="LOG_EXCEPTION_CONVERSION_WORD">%xwEx</Property>
-		<Property name="LOG_LEVEL_PATTERN">%5p</Property>
-		<Property name="LOG_DATEFORMAT_PATTERN">yyyy-MM-dd HH:mm:ss.SSS</Property>
-		<Property name="CONSOLE_LOG_PATTERN">%clr{%d{${LOG_DATEFORMAT_PATTERN}}}{faint} %clr{${LOG_LEVEL_PATTERN}} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
-		<Property name="FILE_LOG_PATTERN">%d{${LOG_DATEFORMAT_PATTERN}} ${LOG_LEVEL_PATTERN} ${sys:PID} --- [%t] %-40.40c{1.} : %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
-	</Properties>
-	<Appenders>
-		<Console name="Console" target="SYSTEM_OUT" follow="true">
-			<PatternLayout pattern="${sys:CONSOLE_LOG_PATTERN}" />
-		</Console>
-	</Appenders>
-	<Loggers>
-	
-		<!-- silence Wicket -->
-		<Logger name="org.apache.wicket.page.PartialPageUpdate" level="error" />
-	
-		<Logger name="org.apache.catalina.startup.DigesterFactory" level="error" />
-		<Logger name="org.apache.catalina.util.LifecycleBase" level="error" />
-		<Logger name="org.apache.coyote.http11.Http11NioProtocol" level="warn" />
-		<logger name="org.apache.sshd.common.util.SecurityUtils" level="warn"/>
-		<Logger name="org.apache.tomcat.util.net.NioSelectorPool" level="warn" />
-		<Logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="error" />
-		<Logger name="org.hibernate.validator.internal.util.Version" level="warn" />
-		<logger name="org.springframework.boot.actuate.endpoint.jmx" level="warn"/>
-		
-		<logger name="org.apache.directory" level="warn"/>
-		<logger name="org.apache.directory.api.ldap.model.entry.Value" level="off"/>
-		
-		<logger name="DataNucleus.Persistence" level="info"/>
-		<logger name="DataNucleus.Transaction" level="info"/>
-		<logger name="DataNucleus.Datastore.Schema" level="info"/>
-		<logger name="DataNucleus.Datastore.Native" level="info"/>
-		
-		<Root level="info">
-			<AppenderRef ref="Console" />
-		</Root>
-	</Loggers>
-</Configuration>
diff --git a/examples/demo/javafx/src/test/java/demoapp/javafx/integtest/DemoFxBootstrapTest.java b/examples/demo/javafx/src/test/java/demoapp/javafx/integtest/DemoFxBootstrapTest.java
deleted file mode 100644
index 75f32c1e42..0000000000
--- a/examples/demo/javafx/src/test/java/demoapp/javafx/integtest/DemoFxBootstrapTest.java
+++ /dev/null
@@ -1,33 +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 demoapp.javafx.integtest;
-
-import org.junit.jupiter.api.Test;
-
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-
-class DemoFxBootstrapTest extends DemoFxTestAbstract {
-
-    @Test 
-    void demoServices_shouldBeProvisioned() {
-        assertNotNull(repositoryService);
-        assertNotNull(uiContext);
-    }
-    
-}
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
deleted file mode 100644
index 2728459fd4..0000000000
--- a/examples/demo/javafx/src/test/java/demoapp/javafx/integtest/DemoFxTestAbstract.java
+++ /dev/null
@@ -1,52 +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 demoapp.javafx.integtest;
-
-import javax.inject.Inject;
-
-import org.junit.jupiter.api.BeforeAll;
-import org.springframework.boot.test.context.SpringBootTest;
-
-import org.apache.causeway.incubator.viewer.javafx.model.context.UiContextFx;
-import org.apache.causeway.incubator.viewer.javafx.viewer.CausewayModuleIncViewerJavaFxViewer;
-import org.apache.causeway.security.bypass.CausewayModuleSecurityBypass;
-import org.apache.causeway.testing.integtestsupport.applib.CausewayIntegrationTestAbstract;
-
-import demoapp.dom.DemoModuleJdo;
-
-@SpringBootTest(
-        classes = {
-                DemoModuleJdo.class,
-                DemoFxTestConfig_usingJdo.class,
-
-                // INCUBATING
-                CausewayModuleSecurityBypass.class,
-                CausewayModuleIncViewerJavaFxViewer.class,
-        }
-)
-public abstract class DemoFxTestAbstract extends CausewayIntegrationTestAbstract {
-
-    @Inject protected UiContextFx uiContext;
-
-    @BeforeAll
-    static void beforeAll() {
-       //JavafxViewer.launch(DemoAppJavaFx.class, _Constants.emptyStringArray);
-    }
-
-}
diff --git a/examples/demo/javafx/src/test/java/demoapp/javafx/integtest/DemoFxTestConfig_usingJdo.java b/examples/demo/javafx/src/test/java/demoapp/javafx/integtest/DemoFxTestConfig_usingJdo.java
deleted file mode 100644
index 0315804257..0000000000
--- a/examples/demo/javafx/src/test/java/demoapp/javafx/integtest/DemoFxTestConfig_usingJdo.java
+++ /dev/null
@@ -1,67 +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 demoapp.javafx.integtest;
-
-import javax.sql.DataSource;
-
-import org.datanucleus.store.rdbms.datasource.dbcp2.BasicDataSource;
-import org.springframework.boot.jdbc.DataSourceBuilder;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.PropertySource;
-import org.springframework.context.annotation.PropertySources;
-
-import org.apache.causeway.core.config.presets.CausewayPresets;
-import org.apache.causeway.incubator.viewer.javafx.model.events.JavaFxViewerConfig;
-
-import demoapp.javafx.DemoAppJavaFx;
-import javafx.application.HostServices;
-import lombok.val;
-
-@Configuration
-@PropertySources({
-    @PropertySource(CausewayPresets.DatanucleusAutocreateNoValidate),
-    @PropertySource(CausewayPresets.H2InMemory_withUniqueSchema)
-})
-public class DemoFxTestConfig_usingJdo {
-
-    //XXX why is the H2InMemory_withUniqueSchema preset not working?
-    @Bean(destroyMethod = "close")
-    public DataSource getDataSource() {
-        val dataSourceBuilder = DataSourceBuilder.create().type(BasicDataSource.class);
-        dataSourceBuilder.driverClassName("org.h2.Driver");
-        dataSourceBuilder.url("jdbc:h2:mem:test");
-        dataSourceBuilder.username("sa");
-        dataSourceBuilder.password("");
-        return dataSourceBuilder.build();
-    }
-
-    @Bean
-    public JavaFxViewerConfig viewerConfig() {
-        return new DemoAppJavaFx().viewerConfig();
-    }
-
-    @Bean
-    public HostServices hostServices() {
-        return  null;
-    }
-
-
-
-}
diff --git a/examples/demo/pom.xml b/examples/demo/pom.xml
index 7c799ecff5..aff58b9f40 100644
--- a/examples/demo/pom.xml
+++ b/examples/demo/pom.xml
@@ -100,7 +100,6 @@
 						<exclude>**/domain/src/test/resources/demoapp/dom/_infra/resources/</exclude>
 						<exclude>**/wicket/src/test/e2e/cypress-scaffolding/integration/examples/*.spec.js</exclude>
 						<exclude>**/wicket/src/test/e2e/cypress-scaffolding/integration/typescript/basic.ts</exclude>
-						<exclude>**/vaadin/node_modules/**</exclude>
 
 						<exclude>**/*.gitkeep</exclude>
 						<exclude>**/*.pdn</exclude>
@@ -246,33 +245,6 @@
 				<module>wicket/jpa-and-graphql</module>
 			</modules>
 		</profile>
-		<profile>
-			<id>modules-example-demo-vaadin</id>
-			<activation>
-				<property>
-					<name>modules-example-demo-vaadin</name>
-				</property>
-			</activation>
-			<modules>
-				<module>domain</module>
-				<module>web</module>
-				<module>wicket/common</module>
-				<module>wicket/jdo</module>
-				<module>vaadin</module>
-			</modules>
-		</profile>
-		<profile>
-			<id>modules-example-demo-javafx</id>
-			<activation>
-				<property>
-					<name>demo-javafx</name>
-				</property>
-			</activation>
-			<modules>
-				<module>domain</module>
-				<module>javafx</module>
-			</modules>
-		</profile>
 
 	</profiles>
 
diff --git a/examples/demo/vaadin/.gitignore b/examples/demo/vaadin/.gitignore
deleted file mode 100644
index 3e76f84e69..0000000000
--- a/examples/demo/vaadin/.gitignore
+++ /dev/null
@@ -1,13 +0,0 @@
-# Browser drivers for local integration tests
-drivers/
-# Error screenshots generated by TestBench for failed integration tests
-error-screenshots/
-# More Node stuff as introduced with Vaadin
-node/
-package-lock.json
-package.json
-webpack.config.js
-webpack.generated.js
-pnpm*
-
-/frontend/
diff --git a/examples/demo/vaadin/pom.xml b/examples/demo/vaadin/pom.xml
deleted file mode 100644
index 5263727fcd..0000000000
--- a/examples/demo/vaadin/pom.xml
+++ /dev/null
@@ -1,211 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>org.apache.causeway.examples.apps</groupId>
-		<artifactId>demo-parent</artifactId>
-		<version>2.0.0-SNAPSHOT</version>
-		<relativePath>../pom.xml</relativePath>
-	</parent>
-
-	<artifactId>demo-vaadin</artifactId>
-
-	<name>Demo - Vaadin</name>
-
-	<packaging>jar</packaging>
-
-	<properties>
-		<maven.deploy.skip>true</maven.deploy.skip>
-		<sonar.skip>true</sonar.skip>
-	</properties>
-
-	<dependencies>
-
-		<!-- DEMO DOMAIN + WEB -->
-
-		<dependency>
-			<groupId>org.apache.causeway.examples.apps</groupId>
-			<artifactId>demo-web</artifactId>
-		</dependency>
-
-		<!-- INCUBATOR: VAADIN VIEWER -->
-
-		<dependency>
-			<groupId>org.apache.causeway.incubator.viewer</groupId>
-			<artifactId>causeway-viewer-vaadin-viewer</artifactId>
-			<!-- incubator version is not managed by app starter bundles -->
-			<version>${project.version}</version>
-		</dependency>
-
-		<!-- EXTENSIONS VAA -->
-
-		<dependency>
-			<groupId>org.apache.causeway.valuetypes</groupId>
-			<artifactId>causeway-valuetypes-asciidoc-ui-vaa</artifactId>
-		</dependency>
-
-		<!-- EXTENSIONS WKT -->
-
-		<dependency>
-			<groupId>org.apache.causeway.valuetypes</groupId>
-			<artifactId>causeway-valuetypes-asciidoc-ui-wkt</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.causeway.valuetypes</groupId>
-			<artifactId>causeway-valuetypes-markdown-ui-wkt</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.causeway.extensions</groupId>
-			<artifactId>causeway-extensions-sse-wicket</artifactId>
-		</dependency>
-
-		<!-- OTHER DEPENDENCIES -->
-
-		<dependency>
-			<groupId>org.projectlombok</groupId>
-			<artifactId>lombok</artifactId>
-			<scope>provided</scope>
-		</dependency>
-
-	</dependencies>
-
-	<profiles>
-
-		<!-- running: mvn spring-boot:run -->
-		<profile>
-			<id>package-as-jar</id>
-			<activation>
-				<property>
-					<name>!skip-package-as-jar</name>
-				</property>
-			</activation>
-			<properties>
-			</properties>
-
-			<build>
-				<plugins>
-					<plugin>
-						<groupId>org.springframework.boot</groupId>
-						<artifactId>spring-boot-maven-plugin</artifactId>
-						<configuration>
-							<requiresUnpack>
-								<dependency>
-									<groupId>org.asciidoctor</groupId>
-									<artifactId>asciidoctorj</artifactId>
-								</dependency>
-							</requiresUnpack>
-						</configuration>
-						<executions>
-							<execution>
-								<goals>
-									<goal>repackage</goal>
-								</goals>
-							</execution>
-						</executions>
-					</plugin>
-				</plugins>
-			</build>
-		</profile>
-		
-		<profile>
-            <!-- Vaadin Production mode is activated using -Pproduction -->
-            <id>production</id>
-            <properties>
-                <vaadin.productionMode>true</vaadin.productionMode>
-            </properties>
-
-            <dependencies>
-                <dependency>
-                    <groupId>com.vaadin</groupId>
-                    <artifactId>flow-server-production-mode</artifactId>
-                </dependency>
-            </dependencies>
-
-            <build>
-                <plugins>
-                    <plugin>
-                        <groupId>org.springframework.boot</groupId>
-                        <artifactId>spring-boot-maven-plugin</artifactId>
-                        <configuration>
-                            <jvmArguments>-Dvaadin.productionMode</jvmArguments>
-                        </configuration>
-                    </plugin>
-                    <plugin>
-                        <groupId>com.vaadin</groupId>
-                        <artifactId>vaadin-maven-plugin</artifactId>
-                        <executions>
-                            <execution>
-                                <goals>
-                                    <goal>build-frontend</goal>
-                                </goals>
-                                <phase>compile</phase>
-                            </execution>
-                        </executions>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-
-		<profile>
-			<id>deploy-to-docker-io</id>
-			<activation>
-				<property>
-					<name>!skip-docker</name>
-				</property>
-			</activation>
-			<properties>
-			</properties>
-			<dependencies>
-			</dependencies>
-			<build>
-				<plugins>
-					<plugin>
-						<groupId>com.google.cloud.tools</groupId>
-						<artifactId>jib-maven-plugin</artifactId>
-						<configuration>
-							<from>
-								<image>openjdk:18-jdk-slim-bullseye</image>
-							</from>
-							<container>
-								<jvmFlags>
-									<jvmFlag>-Xmx512m</jvmFlag>
-								</jvmFlags>
-								<mainClass>demoapp.webapp.vaadin.DemoAppVaadin</mainClass>
-								<ports>
-									<port>8080</port>
-								</ports>
-							</container>
-							<to>
-								<image>docker.io/apacheisis/demo-vaadin</image>
-								<tags>
-									<tag>nightly</tag>
-								</tags>
-								<auth>
-									<username>${env.DOCKER_REGISTRY_USERNAME}</username>
-									<password>${env.DOCKER_REGISTRY_PASSWORD}</password>
-								</auth>
-							</to>
-						</configuration>
-					</plugin>
-				</plugins>
-			</build>
-			
-		</profile>
-
-
-	</profiles>
-
-</project>
diff --git a/examples/demo/vaadin/src/main/java/demoapp/webapp/vaadin/DemoAppVaadin.java b/examples/demo/vaadin/src/main/java/demoapp/webapp/vaadin/DemoAppVaadin.java
deleted file mode 100644
index dad306bc56..0000000000
--- a/examples/demo/vaadin/src/main/java/demoapp/webapp/vaadin/DemoAppVaadin.java
+++ /dev/null
@@ -1,99 +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 demoapp.webapp.vaadin;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
-import org.springframework.context.annotation.Import;
-
-import org.apache.causeway.commons.internal.os._OsUtil;
-import org.apache.causeway.core.config.presets.CausewayPresets;
-import org.apache.causeway.core.config.util.SpringProfileUtil;
-import org.apache.causeway.extensions.commandlog.applib.CausewayModuleExtCommandLogApplib;
-import org.apache.causeway.extensions.sse.wicket.CausewayModuleExtSseWicket;
-import org.apache.causeway.incubator.viewer.vaadin.viewer.CausewayModuleIncViewerVaadinViewer;
-import org.apache.causeway.valuetypes.asciidoc.metamodel.CausewayModuleValAsciidocMetaModel;
-import org.apache.causeway.valuetypes.asciidoc.persistence.jdo.dn.CausewayModuleValAsciidocPersistenceJdoDn;
-import org.apache.causeway.valuetypes.asciidoc.ui.vaa.CausewayModuleValAsciidocUiVaa;
-import org.apache.causeway.valuetypes.asciidoc.ui.wkt.CausewayModuleValAsciidocUiWkt;
-import org.apache.causeway.valuetypes.markdown.metamodel.CausewayModuleValMarkdownMetaModel;
-import org.apache.causeway.valuetypes.markdown.persistence.jdo.dn.CausewayModuleValMarkdownPersistenceJdoDn;
-import org.apache.causeway.valuetypes.vega.metamodel.CausewayModuleValVegaMetaModel;
-import org.apache.causeway.valuetypes.vega.persistence.jdo.dn.CausewayModuleValVegaPersistenceJdoDn;
-import org.apache.causeway.viewer.wicket.viewer.CausewayModuleViewerWicketViewer;
-
-import demoapp.dom.DemoModuleCommon;
-import demoapp.web.DemoAppManifestJdo;
-
-/**
- * Bootstrap the application.
- */
-@SpringBootApplication
-@Import({
-    DemoModuleCommon.class,
-    DemoAppManifestJdo.class,
-
-    // Metamodel
-    CausewayModuleValAsciidocMetaModel.class,
-    CausewayModuleValMarkdownMetaModel.class,
-    CausewayModuleValVegaMetaModel.class,
-    //TODO CausewayModuleExtFullCalendarVaadin.class,
-
-    // INCUBATING
-    CausewayModuleIncViewerVaadinViewer.class, // vaadin viewer
-    CausewayModuleValAsciidocUiVaa.class, // ascii-doc rendering support (for Vaadin)
-
-    // Persistence (JDO/DN5)
-    CausewayModuleValAsciidocPersistenceJdoDn.class,
-    CausewayModuleValMarkdownPersistenceJdoDn.class,
-    CausewayModuleValVegaPersistenceJdoDn.class,
-
-
-    // WICKET INTEGRATION ... to allow side by side comparison
-    CausewayModuleViewerWicketViewer.class, // wicket viewer
-    CausewayModuleExtSseWicket.class, // server sent events
-    CausewayModuleValAsciidocUiWkt.class, // ascii-doc rendering support (for Wicket)
-
-})
-public class DemoAppVaadin extends SpringBootServletInitializer {
-
-    /**
-     *
-     * @param args
-     * @implNote this is to support the <em>Spring Boot Maven Plugin</em>, which auto-detects an
-     * entry point by searching for classes having a {@code main(...)}
-     */
-    public static void main(final String[] args) {
-
-        // activates when sys-env THERE_CAN_BE_ONLY_ONE=true
-        _OsUtil.thereCanBeOnlyOne();
-
-        CausewayPresets.prototyping();
-        //CausewayPresets.logging(WebRequestCycleForCauseway.class, "debug");
-
-        SpringProfileUtil.removeActiveProfile("demo-jpa"); // just in case
-        SpringProfileUtil.addActiveProfile("demo-jdo");
-
-        CausewayModuleExtCommandLogApplib.honorSystemEnvironment();
-
-        SpringApplication.run(new Class[] { DemoAppVaadin.class }, args);
-    }
-
-}
diff --git a/examples/demo/vaadin/src/main/resources/log4j2-spring.xml b/examples/demo/vaadin/src/main/resources/log4j2-spring.xml
deleted file mode 100644
index 64357c4225..0000000000
--- a/examples/demo/vaadin/src/main/resources/log4j2-spring.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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. -->
-<Configuration status="WARN">
-	<Properties>
-		<Property name="PID">????</Property>
-		<Property name="LOG_EXCEPTION_CONVERSION_WORD">%xwEx</Property>
-		<Property name="LOG_LEVEL_PATTERN">%5p</Property>
-		<Property name="LOG_DATEFORMAT_PATTERN">yyyy-MM-dd HH:mm:ss.SSS</Property>
-		<Property name="CONSOLE_LOG_PATTERN">%clr{%d{${LOG_DATEFORMAT_PATTERN}}}{faint} %clr{${LOG_LEVEL_PATTERN}} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
-		<Property name="FILE_LOG_PATTERN">%d{${LOG_DATEFORMAT_PATTERN}} ${LOG_LEVEL_PATTERN} ${sys:PID} --- [%t] %-40.40c{1.} : %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
-	</Properties>
-	<Appenders>
-		<Console name="Console" target="SYSTEM_OUT" follow="true">
-			<PatternLayout pattern="${sys:CONSOLE_LOG_PATTERN}" />
-		</Console>
-	</Appenders>
-	<Loggers>
-	
-		<!-- silence Wicket -->
-		<Logger name="org.apache.wicket.page.PartialPageUpdate" level="error" />
-	
-		<Logger name="org.apache.catalina.startup.DigesterFactory" level="error" />
-		<Logger name="org.apache.catalina.util.LifecycleBase" level="error" />
-		<Logger name="org.apache.coyote.http11.Http11NioProtocol" level="warn" />
-		<logger name="org.apache.sshd.common.util.SecurityUtils" level="warn"/>
-		<Logger name="org.apache.tomcat.util.net.NioSelectorPool" level="warn" />
-		<Logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="error" />
-		<Logger name="org.hibernate.validator.internal.util.Version" level="warn" />
-		<logger name="org.springframework.boot.actuate.endpoint.jmx" level="warn"/>
-		
-		<logger name="org.apache.directory" level="warn"/>
-		<logger name="org.apache.directory.api.ldap.model.entry.Value" level="off"/>
-		
-		<logger name="DataNucleus.Persistence" level="info"/>
-		<logger name="DataNucleus.Transaction" level="info"/>
-		<logger name="DataNucleus.Datastore.Schema" level="info"/>
-		<logger name="DataNucleus.Datastore.Native" level="info"/>
-		
-		<Root level="info">
-			<AppenderRef ref="Console" />
-		</Root>
-	</Loggers>
-</Configuration>
diff --git a/incubator/pom.xml b/incubator/pom.xml
index ec71bd80de..ea40b8c9a7 100644
--- a/incubator/pom.xml
+++ b/incubator/pom.xml
@@ -163,35 +163,6 @@
 				<version>2.0.0-SNAPSHOT</version>
 			</dependency>
 
-			<dependency>
-				<groupId>org.apache.causeway.incubator.viewer</groupId>
-				<artifactId>causeway-viewer-javafx</artifactId>
-				<version>2.0.0-SNAPSHOT</version>
-			</dependency>
-
-			<dependency>
-				<groupId>org.apache.causeway.incubator.viewer</groupId>
-				<artifactId>causeway-viewer-vaadin</artifactId>
-				<version>2.0.0-SNAPSHOT</version>
-				<type>pom</type>
-			</dependency>
-			<dependency>
-				<groupId>org.apache.causeway.incubator.viewer</groupId>
-				<artifactId>causeway-viewer-vaadin-model</artifactId>
-				<version>2.0.0-SNAPSHOT</version>
-			</dependency>
-			<dependency>
-				<groupId>org.apache.causeway.incubator.viewer</groupId>
-				<artifactId>causeway-viewer-vaadin-ui</artifactId>
-				<version>2.0.0-SNAPSHOT</version>
-			</dependency>
-			<dependency>
-				<groupId>org.apache.causeway.incubator.viewer</groupId>
-				<artifactId>causeway-viewer-vaadin-viewer</artifactId>
-				<version>2.0.0-SNAPSHOT</version>
-			</dependency>
-
-
 			<!-- TESTING -->
 
 			<dependency>
@@ -207,9 +178,6 @@
  		<module>clients/kroviz</module>
  		<module>extensions/core/commandreplay</module>
 		<module>viewers/graphql</module>
-		<module>viewers/javafx</module>
-		<module>viewers/vaadin</module>
-		<module>../valuetypes/asciidoc/ui/vaadin</module>
 	</modules>
 
 </project>
diff --git a/incubator/viewers/javafx/adoc/antora.yml b/incubator/viewers/javafx/adoc/antora.yml
deleted file mode 100644
index bc87cdc73c..0000000000
--- a/incubator/viewers/javafx/adoc/antora.yml
+++ /dev/null
@@ -1,19 +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.
-
-name: incubator
-version: latest
diff --git a/incubator/viewers/javafx/adoc/modules/javafx/nav.adoc b/incubator/viewers/javafx/adoc/modules/javafx/nav.adoc
deleted file mode 100644
index b97852230f..0000000000
--- a/incubator/viewers/javafx/adoc/modules/javafx/nav.adoc
+++ /dev/null
@@ -1,4 +0,0 @@
-
-:Notice: 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 ag [...]
-
-include::incubator:ROOT:partial$component-nav.adoc[]
diff --git a/incubator/viewers/javafx/adoc/modules/javafx/pages/about.adoc b/incubator/viewers/javafx/adoc/modules/javafx/pages/about.adoc
deleted file mode 100644
index cf0dfa6cfc..0000000000
--- a/incubator/viewers/javafx/adoc/modules/javafx/pages/about.adoc
+++ /dev/null
@@ -1,6 +0,0 @@
-= JavaFX Viewer (Incubating)
-
-:Notice: 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 ag [...]
-
-WARNING: TODO:  v2.0
-
diff --git a/incubator/viewers/javafx/adoc/modules/javafx/partials/module-nav.adoc b/incubator/viewers/javafx/adoc/modules/javafx/partials/module-nav.adoc
deleted file mode 100644
index d748553a56..0000000000
--- a/incubator/viewers/javafx/adoc/modules/javafx/partials/module-nav.adoc
+++ /dev/null
@@ -1,3 +0,0 @@
-
-* xref:incubator:javafx:about.adoc[JavaFX]
-
diff --git a/incubator/viewers/javafx/model/pom.xml b/incubator/viewers/javafx/model/pom.xml
deleted file mode 100644
index eb64c0950a..0000000000
--- a/incubator/viewers/javafx/model/pom.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>org.apache.causeway.incubator.viewer</groupId>
-		<artifactId>causeway-viewer-javafx</artifactId>
-		<version>2.0.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>causeway-viewer-javafx-model</artifactId>
-	<name>Apache Causeway Inc - Viewer JavaFX (Model)</name>
-
-	<properties>
-		<jar-plugin.automaticModuleName>org.apache.causeway.incubator.viewer.javafx.model</jar-plugin.automaticModuleName>
-		<git-plugin.propertiesDir>org/apache/causeway/incubator/viewer/javafx/model</git-plugin.propertiesDir>
-	</properties>
-
-	<dependencies>
-
-		<dependency>
-			<groupId>org.apache.causeway.viewer</groupId>
-			<artifactId>causeway-viewer-commons-model</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.openjfx</groupId>
-			<artifactId>javafx-base</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.openjfx</groupId>
-			<artifactId>javafx-controls</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.openjfx</groupId>
-			<artifactId>javafx-swing</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.openjfx</groupId>
-			<artifactId>javafx-fxml</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.openjfx</groupId>
-			<artifactId>javafx-web</artifactId>
-		</dependency>
-
-
-		<!-- TEST DEPENDENCIES -->
-
-		<dependency>
-			<groupId>org.apache.causeway.core</groupId>
-			<artifactId>causeway-core-internaltestsupport</artifactId>
-			<scope>test</scope>
-		</dependency>
-
-	</dependencies>
-
-</project>
diff --git a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/action/ActionUiModelFactoryFx.java b/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/action/ActionUiModelFactoryFx.java
deleted file mode 100644
index d956ead15f..0000000000
--- a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/action/ActionUiModelFactoryFx.java
+++ /dev/null
@@ -1,30 +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.causeway.incubator.viewer.javafx.model.action;
-
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.causeway.incubator.viewer.javafx.model.context.UiContextFx;
-
-public class ActionUiModelFactoryFx {
-
-    public ActionUiModelFx newActionUiModel(UiContextFx uiContext, ManagedAction managedAction) {
-        return ActionUiModelFx.of(uiContext, managedAction);
-    }
-
-}
diff --git a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/action/ActionUiModelFx.java b/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/action/ActionUiModelFx.java
deleted file mode 100644
index 493c542b94..0000000000
--- a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/action/ActionUiModelFx.java
+++ /dev/null
@@ -1,65 +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.causeway.incubator.viewer.javafx.model.action;
-
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
-import org.apache.causeway.incubator.viewer.javafx.model.context.UiContextFx;
-import org.apache.causeway.viewer.commons.model.action.UiAction;
-
-import javafx.scene.Node;
-import javafx.scene.control.Label;
-import javafx.scene.control.MenuItem;
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-
-@RequiredArgsConstructor(staticName = "of")
-public class ActionUiModelFx
-implements UiAction<MenuItem, Node> {
-
-    private final UiContextFx uiContext;
-
-    @Getter
-    private final ManagedAction managedAction;
-
-    @Override
-    public ObjectAction getAction() {
-        return managedAction.getMetaModel();
-    }
-
-    @Override
-    public MenuItem createMenuUiComponent() {
-        val menuItem = new MenuItem(getManagedAction().getFriendlyName());
-
-        return uiContext.getIconDecoratorForMenuItem()
-                .decorate(menuItem, getFontAwesomeUiModel());
-    }
-
-    @Override
-    public Node createRegularUiComponent() {
-
-        val uiLabel = new Label(getManagedAction().getFriendlyName());
-
-        return uiContext.getIconDecoratorForLabeled()
-                .decorate(uiLabel, getFontAwesomeUiModel());
-    }
-
-
-}
diff --git a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/binding/BindingsFx.java b/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/binding/BindingsFx.java
deleted file mode 100644
index 34be6ff192..0000000000
--- a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/binding/BindingsFx.java
+++ /dev/null
@@ -1,241 +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.causeway.incubator.viewer.javafx.model.binding;
-
-import java.lang.ref.WeakReference;
-import java.util.Objects;
-
-import org.apache.causeway.commons.binding.Bindable;
-import org.apache.causeway.commons.binding.ChangeListener;
-import org.apache.causeway.commons.binding.Observable;
-import org.apache.causeway.commons.internal.exceptions._Exceptions;
-import org.apache.causeway.viewer.commons.model.binding.BindingConverter;
-
-import javafx.beans.property.Property;
-import javafx.beans.property.StringProperty;
-import javafx.beans.value.ObservableValue;
-import lombok.NonNull;
-import lombok.val;
-import lombok.experimental.UtilityClass;
-
-@UtilityClass
-public class BindingsFx {
-
-    public static <T> void bind(
-            final @NonNull Property<T> leftProperty,
-            final @NonNull Observable<T> rightObservable) {
-
-        leftProperty.setValue(rightObservable.getValue());
-        rightObservable.addListener((e,o,n)->{
-            leftProperty.setValue(n);
-        });
-    }
-
-    public static <L, R> void bind(
-            final @NonNull Property<L> leftProperty,
-            final @NonNull Observable<R> rightObservable,
-            final @NonNull BindingConverter<L, R> converter) {
-
-        leftProperty.setValue(converter.toLeft(rightObservable.getValue()));
-        rightObservable.addListener((e,o,n)->{
-            leftProperty.setValue(converter.toLeft(n));
-        });
-    }
-
-    public static <L, R> void bindBidirectional(
-            final @NonNull Property<L> leftProperty,
-            final @NonNull Bindable<R> rightProperty,
-            final @NonNull BindingConverter<L, R> converter) {
-        val binding = new InternalBidirBinding<L, R>(leftProperty, rightProperty, converter);
-        leftProperty.setValue(converter.toLeft(rightProperty.getValue()));
-        leftProperty.addListener(binding);
-        rightProperty.addListener(binding);
-    }
-
-    public static void bindParsableBidirectional(
-            final @NonNull Property<String> leftProperty,
-            final @NonNull Bindable<String> rightProperty) {
-        bindBidirectional(leftProperty, rightProperty, BindingConverter.identity(String.class));
-    }
-
-    // -- VALIDATION
-
-    public static void bindValidationFeeback(
-            final @NonNull StringProperty textProperty,
-            final @NonNull Property<Boolean> visibilityProperty,
-            final @NonNull Observable<String> textObservable) {
-
-        bind(textProperty, textObservable);
-        visibilityProperty.bind(textProperty.isNotEmpty());
-    }
-
-    // -- INTERNAL
-
-    private static class InternalBidirBinding<L, R>
-    implements
-        javafx.beans.value.ChangeListener<L>,
-        ChangeListener<R>{
-
-        private final WeakReference<Property<L>> leftRef;
-        private final WeakReference<Bindable<R>> rightRef;
-        private final BindingConverter<L, R> converter;
-        private boolean updating = false;
-        private final int cachedHash;
-
-        private Property<L> getLeft() {
-            return leftRef.get();
-        }
-
-        private Bindable<R> getRight() {
-            return rightRef.get();
-        }
-
-
-        public InternalBidirBinding(
-                final @NonNull Property<L> left,
-                final @NonNull Bindable<R> right,
-                final @NonNull BindingConverter<L, R> converter) {
-
-            this.leftRef = new WeakReference<>(left);
-            this.rightRef = new WeakReference<>(right);
-            this.converter = converter;
-            cachedHash = Objects.hash(left, right, converter);
-        }
-
-        @Override
-        public void changed(final ObservableValue<? extends L> leftObservable, final L oldValue, final L newValue) {
-            changed(oldValue, newValue, null, null);
-        }
-
-        @Override
-        public void changed(
-                final Observable<? extends R> rightObservable,
-                final R oldValue,
-                final R newValue) {
-            changed(null, null, oldValue, newValue);
-        }
-
-        @Override
-        public boolean equals(final Object obj) {
-            if (this == obj) {
-                return true;
-            }
-
-            final Object left = getLeft();
-            final Object right = getRight();
-            if ((left == null) || (right == null)) {
-                return false;
-            }
-
-            if (obj instanceof InternalBidirBinding) {
-                final InternalBidirBinding<?, ?> otherBinding = (InternalBidirBinding<?, ?>) obj;
-                final Object otherLeft = otherBinding.getLeft();
-                final Object otherRight = otherBinding.getRight();
-                if ((otherLeft == null) || (otherRight == null)) {
-                    return false;
-                }
-
-                if (left == otherLeft && right == otherRight) {
-                    return true;
-                }
-                if (left == otherRight && right == otherLeft) {
-                    return true;
-                }
-            }
-            return false;
-        }
-
-        @Override
-        public int hashCode() {
-            return cachedHash;
-        }
-
-        // -- HELPER
-
-        /**
-         * @param oldPojo
-         * @param newPojo
-         * @param oldValue
-         * @param newValue
-         * @apiNote not pretty, but to not having to duplicate this logic:
-         * either uses both pojos and ignores both managed objects (propagate changes left to right)
-         * or vice versa.
-         */
-        private void changed(final L oldPojo, final L newPojo, final R oldValue, final R newValue) {
-            if (updating) {
-                return;
-            }
-            val left = getLeft();
-            val right = getRight();
-            if(!isStillBound(left, right)) {
-                return;
-            }
-
-            try {
-                updating = true;
-                if(newValue!=null) { // direction
-                    left.setValue(converter.toLeft(newValue)); // propagate changes right to left
-                } else {
-                    right.setValue(converter.toRight(newPojo)); // propagate changes left to right
-                }
-            } catch (RuntimeException e) {
-                try {
-                    if(newValue!=null) { // direction
-                        left.setValue(converter.toLeft(oldValue)); // propagate changes right to left
-                    } else {
-                        right.setValue(converter.toRight(oldPojo)); // propagate changes left to right
-                    }
-                } catch (Exception e2) {
-                    e2.addSuppressed(e);
-                    left.removeListener(this);
-                    right.removeListener(this);
-                    throw _Exceptions.unrecoverable(e2,
-                            "Bidirectional binding failed with an attempt to restore the "
-                            + "Observable to the previous value. "
-                            + "Removing the bidirectional binding from bindables %s and %s",
-                            ""+left,
-                            ""+right);
-                }
-                throw _Exceptions.unrecoverable(e,
-                        "Bidirectional binding failed, setting to the previous value");
-            } finally {
-                updating = false;
-            }
-        }
-
-        private boolean isStillBound(
-                final Property<L> left,
-                final Bindable<R> right) {
-
-            if ((left == null) || (right == null)) {
-                if (left != null) {
-                    left.removeListener(this);
-                }
-                if (right != null) {
-                    right.removeListener(this);
-                }
-                return false;
-            }
-            return true;
-        }
-
-    }
-
-
-}
diff --git a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/context/UiContextFx.java b/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/context/UiContextFx.java
deleted file mode 100644
index 14fbea98c3..0000000000
--- a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/context/UiContextFx.java
+++ /dev/null
@@ -1,65 +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.causeway.incubator.viewer.javafx.model.context;
-
-import java.util.function.Consumer;
-import java.util.function.Function;
-import java.util.function.Supplier;
-
-import org.apache.causeway.applib.services.iactnlayer.InteractionService;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.incubator.viewer.javafx.model.action.ActionUiModelFactoryFx;
-import org.apache.causeway.incubator.viewer.javafx.model.events.JavaFxViewerConfig;
-import org.apache.causeway.viewer.commons.model.decorators.DisablingDecorator;
-import org.apache.causeway.viewer.commons.model.decorators.IconDecorator;
-import org.apache.causeway.viewer.commons.model.decorators.PrototypingDecorator;
-
-import javafx.scene.Node;
-import javafx.scene.control.Button;
-import javafx.scene.control.Labeled;
-import javafx.scene.control.MenuItem;
-
-public interface UiContextFx {
-
-    JavaFxViewerConfig getJavaFxViewerConfig();
-
-    InteractionService getInteractionService();
-    ActionUiModelFactoryFx getActionUiModelFactory();
-
-    void setNewPageHandler(Consumer<Node> onNewPage);
-    void setPageFactory(Function<ManagedObject, Node> 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/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/events/CausewayModuleIncViewerJavaFxModel.java b/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/events/CausewayModuleIncViewerJavaFxModel.java
deleted file mode 100644
index 6f8cfca3ba..0000000000
--- a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/events/CausewayModuleIncViewerJavaFxModel.java
+++ /dev/null
@@ -1,41 +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.causeway.incubator.viewer.javafx.model.events;
-
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-
-/**
- *
- * @since 2.0
- */
-@Configuration
-@Import({
-        // Modules
-
-        // @Components's
-
-        // @Service's
-
-        // @Mixin's
-})
-
-public class CausewayModuleIncViewerJavaFxModel {
-
-}
diff --git a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/events/JavaFxViewerConfig.java b/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/events/JavaFxViewerConfig.java
deleted file mode 100644
index 453c536ac5..0000000000
--- a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/events/JavaFxViewerConfig.java
+++ /dev/null
@@ -1,40 +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.causeway.incubator.viewer.javafx.model.events;
-
-import org.springframework.core.io.ClassPathResource;
-import org.springframework.core.io.Resource;
-
-import javafx.scene.image.Image;
-import lombok.Builder;
-import lombok.Getter;
-
-@Getter @Builder
-public class JavaFxViewerConfig {
-
-    private String applicationTitle;
-    private Image applicationIcon;
-    private Image brandingIcon;
-    private Image objectFallbackIcon;
-
-    @Builder.Default
-    private Resource uiLayout = new ClassPathResource("/ui.fxml");
-
-
-}
diff --git a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/events/PrimaryStageReadyEvent.java b/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/events/PrimaryStageReadyEvent.java
deleted file mode 100644
index bedb7d7784..0000000000
--- a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/events/PrimaryStageReadyEvent.java
+++ /dev/null
@@ -1,36 +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.causeway.incubator.viewer.javafx.model.events;
-
-import org.springframework.context.ApplicationEvent;
-
-import javafx.stage.Stage;
-
-public class PrimaryStageReadyEvent extends ApplicationEvent {
-
-    private static final long serialVersionUID = 1L;
-
-    public PrimaryStageReadyEvent(Object source) {
-        super(source);
-    }
-
-    public Stage getStage() {
-        return (Stage) getSource();
-    }
-}
diff --git a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/icon/IconService.java b/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/icon/IconService.java
deleted file mode 100644
index bbb2310e0e..0000000000
--- a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/icon/IconService.java
+++ /dev/null
@@ -1,31 +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.causeway.incubator.viewer.javafx.model.icon;
-
-import java.util.Optional;
-
-import org.apache.causeway.viewer.commons.model.decorators.IconDecorator.FontAwesomeDecorationModel;
-
-import javafx.scene.image.Image;
-
-public interface IconService {
-
-    Optional<Image> fontAwesome(FontAwesomeDecorationModel fontAwesomeDecorationModel);
-
-}
diff --git a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/util/_fx.java b/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/util/_fx.java
deleted file mode 100644
index ae25bdf407..0000000000
--- a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/util/_fx.java
+++ /dev/null
@@ -1,379 +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.causeway.incubator.viewer.javafx.model.util;
-
-import java.util.function.Predicate;
-
-import org.springframework.lang.Nullable;
-
-import javafx.beans.property.ReadOnlyObjectWrapper;
-import javafx.beans.property.ReadOnlyStringWrapper;
-import javafx.beans.value.ObservableValue;
-import javafx.collections.ListChangeListener.Change;
-import javafx.event.ActionEvent;
-import javafx.event.EventHandler;
-import javafx.geometry.Insets;
-import javafx.scene.Node;
-import javafx.scene.control.Accordion;
-import javafx.scene.control.Button;
-import javafx.scene.control.ContentDisplay;
-import javafx.scene.control.Label;
-import javafx.scene.control.Labeled;
-import javafx.scene.control.Menu;
-import javafx.scene.control.MenuBar;
-import javafx.scene.control.MenuItem;
-import javafx.scene.control.Tab;
-import javafx.scene.control.TabPane;
-import javafx.scene.control.TableColumn;
-import javafx.scene.control.TableView;
-import javafx.scene.control.TitledPane;
-import javafx.scene.image.Image;
-import javafx.scene.image.ImageView;
-import javafx.scene.layout.Background;
-import javafx.scene.layout.BackgroundFill;
-import javafx.scene.layout.Border;
-import javafx.scene.layout.BorderStroke;
-import javafx.scene.layout.BorderStrokeStyle;
-import javafx.scene.layout.BorderWidths;
-import javafx.scene.layout.CornerRadii;
-import javafx.scene.layout.FlowPane;
-import javafx.scene.layout.GridPane;
-import javafx.scene.layout.HBox;
-import javafx.scene.layout.Pane;
-import javafx.scene.layout.Region;
-import javafx.scene.layout.VBox;
-import javafx.scene.paint.Color;
-import javafx.scene.text.Font;
-import javafx.scene.text.FontWeight;
-import lombok.NonNull;
-import lombok.val;
-import lombok.experimental.UtilityClass;
-
-@UtilityClass
-public final class _fx {
-
-    // -- OBSERVABLES
-
-    public static ObservableValue<String> newStringReadonly(String value) {
-        return new ReadOnlyStringWrapper(value);
-    }
-
-    public static <T> ObservableValue<T> newObjectReadonly(T value) {
-        return new ReadOnlyObjectWrapper<T>(value);
-    }
-
-    // -- COMPONENT FACTORIES
-
-    public static <T extends Node> T add(Pane container, T component) {
-        container.getChildren().add(component);
-        return component;
-    }
-
-    public static Label newLabel(Pane container, String label) {
-        val component = new Label(label);
-        container.getChildren().add(component);
-        return component;
-    }
-
-    public static Label newValidationFeedback(Pane container) {
-        val component = new Label();
-        container.getChildren().add(component);
-        visibilityLayoutFix(component);
-        component.setStyle("-fx-color: red");
-        component.visibleProperty().addListener((e, o, visible)->{
-            if(visible) {
-                borderDashed(container, Color.RED);
-            } else {
-                container.setBorder(null);
-            }
-        });
-        return component;
-    }
-
-    public static Button newButton(Pane container, String label, EventHandler<ActionEvent> eventHandler) {
-        val component = new Button(label);
-        container.getChildren().add(component);
-        component.setOnAction(eventHandler);
-        return component;
-    }
-
-    public static HBox newHBox(Pane container) {
-        val component = new HBox();
-        container.getChildren().add(component);
-        _fx.padding(component, 4, 8);
-        _fx.borderDashed(component, Color.BLUE); // debug
-        return component;
-    }
-
-    public static VBox newVBox(Pane container) {
-        val component = new VBox();
-        container.getChildren().add(component);
-        _fx.padding(component, 4, 8);
-        _fx.borderDashed(component, Color.GREEN); // debug
-        return component;
-    }
-
-    public static VBox newVBox(TitledPane container) {
-        val component = new VBox();
-        container.setContent(component);
-        return component;
-    }
-
-    public static FlowPane newFlowPane(@Nullable Pane container) {
-        val component = new FlowPane();
-        if(container!=null) {
-            container.getChildren().add(component);
-        }
-        _fx.padding(component, 4, 8);
-        _fx.hideUntilPopulated(component);
-        return component;
-    }
-
-    public static GridPane newGrid(Pane container) {
-        val component = new GridPane();
-        container.getChildren().add(component);
-        return component;
-    }
-
-    public static GridPane newGrid(TitledPane container) {
-        val component = new GridPane();
-        container.setContent(component);
-        return component;
-    }
-
-    public static <T extends Node> T addGridCell(GridPane container, T cellNode, int column, int row) {
-        container.add(cellNode, column, row);
-        return cellNode;
-    }
-
-    public static TabPane newTabGroup(Pane container) {
-        val component = new TabPane();
-        container.getChildren().add(component);
-        return component;
-    }
-
-    public static Tab newTab(TabPane container, String label) {
-        val component = new Tab(label);
-        container.getTabs().add(component);
-        return component;
-    }
-
-    public static Accordion newAccordion(Pane container) {
-        val component = new Accordion();
-        container.getChildren().add(component);
-        return component;
-    }
-
-    public static Menu newMenu(MenuBar container, String label) {
-        val component = new Menu(label);
-        container.getMenus().add(component);
-        return component;
-    }
-
-    public static MenuItem newMenuItem(Menu container, String label) {
-        val component = new MenuItem(label);
-        container.getItems().add(component);
-        return component;
-    }
-
-    public static TitledPane newTitledPane(Accordion container, String label) {
-        val component = new TitledPane();
-        container.getPanes().add(component);
-        component.setText(label);
-        component.setAnimated(true);
-        return component;
-    }
-
-
-    /**
-     * @param <S> The type of the TableView generic type (i.e. S == TableView&lt;S&gt;)
-     * @param <T> The type of the content in all cells in this TableColumn.
-     * @param tableView
-     * @param columnLabel
-     * @param columnType
-     * @return a new column as added to the {@code tableView}
-     */
-    public static <S, T> TableColumn<S, T> newColumn(TableView<S> tableView, String columnLabel, Class<T> columnType) {
-        val column = new TableColumn<S, T>(columnLabel);
-        tableView.getColumns().add(column);
-        return column;
-    }
-
-    // -- VISIBILITY
-
-    /**
-     * Do not consider node for layout calculations, when not visible
-     * @param node
-     */
-    public static Node visibilityLayoutFix(Node node) {
-        node.managedProperty().bind(node.visibleProperty());
-        return node;
-    }
-
-    // -- ICONS
-
-    public static Image imageFromClassPath(@NonNull Class<?> cls, String resourceName) {
-        return new Image(cls.getResourceAsStream(resourceName));
-    }
-
-    public static ImageView iconForImage(Image image, int width, int height) {
-        val icon = new ImageView(image);
-        icon.setFitWidth(width);
-        icon.setFitHeight(height);
-        return icon;
-    }
-
-    public static Button bottonForImage(Image image, int width, int height) {
-        val icon = new ImageView(image);
-        icon.setPreserveRatio(true);
-        icon.setFitWidth(width-2);
-        icon.setFitHeight(height-2);
-
-        val btn = new Button();
-        btn.setGraphic(icon);
-        btn.setMaxSize(width, height);
-        btn.setMinSize(width, height);
-        btn.setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
-
-        return btn;
-    }
-
-    // -- LAYOUTS
-
-    public static void padding(Region region, int hPadding, int vPadding) {
-        region.setPadding(new Insets(vPadding, hPadding, vPadding, hPadding));
-    }
-
-    public static void toolbarLayoutPropertyAssociated(FlowPane component) {
-        component.setPadding(new Insets(0, 12, 0, 12));
-        component.setHgap(10);
-        component.setVgap(10);
-    }
-
-    public static void toolbarLayout(FlowPane component) {
-        component.setPadding(new Insets(15, 12, 15, 12));
-        component.setHgap(10);
-        component.setVgap(10);
-
-        _fx.borderDashed(component, Color.RED); // debug
-        _fx.backround(component, Color.FLORALWHITE);
-    }
-
-    public static void vcausewaytDepthFirst(Node component, Predicate<Node> onNode) {
-        val doContinue = onNode.test(component);
-        if(doContinue && (component instanceof Pane)) {
-            ((Pane) component).getChildrenUnmodifiable()
-            .forEach(child->vcausewaytDepthFirst(child, onNode));
-        }
-    }
-
-//XXX Superseded by visibilityLayoutFix(Node node)
-//    private static boolean isEmptyOrHidden(Node component) {
-//        if(component instanceof Pane) {
-//            val children = ((Pane) component).getChildrenUnmodifiable();
-//            if(children.isEmpty()) {
-//                return true; // empty
-//            }
-//            //return true only if all children are empty or hidden
-//            val atLeastOneIsNonEmptyOrVisible = children.stream()
-//                    .anyMatch(child->!isEmptyOrHidden(child));
-//            return !atLeastOneIsNonEmptyOrVisible;
-//        }
-//        return !component.isVisible();
-//    }
-
-
-    public static void hideUntilPopulated(Pane component) {
-        component.setVisible(false);
-        component.getChildren().addListener((Change<? extends Node> change) -> {
-            if(change.next() && change.wasAdded()) {
-
-//                change.getAddedSubList().stream()
-//                .filter(_Predicates.instanceOf(Pane.class))
-//                .map(Pane.class::cast)
-//                .forEach(newPane->{
-//                    _Probe.errOut("newPane %s", ""+newPane);
-//                });
-
-
-                component.setVisible(true);
-            }
-        });
-
-//        component.setOnMouseClicked(e->{
-//
-//            _Probe.errOut("event %s", ""+e);
-//
-//            vcausewaytDepthFirst(component, node->{
-//                _Probe.errOut("node %s", ""+node);
-//                return true;
-//            });
-//
-//        });
-
-    }
-
-
-    // -- STYLES
-
-    public static <T extends Labeled> T h1(T component) {
-        component.setFont(Font.font("Verdana", FontWeight.BOLD, 20));
-        return component;
-    }
-
-    public static <T extends Labeled> T h2(T component) {
-        component.setFont(Font.font("Verdana", FontWeight.BOLD, 18));
-        return component;
-    }
-
-    public static <T extends Labeled> T h3(T component) {
-        component.setFont(Font.font("Verdana", FontWeight.NORMAL, 17));
-        return component;
-    }
-
-    public static <T extends Region> T backround(T region, Color color) {
-        region.setBackground(new Background(new BackgroundFill(color, CornerRadii.EMPTY, Insets.EMPTY)));
-        return region;
-    }
-
-    public static <T extends Region> T borderDashed(T region, Color color) {
-        region.setBorder(new Border(new BorderStroke(
-                color,
-                BorderStrokeStyle.DASHED,
-                new CornerRadii(3),
-                new BorderWidths(1))));
-        return region;
-    }
-
-    // -- HACKS
-
-    /**
-     * {@code menu.setOnAction(action)} does nothing if the menu has no menu items
-     */
-    public static void setMenuOnAction(Menu menu, EventHandler<ActionEvent> action) {
-
-        _fx.newMenuItem(menu, "dummy");
-        menu.addEventHandler(Menu.ON_SHOWN, event -> menu.hide());
-        menu.addEventHandler(Menu.ON_SHOWING, event -> menu.fire());
-
-        menu.setOnAction(action);
-    }
-
-
-}
diff --git a/incubator/viewers/javafx/pom.xml b/incubator/viewers/javafx/pom.xml
deleted file mode 100644
index 4241cf6aa5..0000000000
--- a/incubator/viewers/javafx/pom.xml
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>org.apache.causeway.incubator</groupId>
-		<artifactId>causeway-incubator</artifactId>
-		<version>2.0.0-SNAPSHOT</version>
-		<relativePath>../../pom.xml</relativePath>
-	</parent>
-
-	<groupId>org.apache.causeway.incubator.viewer</groupId>
-	<artifactId>causeway-viewer-javafx</artifactId>
-	<name>Apache Causeway Inc - Viewer JavaFX</name>
-	<description>
-		Initial sketches
-	</description>
-
-	<properties>
-		<maven.compiler.release>11</maven.compiler.release>
-		<jar-plugin.automaticModuleName>org.apache.causeway.incubator.viewer.javafx</jar-plugin.automaticModuleName>
-		<git-plugin.propertiesDir>org/apache/causeway/incubator/viewer/javafx</git-plugin.propertiesDir>
-		<javafx.version>11.0.2</javafx.version>
-	</properties>
-
-	<packaging>pom</packaging>
-
-	<dependencyManagement>
-		<dependencies>
-
-			<dependency>
-				<groupId>org.apache.causeway.incubator.viewer</groupId>
-				<artifactId>causeway-viewer-javafx-model</artifactId>
-				<version>2.0.0-SNAPSHOT</version>
-			</dependency>
-
-			<dependency>
-				<groupId>org.apache.causeway.incubator.viewer</groupId>
-				<artifactId>causeway-viewer-javafx-ui</artifactId>
-				<version>2.0.0-SNAPSHOT</version>
-			</dependency>
-
-			<dependency>
-				<groupId>org.apache.causeway.incubator.viewer</groupId>
-				<artifactId>causeway-viewer-javafx-viewer</artifactId>
-				<version>2.0.0-SNAPSHOT</version>
-			</dependency>
-
-			<!-- JAVA-FX -->
-
-			<dependency>
-				<groupId>org.openjfx</groupId>
-				<artifactId>javafx-base</artifactId>
-				<version>${javafx.version}</version>
-			</dependency>
-
-			<dependency>
-				<groupId>org.openjfx</groupId>
-				<artifactId>javafx-controls</artifactId>
-				<version>${javafx.version}</version>
-			</dependency>
-
-			<dependency>
-				<groupId>org.openjfx</groupId>
-				<artifactId>javafx-swing</artifactId>
-				<version>${javafx.version}</version>
-			</dependency>
-
-			<dependency>
-				<groupId>org.openjfx</groupId>
-				<artifactId>javafx-fxml</artifactId>
-				<version>${javafx.version}</version>
-			</dependency>
-
-			<dependency>
-				<groupId>org.openjfx</groupId>
-				<artifactId>javafx-web</artifactId>
-				<version>${javafx.version}</version>
-			</dependency>
-
-		</dependencies>
-	</dependencyManagement>
-
-	<modules>
-		<module>model</module>
-		<module>viewer</module>
-		<module>ui</module>
-	</modules>
-
-</project>
diff --git a/incubator/viewers/javafx/ui/pom.xml b/incubator/viewers/javafx/ui/pom.xml
deleted file mode 100644
index 5984b58acb..0000000000
--- a/incubator/viewers/javafx/ui/pom.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>org.apache.causeway.incubator.viewer</groupId>
-		<artifactId>causeway-viewer-javafx</artifactId>
-		<version>2.0.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>causeway-viewer-javafx-ui</artifactId>
-	<name>Apache Causeway Inc - Viewer JavaFX (UI Components)</name>
-
-	<properties>
-		<jar-plugin.automaticModuleName>org.apache.causeway.incubator.viewer.javafx.ui</jar-plugin.automaticModuleName>
-		<git-plugin.propertiesDir>org/apache/causeway/incubator/viewer/javafx/ui</git-plugin.propertiesDir>
-	</properties>
-
-
-	<dependencies>
-
-		<dependency>
-			<groupId>org.apache.causeway.incubator.viewer</groupId>
-			<artifactId>causeway-viewer-javafx-model</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.apache.causeway.core</groupId>
-			<artifactId>causeway-core-runtimeservices</artifactId>
-		</dependency>
-
-		<!-- JavaFX -->
-
-
-	</dependencies>
-
-</project>
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/CausewayModuleIncViewerJavaFxUi.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/CausewayModuleIncViewerJavaFxUi.java
deleted file mode 100644
index 30a0e73e58..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/CausewayModuleIncViewerJavaFxUi.java
+++ /dev/null
@@ -1,91 +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.causeway.incubator.viewer.javafx.ui;
-
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-
-import org.apache.causeway.incubator.viewer.javafx.model.events.CausewayModuleIncViewerJavaFxModel;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.UiComponentFactoryFx;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.markup.MarkupFieldFactory;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.number.NumberFieldFactory;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.objectref.ObjectReferenceFieldFactory;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.other.FallbackFieldFactory;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.temporal.TemporalFieldFactory;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.text.TextFieldFactory;
-import org.apache.causeway.incubator.viewer.javafx.ui.decorator.disabling.DisablingDecoratorForButton;
-import org.apache.causeway.incubator.viewer.javafx.ui.decorator.disabling.DisablingDecoratorForFormField;
-import org.apache.causeway.incubator.viewer.javafx.ui.decorator.icon.IconDecoratorForLabeled;
-import org.apache.causeway.incubator.viewer.javafx.ui.decorator.icon.IconDecoratorForMenuItem;
-import org.apache.causeway.incubator.viewer.javafx.ui.decorator.icon.IconServiceDefault;
-import org.apache.causeway.incubator.viewer.javafx.ui.decorator.prototyping.PrototypingDecoratorForButton;
-import org.apache.causeway.incubator.viewer.javafx.ui.decorator.prototyping.PrototypingDecoratorForFormField;
-import org.apache.causeway.incubator.viewer.javafx.ui.decorator.prototyping.PrototypingInfoPopupProvider;
-import org.apache.causeway.incubator.viewer.javafx.ui.main.MainViewFx;
-import org.apache.causeway.incubator.viewer.javafx.ui.main.UiActionHandlerFx;
-import org.apache.causeway.incubator.viewer.javafx.ui.main.UiBuilderFx;
-import org.apache.causeway.incubator.viewer.javafx.ui.main.UiContextFxDefault;
-import org.apache.causeway.viewer.commons.applib.CausewayModuleViewerCommonsApplib;
-
-/**
- *
- * @since 2.0
- */
-@Configuration
-@Import({
-        // Modules
-        CausewayModuleViewerCommonsApplib.class,
-        CausewayModuleIncViewerJavaFxModel.class,
-
-        // @Components's
-        UiBuilderFx.class,
-        MainViewFx.class,
-
-        // Component Factories
-        TextFieldFactory.class,
-        MarkupFieldFactory.class,
-        ObjectReferenceFieldFactory.class,
-        NumberFieldFactory.class,
-        TemporalFieldFactory.class,
-        FallbackFieldFactory.class,
-
-        // Decorators
-        PrototypingDecoratorForButton.class,
-        PrototypingDecoratorForFormField.class,
-        PrototypingInfoPopupProvider.class,
-
-        DisablingDecoratorForButton.class,
-        DisablingDecoratorForFormField.class,
-
-        IconDecoratorForLabeled.class,
-        IconDecoratorForMenuItem.class,
-        IconServiceDefault.class,
-
-        // @Service's
-        UiComponentFactoryFx.class,
-        UiActionHandlerFx.class,
-
-        UiContextFxDefault.class,
-
-        // @Mixin's
-})
-
-public class CausewayModuleIncViewerJavaFxUi {
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/UiComponentFactoryFx.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/UiComponentFactoryFx.java
deleted file mode 100644
index f150dc4af6..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/UiComponentFactoryFx.java
+++ /dev/null
@@ -1,121 +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.causeway.incubator.viewer.javafx.ui.components;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
-import javax.inject.Inject;
-
-import org.springframework.stereotype.Service;
-
-import org.apache.causeway.applib.annotation.LabelPosition;
-import org.apache.causeway.commons.handler.ChainOfResponsibility;
-import org.apache.causeway.core.config.environment.CausewaySystemEnvironment;
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedMember;
-import org.apache.causeway.core.metamodel.util.Facets;
-import org.apache.causeway.incubator.viewer.javafx.model.context.UiContextFx;
-import org.apache.causeway.viewer.commons.model.components.UiComponentFactory;
-import org.apache.causeway.viewer.commons.model.decorators.PrototypingDecorator.PrototypingDecorationModel;
-
-import javafx.scene.Node;
-import javafx.scene.control.Button;
-import javafx.scene.control.Label;
-import lombok.Getter;
-import lombok.val;
-
-@Service
-public class UiComponentFactoryFx implements UiComponentFactory<Node, Node> {
-
-    private final boolean isPrototyping;
-    private final UiContextFx uiContext;
-    private final ChainOfResponsibility<ComponentRequest, Node> chainOfHandlers;
-
-    /** handlers in order of precedence (debug info)*/
-    @Getter
-    private final List<Class<?>> registeredHandlers;
-
-    @Inject
-    private UiComponentFactoryFx(
-            final CausewaySystemEnvironment causewaySystemEnvironment,
-            final UiContextFx uiContext,
-            final List<UiComponentHandlerFx> handlers) {
-
-        this.isPrototyping = causewaySystemEnvironment.isPrototyping();
-        this.uiContext = uiContext;
-        this.chainOfHandlers = ChainOfResponsibility.named("Component Mapper", handlers);
-        this.registeredHandlers = handlers.stream()
-                .map(Handler::getClass)
-                .collect(Collectors.toList());
-    }
-
-    @Override
-    public Node componentFor(final ComponentRequest request) {
-
-        val formField = chainOfHandlers.handle(request);
-        val managedMember = (ManagedMember) request.getManagedFeature();
-
-        request.getDisablingUiModelIfAny().ifPresent(disablingUiModel->{
-            uiContext.getDisablingDecoratorForFormField()
-            .decorate(formField, disablingUiModel);
-        });
-
-        return isPrototyping
-                ? uiContext.getPrototypingDecoratorForFormField()
-                        .decorate(formField, PrototypingDecorationModel.of(managedMember))
-                : formField;
-    }
-
-    @Override
-    public Node buttonFor(final ButtonRequest request) {
-
-        val managedAction = request.getManagedAction();
-        val disablingUiModelIfAny = request.getDisablingUiModelIfAny();
-        val actionEventHandler = request.getActionEventHandler();
-
-        val uiButton = new Button(managedAction.getFriendlyName());
-        uiButton.setOnAction(event->actionEventHandler.accept(managedAction));
-
-        disablingUiModelIfAny.ifPresent(disablingUiModel->{
-            uiContext.getDisablingDecoratorForButton()
-            .decorate(uiButton, disablingUiModel);
-        });
-
-        return isPrototyping
-                ? uiContext.getPrototypingDecoratorForButton()
-                        .decorate(uiButton, PrototypingDecorationModel.of(managedAction))
-                : uiButton;
-    }
-
-    @Override
-    public Node parameterFor(final ComponentRequest request) {
-        val formField = chainOfHandlers.handle(request);
-        return formField;
-    }
-
-    @Override
-    public LabelAndPosition<Node> labelFor(final ComponentRequest request) {
-        val labelPosition = Facets.labelAt(request.getManagedFeature().getMetaModel())
-                .orElse(LabelPosition.LEFT);
-        val uiLabel = new Label(request.getFriendlyName());
-        return LabelAndPosition.of(labelPosition, uiLabel);
-    }
-
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/UiComponentHandlerFx.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/UiComponentHandlerFx.java
deleted file mode 100644
index 3d99096991..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/UiComponentHandlerFx.java
+++ /dev/null
@@ -1,51 +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.causeway.incubator.viewer.javafx.ui.components;
-
-import org.apache.causeway.viewer.commons.model.components.UiComponentFactory;
-
-import javafx.scene.Node;
-
-public interface UiComponentHandlerFx
-extends UiComponentFactory.Handler<Node> {
-
-//    /**
-//     * Converts given {@code bindingConverter} to {@link StringConverter} from JavaFX Universe
-//     * @param <T>
-//     * @param bindingConverter
-//     */
-//    default <T> StringConverter<T> toJavaFxStringConverter(
-//            final @NonNull BindingConverterForManagedObject<T> bindingConverter) {
-//
-//        return new StringConverter<T>() {
-//
-//            @Override
-//            public String toString(T value) {
-//                return bindingConverter.toString(value);
-//            }
-//
-//            @Override
-//            public T fromString(String stringifiedValue) {
-//                return bindingConverter.fromString(stringifiedValue);
-//            }
-//
-//        };
-//    }
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/collections/TableViewFx.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/collections/TableViewFx.java
deleted file mode 100644
index e0bde8d11e..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/collections/TableViewFx.java
+++ /dev/null
@@ -1,203 +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.causeway.incubator.viewer.javafx.ui.components.collections;
-
-import java.util.Optional;
-
-import org.springframework.lang.Nullable;
-
-import org.apache.causeway.applib.annotation.Where;
-import org.apache.causeway.applib.layout.grid.Grid;
-import org.apache.causeway.applib.services.bookmark.Oid;
-import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.commons.internal.base._NullSafe;
-import org.apache.causeway.commons.internal.collections._Multimaps;
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedCollection;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.core.metamodel.object.ManagedObjects;
-import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
-import org.apache.causeway.core.metamodel.spec.feature.MixedIn;
-import org.apache.causeway.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
-import org.apache.causeway.core.metamodel.util.Facets;
-import org.apache.causeway.incubator.viewer.javafx.model.context.UiContextFx;
-import org.apache.causeway.incubator.viewer.javafx.model.util._fx;
-
-import javafx.scene.control.Button;
-import javafx.scene.control.Label;
-import javafx.scene.control.TableView;
-import javafx.scene.layout.VBox;
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-import lombok.NonNull;
-import lombok.val;
-import lombok.extern.log4j.Log4j2;
-
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-@Log4j2
-public class TableViewFx extends VBox {
-
-    private static final String NULL_LITERAL = "<NULL>";
-
-    public static TableViewFx empty() {
-        return new TableViewFx();
-    }
-
-    /**
-     * Constructs a (page-able) {@link Grid} from given {@code collection}
-     * @param collection - of (wrapped) domain objects
-     * @param where
-     */
-    public static TableViewFx fromCollection(
-            final @NonNull UiContextFx uiContext,
-            final @NonNull ManagedObject collection,
-            final @NonNull Where where) {
-
-        val objects = Facets.collectionStream(collection)
-                .collect(Can.toCan());
-
-        return ManagedObjects.commonSpecification(objects)
-                .map(elementSpec->new TableViewFx(uiContext, elementSpec, objects, where))
-                .orElseGet(TableViewFx::empty);
-    }
-
-    /**
-     * Constructs a (page-able) {@link Grid} from given {@code managedCollection}
-     * @param uiContext
-     * @param managedCollection
-     * @param where
-     */
-    public static TableViewFx forManagedCollection(
-            final @NonNull UiContextFx uiContext,
-            final @NonNull ManagedCollection managedCollection,
-            final @NonNull Where where) {
-
-
-        val elementSpec = managedCollection.getElementType();
-        val elements = managedCollection.streamElements()
-                .collect(Can.toCan());
-        return elements.isEmpty()
-                ? empty()
-                : new TableViewFx(uiContext, elementSpec, elements, where);
-    }
-
-    private Can<OneToOneAssociation> columnProperties(final ObjectSpecification elementSpec, final Where where) {
-
-        //TODO honor column order (as per layout)
-        return elementSpec.streamProperties(MixedIn.INCLUDED)
-                .filter(ObjectAssociation.Predicates.staticallyVisible(where))
-                .collect(Can.toCan());
-    }
-
-    /**
-     *
-     * @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(
-            final @NonNull UiContextFx uiContext,
-            final @NonNull ObjectSpecification elementSpec,
-            final @Nullable Can<ManagedObject> objects,
-            final @NonNull Where where) {
-
-        val objectGrid = new TableView<ManagedObject>();
-        super.getChildren().add(objectGrid);
-
-        if (_NullSafe.isEmpty(objects)) {
-            objectGrid.setPlaceholder(new Label("No rows to display"));
-            return;
-        }
-
-        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.<Oid, String, String>newMapMultimap();
-
-        _NullSafe.stream(objects)
-        .forEach(object->{
-
-            val id = object.getBookmark().orElse(null);
-            if(id==null) {
-                return;
-            }
-
-            columnProperties.forEach(property->{
-                table.putElement(id, property.getId(), stringifyPropertyValue(property, object));
-            });
-
-        });
-
-        // object link as first column
-        val firstColumn = _fx.newColumn(objectGrid, "", Button.class);
-
-        firstColumn.setCellValueFactory(cellDataFeatures -> {
-            val objectIcon = uiContext.getJavaFxViewerConfig().getObjectFallbackIcon();
-            val uiObjectRefLink = _fx.bottonForImage(objectIcon, 24, 24);
-            uiObjectRefLink.setOnAction(e->{
-                uiContext.route(cellDataFeatures::getValue);
-            });
-            return _fx.newObjectReadonly(uiObjectRefLink);
-        });
-
-        // property columns
-        columnProperties.forEach(property->{
-            val column = _fx.newColumn(objectGrid, property.getCanonicalFriendlyName(), String.class);
-            column.setCellValueFactory(cellDataFeatures -> {
-                log.debug("about to get property value for property {}", property.getId());
-                val targetObject = cellDataFeatures.getValue();
-
-                val cellValue = targetObject.getBookmark()
-                        .map(id->table.getElement(id, property.getId()))
-                        .orElseGet(()->String.format("table cell not found for object '%s' (property-id: '%s')",
-                                ""+targetObject,
-                                property.getId()));
-
-                //TODO add column description as is provided via property.getColumnDescription()
-
-                return _fx.newStringReadonly(cellValue);
-            });
-        });
-
-        // populate the model
-
-        objects.forEach(objectGrid.getItems()::add);
-
-        //objectGrid.recalculateColumnWidths();
-        //objectGrid.setColumnReorderingAllowed(true);
-
-    }
-
-    private String stringifyPropertyValue(
-            final ObjectAssociation property,
-            final ManagedObject targetObject) {
-
-        try {
-            val propertyValue = property.get(targetObject);
-            return propertyValue == null
-                    ? NULL_LITERAL
-                    : propertyValue.getTitle();
-        } catch (Exception e) {
-            return Optional.ofNullable(e.getMessage()).orElse(e.getClass().getName());
-        }
-
-    }
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/dialog/Dialogs.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/dialog/Dialogs.java
deleted file mode 100644
index 53e4bd0cac..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/dialog/Dialogs.java
+++ /dev/null
@@ -1,141 +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.causeway.incubator.viewer.javafx.ui.components.dialog;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-
-import javafx.scene.Node;
-import javafx.scene.control.Alert;
-import javafx.scene.control.Alert.AlertType;
-import javafx.scene.control.ButtonType;
-import javafx.scene.control.Label;
-import javafx.scene.control.TextArea;
-import javafx.scene.layout.GridPane;
-import javafx.scene.layout.Priority;
-import lombok.val;
-import lombok.experimental.UtilityClass;
-
-@UtilityClass
-public class Dialogs {
-
-    public static void message(String title, String headerText, String contentText){
-        val alert = new Alert(AlertType.INFORMATION);
-        alert.setTitle(title);
-        alert.setHeaderText(headerText);
-        alert.setContentText(contentText);
-
-        alert.showAndWait();
-    }
-
-    public static void message(String title, String headerText, String contentText, Node contentNode){
-        val alert = new Alert(AlertType.INFORMATION);
-        alert.setTitle(title);
-        alert.setHeaderText(headerText);
-        alert.setContentText(contentText);
-
-        alert.getDialogPane().setExpandableContent(contentNode);
-        alert.getDialogPane().setExpanded(true);
-
-        alert.showAndWait();
-    }
-
-    public static void warning(String title, String headerText, String contentText){
-        val alert = new Alert(AlertType.WARNING);
-        alert.setTitle(title);
-        alert.setHeaderText(headerText);
-        alert.setContentText(contentText);
-
-        alert.showAndWait();
-    }
-
-    public static void error(String title, String headerText, String contentText, Exception ex){
-        val alert = new Alert(AlertType.ERROR);
-        alert.setTitle(title);
-        alert.setHeaderText(headerText);
-        alert.setContentText(contentText);
-
-        // Create expandable Exception.
-        val sw = new StringWriter();
-        val pw = new PrintWriter(sw);
-        ex.printStackTrace(pw);
-        val exceptionText = sw.toString();
-
-        val label = new Label("The exception stacktrace was:");
-
-        val textArea = new TextArea(exceptionText);
-        textArea.setEditable(false);
-        textArea.setWrapText(true);
-
-        textArea.setMaxWidth(Double.MAX_VALUE);
-        textArea.setMaxHeight(Double.MAX_VALUE);
-        GridPane.setVgrow(textArea, Priority.ALWAYS);
-        GridPane.setHgrow(textArea, Priority.ALWAYS);
-
-        GridPane expContent = new GridPane();
-        expContent.setMaxWidth(Double.MAX_VALUE);
-        expContent.add(label, 0, 0);
-        expContent.add(textArea, 0, 1);
-
-        // Set expandable Exception into the dialog pane.
-        alert.getDialogPane().setExpandableContent(expContent);
-
-        alert.showAndWait();
-    }
-
-    /**
-     *
-     * @param title
-     * @param headerText
-     * @param contentText
-     * @param confirmLabel eg. Yes
-     * @param denyLabel eg. No
-     * @return whether the dialog's question was confirmed
-     */
-    public static boolean confirm(
-            String title,
-            String headerText,
-            String contentText,
-            String confirmLabel,
-            String denyLabel){
-
-        val alert = new Alert(AlertType.CONFIRMATION);
-        alert.setTitle(title);
-        alert.setHeaderText(headerText);
-        alert.setContentText(contentText);
-
-        val buttonTypeConfirm = new ButtonType(confirmLabel);
-        val buttonTypeDeny = new ButtonType(denyLabel);
-
-        alert.getButtonTypes().setAll(buttonTypeConfirm, buttonTypeDeny);
-
-        ButtonType result = alert.showAndWait()
-                .orElse(null);
-        if (result == buttonTypeConfirm){
-            // ... user chose OK
-            return true;
-        } else {
-            // ... user chose CANCEL or closed the dialog
-            return false;
-        }
-
-    }
-
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/form/FormPane.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/form/FormPane.java
deleted file mode 100644
index 3ce649d703..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/form/FormPane.java
+++ /dev/null
@@ -1,135 +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.causeway.incubator.viewer.javafx.ui.components.form;
-
-import java.util.List;
-
-import org.springframework.lang.Nullable;
-
-import org.apache.causeway.applib.annotation.LabelPosition;
-import org.apache.causeway.commons.internal.collections._Lists;
-import org.apache.causeway.incubator.viewer.javafx.model.util._fx;
-
-import javafx.geometry.Insets;
-import javafx.geometry.Pos;
-import javafx.scene.Node;
-import javafx.scene.layout.FlowPane;
-import javafx.scene.layout.GridPane;
-import lombok.Getter;
-import lombok.NonNull;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-
-public class FormPane extends GridPane {
-
-    @RequiredArgsConstructor(staticName = "of")
-    private static final class FieldAssembly {
-        @Getter private final @NonNull FormPane parent;
-        @Getter private final @NonNull LabelPosition labelPosition;
-        @Getter private final @NonNull Node fieldComponent;
-        private FlowPane associatedActionBar;
-        public FlowPane getAssociatedActionBar() {
-            if(associatedActionBar==null) {
-                associatedActionBar = new FlowPane();
-                _fx.toolbarLayoutPropertyAssociated(associatedActionBar);
-                switch(labelPosition) {
-                case NONE:
-                case TOP:
-                case RIGHT:
-                    getParent().addRow(associatedActionBar);
-                    break;
-                case LEFT:
-                case DEFAULT:
-                default:
-                    getParent().addRow(null, associatedActionBar);
-                    break;
-                }
-            }
-            return associatedActionBar;
-        }
-    }
-
-    private final List<FieldAssembly> fields = _Lists.newArrayList();
-    private int rowCount = 0;
-
-    public FormPane() {
-        super();
-        val grid = grid();
-        grid.setAlignment(Pos.CENTER);
-        grid.setHgap(10);
-        grid.setVgap(10);
-        grid.setPadding(new Insets(25, 25, 25, 25));
-    }
-
-    public FormPane addField(LabelPosition labelPosition, Node uiFormLabel, Node uiFormField) {
-
-        fields.add(FieldAssembly.of(this, labelPosition, uiFormField));
-
-        switch(labelPosition) {
-        case NONE:
-            addRow(uiFormField);
-            break;
-        case TOP:
-            addRow(uiFormLabel);
-            addRow(uiFormField);
-            break;
-        case RIGHT:
-            addRow(uiFormField, uiFormLabel);
-            break;
-        case LEFT:
-        case DEFAULT:
-        default:
-            addRow(uiFormLabel, uiFormField);
-            break;
-        }
-        return this;
-    }
-
-    public FormPane addActionLink(Node uiButton) {
-        val actionBarAssociatedWithField = _Lists.lastElementIfAny(fields).getAssociatedActionBar();
-        _fx.add(actionBarAssociatedWithField, uiButton);
-        return this;
-    }
-
-
-    // -- HELPER
-
-    private GridPane grid() {
-        return this;
-    }
-
-    private void addRow(@NonNull Node spanningNode) {
-        grid().add(spanningNode, 0, rowCount, 2, 1);
-        ++rowCount;
-    }
-
-    private void addRow(@Nullable Node left, @NonNull Node right) {
-        if(left!=null) {
-            grid().add(left, 0, rowCount);
-        }
-        grid().add(right, 1, rowCount);
-        ++rowCount;
-    }
-
-
-
-
-
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/form/field/CustomFieldFx.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/form/field/CustomFieldFx.java
deleted file mode 100644
index 2d8da30b15..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/form/field/CustomFieldFx.java
+++ /dev/null
@@ -1,88 +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.causeway.incubator.viewer.javafx.ui.components.form.field;
-
-import java.util.Objects;
-
-import javafx.beans.property.ObjectProperty;
-import javafx.beans.property.SimpleObjectProperty;
-import javafx.scene.Node;
-import javafx.scene.control.Label;
-import javafx.scene.layout.Pane;
-
-public abstract class CustomFieldFx<T> extends Pane {
-
-    protected final Label label = new Label();
-
-    private final ObjectProperty<T> value = new SimpleObjectProperty<T>();
-
-    public void setLabel(String label) {
-        this.label.setText(label);
-        getChildren().add(this.label);
-    }
-
-
-//    /**
-//     * Sets the value of this object. If the new value is not equal to
-//     * {@code getValue()}, fires a value change event. May throw
-//     * {@code IllegalArgumentException} if the value is not acceptable.
-//     * <p>
-//     * <i>Implementation note:</i> the implementing class should document
-//     * whether null values are accepted or not, and override
-//     * {@link #getEmptyValue()} if the empty value is not {@code null}.
-//     *
-//     * @param newValue
-//     *            the new value
-//     * @throws IllegalArgumentException
-//     *             if the value is invalid
-//     */
-    public void setValue(T newValue) {
-        if(Objects.equals(value.getValue(), newValue)) {
-            return; // ignore
-        }
-        value.setValue(newValue);
-        setPresentationValue(newValue);
-    }
-
-    protected <N extends Node> N add(N node) {
-        getChildren().add(node);
-        return node;
-    }
-
-    /**
-     * This method should return the value of the field, based on value of the internal fields.
-     *
-     * @return new value of the field.
-     */
-    protected abstract T generateModelValue();
-
-
-    /**
-     * This method should be implemented to set the value of the fields contained
-     * in this custom field according to the value of the parameter.
-     * It can also be use to show the value to the user in some way,
-     * like placing it in an element contained on the field.
-     *
-     * @param value - the new presentation value.
-     */
-    protected abstract void setPresentationValue(T value);
-
-
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/markup/MarkupFieldFactory.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/markup/MarkupFieldFactory.java
deleted file mode 100644
index f7772fa038..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/markup/MarkupFieldFactory.java
+++ /dev/null
@@ -1,188 +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.causeway.incubator.viewer.javafx.ui.components.markup;
-
-import java.util.OptionalInt;
-import java.util.function.Consumer;
-
-import javax.inject.Inject;
-
-import org.w3c.dom.events.EventTarget;
-import org.w3c.dom.html.HTMLAnchorElement;
-
-import org.apache.causeway.applib.annotation.PriorityPrecedence;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.UiComponentHandlerFx;
-import org.apache.causeway.viewer.commons.model.components.UiComponentFactory.ComponentRequest;
-
-import javafx.application.HostServices;
-import javafx.application.Platform;
-import javafx.collections.ListChangeListener;
-import javafx.concurrent.Worker.State;
-import javafx.geometry.HPos;
-import javafx.geometry.VPos;
-import javafx.scene.Node;
-import javafx.scene.layout.Region;
-import javafx.scene.web.WebEngine;
-import javafx.scene.web.WebView;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-import lombok.extern.log4j.Log4j2;
-import netscape.javascript.JSException;
-
-@org.springframework.stereotype.Component
-@javax.annotation.Priority(PriorityPrecedence.MIDPOINT)
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-public class MarkupFieldFactory implements UiComponentHandlerFx {
-
-    private final HostServices hostServices;
-
-    @Override
-    public boolean isHandling(final ComponentRequest request) {
-        //return request.getFeatureTypeSpec().hasValueSemantics(HtmlRenderer.class);
-        //TODO
-        return false;
-    }
-
-    @Override
-    public Node handle(final ComponentRequest request) {
-
-//        val pojo = request.getFeatureValue(Object.class);
-//
-//        val markupHtml = request.getFeatureTypeSpec().streamValueSemantics(HtmlRenderer.class)
-//        .map(htmlRenderer->htmlRenderer.titlePresentation(null, pojo))
-//        .filter(_NullSafe::isPresent)
-//        .findFirst()
-//        .orElse("");
-//
-//        return new WebViewFitContent(hostServices::showDocument, markupHtml);
-        return null;
-    }
-
-    // -- HELPER
-
-    /**
-     * Unfortunately we have no simple means of auto-fitting a WebView, so we need a wrapper,
-     * that executes some JavaScript on the rendered content, do determine the preferred height.
-     * <p>
-     * @see <a href="https://stackoverflow.com/questions/25838965/size-javafx-webview-to-the-minimum-size-needed-by-the-document-body">autofitting (stackoverflow)</a>
-     * @see <a href="https://stackoverflow.com/questions/15555510/javafx-stop-opening-url-in-webview-open-in-browser-instead">href handling (stackoverflow)</a>
-     *
-     * @since Jun 29, 2020
-     */
-    @Log4j2
-    private static final class WebViewFitContent extends Region {
-
-        /*sonar-ignore-on*/
-
-        private final Consumer<String> hrefHandler;
-        private final WebView webview = new WebView();
-        private final WebEngine webEngine = webview.getEngine();
-
-        public WebViewFitContent(final Consumer<String> hrefHandler, final String content) {
-
-            this.hrefHandler = hrefHandler;
-
-            webview.setPrefHeight(5);
-
-            widthProperty().addListener((e, o, newWidth) -> {
-                    webview.setPrefWidth(newWidth.doubleValue());
-                    Platform.runLater(this::adjustHeight);
-            });
-
-            webview.getEngine().getLoadWorker().stateProperty().addListener((e, o, newState) -> {
-                if (newState == State.SUCCEEDED) {
-                    Platform.runLater(this::adjustHeight);
-                    Platform.runLater(this::redirectLinksToExternalBrowser);
-                }
-            });
-
-            webview.getChildrenUnmodifiable().addListener((final ListChangeListener.Change<? extends Node> change) -> {
-                val scrolls = webview.lookupAll(".scroll-bar");
-                for (val scroll : scrolls) {
-                    scroll.setVisible(false);
-                }
-            });
-
-            setContent(content);
-            getChildren().add(webview);
-        }
-
-        @Override
-        protected void layoutChildren() {
-            layoutInArea(webview, 0, 0, getWidth(), getHeight(), 0, HPos.CENTER, VPos.CENTER);
-        }
-
-        public void setContent(final String content) {
-            Platform.runLater(()->webEngine.loadContent(getHtml(content), "text/html"));
-            //Platform.runLater(this::adjustHeight);
-        }
-
-        private void redirectLinksToExternalBrowser() {
-            val document = webview.getEngine().getDocument();
-            if(document==null) {
-                return;
-            }
-            val nodeList = document.getElementsByTagName("a");
-            for (int i = 0; i < nodeList.getLength(); i++) {
-                val node = (EventTarget) nodeList.item(i);
-                node.addEventListener("click", evt -> {
-                    val target = evt.getCurrentTarget();
-                    val anchorElement = (HTMLAnchorElement) target;
-                    val href = anchorElement.getHref();
-                    // handle opening href URL
-                    //log.info("about to handle href {}", href); // rather not log this, might be data!
-                    hrefHandler.accept(href);
-                    evt.preventDefault();
-                }, false);
-            }
-        }
-
-
-        private void adjustHeight() {
-            getContentHeight().ifPresent(contentHeight->webview.setPrefHeight(contentHeight + 20));
-        }
-
-        private OptionalInt getContentHeight() {
-            try {
-                Object result = webEngine.executeScript(
-                        "var myDiv = document.getElementById('mydiv');" +
-                                "if (myDiv != null) myDiv.offsetHeight");
-                if (result instanceof Integer) {
-                    final int height = ((Integer) result).intValue();
-                    return OptionalInt.of(height);
-                }
-            } catch (JSException e) {
-                log.error("failed to execute JavaScript to determine WebView's height", e);
-            }
-            return OptionalInt.empty();
-        }
-
-
-
-        private String getHtml(final String content) {
-            return "<html><body>" +
-                    "<div id=\"mydiv\">" + content + "</div>" +
-                    "</body></html>";
-        }
-        /*sonar-ignore-off*/
-
-    }
-
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/number/NumberFieldFactory.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/number/NumberFieldFactory.java
deleted file mode 100644
index 22b86570aa..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/number/NumberFieldFactory.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.causeway.incubator.viewer.javafx.ui.components.number;
-
-import javax.inject.Inject;
-
-import org.springframework.util.ClassUtils;
-
-import org.apache.causeway.applib.annotation.PriorityPrecedence;
-import org.apache.causeway.incubator.viewer.javafx.model.binding.BindingsFx;
-import org.apache.causeway.incubator.viewer.javafx.model.util._fx;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.UiComponentHandlerFx;
-import org.apache.causeway.viewer.commons.model.components.UiComponentFactory.ComponentRequest;
-
-import javafx.scene.Node;
-import javafx.scene.control.TextField;
-import javafx.scene.layout.VBox;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-
-@org.springframework.stereotype.Component
-@javax.annotation.Priority(PriorityPrecedence.MIDPOINT)
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-//@Log4j2
-public class NumberFieldFactory implements UiComponentHandlerFx {
-
-    @Override
-    public boolean isHandling(final ComponentRequest request) {
-        val type = request.getFeatureTypeSpec().getCorrespondingClass();
-        return Number.class.isAssignableFrom(
-                ClassUtils.resolvePrimitiveIfNecessary(type));
-    }
-
-    @Override
-    public Node handle(final ComponentRequest request) {
-
-        val uiComponent = new VBox();
-        val uiField = _fx.add(uiComponent, new TextField());
-        val uiValidationFeedback = _fx.newValidationFeedback(uiComponent);
-
-        val managedValue = request.getManagedValue();
-        BindingsFx.bindParsableBidirectional(
-                uiField.textProperty(),
-                managedValue.getValueAsParsableText());
-        uiField.editableProperty().set(true);
-
-        BindingsFx.bindValidationFeeback(
-                uiValidationFeedback.textProperty(),
-                uiValidationFeedback.visibleProperty(),
-                managedValue.getValidationMessage());
-
-        return uiComponent;
-    }
-
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/object/ObjectViewFx.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/object/ObjectViewFx.java
deleted file mode 100644
index 7c3b5aa5a7..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/object/ObjectViewFx.java
+++ /dev/null
@@ -1,266 +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.causeway.incubator.viewer.javafx.ui.components.object;
-
-import java.util.function.Consumer;
-
-import org.apache.causeway.applib.annotation.Where;
-import org.apache.causeway.applib.layout.component.ActionLayoutData;
-import org.apache.causeway.applib.layout.component.CollectionLayoutData;
-import org.apache.causeway.applib.layout.component.DomainObjectLayoutData;
-import org.apache.causeway.applib.layout.component.FieldSet;
-import org.apache.causeway.applib.layout.component.PropertyLayoutData;
-import org.apache.causeway.applib.layout.grid.bootstrap.BSClearFix;
-import org.apache.causeway.applib.layout.grid.bootstrap.BSCol;
-import org.apache.causeway.applib.layout.grid.bootstrap.BSRow;
-import org.apache.causeway.applib.layout.grid.bootstrap.BSTab;
-import org.apache.causeway.applib.layout.grid.bootstrap.BSTabGroup;
-import org.apache.causeway.commons.internal.assertions._Assert;
-import org.apache.causeway.core.metamodel.interactions.managed.ActionInteraction;
-import org.apache.causeway.core.metamodel.interactions.managed.CollectionInteraction;
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.causeway.core.metamodel.interactions.managed.PropertyInteraction;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.core.metamodel.object.ManagedObjects;
-import org.apache.causeway.core.metamodel.object.MmTitleUtil;
-import org.apache.causeway.incubator.viewer.javafx.model.context.UiContextFx;
-import org.apache.causeway.incubator.viewer.javafx.model.util._fx;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.UiComponentFactoryFx;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.collections.TableViewFx;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.form.FormPane;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.panel.TitledPanel;
-import org.apache.causeway.viewer.commons.model.components.UiComponentFactory;
-import org.apache.causeway.viewer.commons.model.decorators.DisablingDecorator.DisablingDecorationModel;
-import org.apache.causeway.viewer.commons.model.layout.UiGridLayout;
-
-import javafx.scene.control.TabPane;
-import javafx.scene.layout.Pane;
-import javafx.scene.layout.VBox;
-import lombok.NonNull;
-import lombok.val;
-import lombok.extern.log4j.Log4j2;
-
-@Log4j2
-public class ObjectViewFx extends VBox {
-
-    public static ObjectViewFx fromObject(
-            final @NonNull UiContextFx uiContext,
-            final @NonNull UiComponentFactoryFx uiComponentFactory,
-            final @NonNull Consumer<ManagedAction> actionEventHandler,
-            final @NonNull ManagedObject managedObject) {
-        return new ObjectViewFx(uiContext, uiComponentFactory, actionEventHandler, managedObject);
-    }
-
-    /**
-     * Constructs given domain object's view, with all its visible members and actions.
-     * @param managedObject - domain object
-     */
-    protected ObjectViewFx(
-            final UiContextFx uiContext,
-            final UiComponentFactoryFx uiComponentFactory,
-            final Consumer<ManagedAction> actionEventHandler,
-            final ManagedObject managedObject) {
-
-        if(ManagedObjects.isNullOrUnspecifiedOrEmpty(managedObject)) {
-            log.warn("invalid managedObject, skipping");
-            return;
-        }
-
-        log.info("binding object interaction to owner {}", managedObject.getSpecification().getFeatureIdentifier());
-        _Assert.assertTrue(uiContext.getInteractionService().isInInteraction(), "requires an active interaction");
-
-        val objectTitle = MmTitleUtil.titleOf(managedObject);
-
-        val uiGridLayout = UiGridLayout.bind(managedObject);
-
-        val gridVisitor = new UiGridLayout.Visitor<Pane, TabPane>(this) {
-
-            @Override
-            protected void onObjectTitle(final Pane container, final DomainObjectLayoutData domainObjectData) {
-                val label = _fx.h2(_fx.newLabel(container, objectTitle));
-                label.maxWidthProperty().bind(
-                        container.widthProperty());
-            }
-
-            @Override
-            protected Pane newRow(final Pane container, final BSRow bsRow) {
-                val uiRow = _fx.newFlowPane(container);
-                return uiRow;
-            }
-
-            @Override
-            protected Pane newCol(final Pane container, final BSCol bscol) {
-
-                val uiCol = _fx.newVBox(container);
-
-                // note: also account for insets and padding, assuming that 98% seems reasonable
-                double realtiveWidthWithRespectToContainer = bscol.getSpan()*0.98/12;
-
-                uiCol.prefWidthProperty().bind(
-                        container.widthProperty().multiply(realtiveWidthWithRespectToContainer));
-
-                uiCol.maxWidthProperty().bind(
-                        container.widthProperty().multiply(realtiveWidthWithRespectToContainer));
-
-                uiCol.setFillWidth(true);
-
-                return uiCol;
-            }
-
-            @Override
-            protected Pane newActionPanel(final Pane container) {
-                val uiActionPanel = _fx.newFlowPane(container);
-                _fx.toolbarLayout(uiActionPanel);
-
-                return uiActionPanel;
-            }
-
-            @Override
-            protected TabPane newTabGroup(final Pane container, final BSTabGroup tabGroupData) {
-                val uiTabGroup = _fx.newTabGroup(container);
-                return uiTabGroup;
-            }
-
-            @Override
-            protected Pane newTab(final TabPane container, final BSTab tabData) {
-                val uiTab = _fx.newTab(container, tabData.getName());
-                val uiTabContentPane = new VBox();
-                uiTab.setContent(uiTabContentPane);
-                return uiTabContentPane;
-            }
-
-            @Override
-            protected Pane newFieldSet(final Pane container, final FieldSet fieldSetData) {
-
-                val titledPanel = _fx.add(container, new TitledPanel(fieldSetData.getName()));
-
-                // handle associated actions
-                for(val actionData : fieldSetData.getActions()) {
-                    onAction(titledPanel.getUiActionBar(), actionData);
-                }
-
-                val uiFieldSet = _fx.add(titledPanel, new FormPane());
-                return uiFieldSet;
-            }
-
-
-            @Override
-            protected void onClearfix(final Pane container, final BSClearFix clearFixData) {
-                // TODO Auto-generated method stub
-            }
-
-            @Override
-            protected void onAction(final Pane container, final ActionLayoutData actionData) {
-
-                val owner = managedObject;
-                val interaction = ActionInteraction.start(owner, actionData.getId(), Where.OBJECT_FORMS);
-                interaction.checkVisibility()
-                .getManagedAction()
-                .ifPresent(managedAction -> {
-
-                    interaction.checkUsability();
-
-                    val uiButton = uiComponentFactory.buttonFor(
-                                    UiComponentFactory.ButtonRequest.of(
-                                        managedAction,
-                                        DisablingDecorationModel.of(interaction),
-                                        actionEventHandler));
-
-                    if(container instanceof FormPane) {
-                        ((FormPane)container).addActionLink(uiButton);
-                    } else {
-                        _fx.add(container, uiButton);
-                    }
-
-
-                });
-            }
-
-            @Override
-            protected void onProperty(final Pane container, final PropertyLayoutData propertyData) {
-
-                val owner = managedObject;
-
-                val formPane = (FormPane) container;
-
-                val interaction = PropertyInteraction.start(owner, propertyData.getId(), Where.OBJECT_FORMS);
-                interaction.checkVisibility()
-                .getManagedProperty()
-                .ifPresent(managedProperty -> {
-
-                    interaction.checkUsability();
-
-                    val propNeg = managedProperty.startNegotiation();
-
-                    val request = UiComponentFactory.ComponentRequest.of(
-                            propNeg,
-                            managedProperty,
-                            DisablingDecorationModel.of(interaction));
-
-                    val uiPropertyField = uiComponentFactory.componentFor(request);
-                    val labelAndPostion = uiComponentFactory.labelFor(request);
-
-                    formPane.addField(
-                            labelAndPostion.getLabelPosition(),
-                            labelAndPostion.getUiLabel(),
-                            uiPropertyField);
-
-                    // handle associated actions
-                    for(val actionData : propertyData.getActions()) {
-                        onAction(container, actionData);
-                    }
-
-                });
-            }
-
-            @Override
-            protected void onCollection(final Pane container, final CollectionLayoutData collectionData) {
-
-                val owner = managedObject;
-
-                CollectionInteraction.start(owner, collectionData.getId(), Where.OBJECT_FORMS)
-                .checkVisibility()
-                .getManagedCollection()
-                .ifPresent(managedCollection -> {
-
-                    val titledPanel = _fx.add(container, new TitledPanel(managedCollection.getFriendlyName()));
-
-                    // handle associated actions
-                    for(val actionData : collectionData.getActions()) {
-                        onAction(titledPanel.getUiActionBar(), actionData);
-                    }
-
-                    _fx.add(titledPanel,
-                            TableViewFx.forManagedCollection(
-                                    uiContext,
-                                    managedCollection,
-                                    Where.PARENTED_TABLES));
-
-                });
-
-            }
-
-        };
-
-        uiGridLayout.visit(gridVisitor);
-        //setWidthFull();
-
-    }
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/objectref/ObjectReferenceFieldFactory.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/objectref/ObjectReferenceFieldFactory.java
deleted file mode 100644
index f343a00a01..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/objectref/ObjectReferenceFieldFactory.java
+++ /dev/null
@@ -1,77 +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.causeway.incubator.viewer.javafx.ui.components.objectref;
-
-import javax.inject.Inject;
-
-import org.apache.causeway.applib.annotation.PriorityPrecedence;
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedParameter;
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedProperty;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.UiComponentHandlerFx;
-import org.apache.causeway.viewer.commons.model.components.UiComponentFactory.ComponentRequest;
-
-import javafx.scene.Node;
-import javafx.scene.control.Label;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-
-@org.springframework.stereotype.Component
-@javax.annotation.Priority(PriorityPrecedence.MIDPOINT)
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-public class ObjectReferenceFieldFactory implements UiComponentHandlerFx {
-
-    @Override
-    public boolean isHandling(final ComponentRequest request) {
-        return request.getFeatureTypeSpec().isEntityOrViewModelOrAbstract()
-                || request.getFeatureType().isEnum();
-    }
-
-    @Override
-    public Node handle(final ComponentRequest request) {
-
-        //TODO 1) move all the logic that is in the request to the underlying ManagedProperty
-        // 2) pass the ManagedProperty over with the request object
-        // 3) design for an API to bind a ManagedProperty to a FormField, also make sure this works
-        // with Vaadin's FormLayout/Field API
-//        val textValue = request.getFeatureValue(String.class)
-//                .orElse("");
-
-        val uiComponent = new Label(request.getManagedFeature().getIdentifier().toString());
-
-        if(request.getManagedFeature() instanceof ManagedParameter) {
-
-            val managedParameter = (ManagedParameter)request.getManagedFeature();
-
-//            uiComponent.textProperty().
-//
-//            managedParameter.validate(proposedValue)
-
-            //TODO bind to parameter model
-
-        } else if(request.getManagedFeature() instanceof ManagedProperty) {
-
-            val managedProperty = (ManagedProperty)request.getManagedFeature();
-            //TODO bind to property model
-        }
-
-        return uiComponent;
-    }
-
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/other/FallbackFieldFactory.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/other/FallbackFieldFactory.java
deleted file mode 100644
index 3e42a8b409..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/other/FallbackFieldFactory.java
+++ /dev/null
@@ -1,45 +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.causeway.incubator.viewer.javafx.ui.components.other;
-
-import org.apache.causeway.applib.annotation.PriorityPrecedence;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.UiComponentHandlerFx;
-import org.apache.causeway.viewer.commons.model.components.UiComponentFactory.ComponentRequest;
-
-import javafx.scene.Node;
-import javafx.scene.control.Label;
-import lombok.val;
-
-@org.springframework.stereotype.Component
-@javax.annotation.Priority(PriorityPrecedence.LAST)
-public class FallbackFieldFactory implements UiComponentHandlerFx {
-
-    @Override
-    public boolean isHandling(ComponentRequest request) {
-        return true; // the last handler in the chain
-    }
-
-    @Override
-    public Node handle(ComponentRequest request) {
-
-        val spec = request.getFeatureTypeSpec();
-        return new Label(spec.getCorrespondingClass().getSimpleName() + " type not handled");
-    }
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/panel/TitledPanel.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/panel/TitledPanel.java
deleted file mode 100644
index 59effaad18..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/panel/TitledPanel.java
+++ /dev/null
@@ -1,53 +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.causeway.incubator.viewer.javafx.ui.components.panel;
-
-import org.apache.causeway.commons.internal.base._Strings;
-import org.apache.causeway.incubator.viewer.javafx.model.util._fx;
-
-import javafx.scene.control.Label;
-import javafx.scene.layout.FlowPane;
-import javafx.scene.layout.VBox;
-import lombok.Getter;
-
-public class TitledPanel extends VBox {
-
-    @Getter private final Label uiLabel;
-    private FlowPane uiActionBar;
-
-    public TitledPanel(String label) {
-        super();
-        if(!_Strings.isEmpty(label)) {
-            uiLabel = _fx.newLabel(getUiActionBar(), label);
-            _fx.h3(uiLabel);
-        } else {
-            uiLabel = null;
-        }
-        super.setFillWidth(true);
-    }
-
-    public FlowPane getUiActionBar() {
-        if(uiActionBar==null) {
-            uiActionBar = _fx.newFlowPane(this);
-            _fx.toolbarLayout(uiActionBar);
-        }
-        return uiActionBar;
-    }
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/temporal/TemporalFieldFactory.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/temporal/TemporalFieldFactory.java
deleted file mode 100644
index 2380cd6c2c..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/temporal/TemporalFieldFactory.java
+++ /dev/null
@@ -1,78 +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.causeway.incubator.viewer.javafx.ui.components.temporal;
-
-import java.time.LocalDate;
-
-import javax.inject.Inject;
-
-import org.apache.causeway.applib.annotation.PriorityPrecedence;
-import org.apache.causeway.applib.value.semantics.TemporalValueSemantics;
-import org.apache.causeway.applib.value.semantics.TemporalValueSemantics.OffsetCharacteristic;
-import org.apache.causeway.applib.value.semantics.TemporalValueSemantics.TemporalCharacteristic;
-import org.apache.causeway.core.metamodel.util.Facets;
-import org.apache.causeway.incubator.viewer.javafx.model.binding.BindingsFx;
-import org.apache.causeway.incubator.viewer.javafx.model.util._fx;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.UiComponentHandlerFx;
-import org.apache.causeway.viewer.commons.model.binding.BindingConverterForManagedObject;
-import org.apache.causeway.viewer.commons.model.components.UiComponentFactory.ComponentRequest;
-
-import javafx.scene.Node;
-import javafx.scene.control.DatePicker;
-import javafx.scene.layout.VBox;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-
-@org.springframework.stereotype.Component
-@javax.annotation.Priority(PriorityPrecedence.MIDPOINT)
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-public class TemporalFieldFactory implements UiComponentHandlerFx {
-
-    @Override
-    public boolean isHandling(final ComponentRequest request) {
-        return Facets.valueStreamSemantics(request.getFeatureTypeSpec(), TemporalValueSemantics.class)
-                .anyMatch(valueSemantics->
-                        valueSemantics.getTemporalCharacteristic()==TemporalCharacteristic.DATE_ONLY
-                        && valueSemantics.getOffsetCharacteristic()==OffsetCharacteristic.LOCAL);
-    }
-
-    @Override
-    public Node handle(final ComponentRequest request) {
-
-        val uiComponent = new VBox();
-        val uiField = _fx.add(uiComponent, new DatePicker());
-        val uiValidationFeedback = _fx.newValidationFeedback(uiComponent);
-
-        val managedValue = request.getManagedValue();
-        BindingsFx.bindBidirectional(
-                uiField.valueProperty(),
-                managedValue.getValue(),
-                BindingConverterForManagedObject
-                    .<LocalDate>of(request.getFeatureTypeSpec()).reverse());
-        uiField.editableProperty().set(true);
-
-        BindingsFx.bindValidationFeeback(
-                uiValidationFeedback.textProperty(),
-                uiValidationFeedback.visibleProperty(),
-                managedValue.getValidationMessage());
-
-        return uiComponent;
-    }
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/text/TextFieldFactory.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/text/TextFieldFactory.java
deleted file mode 100644
index b6e838d633..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/text/TextFieldFactory.java
+++ /dev/null
@@ -1,66 +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.causeway.incubator.viewer.javafx.ui.components.text;
-
-import javax.inject.Inject;
-
-import org.apache.causeway.applib.annotation.PriorityPrecedence;
-import org.apache.causeway.incubator.viewer.javafx.model.binding.BindingsFx;
-import org.apache.causeway.incubator.viewer.javafx.model.util._fx;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.UiComponentHandlerFx;
-import org.apache.causeway.viewer.commons.model.components.UiComponentFactory.ComponentRequest;
-
-import javafx.scene.Node;
-import javafx.scene.control.TextField;
-import javafx.scene.layout.VBox;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-
-@org.springframework.stereotype.Component
-@javax.annotation.Priority(PriorityPrecedence.MIDPOINT)
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-public class TextFieldFactory implements UiComponentHandlerFx {
-
-    @Override
-    public boolean isHandling(final ComponentRequest request) {
-        return request.hasFacetForValueType(String.class);
-    }
-
-    @Override
-    public Node handle(final ComponentRequest request) {
-
-        val uiComponent = new VBox();
-        val uiField = _fx.add(uiComponent, new TextField());
-        val uiValidationFeedback = _fx.newValidationFeedback(uiComponent);
-
-        val managedValue = request.getManagedValue();
-        BindingsFx.bindParsableBidirectional(
-                uiField.textProperty(),
-                managedValue.getValueAsParsableText());
-        uiField.editableProperty().set(true);
-
-        BindingsFx.bindValidationFeeback(
-                uiValidationFeedback.textProperty(),
-                uiValidationFeedback.visibleProperty(),
-                managedValue.getValidationMessage());
-
-        return uiComponent;
-    }
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/disabling/DisablingDecoratorForButton.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/disabling/DisablingDecoratorForButton.java
deleted file mode 100644
index 01b189a079..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/disabling/DisablingDecoratorForButton.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.causeway.incubator.viewer.javafx.ui.decorator.disabling;
-
-import javax.inject.Inject;
-
-import org.springframework.stereotype.Component;
-
-import org.apache.causeway.viewer.commons.model.decorators.DisablingDecorator;
-
-import javafx.scene.control.Button;
-import javafx.scene.control.Tooltip;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-
-@Component
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-public class DisablingDecoratorForButton implements DisablingDecorator<Button> {
-
-    @Override
-    public void decorate(final Button uiButton, final DisablingDecorationModel disableUiModel) {
-
-        val reason = disableUiModel.getReason();
-
-        uiButton.setTooltip(new Tooltip(reason));
-        uiButton.disableProperty().set(true);
-        uiButton.setOnAction(null);
-
-        //uiComponent.getStyleClass().add("button-disabled");
-
-    }
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/disabling/DisablingDecoratorForFormField.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/disabling/DisablingDecoratorForFormField.java
deleted file mode 100644
index 567051d28e..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/disabling/DisablingDecoratorForFormField.java
+++ /dev/null
@@ -1,50 +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.causeway.incubator.viewer.javafx.ui.decorator.disabling;
-
-import javax.inject.Inject;
-
-import org.springframework.stereotype.Component;
-
-import org.apache.causeway.viewer.commons.model.decorators.DisablingDecorator;
-
-import javafx.scene.Node;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-
-@Component
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-public class DisablingDecoratorForFormField implements DisablingDecorator<Node> {
-
-    @Override
-    public void decorate(final Node formField, final DisablingDecorationModel disableUiModel) {
-
-        val reason = disableUiModel.getReason();
-
-            //formField.setDisabledReason(); //TODO lookup vaadin api as rolemodel
-            //formField.getStyleClass().add("button-disabled");
-            //uiButton.setTooltip(new Tooltip(reason));
-            //uiButton.disableProperty().set(true);
-
-
-
-    }
-
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/icon/IconDecoratorForLabeled.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/icon/IconDecoratorForLabeled.java
deleted file mode 100644
index c7e5dc04b1..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/icon/IconDecoratorForLabeled.java
+++ /dev/null
@@ -1,57 +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.causeway.incubator.viewer.javafx.ui.decorator.icon;
-
-import java.util.Optional;
-
-import javax.inject.Inject;
-
-import org.springframework.stereotype.Component;
-
-import org.apache.causeway.incubator.viewer.javafx.model.icon.IconService;
-import org.apache.causeway.incubator.viewer.javafx.model.util._fx;
-import org.apache.causeway.viewer.commons.model.decorators.IconDecorator;
-
-import javafx.scene.control.Labeled;
-import javafx.scene.image.Image;
-import javafx.scene.image.ImageView;
-import lombok.RequiredArgsConstructor;
-
-@Component
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-public class IconDecoratorForLabeled implements IconDecorator<Labeled, Labeled> {
-
-    private final IconService iconService;
-
-    @Override
-    public Labeled decorate(final Labeled uiComponent, final Optional<FontAwesomeDecorationModel> fontAwesomeDecorationModel) {
-        fontAwesomeDecorationModel.ifPresent(fa->{
-            var icon = iconService.fontAwesome(fa);
-            icon
-            .map(this::iconForImage)
-            .ifPresent(uiComponent::setGraphic);
-        });
-        return uiComponent;
-    }
-
-    private ImageView iconForImage(final Image image) {
-        return _fx.iconForImage(image, 16, 16);
-    }
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/icon/IconDecoratorForMenuItem.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/icon/IconDecoratorForMenuItem.java
deleted file mode 100644
index 33b4c67e96..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/icon/IconDecoratorForMenuItem.java
+++ /dev/null
@@ -1,59 +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.causeway.incubator.viewer.javafx.ui.decorator.icon;
-
-import java.util.Optional;
-
-import javax.inject.Inject;
-
-import org.springframework.stereotype.Component;
-
-import org.apache.causeway.incubator.viewer.javafx.model.icon.IconService;
-import org.apache.causeway.incubator.viewer.javafx.model.util._fx;
-import org.apache.causeway.viewer.commons.model.decorators.IconDecorator;
-
-import javafx.scene.control.MenuItem;
-import javafx.scene.image.Image;
-import javafx.scene.image.ImageView;
-import lombok.RequiredArgsConstructor;
-
-@Component
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-public class IconDecoratorForMenuItem implements IconDecorator<MenuItem, MenuItem> {
-
-    private final IconService iconService;
-
-    @Override
-    public MenuItem decorate(final MenuItem menuItem, final Optional<FontAwesomeDecorationModel> fontAwesomeDecorationModel) {
-        // TODO honor icon position
-
-        fontAwesomeDecorationModel.ifPresent(fa->{
-            var icon = iconService.fontAwesome(fa);
-            icon
-            .map(this::iconForImage)
-            .ifPresent(menuItem::setGraphic);
-        });
-        return menuItem;
-    }
-
-    private ImageView iconForImage(final Image image) {
-        return _fx.iconForImage(image, 16, 16);
-    }
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/icon/IconServiceDefault.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/icon/IconServiceDefault.java
deleted file mode 100644
index e9aa110c7b..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/icon/IconServiceDefault.java
+++ /dev/null
@@ -1,65 +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.causeway.incubator.viewer.javafx.ui.decorator.icon;
-
-import java.util.Map;
-import java.util.Optional;
-
-import javax.annotation.PostConstruct;
-import javax.inject.Inject;
-
-import org.springframework.stereotype.Service;
-
-import org.apache.causeway.commons.internal.collections._Maps;
-import org.apache.causeway.incubator.viewer.javafx.model.icon.IconService;
-import org.apache.causeway.viewer.commons.model.decorators.IconDecorator.FontAwesomeDecorationModel;
-
-import javafx.scene.image.Image;
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.log4j.Log4j2;
-
-@Service
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-@Getter
-@Log4j2
-public class IconServiceDefault implements IconService {
-
-    private final Map<String, Image> faIconCache = _Maps.newHashMap();
-
-    @PostConstruct
-    public void init() {
-        log.info("about to initialize");
-       // TODO preload fa icon cache
-       // fontawesome SVGs can be downloaded
-       // for SVG to Image conversion see
-       // see https://stackoverflow.com/questions/26948700/convert-svg-to-javafx-image
-       // see also https://www.jensd.de/wordpress/?p=132
-    }
-
-    public Optional<Image> fontAwesome(final String faCssClassName) {
-        return Optional.ofNullable(faIconCache.get(faCssClassName));
-    }
-
-    @Override
-    public Optional<Image> fontAwesome(final FontAwesomeDecorationModel fontAwesomeDecorationModel) {
-        return Optional.ofNullable(faIconCache.get(fontAwesomeDecorationModel.getCssClassesSpaceSeparated()));
-    }
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/prototyping/PrototypingDecoratorForButton.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/prototyping/PrototypingDecoratorForButton.java
deleted file mode 100644
index 1ac4cb80fd..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/prototyping/PrototypingDecoratorForButton.java
+++ /dev/null
@@ -1,57 +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.causeway.incubator.viewer.javafx.ui.decorator.prototyping;
-
-import javax.inject.Inject;
-
-import org.springframework.stereotype.Component;
-
-import org.apache.causeway.incubator.viewer.javafx.model.util._fx;
-import org.apache.causeway.viewer.commons.model.decorators.PrototypingDecorator;
-
-import javafx.scene.Node;
-import javafx.scene.control.Button;
-import javafx.scene.control.Label;
-import javafx.scene.control.Tooltip;
-import javafx.scene.layout.HBox;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-
-@Component
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-public class PrototypingDecoratorForButton implements PrototypingDecorator<Button, Node> {
-
-    private final PrototypingInfoPopupProvider prototypingInfoService;
-
-    @Override
-    public Node decorate(final Button uiButton, final PrototypingDecorationModel prototypingDecorationModel) {
-        val span = new HBox();
-        val prototypingLabel = _fx.add(span, new Label("ⓘ"));
-        _fx.add(span, uiButton);
-        prototypingLabel.setTooltip(new Tooltip("Inspect Metamodel"));
-        prototypingLabel.setOnMouseClicked(e->
-            prototypingInfoService.showPrototypingPopup(prototypingDecorationModel));
-
-        uiButton.getStyleClass().add("button-prototyping");
-
-        return span;
-    }
-
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/prototyping/PrototypingDecoratorForFormField.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/prototyping/PrototypingDecoratorForFormField.java
deleted file mode 100644
index bbccdd0985..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/prototyping/PrototypingDecoratorForFormField.java
+++ /dev/null
@@ -1,54 +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.causeway.incubator.viewer.javafx.ui.decorator.prototyping;
-
-import javax.inject.Inject;
-
-import org.springframework.stereotype.Component;
-
-import org.apache.causeway.incubator.viewer.javafx.model.util._fx;
-import org.apache.causeway.viewer.commons.model.decorators.PrototypingDecorator;
-
-import javafx.scene.Node;
-import javafx.scene.control.Label;
-import javafx.scene.control.Tooltip;
-import javafx.scene.layout.HBox;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-
-@Component
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-public class PrototypingDecoratorForFormField implements PrototypingDecorator<Node, Node> {
-
-    private final PrototypingInfoPopupProvider prototypingInfoService;
-
-    @Override
-    public Node decorate(final Node formField, final PrototypingDecorationModel prototypingDecorationModel) {
-
-        val container = new HBox();
-        val infoLabel = _fx.add(container, new Label("ⓘ"));
-        _fx.add(container, formField);
-
-        infoLabel.setTooltip(new Tooltip("Inspect Metamodel"));
-        infoLabel.setOnMouseClicked(e->prototypingInfoService.showPrototypingPopup(prototypingDecorationModel));
-
-        return container;
-    }
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/prototyping/PrototypingInfoPopupProvider.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/prototyping/PrototypingInfoPopupProvider.java
deleted file mode 100644
index 925a89bb02..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/prototyping/PrototypingInfoPopupProvider.java
+++ /dev/null
@@ -1,135 +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.causeway.incubator.viewer.javafx.ui.decorator.prototyping;
-
-import java.util.stream.Collectors;
-
-import javax.inject.Inject;
-import javax.inject.Provider;
-
-import org.springframework.stereotype.Component;
-
-import org.apache.causeway.commons.internal.collections._Maps;
-import org.apache.causeway.commons.internal.collections._Sets;
-import org.apache.causeway.core.metamodel.facetapi.Facet;
-import org.apache.causeway.core.metamodel.facetapi.FacetAbstract;
-import org.apache.causeway.incubator.viewer.javafx.model.util._fx;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.UiComponentFactoryFx;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.dialog.Dialogs;
-import org.apache.causeway.viewer.commons.model.decorators.PrototypingDecorator.PrototypingDecorationModel;
-
-import javafx.beans.property.SimpleStringProperty;
-import javafx.scene.Node;
-import javafx.scene.control.ScrollPane;
-import javafx.scene.control.TableColumn;
-import javafx.scene.control.TableView;
-import javafx.scene.layout.VBox;
-import lombok.RequiredArgsConstructor;
-import lombok.Value;
-import lombok.val;
-
-@Component
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-public class PrototypingInfoPopupProvider {
-
-    private final Provider<UiComponentFactoryFx> uiComponentFactory;
-
-    public void showPrototypingPopup(final PrototypingDecorationModel prototypingDecorationModel) {
-        val infoNode = getPrototypingInfoUiComponent(prototypingDecorationModel);
-        val headerText = prototypingDecorationModel.getFeatureFriendlyIdentifier();
-        val contentText = prototypingDecorationModel.getFeatureType().toString();
-        Dialogs.message("Inspect Metamodel", headerText, contentText, infoNode);
-    }
-
-    // -- HELPER
-
-    @Value(staticConstructor = "of")
-    private static class Info implements Comparable<Info> {
-        private final String key;
-        private final String value;
-        @Override
-        public int compareTo(final Info other) {
-            return this.getKey().compareTo(other.getKey());
-        }
-    }
-
-    private Node getPrototypingInfoUiComponent(final PrototypingDecorationModel prototypingDecorationModel) {
-
-        val infos = _Sets.<Info>newTreeSet();
-
-        val handlerInfo = uiComponentFactory.get().getRegisteredHandlers()
-                .stream()
-                .map(Class::getSimpleName)
-                .map(handlerName->" • " + handlerName)
-                .collect(Collectors.joining("\n"));
-
-        infos.add(Info.of("Handlers", handlerInfo));
-
-        prototypingDecorationModel.streamFeatureFacets()
-        .forEach(facet ->
-            infos.add(Info.of(
-                    facet.facetType().getSimpleName(),
-                    summarize(facet))));
-
-        val detailPane = new VBox();
-        TableView<Info> tableView = _fx.add(detailPane, new TableView<Info>());
-
-        TableColumn<Info, String> column1 = new TableColumn<>("Key");
-        column1.setCellValueFactory(c->new SimpleStringProperty(c.getValue().getKey()));
-
-        TableColumn<Info, String> column2 = new TableColumn<>("Value");
-        column2.setCellValueFactory(c->new SimpleStringProperty(c.getValue().getValue()));
-
-        tableView.getColumns().add(column1);
-        tableView.getColumns().add(column2);
-
-        infos.forEach(tableView.getItems()::add);
-
-        tableView.setColumnResizePolicy(TableView.UNCONSTRAINED_RESIZE_POLICY);
-
-        //TODO this is a candidate to be moved to _fx, to also account for max screen sizes
-        val scrollPane = new ScrollPane(detailPane);
-        scrollPane.fitToWidthProperty().set(true);
-        scrollPane.fitToHeightProperty().set(true);
-        scrollPane.hbarPolicyProperty().setValue(ScrollPane.ScrollBarPolicy.AS_NEEDED);
-        scrollPane.vbarPolicyProperty().setValue(ScrollPane.ScrollBarPolicy.AS_NEEDED);
-        scrollPane.setPrefHeight(800);
-        scrollPane.setMaxHeight(800);
-        scrollPane.setPrefWidth(1200);
-
-        tableView.prefHeightProperty().bind(scrollPane.heightProperty());
-
-        return scrollPane;
-    }
-
-    private String summarize(final Facet facet) {
-        val sb = new StringBuilder();
-        sb.append(facet.getClass().getSimpleName());
-        if(facet instanceof FacetAbstract) {
-            val attributeMap = _Maps.<String, Object>newTreeMap();
-            ((FacetAbstract)facet).visitAttributes(attributeMap::put);
-            attributeMap.forEach((k, v)->{
-                sb.append("\n • ").append(k).append(": ").append(v);
-            });
-        }
-        return sb.toString();
-    }
-
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/main/MainViewFx.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/main/MainViewFx.java
deleted file mode 100644
index c3c0527986..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/main/MainViewFx.java
+++ /dev/null
@@ -1,136 +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.causeway.incubator.viewer.javafx.ui.main;
-
-import javax.inject.Inject;
-
-import org.springframework.stereotype.Component;
-
-import org.apache.causeway.applib.annotation.Where;
-import org.apache.causeway.applib.services.iactnlayer.InteractionService;
-import org.apache.causeway.core.metamodel.context.MetaModelContext;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.core.metamodel.object.ManagedObjects;
-import org.apache.causeway.incubator.viewer.javafx.model.context.UiContextFx;
-import org.apache.causeway.incubator.viewer.javafx.model.events.JavaFxViewerConfig;
-import org.apache.causeway.incubator.viewer.javafx.model.util._fx;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.UiComponentFactoryFx;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.collections.TableViewFx;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.object.ObjectViewFx;
-import org.apache.causeway.viewer.commons.applib.services.header.HeaderUiService;
-
-import javafx.fxml.FXML;
-import javafx.scene.Node;
-import javafx.scene.control.MenuBar;
-import javafx.scene.control.ScrollPane;
-import javafx.scene.control.ScrollPane.ScrollBarPolicy;
-import javafx.scene.control.TextArea;
-import javafx.scene.image.ImageView;
-import javafx.scene.layout.HBox;
-import javafx.scene.layout.VBox;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-import lombok.extern.log4j.Log4j2;
-
-@Component
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-@Log4j2
-public class MainViewFx {
-
-    private final JavaFxViewerConfig viewerConfig;
-    private final MetaModelContext metaModelContext;
-    private final HeaderUiService headerUiModelProvider;
-    private final InteractionService interactionService;
-    private final UiContextFx uiContext;
-    private final UiActionHandlerFx uiActionHandler;
-    private final UiComponentFactoryFx uiComponentFactory;
-
-    @FXML private MenuBar menuBarLeft;
-    @FXML private MenuBar menuBarRight;
-    @FXML private ScrollPane contentView;
-    @FXML private HBox topPane;
-    @FXML private VBox contentPane;
-    @FXML private TextArea sampleTextArea;
-
-    @FXML
-    public void initialize() {
-        log.info("about to initialize");
-
-        uiContext.setNewPageHandler(this::replaceContent);
-        uiContext.setPageFactory(this::uiComponentForActionResult);
-
-        contentView.setFitToWidth(true);
-        contentView.setFitToHeight(true);
-        contentView.setHbarPolicy(ScrollBarPolicy.NEVER);
-        contentView.setVbarPolicy(ScrollBarPolicy.ALWAYS);
-        contentPane.setFillWidth(true);
-        //_fx.borderDashed(contentPane, Color.CRIMSON); //debug
-        interactionService.runAnonymous(this::buildMenu);
-
-        renderHomepage();
-    }
-
-    private void buildMenu() {
-        val header = headerUiModelProvider.getHeader();
-
-        // adding a top level menu 'Home' decorated with a branding-icon ...
-
-        val brandingIcon = new ImageView(viewerConfig.getBrandingIcon());
-        brandingIcon.setPreserveRatio(true);
-
-        val menu = _fx.newMenu(menuBarLeft, "Home");
-        menu.setGraphic(brandingIcon);
-        brandingIcon.fitHeightProperty().set(16);
-        _fx.setMenuOnAction(menu, e->renderHomepage());
-
-        // let the MenuBuilderFx populate the menu-bars ...
-
-        val leftMenuBuilder = MenuBuilderFx.of(uiContext, menuBarLeft, uiActionHandler::handleActionLinkClicked);
-        val rightMenuBuilder = MenuBuilderFx.of(uiContext, menuBarRight, uiActionHandler::handleActionLinkClicked);
-
-        header.getPrimary().buildMenuItems(metaModelContext, leftMenuBuilder);
-        header.getSecondary().buildMenuItems(metaModelContext, rightMenuBuilder);
-        header.getTertiary().buildMenuItems(metaModelContext, rightMenuBuilder);
-    }
-
-    private void replaceContent(final Node node) {
-        contentPane.getChildren().clear();
-        contentPane.getChildren().add(node);
-    }
-
-    private void renderHomepage() {
-        log.info("about to render homepage");
-        uiContext.route(metaModelContext::getHomePageAdapter);
-    }
-
-    private Node uiComponentForActionResult(final ManagedObject actionResult) {
-        if (ManagedObjects.isSpecified(actionResult)
-                && actionResult.getSpecification().isPlural()) {
-            return TableViewFx.fromCollection(uiContext, actionResult, Where.STANDALONE_TABLES);
-        } else {
-            return ObjectViewFx.fromObject(
-                    uiContext,
-                    uiComponentFactory,
-                    uiActionHandler::handleActionLinkClicked,
-                    actionResult);
-        }
-    }
-
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/main/MenuBuilderFx.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/main/MenuBuilderFx.java
deleted file mode 100644
index 7cb3862677..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/main/MenuBuilderFx.java
+++ /dev/null
@@ -1,80 +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.causeway.incubator.viewer.javafx.ui.main;
-
-import java.util.function.Consumer;
-
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.causeway.incubator.viewer.javafx.model.context.UiContextFx;
-import org.apache.causeway.viewer.commons.applib.services.menu.MenuItemDto;
-import org.apache.causeway.viewer.commons.applib.services.menu.MenuVisitor;
-
-import javafx.scene.control.Menu;
-import javafx.scene.control.MenuBar;
-import javafx.scene.control.MenuItem;
-import javafx.scene.control.SeparatorMenuItem;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-import lombok.extern.log4j.Log4j2;
-
-@RequiredArgsConstructor(staticName = "of")
-@Log4j2
-public class MenuBuilderFx implements MenuVisitor {
-
-    private final UiContextFx uiContext;
-    private final MenuBar menuBar;
-    private final Consumer<ManagedAction> menuActionEventHandler;
-
-    private Menu currentTopLevelMenu = null;
-
-    @Override
-    public void addTopLevel(MenuItemDto menuDto) {
-        log.debug("top level menu {}", menuDto.getName());
-
-        menuBar.getMenus()
-        .add(currentTopLevelMenu = new Menu(menuDto.getName()));
-    }
-
-    @Override
-    public void addSubMenu(MenuItemDto menuDto) {
-        val managedAction = menuDto.getManagedAction();
-
-        log.debug("sub menu {}", menuDto.getName());
-
-        val actionUiModel = uiContext.getActionUiModelFactory().newActionUiModel(uiContext, managedAction);
-        val menuItem = actionUiModel.createMenuUiComponent();
-        menuItem.setOnAction(e->menuActionEventHandler.accept(managedAction));
-        currentTopLevelMenu.getItems().add(menuItem);
-    }
-
-    @Override
-    public void addSectionSpacer() {
-        log.debug("menu spacer");
-        currentTopLevelMenu.getItems().add(new SeparatorMenuItem());
-    }
-
-    @Override
-    public void addSectionLabel(String named) {
-        log.debug("section label  {}", named);
-        val menuItem = new MenuItem(named);
-        currentTopLevelMenu.getItems().add(menuItem);
-        menuItem.setDisable(true);
-    }
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/main/UiActionHandlerFx.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/main/UiActionHandlerFx.java
deleted file mode 100644
index ce7b333695..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/main/UiActionHandlerFx.java
+++ /dev/null
@@ -1,122 +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.causeway.incubator.viewer.javafx.ui.main;
-
-import javax.inject.Inject;
-
-import org.springframework.stereotype.Service;
-
-import org.apache.causeway.applib.services.iactnlayer.InteractionService;
-import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.causeway.core.metamodel.interactions.managed.ParameterNegotiationModel;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.incubator.viewer.javafx.model.context.UiContextFx;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.UiComponentFactoryFx;
-import org.apache.causeway.viewer.commons.model.components.UiComponentFactory.ComponentRequest;
-
-import javafx.geometry.Insets;
-import javafx.scene.control.ButtonType;
-import javafx.scene.control.Dialog;
-import javafx.scene.layout.GridPane;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-import lombok.extern.log4j.Log4j2;
-
-@Service
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-@Log4j2
-public class UiActionHandlerFx {
-
-    private final UiContextFx uiContext;
-    private final InteractionService interactionService;
-    private final UiComponentFactoryFx uiComponentFactory;
-
-    public void handleActionLinkClicked(final ManagedAction managedAction) {
-
-        log.info("about to build an action prompt for {}", managedAction.getIdentifier());
-
-        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 pendingArgs = managedAction.startParameterNegotiation();
-
-            Dialog<ParameterNegotiationModel> dialog = new Dialog<>();
-            dialog.setTitle("<Title>");
-            dialog.setHeaderText("<HeaderText>");
-
-            dialog.getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL);
-            val grid = new GridPane();
-            grid.setHgap(10);
-            grid.setVgap(10);
-            grid.setPadding(new Insets(20, 150, 10, 10));
-            dialog.getDialogPane().setContent(grid);
-
-            pendingArgs.getParamModels().forEach(paramModel->{
-
-                val paramNr = paramModel.getParamNr(); // zero based
-
-                val request = ComponentRequest.of(paramModel);
-
-                val labelAndPosition = uiComponentFactory.labelFor(request);
-                val uiField = uiComponentFactory.parameterFor(request);
-
-                grid.add(labelAndPosition.getUiLabel(), 0, paramNr);
-                grid.add(uiField, 1, paramNr);
-
-            });
-
-            dialog.setResultConverter(dialogButton -> {
-                if (dialogButton == ButtonType.OK) {
-                    return pendingArgs;
-                }
-                return null;
-            });
-
-            dialog.showAndWait().ifPresent(params->{
-                log.info("param negotiation done");
-                invoke(managedAction, params.getParamValues()); //TODO handle vetoes
-            });
-
-        }
-
-    }
-
-    private void invoke(
-            final ManagedAction managedAction,
-            final Can<ManagedObject> params) {
-
-        interactionService.runAnonymous(()->{
-
-            //Thread.sleep(1000); // simulate long running
-
-            val actionResultOrVeto = managedAction.invoke(params);
-
-            actionResultOrVeto.getSuccess()
-            .ifPresent(actionResult->uiContext.route(actionResult));
-
-        });
-    }
-
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/main/UiBuilderFx.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/main/UiBuilderFx.java
deleted file mode 100644
index eaae1d0b7a..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/main/UiBuilderFx.java
+++ /dev/null
@@ -1,101 +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.causeway.incubator.viewer.javafx.ui.main;
-
-import java.util.Optional;
-
-import javax.inject.Inject;
-
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.event.EventListener;
-import org.springframework.stereotype.Component;
-
-import org.apache.causeway.applib.services.iactn.Interaction;
-import org.apache.causeway.commons.internal.debug._Probe;
-import org.apache.causeway.core.interaction.scope.TransactionBoundaryAware;
-import org.apache.causeway.incubator.viewer.javafx.model.events.JavaFxViewerConfig;
-import org.apache.causeway.incubator.viewer.javafx.model.events.PrimaryStageReadyEvent;
-
-import javafx.fxml.FXMLLoader;
-import javafx.scene.Parent;
-import javafx.scene.Scene;
-import javafx.stage.Stage;
-import lombok.RequiredArgsConstructor;
-import lombok.SneakyThrows;
-import lombok.val;
-import lombok.extern.log4j.Log4j2;
-
-@Component
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-@Log4j2
-public class UiBuilderFx implements TransactionBoundaryAware {
-
-    private final ApplicationContext springContext;
-    private final JavaFxViewerConfig viewerConfig;
-
-    @EventListener(PrimaryStageReadyEvent.class)
-    @SneakyThrows
-    public void onStageReady(PrimaryStageReadyEvent event) {
-        log.info("JavaFX primary stage is ready");
-        val layoutUrl = this.viewerConfig.getUiLayout().getURL();
-        val fxmlLoader = new FXMLLoader(layoutUrl);
-        fxmlLoader.setControllerFactory(springContext::getBean);
-        val uiRoot = (Parent)fxmlLoader.load();
-        val scene = new Scene(uiRoot);
-        scene.getStylesheets().add("/ui.css");
-        val stage = event.getStage();
-        stage.setScene(scene);
-        setupTitle(stage);
-        setupIcon(stage);
-        stage.show();
-    }
-
-    @Override
-    public void beforeEnteringTransactionalBoundary(Interaction interaction) {
-        //TODO this would be the place to indicate to the user, that a long running task has started
-        //scene.getRoot().cursorProperty().set(Cursor.WAIT);
-        _Probe.errOut("Transaction HAS_STARTED conversationId=%s", interaction.getInteractionId());
-    }
-
-    @Override
-    public void afterLeavingTransactionalBoundary(Interaction interaction) {
-        //TODO this would be the place to indicate to the user, that a long running task has ended
-        //scene.getRoot().cursorProperty().set(Cursor.DEFAULT);
-        _Probe.errOut("Transaction IS_ENDING interactionId=%s", interaction.getInteractionId());
-    }
-
-    // -- HELPER
-
-    private void setupTitle(Stage stage) {
-        val title = Optional.ofNullable(viewerConfig.getApplicationTitle())
-                .orElse("Unknonw Title");
-        stage.setTitle(title);
-    }
-
-    private void setupIcon(Stage stage) {
-        val icon = viewerConfig.getApplicationIcon();
-        if(icon==null) {
-            return;
-        }
-        stage.getIcons().add(icon);
-    }
-
-
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/main/UiContextFxDefault.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/main/UiContextFxDefault.java
deleted file mode 100644
index 659f85d73e..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/main/UiContextFxDefault.java
+++ /dev/null
@@ -1,111 +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.causeway.incubator.viewer.javafx.ui.main;
-
-import java.util.function.Consumer;
-import java.util.function.Function;
-import java.util.function.Supplier;
-
-import javax.inject.Inject;
-
-import org.springframework.stereotype.Service;
-
-import org.apache.causeway.applib.services.iactnlayer.InteractionService;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.incubator.viewer.javafx.model.action.ActionUiModelFactoryFx;
-import org.apache.causeway.incubator.viewer.javafx.model.context.UiContextFx;
-import org.apache.causeway.incubator.viewer.javafx.model.events.JavaFxViewerConfig;
-import org.apache.causeway.viewer.commons.model.decorators.DisablingDecorator;
-import org.apache.causeway.viewer.commons.model.decorators.IconDecorator;
-import org.apache.causeway.viewer.commons.model.decorators.PrototypingDecorator;
-
-import javafx.scene.Node;
-import javafx.scene.control.Button;
-import javafx.scene.control.Labeled;
-import javafx.scene.control.MenuItem;
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import lombok.Setter;
-import lombok.extern.log4j.Log4j2;
-
-@Service
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-@Log4j2
-public class UiContextFxDefault implements UiContextFx {
-
-    @Getter(onMethod_ = {@Override})
-    private final JavaFxViewerConfig javaFxViewerConfig;
-    @Getter(onMethod_ = {@Override})
-    private final InteractionService interactionService;
-    @Getter(onMethod_ = {@Override})
-    private final ActionUiModelFactoryFx actionUiModelFactory = new ActionUiModelFactoryFx();
-
-    @Setter(onMethod_ = {@Override})
-    private Consumer<Node> newPageHandler;
-
-    @Setter(onMethod_ = {@Override})
-    private Function<ManagedObject, Node> pageFactory;
-
-    @Override
-    public void route(final ManagedObject object) {
-        log.info("about to render object {}", object);
-        newPage(pageFor(object));
-    }
-
-    @Override
-    public void route(final Supplier<ManagedObject> objectSupplier) {
-        interactionService.runAnonymous(()->{
-            var 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(final Node content) {
-        if(newPageHandler!=null && content!=null) {
-            newPageHandler.accept(content);
-        }
-    }
-
-    private Node pageFor(final ManagedObject object) {
-        return pageFactory!=null
-                ? pageFactory.apply(object)
-                : null;
-    }
-
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/resources/ui.css b/incubator/viewers/javafx/ui/src/main/resources/ui.css
deleted file mode 100644
index 08ed35faa6..0000000000
--- a/incubator/viewers/javafx/ui/src/main/resources/ui.css
+++ /dev/null
@@ -1,23 +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.
- */
-
-.button-prototyping {
-	-fx-font-style: italic; 
-/*     -fx-background-color: #CCFF99; */
-}
\ No newline at end of file
diff --git a/incubator/viewers/javafx/ui/src/main/resources/ui.fxml b/incubator/viewers/javafx/ui/src/main/resources/ui.fxml
deleted file mode 100644
index 2d7bd46069..0000000000
--- a/incubator/viewers/javafx/ui/src/main/resources/ui.fxml
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-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.
--->
-
-<?import javafx.geometry.Insets?>
-<?import javafx.scene.control.Label?>
-<?import javafx.scene.control.MenuBar?>
-<?import javafx.scene.control.ScrollPane?>
-<?import javafx.scene.layout.HBox?>
-<?import javafx.scene.layout.Pane?>
-<?import javafx.scene.layout.Region?>
-<?import javafx.scene.layout.VBox?>
-<?import javafx.scene.paint.Color?>
-<?import javafx.scene.text.Font?>
-
-<VBox prefHeight="800.0" prefWidth="1200.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="org.apache.causeway.incubator.viewer.javafx.ui.main.MainViewFx">
-  <children>
-    <HBox fx:id="topPane" VBox.vgrow="NEVER">
-      <children>
-    		<MenuBar fx:id="menuBarLeft" />
-            <Region fx:id="topLevelMenuSpacer" styleClass="menu-bar" HBox.hgrow="SOMETIMES" />
-    		<MenuBar fx:id="menuBarRight" />
-   	  </children>
-    </HBox>
-  <ScrollPane fx:id="contentView" fitToHeight="true" fitToWidth="true" hbarPolicy="NEVER" prefHeight="-1.0" prefWidth="-1.0" vbarPolicy="ALWAYS" VBox.vgrow="ALWAYS">
-         <content>
-            <VBox fx:id="contentPane" prefHeight="200.0" prefWidth="100.0" style="-fx-background-color: #f8f9fa;">
-               <children>
-                  <Label alignment="CENTER" style="&#10;" text="Initializing ..." textAlignment="CENTER" wrapText="false">
-                     <font>
-                        <Font size="18.0" fx:id="x11" />
-                     </font>
-                     <textFill>
-                        <Color blue="0.624" green="0.624" red="0.624" fx:id="x21" />
-                     </textFill>
-                     <VBox.margin>
-                        <Insets left="16.0" top="10.0" />
-                     </VBox.margin>
-                  </Label>
-               </children>
-            </VBox>
-         </content>
-  </ScrollPane>
-    <HBox id="HBox" alignment="CENTER_LEFT" spacing="5.0" VBox.vgrow="NEVER">
-      <children>
-        <Label maxHeight="1.7976931348623157E308" maxWidth="-1.0" text="Left status" HBox.hgrow="ALWAYS">
-          <font>
-            <Font size="11.0" fx:id="x3" />
-          </font>
-          <textFill>
-            <Color blue="0.625" green="0.625" red="0.625" fx:id="x4" />
-          </textFill>
-        </Label>
-        <Pane prefHeight="-1.0" prefWidth="-1.0" HBox.hgrow="ALWAYS" />
-        <Label font="$x3" maxWidth="-1.0" text="Right status" textFill="$x4" HBox.hgrow="NEVER" />
-      </children>
-      <padding>
-        <Insets bottom="3.0" left="3.0" right="3.0" top="3.0" />
-      </padding>
-    </HBox>
-  </children>
-</VBox>
diff --git a/incubator/viewers/javafx/viewer/pom.xml b/incubator/viewers/javafx/viewer/pom.xml
deleted file mode 100644
index 64987501c2..0000000000
--- a/incubator/viewers/javafx/viewer/pom.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>org.apache.causeway.incubator.viewer</groupId>
-		<artifactId>causeway-viewer-javafx</artifactId>
-		<version>2.0.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>causeway-viewer-javafx-viewer</artifactId>
-	<name>Apache Causeway Inc - Viewer JavaFX (Viewer)</name>
-
-	<properties>
-		<jar-plugin.automaticModuleName>org.apache.causeway.incubator.viewer.javafx.viewer</jar-plugin.automaticModuleName>
-		<git-plugin.propertiesDir>org/apache/causeway/incubator/viewer/javafx/model/viewer</git-plugin.propertiesDir>
-	</properties>
-
-	<dependencies>
-		
-		<dependency>
-			<groupId>org.apache.causeway.incubator.viewer</groupId>
-			<artifactId>causeway-viewer-javafx-ui</artifactId>
-		</dependency>
-
-	</dependencies>
-
-
-</project>
diff --git a/incubator/viewers/javafx/viewer/src/main/java/org/apache/causeway/incubator/viewer/javafx/viewer/CausewayModuleIncViewerJavaFxViewer.java b/incubator/viewers/javafx/viewer/src/main/java/org/apache/causeway/incubator/viewer/javafx/viewer/CausewayModuleIncViewerJavaFxViewer.java
deleted file mode 100644
index 720b5bd38e..0000000000
--- a/incubator/viewers/javafx/viewer/src/main/java/org/apache/causeway/incubator/viewer/javafx/viewer/CausewayModuleIncViewerJavaFxViewer.java
+++ /dev/null
@@ -1,43 +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.causeway.incubator.viewer.javafx.viewer;
-
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-
-import org.apache.causeway.incubator.viewer.javafx.ui.CausewayModuleIncViewerJavaFxUi;
-
-/**
- *
- * @since 2.0
- */
-@Configuration
-@Import({
-        // Modules
-
-        CausewayModuleIncViewerJavaFxUi.class,
-
-        // @Service's
-
-        // @Mixin's
-})
-
-public class CausewayModuleIncViewerJavaFxViewer {
-
-}
diff --git a/incubator/viewers/javafx/viewer/src/main/java/org/apache/causeway/incubator/viewer/javafx/viewer/JavafxViewer.java b/incubator/viewers/javafx/viewer/src/main/java/org/apache/causeway/incubator/viewer/javafx/viewer/JavafxViewer.java
deleted file mode 100644
index 580c9e87c7..0000000000
--- a/incubator/viewers/javafx/viewer/src/main/java/org/apache/causeway/incubator/viewer/javafx/viewer/JavafxViewer.java
+++ /dev/null
@@ -1,32 +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.causeway.incubator.viewer.javafx.viewer;
-
-import javafx.application.Application;
-import lombok.experimental.UtilityClass;
-
-@UtilityClass
-public class JavafxViewer {
-
-    public static final void launch(Class<?> appClass, String... args) {
-        JavafxViewerApplication.sources = new Class<?>[]{appClass};
-        Application.launch(JavafxViewerApplication.class, args);
-    }
-
-}
diff --git a/incubator/viewers/javafx/viewer/src/main/java/org/apache/causeway/incubator/viewer/javafx/viewer/JavafxViewerApplication.java b/incubator/viewers/javafx/viewer/src/main/java/org/apache/causeway/incubator/viewer/javafx/viewer/JavafxViewerApplication.java
deleted file mode 100644
index 383eb725ce..0000000000
--- a/incubator/viewers/javafx/viewer/src/main/java/org/apache/causeway/incubator/viewer/javafx/viewer/JavafxViewerApplication.java
+++ /dev/null
@@ -1,71 +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.causeway.incubator.viewer.javafx.viewer;
-
-import org.springframework.boot.builder.SpringApplicationBuilder;
-import org.springframework.context.ApplicationContextInitializer;
-import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.context.support.GenericApplicationContext;
-
-import org.apache.causeway.commons.internal._Constants;
-import org.apache.causeway.incubator.viewer.javafx.model.events.PrimaryStageReadyEvent;
-
-import javafx.application.Application;
-import javafx.application.HostServices;
-import javafx.application.Platform;
-import javafx.stage.Stage;
-
-public class JavafxViewerApplication extends Application {
-
-    private ConfigurableApplicationContext springContext;
-
-    static Class<?>[] sources;
-
-    @Override
-    public void init() throws Exception {
-
-        final ApplicationContextInitializer<GenericApplicationContext> initializer =
-        ac->{
-             ac.registerBean(Application.class, ()->JavafxViewerApplication.this);
-             ac.registerBean(Parameters.class, this::getParameters);
-             ac.registerBean(HostServices.class, this::getHostServices);
-        };
-
-        this.springContext = new SpringApplicationBuilder()
-        .sources(sources)
-        .initializers(initializer)
-        .run(getParameters().getRaw().toArray(_Constants.emptyStringArray));
-    }
-
-
-
-    @Override
-    public void start(Stage primaryStage) throws Exception {
-        this.springContext.publishEvent(new PrimaryStageReadyEvent(primaryStage));
-    }
-
-    @Override
-    public void stop() throws Exception {
-        this.springContext.close();
-        Platform.exit();
-    }
-
-
-
-}
diff --git a/incubator/viewers/vaadin/.gitignore b/incubator/viewers/vaadin/.gitignore
deleted file mode 100644
index 9e0884e06a..0000000000
--- a/incubator/viewers/vaadin/.gitignore
+++ /dev/null
@@ -1,15 +0,0 @@
-# Browser drivers for local integration tests
-drivers/
-# Error screenshots generated by TestBench for failed integration tests
-error-screenshots/
-# More Node stuff as introduced with Vaadin
-node/
-generated
-package-lock.json
-package.json
-webpack.config.js
-webpack.generated.js
-vite.generated.ts
-pnpm*
-
-
diff --git a/incubator/viewers/vaadin/adoc/antora.yml b/incubator/viewers/vaadin/adoc/antora.yml
deleted file mode 100644
index bc87cdc73c..0000000000
--- a/incubator/viewers/vaadin/adoc/antora.yml
+++ /dev/null
@@ -1,19 +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.
-
-name: incubator
-version: latest
diff --git a/incubator/viewers/vaadin/adoc/modules/vaadin/nav.adoc b/incubator/viewers/vaadin/adoc/modules/vaadin/nav.adoc
deleted file mode 100644
index b97852230f..0000000000
--- a/incubator/viewers/vaadin/adoc/modules/vaadin/nav.adoc
+++ /dev/null
@@ -1,4 +0,0 @@
-
-:Notice: 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 ag [...]
-
-include::incubator:ROOT:partial$component-nav.adoc[]
diff --git a/incubator/viewers/vaadin/adoc/modules/vaadin/pages/about.adoc b/incubator/viewers/vaadin/adoc/modules/vaadin/pages/about.adoc
deleted file mode 100644
index 505ac922d7..0000000000
--- a/incubator/viewers/vaadin/adoc/modules/vaadin/pages/about.adoc
+++ /dev/null
@@ -1,6 +0,0 @@
-= Vaadin Viewer (Incubating)
-
-:Notice: 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 ag [...]
-
-WARNING: TODO:  v2.0
-
diff --git a/incubator/viewers/vaadin/adoc/modules/vaadin/partials/module-nav.adoc b/incubator/viewers/vaadin/adoc/modules/vaadin/partials/module-nav.adoc
deleted file mode 100644
index a436056690..0000000000
--- a/incubator/viewers/vaadin/adoc/modules/vaadin/partials/module-nav.adoc
+++ /dev/null
@@ -1,3 +0,0 @@
-
-* xref:incubator:vaadin:about.adoc[Vaadin]
-
diff --git a/incubator/viewers/vaadin/model/pom.xml b/incubator/viewers/vaadin/model/pom.xml
deleted file mode 100644
index 5d1f505374..0000000000
--- a/incubator/viewers/vaadin/model/pom.xml
+++ /dev/null
@@ -1,150 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>org.apache.causeway.incubator.viewer</groupId>
-		<artifactId>causeway-viewer-vaadin</artifactId>
-		<version>2.0.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>causeway-viewer-vaadin-model</artifactId>
-	<name>Apache Causeway Inc - Viewer Vaadin (Model)</name>
-
-	<properties>
-		<jar-plugin.automaticModuleName>org.apache.causeway.incubator.viewer.vaadin.model</jar-plugin.automaticModuleName>
-		<git-plugin.propertiesDir>org/apache/causeway/incubator/viewer/vaadin/model</git-plugin.propertiesDir>
-	</properties>
-
-	<dependencies>
-
-		<dependency>
-			<groupId>org.apache.causeway.core</groupId>
-			<artifactId>causeway-core-webapp</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.apache.causeway.viewer</groupId>
-			<artifactId>causeway-viewer-commons-model</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>com.vaadin</groupId>
-			<artifactId>vaadin</artifactId>
-			<exclusions>
-				<exclusion>
-					<groupId>io.swagger</groupId>
-					<artifactId>swagger-compat-spec-parser</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>io.swagger.parser.v3</groupId>
-					<artifactId>swagger-parser-core</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>io.swagger.parser.v3</groupId>
-					<artifactId>swagger-parser-v3</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>io.swagger.core.v3</groupId>
-					<artifactId>swagger-core</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>io.swagger</groupId>
-					<artifactId>swagger-parser</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>com.github.fge</groupId>
-					<artifactId>jackson-coreutils</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>io.swagger.core.v3</groupId>
-					<artifactId>swagger-models</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-		<dependency>
-			<groupId>io.swagger</groupId>
-			<artifactId>swagger-compat-spec-parser</artifactId>
-			<version>1.0.64</version>
-			<exclusions>
-				<exclusion>
-					<groupId>com.github.fge</groupId>
-					<artifactId>jackson-coreutils</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-		<dependency>
-			<groupId>io.swagger.parser.v3</groupId>
-			<artifactId>swagger-parser-v3</artifactId>
-			<version>2.1.11</version>
-			<exclusions>
-				<exclusion>
-					<groupId>io.swagger.core.v3</groupId>
-					<artifactId>swagger-models</artifactId>
-				</exclusion>
-				<exclusion>
-				    <groupId>io.swagger.core.v3</groupId>
-				    <artifactId>swagger-core</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-		<dependency>
-			<groupId>io.swagger.core.v3</groupId>
-			<artifactId>swagger-core</artifactId>
-			<exclusions>
-				<exclusion>
-					<groupId>io.swagger.core.v3</groupId>
-					<artifactId>swagger-models</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-		<dependency>
-			<groupId>io.swagger.parser.v3</groupId>
-			<artifactId>swagger-parser-core</artifactId>
-			<version>2.1.11</version>
-			<exclusions>
-				<exclusion>
-					<groupId>io.swagger.core.v3</groupId>
-					<artifactId>swagger-models</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-		<dependency>
-			<groupId>io.swagger</groupId>
-			<artifactId>swagger-parser</artifactId>
-			<version>1.0.64</version>
-		</dependency>
-		<dependency>
-			<groupId>com.github.fge</groupId>
-			<artifactId>jackson-coreutils</artifactId>
-			<version>1.8</version>
-		</dependency>
-		<dependency>
-			<groupId>io.swagger.core.v3</groupId>
-			<artifactId>swagger-models</artifactId>
-			<version>${swagger-core.version}</version>
-		</dependency>
-
-		<!-- TEST DEPENDENCIES -->
-		<dependency>
-			<groupId>org.apache.causeway.core</groupId>
-			<artifactId>causeway-core-internaltestsupport</artifactId>
-			<scope>test</scope>
-		</dependency>
-
-	</dependencies>
-
-</project>
diff --git a/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/CausewayModuleIncViewerVaadinModel.java b/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/CausewayModuleIncViewerVaadinModel.java
deleted file mode 100644
index fc946eb62f..0000000000
--- a/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/CausewayModuleIncViewerVaadinModel.java
+++ /dev/null
@@ -1,33 +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.causeway.incubator.viewer.vaadin.model;
-
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-
-import org.apache.causeway.core.webapp.CausewayModuleCoreWebapp;
-
-@Configuration
-@Import({
-        // Modules
-        CausewayModuleCoreWebapp.class,
-})
-public class CausewayModuleIncViewerVaadinModel {
-
-}
diff --git a/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/action/ActionUiModelFactoryVaa.java b/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/action/ActionUiModelFactoryVaa.java
deleted file mode 100644
index 02926be91c..0000000000
--- a/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/action/ActionUiModelFactoryVaa.java
+++ /dev/null
@@ -1,29 +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.causeway.incubator.viewer.vaadin.model.action;
-
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
-
-public class ActionUiModelFactoryVaa {
-
-    public ActionUiModelVaa newActionUiModel(ManagedAction managedAction) {
-        return ActionUiModelVaa.of(managedAction);
-    }
-
-}
diff --git a/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/action/ActionUiModelVaa.java b/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/action/ActionUiModelVaa.java
deleted file mode 100644
index 848fc73a00..0000000000
--- a/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/action/ActionUiModelVaa.java
+++ /dev/null
@@ -1,57 +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.causeway.incubator.viewer.vaadin.model.action;
-
-import com.vaadin.flow.component.Component;
-import com.vaadin.flow.component.html.Label;
-
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
-import org.apache.causeway.incubator.viewer.vaadin.model.decorator.Decorators;
-import org.apache.causeway.viewer.commons.model.action.UiAction;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-
-@RequiredArgsConstructor(staticName = "of")
-public class ActionUiModelVaa implements UiAction<Component, Component> {
-
-    @Getter
-    private final ManagedAction managedAction;
-
-    @Override
-    public ObjectAction getAction() {
-        return managedAction.getMetaModel();
-    }
-
-    @Override
-    public Component createMenuUiComponent() {
-        return createRegularUiComponent();
-    }
-
-    @Override
-    public Component createRegularUiComponent() {
-        val uiLabel = new Label(getManagedAction().getFriendlyName());
-
-        return Decorators.getIcon().decorate(uiLabel, getFontAwesomeUiModel());
-    }
-
-
-}
diff --git a/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/context/MemberInvocationHandler.java b/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/context/MemberInvocationHandler.java
deleted file mode 100644
index e16f771350..0000000000
--- a/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/context/MemberInvocationHandler.java
+++ /dev/null
@@ -1,30 +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.causeway.incubator.viewer.vaadin.model.context;
-
-import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-
-public interface MemberInvocationHandler<T> {
-
-    T handle(ManagedObject object);
-    T handle(ManagedAction managedAction, Can<ManagedObject> params, ManagedObject actionResult);
-
-}
diff --git a/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/context/UiContextVaa.java b/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/context/UiContextVaa.java
deleted file mode 100644
index f93176623d..0000000000
--- a/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/context/UiContextVaa.java
+++ /dev/null
@@ -1,54 +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.causeway.incubator.viewer.vaadin.model.context;
-
-import java.util.function.Consumer;
-
-import com.vaadin.flow.component.Component;
-
-import org.apache.causeway.applib.services.iactnlayer.InteractionService;
-import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-
-public interface UiContextVaa {
-
-    InteractionService getInteractionService();
-
-    void setNewPageHandler(Consumer<Component> onNewPage);
-    void setPageFactory(MemberInvocationHandler<Component> pageFactory);
-
-    void route(ManagedObject object);
-    void route(ManagedAction managedAction, Can<ManagedObject> params, ManagedObject actionResult);
-//    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/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/decorator/Decorators.java b/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/decorator/Decorators.java
deleted file mode 100644
index 5e40dce30d..0000000000
--- a/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/decorator/Decorators.java
+++ /dev/null
@@ -1,175 +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.causeway.incubator.viewer.vaadin.model.decorator;
-
-import java.net.URL;
-import java.util.Optional;
-
-import com.vaadin.flow.component.Component;
-import com.vaadin.flow.component.html.Image;
-import com.vaadin.flow.component.html.Label;
-import com.vaadin.flow.component.html.Span;
-import com.vaadin.flow.component.icon.VaadinIcon;
-import com.vaadin.flow.component.orderedlayout.FlexComponent.Alignment;
-import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
-
-import org.apache.causeway.applib.layout.component.CssClassFaPosition;
-import org.apache.causeway.core.metamodel.context.MetaModelContext;
-import org.apache.causeway.viewer.commons.applib.services.userprof.UserProfileUiModel;
-import org.apache.causeway.viewer.commons.applib.services.userprof.UserProfileUiService;
-import org.apache.causeway.viewer.commons.model.decorators.IconDecorator;
-import org.apache.causeway.viewer.commons.model.decorators.IconDecorator.FontAwesomeDecorationModel;
-import org.apache.causeway.viewer.commons.model.decorators.TooltipDecorator;
-import org.apache.causeway.viewer.commons.model.decorators.TooltipDecorator.TooltipDecorationModel;
-
-import lombok.Getter;
-import lombok.val;
-import lombok.experimental.UtilityClass;
-import lombok.extern.log4j.Log4j2;
-
-/**
- *
- */
-@UtilityClass
-@Log4j2
-public class Decorators {
-
-    @Getter(lazy = true) private final static Tooltip tooltip = new Tooltip();
-    @Getter(lazy = true) private final static Icon icon = new Icon();
-    @Getter(lazy = true) private final static Menu menu = new Menu();
-    @Getter(lazy = true) private final static User user = new User();
-
-    // -- DECORATOR CLASSES
-
-    public final static class Tooltip implements TooltipDecorator<Component> {
-
-        @Override
-        public void decorate(final Component uiComponent, final TooltipDecorationModel tooltipDecorationModel) {
-            log.warn("not implemented yet");
-        }
-
-    }
-
-    public final static class Icon implements IconDecorator<Component, Component> {
-
-        @Override
-        public Component decorate(
-                final Component uiComponent,
-                final Optional<FontAwesomeDecorationModel> fontAwesomeDecorationModel) {
-
-            val decoratedUiComponent = fontAwesomeDecorationModel
-            .map(fontAwesome->{
-
-                val faIcon = new Span();
-
-                fontAwesome.streamCssClasses()
-                .forEach(faIcon::addClassName);
-
-                return CssClassFaPosition.isLeftOrUnspecified(fontAwesome.getPosition())
-                        ? new HorizontalLayout(faIcon, uiComponent)
-                        : new HorizontalLayout(uiComponent, faIcon);
-
-            })
-            .orElseGet(()->{
-
-                // TODO add spacer, to account for missing fa icon?
-                // but then where to add, left or right?
-
-                return new HorizontalLayout(uiComponent);
-            });
-
-            return (HorizontalLayout)decoratedUiComponent;
-
-        }
-
-    }
-
-    public final static class Menu {
-
-        public Component decorateTopLevel(
-                final Label label) {
-            val icon = getTopLevelMenuIcon();
-            val layout =  new HorizontalLayout(label, icon);
-            layout.setVerticalComponentAlignment(Alignment.END, icon);
-            return layout;
-        }
-
-        private Component getTopLevelMenuIcon() {
-            val menuIcon = new com.vaadin.flow.component.icon.Icon(VaadinIcon.CARET_DOWN);
-            menuIcon.setSize("1em");
-            menuIcon.getElement().getStyle().set("margin-left", "2px");
-            return menuIcon;
-        }
-
-    }
-
-    public final static class User {
-
-        public Component decorateWithAvatar(
-                final Label label,
-                final MetaModelContext commonContext) {
-
-            val profileIfAny = commonContext.lookupServiceElseFail(UserProfileUiService.class)
-                    .userProfile();
-            return decorateWithAvatar(label, Optional.ofNullable(profileIfAny));
-        }
-
-        public Component decorateWithAvatar(
-                final Label label,
-                final Optional<UserProfileUiModel> userProfileUiModel) {
-
-            val decoratedUiComponent = userProfileUiModel
-            .map(userProfile->{
-
-                label.setText(userProfile.getUserProfileName());
-
-                val userIcon = userProfile.avatarUrl()
-                .map(this::getUserIcon)
-                .orElseGet(this::getFallbackUserIcon);
-
-                return (Component) new HorizontalLayout(userIcon, label);
-
-            })
-            .orElseGet(()->{
-                label.setText("<anonymous>");
-                return label;
-            });
-
-            return (Component) decoratedUiComponent;
-
-        }
-
-        private Component getUserIcon(final URL avatarUrl) {
-            return new Image(avatarUrl.toExternalForm(), "avatar");
-        }
-
-        private Component getFallbackUserIcon() {
-            val userIcon = new com.vaadin.flow.component.icon.Icon(VaadinIcon.USER);
-            userIcon.setSize("1em");
-            return userIcon;
-        }
-
-
-
-    }
-
-
-
-
-}
diff --git a/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/util/Vaa.java b/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/util/Vaa.java
deleted file mode 100644
index 33a08306bf..0000000000
--- a/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/util/Vaa.java
+++ /dev/null
@@ -1,77 +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.causeway.incubator.viewer.vaadin.model.util;
-
-import com.vaadin.flow.component.ClickEvent;
-import com.vaadin.flow.component.Component;
-import com.vaadin.flow.component.ComponentEventListener;
-import com.vaadin.flow.component.ComponentUtil;
-import com.vaadin.flow.component.HasComponents;
-import com.vaadin.flow.component.button.Button;
-import com.vaadin.flow.component.button.ButtonVariant;
-import com.vaadin.flow.component.html.Label;
-
-import lombok.val;
-import lombok.experimental.UtilityClass;
-
-/**
- * Vaadin common idioms, in alphabetical order.
- */
-@UtilityClass
-public class Vaa {
-
-    // -- COMPONENT FACTORIES
-
-    public <T extends Component> T add(final HasComponents container, final T component) {
-        container.add(component);
-        return component;
-    }
-
-    public Button newButton(final String label) {
-        val component = new Button(label);
-        component.getStyle().set("margin-left", "0.5em");
-        component.addThemeVariants(ButtonVariant.LUMO_SMALL);
-        return component;
-    }
-
-    public Button newButton(final HasComponents container, final String label, final ComponentEventListener<ClickEvent<Button>> eventHandler) {
-        val component = newButton(label);
-        container.add(component);
-        component.addClickListener(eventHandler);
-        return component;
-    }
-
-    public Label newLabel(final HasComponents container, final String label) {
-        val component = new Label(label);
-        container.add(component);
-        return component;
-    }
-
-    // -- COMPONENT EVENTS
-
-    @SuppressWarnings({ "unchecked", "rawtypes" })
-    public <T extends Component> T setOnClick(
-            final T component,
-            final Runnable onClick) {
-        ComponentUtil.addListener(component, ClickEvent.class,
-                (ComponentEventListener) e->onClick.run());
-        return component;
-    }
-
-}
diff --git a/incubator/viewers/vaadin/pom.xml b/incubator/viewers/vaadin/pom.xml
deleted file mode 100644
index d3a3489e03..0000000000
--- a/incubator/viewers/vaadin/pom.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>org.apache.causeway.incubator</groupId>
-		<artifactId>causeway-incubator</artifactId>
-		<version>2.0.0-SNAPSHOT</version>
-		<relativePath>../../pom.xml</relativePath>
-	</parent>
-
-	<groupId>org.apache.causeway.incubator.viewer</groupId>
-	<artifactId>causeway-viewer-vaadin</artifactId>
-	<name>Apache Causeway Inc - Viewer Vaadin</name>
-	<description>
-		Initial sketches
-	</description>
-
-	<properties>
-		<jar-plugin.automaticModuleName>org.apache.causeway.incubator.viewer.vaadin</jar-plugin.automaticModuleName>
-		<git-plugin.propertiesDir>org/apache/causeway/incubator/viewer/vaadin</git-plugin.propertiesDir>
-		<enforcer.skip>true</enforcer.skip>
-	</properties>
-
-	<packaging>pom</packaging>
-
-	<dependencyManagement>
-		<dependencies>
-
-			<dependency>
-				<groupId>org.apache.causeway.incubator.viewer</groupId>
-				<artifactId>causeway-viewer-vaadin-model</artifactId>
-				<version>2.0.0-SNAPSHOT</version>
-			</dependency>
-			<dependency>
-				<groupId>org.apache.causeway.incubator.viewer</groupId>
-				<artifactId>causeway-viewer-vaadin-ui</artifactId>
-				<version>2.0.0-SNAPSHOT</version>
-			</dependency>
-			<dependency>
-				<groupId>org.apache.causeway.incubator.viewer</groupId>
-				<artifactId>causeway-viewer-vaadin-viewer</artifactId>
-				<version>2.0.0-SNAPSHOT</version>
-			</dependency>
-
-		</dependencies>
-	</dependencyManagement>
-
-	<modules>
-		<module>model</module>
-		<module>viewer</module>
-		<module>ui</module>
-	</modules>
-
-</project>
diff --git a/incubator/viewers/vaadin/ui/frontend/index.html b/incubator/viewers/vaadin/ui/frontend/index.html
deleted file mode 100644
index a5cdd4018a..0000000000
--- a/incubator/viewers/vaadin/ui/frontend/index.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE html>
-<!--
-This file is auto-generated by Vaadin.
--->
-
-<html lang="en">
-<head>
-  <meta charset="UTF-8" />
-  <meta name="viewport" content="width=device-width, initial-scale=1" />
-  <style>
-    body, #outlet {
-      height: 100vh;
-      width: 100%;
-      margin: 0;
-    }
-  </style>
-  <!-- index.ts is included here automatically (either by the dev server or during the build) -->
-</head>
-<body>
-  <!-- This outlet div is where the views are rendered -->
-  <div id="outlet"></div>
-</body>
-</html>
diff --git a/incubator/viewers/vaadin/ui/pom.xml b/incubator/viewers/vaadin/ui/pom.xml
deleted file mode 100644
index ad779e3bc9..0000000000
--- a/incubator/viewers/vaadin/ui/pom.xml
+++ /dev/null
@@ -1,163 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>org.apache.causeway.incubator.viewer</groupId>
-		<artifactId>causeway-viewer-vaadin</artifactId>
-		<version>2.0.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>causeway-viewer-vaadin-ui</artifactId>
-	<name>Apache Causeway Inc - Viewer Vaadin (UI Components)</name>
-
-	<properties>
-		<jar-plugin.automaticModuleName>org.apache.causeway.incubator.viewer.vaadin.ui</jar-plugin.automaticModuleName>
-		<git-plugin.propertiesDir>org/apache/causeway/incubator/viewer/vaadin/ui</git-plugin.propertiesDir>
-		<enforcer.skip>true</enforcer.skip>
-	</properties>
-
-	<!-- IN CASE WE WANT TO USE VAADIN ADDONS -->
-	<!-- <repositories> -->
-	<!-- <repository> -->
-	<!-- <id>vaadin-addons</id> -->
-	<!-- <url>https://maven.vaadin.com/vaadin-addons</url> -->
-	<!-- </repository> -->
-	<!-- </repositories> -->
-
-	<build>
-		<plugins>
-
-			<plugin>
-				<groupId>com.github.eirslett</groupId>
-				<artifactId>frontend-maven-plugin</artifactId>
-				<version>1.12.1</version>
-				<executions>
-
-					<execution>
-						<id>install node and npm</id>
-						<goals>
-							<goal>install-node-and-npm</goal>
-						</goals>
-						<configuration>
-							<!-- See https://nodejs.org/en/download/ for latest node and npm (lts) 
-								versions -->
-							<nodeVersion>${node.version}</nodeVersion>
-							<npmVersion>${npm.version}</npmVersion>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-
-			<plugin>
-				<groupId>com.vaadin</groupId>
-				<artifactId>vaadin-maven-plugin</artifactId>
-				<version>${vaadin.version}</version>
-				<executions>
-					<execution>
-						<id>frontend</id>
-						<phase>compile</phase>
-						<goals>
-							<goal>prepare-frontend</goal>
-							<goal>build-frontend</goal>
-						</goals>
-						<configuration>
-							<productionMode>true</productionMode>
-							<!-- does not work due to realative path ../../ resolving issues;
-							instead we copy the frontend folder with the maven-resources-plugin below  
-						    <frontendDirectory>${project.basedir}/src/main/resources/static/frontend</frontendDirectory>
-						    -->
-    					</configuration>
-					</execution>
-				</executions>
-			</plugin>
-			
-			<plugin>
-			    <artifactId>maven-resources-plugin</artifactId>
-			    <executions>
-			        <execution>
-			            <id>copy-resource-one</id>
-			            <phase>validate</phase>
-			            <goals>
-			                <goal>copy-resources</goal>
-			            </goals>
-			            <configuration>
-			                <outputDirectory>${project.basedir}/src/main/resources/static/frontend</outputDirectory>
-			                <resources>
-			                    <resource>
-			                        <directory>frontend</directory>
-			                        <filtering>true</filtering>
-			                    </resource>
-			                </resources>
-			            </configuration>
-			        </execution>
-			    </executions>
-			</plugin>
-			
-		</plugins>
-	</build>
-
-	<dependencies>
-
-		<dependency>
-			<groupId>org.apache.causeway.incubator.viewer</groupId>
-			<artifactId>causeway-viewer-vaadin-model</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.apache.causeway.core</groupId>
-			<artifactId>causeway-core-runtimeservices</artifactId>
-		</dependency>
-		
-		<dependency>
-			<groupId>org.apache.causeway.viewer</groupId>
-            <artifactId>causeway-viewer-commons-services</artifactId>
-        </dependency>
-        
-        <dependency>
-			<groupId>org.apache.causeway.viewer</groupId>
-            <artifactId>causeway-viewer-commons-prism</artifactId>
-        </dependency>
-
-		<dependency>
-			<groupId>com.vaadin</groupId>
-			<artifactId>vaadin-spring</artifactId>
-			<exclusions>
-				<exclusion>
-					<!-- convergence issue with wicket 1.3.3 vs 1.4 -->
-					<groupId>commons-fileupload</groupId>
-					<artifactId>commons-fileupload</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-		<dependency>
-			<groupId>commons-fileupload</groupId>
-			<artifactId>commons-fileupload</artifactId>
-			<version>1.5</version>
-		</dependency>
-
-		<!-- VAADIN ADDONS -->
-
-		<!-- <dependency> -->
-		<!-- <groupId>com.github.appreciated</groupId> -->
-		<!-- <artifactId>vaadin-css-grid</artifactId> -->
-		<!-- <version>2.0.0.beta3</version> -->
-		<!-- <version>0.8.4</version> -->
-		<!-- </dependency> -->
-
-	</dependencies>
-
-</project>
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/CausewayModuleIncViewerVaadinUi.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/CausewayModuleIncViewerVaadinUi.java
deleted file mode 100644
index 028adf0941..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/CausewayModuleIncViewerVaadinUi.java
+++ /dev/null
@@ -1,69 +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.causeway.incubator.viewer.vaadin.ui;
-
-import com.vaadin.flow.spring.annotation.EnableVaadin;
-
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-
-import org.apache.causeway.incubator.viewer.vaadin.model.CausewayModuleIncViewerVaadinModel;
-import org.apache.causeway.incubator.viewer.vaadin.ui.auth.LogoutHandlerVaa;
-import org.apache.causeway.incubator.viewer.vaadin.ui.auth.VaadinAuthenticationHandler;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.UiComponentFactoryVaa;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.blob.BlobFieldFactory;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.clob.ClobFieldFactory;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.markup.MarkupFieldFactory;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.other.FallbackFieldFactory;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.temporal.TemporalFieldFactory;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.text.TextFieldFactory;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.text.uuid.UuidFieldFactory;
-import org.apache.causeway.incubator.viewer.vaadin.ui.pages.main.UiActionHandlerVaa;
-import org.apache.causeway.incubator.viewer.vaadin.ui.pages.main.UiContextVaaDefault;
-import org.apache.causeway.viewer.commons.services.CausewayModuleViewerCommonsServices;
-
-
-@Configuration
-@Import({
-        // Modules
-        CausewayModuleViewerCommonsServices.class,
-        CausewayModuleIncViewerVaadinModel.class,
-
-        // @Service's
-        VaadinAuthenticationHandler.class,
-        LogoutHandlerVaa.class,
-        UiComponentFactoryVaa.class,
-        UiActionHandlerVaa.class,
-        UiContextVaaDefault.class,
-
-        // Component Factories
-        BlobFieldFactory.class,
-        ClobFieldFactory.class,
-        MarkupFieldFactory.class,
-        TemporalFieldFactory.class,
-        TextFieldFactory.class,
-        UuidFieldFactory.class,
-        // last in chain
-        FallbackFieldFactory.class,
-
-
-})
-@EnableVaadin("org.apache.causeway.incubator.viewer.vaadin.ui") // scan for vaadin annotations
-public class CausewayModuleIncViewerVaadinUi {
-}
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/auth/AuthSessionStoreUtil.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/auth/AuthSessionStoreUtil.java
deleted file mode 100644
index 7c764d9282..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/auth/AuthSessionStoreUtil.java
+++ /dev/null
@@ -1,79 +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.causeway.incubator.viewer.vaadin.ui.auth;
-
-import java.util.Optional;
-
-import javax.servlet.http.HttpSession;
-
-import com.vaadin.flow.server.VaadinSession;
-
-import org.springframework.lang.Nullable;
-
-import org.apache.causeway.applib.services.iactnlayer.InteractionContext;
-
-import lombok.NonNull;
-import lombok.experimental.UtilityClass;
-
-/**
- * @implNote Stores authentication information (Authentication) on the HttpSession that is associated
- * with the current thread's VaadinSession or directly on the provided HttpSession if given as argument.
- *
- * @since Mar 15, 2020
- *
- */
-@UtilityClass
-public class AuthSessionStoreUtil {
-
-    public static void put(
-            final @NonNull HttpSession httpSession,
-            final @Nullable InteractionContext auth) {
-        httpSession.setAttribute(InteractionContext.class.getName(), auth);
-    }
-
-    public static Optional<InteractionContext> get(
-            final @NonNull HttpSession httpSession) {
-        return Optional.ofNullable(
-                (InteractionContext)httpSession
-                .getAttribute(InteractionContext.class.getName()));
-    }
-
-    /** when within a VaadinSession */
-    public static void put(
-            final @Nullable InteractionContext auth) {
-        Optional.ofNullable(VaadinSession.getCurrent())
-        .map(VaadinSession::getSession)
-        .ifPresent(sessionVaa->{
-            sessionVaa.setAttribute(InteractionContext.class.getName(), auth);
-        });
-    }
-
-    /** when within a VaadinSession */
-    public static Optional<InteractionContext> get() {
-        return Optional.ofNullable(
-                (InteractionContext)VaadinSession.getCurrent().getSession()
-                .getAttribute(InteractionContext.class.getName()));
-    }
-
-    /** when within a VaadinSession */
-    public static void clear() {
-        put(null);
-    }
-
-}
\ No newline at end of file
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/auth/LogoutHandlerVaa.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/auth/LogoutHandlerVaa.java
deleted file mode 100644
index 43c19ae9e8..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/auth/LogoutHandlerVaa.java
+++ /dev/null
@@ -1,67 +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.causeway.incubator.viewer.vaadin.ui.auth;
-
-import javax.inject.Inject;
-
-import com.vaadin.flow.server.VaadinRequest;
-import com.vaadin.flow.server.VaadinSession;
-
-import org.springframework.stereotype.Service;
-
-import org.apache.causeway.core.metamodel.context.MetaModelContext;
-import org.apache.causeway.core.security.authentication.logout.LogoutHandler;
-
-import lombok.val;
-import lombok.extern.log4j.Log4j2;
-
-@Service
-@Log4j2
-public class LogoutHandlerVaa implements LogoutHandler {
-
-    @Inject private MetaModelContext metaModelContext;
-
-    @Override
-    public void logout() {
-
-        val sessionVaa = VaadinSession.getCurrent();
-        if(sessionVaa==null) {
-            return; // ignore if there is no current session
-        }
-
-        AuthSessionStoreUtil.get()
-        .ifPresent(auth->{
-            log.info("logging out {}", auth.getUser().getName());
-            // logout AuthenticationManager
-            metaModelContext.getAuthenticationManager().closeSession(auth);
-            AuthSessionStoreUtil.clear();
-        });
-
-        sessionVaa.close();
-
-    }
-
-    @Override
-    public boolean isHandlingCurrentThread() {
-        return VaadinRequest.getCurrent()!=null;
-    }
-
-
-
-}
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/auth/VaadinAuthenticationHandler.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/auth/VaadinAuthenticationHandler.java
deleted file mode 100644
index 80f94cf1f5..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/auth/VaadinAuthenticationHandler.java
+++ /dev/null
@@ -1,141 +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.causeway.incubator.viewer.vaadin.ui.auth;
-
-import java.util.concurrent.Callable;
-
-import javax.inject.Inject;
-
-import com.vaadin.flow.component.page.AppShellConfigurator;
-import com.vaadin.flow.router.BeforeEnterEvent;
-import com.vaadin.flow.router.BeforeLeaveEvent;
-import com.vaadin.flow.server.PWA;
-import com.vaadin.flow.server.ServiceInitEvent;
-import com.vaadin.flow.server.VaadinServiceInitListener;
-import com.vaadin.flow.theme.Theme;
-import com.vaadin.flow.theme.lumo.Lumo;
-
-import org.springframework.stereotype.Component;
-
-import org.apache.causeway.applib.services.iactnlayer.InteractionService;
-import org.apache.causeway.commons.functional.ThrowingRunnable;
-import org.apache.causeway.core.metamodel.context.MetaModelContext;
-import org.apache.causeway.core.security.authentication.AuthenticationRequest;
-import org.apache.causeway.incubator.viewer.vaadin.ui.pages.login.VaadinLoginView;
-
-import lombok.val;
-import lombok.extern.log4j.Log4j2;
-
-/**
- * Hooks into Vaadin's routing, such that unauthorized access is redirected to the login view.
- * @since Mar 9, 2020
- *
- */
-@Component
-@PWA(name = "Example Project", shortName = "Example Project")
-//@Theme(themeClass = Material.class, variant = Material.DARK)
-@Theme(themeClass = Lumo.class, variant = Lumo.LIGHT)
-@Log4j2
-public class VaadinAuthenticationHandler
-implements
-    AppShellConfigurator,
-    VaadinServiceInitListener {
-
-    private static final long serialVersionUID = 1L;
-
-    @Inject private transient InteractionService interactionService;
-    @Inject private transient MetaModelContext metaModelContext;
-
-    @Override
-    public void serviceInit(ServiceInitEvent event) {
-
-        log.debug("service init event {}", event.getSource());
-
-        event.getSource().addUIInitListener(uiEvent -> {
-            uiEvent.getUI().addBeforeEnterListener(this::beforeEnter);
-            uiEvent.getUI().addBeforeLeaveListener(this::beforeLeave);
-        });
-    }
-
-    /**
-     * @param authenticationRequest
-     * @return whether login was successful
-     */
-    public boolean loginToSession(AuthenticationRequest authenticationRequest) {
-        val authentication = metaModelContext.getAuthenticationManager()
-                .authenticate(authenticationRequest);
-
-        if(authentication!=null) {
-            log.debug("logging in {}", authentication.getUser().getName());
-            AuthSessionStoreUtil.put(authentication);
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Executes a piece of code in a new (possibly nested) CausewayInteraction, using the
-     * current Authentication, as, at this point, should be stored in the
-     * current VaadinSession.
-     *
-     * @param callable - the piece of code to run
-     *
-     */
-    public <R> R callAuthenticated(Callable<R> callable) {
-        return AuthSessionStoreUtil.get()
-                .map(authentication->interactionService.call(authentication, callable))
-                .orElse(null); // TODO redirect to login
-    }
-
-    /**
-     * Variant of {@link #callAuthenticated(Callable)} that takes a runnable.
-     * @param runnable
-     */
-    public void runAuthenticated(ThrowingRunnable runnable) {
-        final Callable<Void> callable = ()->{runnable.run(); return null;};
-        callAuthenticated(callable);
-    }
-
-
-    // -- HELPER
-
-    private void beforeEnter(BeforeEnterEvent event) {
-        val targetView = event.getNavigationTarget();
-        log.debug("detected a routing event to {}", targetView);
-
-        val authentication = AuthSessionStoreUtil.get().orElse(null);
-        if(authentication!=null) {
-            interactionService.openInteraction(authentication);
-            return; // access granted
-        }
-        // otherwise redirect to login page
-        if(!VaadinLoginView.class.equals(targetView)) {
-            event.rerouteTo(VaadinLoginView.class);
-        }
-    }
-
-    private void beforeLeave(BeforeLeaveEvent event) {
-        //causewayInteractionFactory.closeSessionStack();
-    }
-
-
-
-
-
-}
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/binding/BindingsVaa.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/binding/BindingsVaa.java
deleted file mode 100644
index a7baea24c6..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/binding/BindingsVaa.java
+++ /dev/null
@@ -1,373 +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.causeway.incubator.viewer.vaadin.ui.binding;
-
-import java.util.function.UnaryOperator;
-
-import com.vaadin.flow.component.HasValidation;
-import com.vaadin.flow.component.HasValue;
-import com.vaadin.flow.data.binder.Binder;
-import com.vaadin.flow.data.binder.Binder.BindingBuilder;
-import com.vaadin.flow.data.binder.Setter;
-import com.vaadin.flow.data.converter.Converter;
-import com.vaadin.flow.function.ValueProvider;
-
-import org.springframework.lang.Nullable;
-
-import org.apache.causeway.commons.binding.Bindable;
-import org.apache.causeway.commons.binding.Observable;
-import org.apache.causeway.commons.internal.base._Casts;
-import org.apache.causeway.commons.internal.base._Strings;
-import org.apache.causeway.commons.internal.exceptions._Exceptions;
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedFeature;
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedParameter;
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedProperty;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
-
-import lombok.NonNull;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-import lombok.experimental.UtilityClass;
-
-@UtilityClass
-public final class BindingsVaa {
-
-    // -- UNIDIRECTIONAL
-
-    /**
-     * Binds the uiField's (rendered) value to an {@link Observable}.
-     * @param <V> field/model/presentation value type
-     * @param uiField
-     * @param value - observable (backend)
-     * @param customizer - to customize the binding builder (ignored if null)
-     */
-    public static <V> void bindValue(
-            final @NonNull HasValue<?, V> uiField,
-            final @NonNull Observable<ManagedObject> value,
-            @Nullable UnaryOperator<BindingBuilder<Observable<ManagedObject>, V>> customizer) {
-
-
-        uiField.setReadOnly(true);
-        val binder = new Binder<Observable<ManagedObject>>();
-        val internalBinding = InternalUnidirBinding.<V>of();
-
-        if(customizer==null) {
-            customizer = UnaryOperator.identity();
-        }
-
-        customizer.apply(binder.forField(uiField))
-        .bind(
-                internalBinding,
-                null);
-
-        binder.setBean(value);
-
-        //TODO supposed to account for changes originating from backend side
-        //need to check whether this is possible with Vaadin
-        value.addListener((e, oldValue, newValue)->{
-            uiField.setValue(_Casts.<V>uncheckedCast(newValue.getPojo()));
-        });
-
-    }
-
-    /**
-     * Binds the uiField's (rendered) value to an {@link Observable}.
-     * @param <P> field/presentation value type
-     * @param <M> model value type
-     * @param uiField
-     * @param value - observable (backend)
-     * @param converter - converts between model and presentation
-     * @param customizer - to customize the binding builder (ignored if null)
-     */
-    public static <P, M> void bindValue(
-            final @NonNull HasValue<?, P> uiField,
-            final @NonNull Observable<ManagedObject> value,
-            final @NonNull Converter<P, M> converter,
-            @Nullable UnaryOperator<BindingBuilder<Observable<ManagedObject>, M>> customizer) {
-
-        uiField.setReadOnly(true);
-        val binder = new Binder<Observable<ManagedObject>>();
-        val internalBinding = InternalUnidirBinding.<M>of();
-
-        if(customizer==null) {
-            customizer = UnaryOperator.identity();
-        }
-
-        customizer.apply(
-                binder.forField(uiField)
-                .withConverter(converter))
-        .bind(
-                internalBinding,
-                null);
-
-        binder.setBean(value);
-
-        //TODO supposed to account for changes originating from backend side
-        //need to check whether this is possible with Vaadin
-        value.addListener((e, oldValue, newValue)->{
-            val newModelValue = _Casts.<M>uncheckedCast(newValue.getPojo());
-            P newFieldValue = converter.convertToPresentation(newModelValue, null);
-            uiField.setValue(newFieldValue);
-        });
-
-    }
-
-    // -- BIDIRECTIONAL
-
-    /**
-     * Binds the uiField's (rendered) value to a {@link Bindable}.
-     * @param <V> field/model value type
-     * @param uiField
-     * @param value
-     * @param valueSpec
-     * @param customizer - to customize the binding builder (ignored if null)
-     */
-    public static <V> void bindValueBidirectional(
-            final @NonNull HasValue<?, V> uiField,
-            final @NonNull Bindable<ManagedObject> value,
-            final @NonNull ObjectSpecification valueSpec,
-            @Nullable UnaryOperator<BindingBuilder<Bindable<ManagedObject>, V>> customizer) {
-
-        uiField.setReadOnly(false);
-        val binder = new Binder<Bindable<ManagedObject>>();
-        val internalBinding = InternalBidirBinding.<V>of(valueSpec);
-
-        if(customizer==null) {
-            customizer = UnaryOperator.identity();
-        }
-
-        customizer.apply(binder.forField(uiField))
-        .bind(
-                internalBinding::apply,
-                internalBinding::accept);
-
-        binder.setBean(value);
-
-        //TODO supposed to account for changes originating from backend side
-        // not sure whether this works
-        value.addListener((e, oldValue, newValue)->{
-            uiField.setValue(_Casts.uncheckedCast(newValue.getPojo()));
-        });
-
-    }
-
-    /**
-     * Binds the uiField's (rendered) value to a {@link Bindable}.
-     * @param <P> field/presentation value type
-     * @param <M> model value type
-     * @param uiField
-     * @param value
-     * @param valueSpec
-     * @param converter - converts between model and presentation
-     * @param customizer - to customize the binding builder (ignored if null)
-     */
-    public static <P, M> void bindValueBidirectional(
-            final @NonNull HasValue<?, P> uiField,
-            final @NonNull Bindable<ManagedObject> value,
-            final @NonNull ObjectSpecification valueSpec,
-            final @NonNull Converter<P, M> converter,
-            @Nullable UnaryOperator<BindingBuilder<Bindable<ManagedObject>, M>> customizer) {
-
-        uiField.setReadOnly(false);
-        val binder = new Binder<Bindable<ManagedObject>>();
-        val internalBinding = InternalBidirBinding.<M>of(valueSpec);
-
-        if(customizer==null) {
-            customizer = UnaryOperator.identity();
-        }
-
-        customizer.apply(
-                binder.forField(uiField)
-                .withConverter(converter))
-        .bind(
-                internalBinding::apply,
-                internalBinding::accept);
-
-        binder.setBean(value);
-
-        //TODO supposed to account for changes originating from backend side
-        // not sure whether this works
-        value.addListener((e, oldValue, newValue)->{
-            val newModelValue = _Casts.<M>uncheckedCast(newValue.getPojo());
-            P newFieldValue = converter.convertToPresentation(newModelValue, null);
-            uiField.setValue(newFieldValue);
-        });
-
-    }
-
-    // -- VALIDATION
-
-    /**
-     * Binds the uiField's (rendered) validation feedback to an {@link Observable}.
-     * @param uiField
-     * @param validationFeedbackMessage
-     */
-    public static void bindValidationFeedback(
-            final @NonNull HasValidation uiField,
-            final @NonNull Observable<String> validationFeedbackMessage) {
-
-        //TODO supposed to account for changes originating from backend side
-        // not sure whether this works
-        validationFeedbackMessage.addListener((e, oldValue, newValue)->{
-            uiField.setErrorMessage(newValue);
-            uiField.setInvalid(_Strings.isNotEmpty(newValue));
-        });
-
-        val initialValue = validationFeedbackMessage.getValue();
-        uiField.setErrorMessage(initialValue);
-        uiField.setInvalid(_Strings.isNotEmpty(initialValue));
-
-    }
-
-    // -- FEATURE (PARAMETER OR PROPERTY)
-
-    public static <P, F extends HasValue<?, P> & HasValidation>
-    void bindFeature(
-            final @NonNull F uiField,
-            final @NonNull ManagedFeature managedFeature) {
-        bindFeatureWithConverter(uiField, managedFeature, null, null);
-    }
-
-
-    /**
-     * @param <P> field/presentation value type
-     * @param <M> model value type
-     * @param uiField
-     * @param managedFeature
-     * @param converter - ignored if {@code null}, converts between model and presentation
-     * @param nullRepresentation - (TODO remove) ignored if converter is {@code null}
-     */
-    public static <M, P, F extends HasValue<?, P> & HasValidation>
-    void bindFeatureWithConverter(
-            final @NonNull F uiField,
-            final @NonNull ManagedFeature managedFeature,
-            final @Nullable Converter<P, M> converter,
-            final @Nullable M nullRepresentation) { // TODO remove, yet poorly designed
-
-        val valueSpec = managedFeature.getElementType();
-
-        if(managedFeature instanceof ManagedParameter) {
-
-            val managedParameter = (ManagedParameter)managedFeature;
-
-            //TODO need a more advanced mechanism here:
-            // whether readonly or r/w depends (dynamically) on the state of the
-            // Parameter Negotiation Model
-            val isReadOnly = managedParameter
-                    .checkUsability(managedParameter.getNegotiationModel().getParamValues())
-                    .isPresent();
-
-            if(isReadOnly) {
-                // readonly binding
-                if(converter!=null) {
-                    bindValue(uiField, managedParameter.getValue(), converter, bb->bb.withNullRepresentation(nullRepresentation));
-                } else {
-                    bindValue(uiField, managedParameter.getValue(), null);
-                }
-
-            } else {
-                // r/w binding
-                if(converter!=null) {
-                    bindValueBidirectional(uiField, managedParameter.getValue(), valueSpec, converter, bb->bb.withNullRepresentation(nullRepresentation));
-                } else {
-                    bindValueBidirectional(uiField, managedParameter.getValue(), valueSpec, null);
-                }
-            }
-
-            // bind parameter validation feedback
-            bindValidationFeedback(uiField, managedParameter.getValidationMessage());
-
-        } else if(managedFeature instanceof ManagedProperty) {
-
-            val managedProperty = (ManagedProperty)managedFeature;
-            val isReadOnly = managedProperty.checkUsability().isPresent();
-
-            if(isReadOnly) {
-                // readonly binding
-                if(converter!=null) {
-                    bindValue(uiField, managedProperty.getValue(), converter, bb->bb.withNullRepresentation(nullRepresentation));
-                } else {
-                    bindValue(uiField, managedProperty.getValue(), null);
-                }
-            } else {
-                //TODO allow property (inline) editing
-                //render readonly for now (could use fallback dialog as an intermediate step)
-                if(converter!=null) {
-                    bindValue(uiField, managedProperty.getValue(), converter, bb->bb.withNullRepresentation(nullRepresentation));
-                } else {
-                    bindValue(uiField, managedProperty.getValue(), null);
-                }
-            }
-
-        } else {
-            throw _Exceptions.unexpectedCodeReach();
-        }
-
-    }
-
-    // -- HELPER
-
-    @RequiredArgsConstructor(staticName = "of")
-    private static class InternalUnidirBinding<V>
-    implements ValueProvider<Observable<ManagedObject>, V> {
-
-        private static final long serialVersionUID = 1L;
-
-        //GETTER
-        @Override
-        public V apply(@NonNull final Observable<ManagedObject> source) {
-            val newFieldValue = source.getValue() == null
-                    ? null
-                    : _Casts.<V>uncheckedCast(source.getValue().getPojo());
-            return newFieldValue;
-        }
-
-    }
-
-    @RequiredArgsConstructor(staticName = "of")
-    private static class InternalBidirBinding<V>
-    implements
-        ValueProvider<Bindable<ManagedObject>, V>,
-        Setter<Bindable<ManagedObject>, V>
-    {
-
-        private static final long serialVersionUID = 1L;
-        private final @NonNull ObjectSpecification valueSpec;
-
-        //GETTER
-        @Override
-        public V apply(@NonNull final Bindable<ManagedObject> source) {
-            val newFieldValue = _Casts.<V>uncheckedCast(source.getValue().getPojo());
-            return newFieldValue;
-        }
-
-        //SETTER
-        @Override
-        public void accept(@NonNull final Bindable<ManagedObject> target, final V fieldValue) {
-            //TODO should we support the packed case as well?
-            target.setValue(ManagedObject.adaptSingular(valueSpec, fieldValue));
-        }
-
-
-    }
-
-
-
-}
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/UiComponentFactoryVaa.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/UiComponentFactoryVaa.java
deleted file mode 100644
index a55b953d82..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/UiComponentFactoryVaa.java
+++ /dev/null
@@ -1,95 +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.causeway.incubator.viewer.vaadin.ui.components;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
-import javax.inject.Inject;
-
-import com.vaadin.flow.component.Component;
-
-import org.springframework.stereotype.Service;
-
-import org.apache.causeway.commons.handler.ChainOfResponsibility;
-import org.apache.causeway.commons.internal.exceptions._Exceptions;
-import org.apache.causeway.incubator.viewer.vaadin.model.util.Vaa;
-import org.apache.causeway.viewer.commons.model.components.UiComponentFactory;
-
-import lombok.Getter;
-import lombok.val;
-
-@Service
-public class UiComponentFactoryVaa implements UiComponentFactory<Component, Component> {
-
-    private final ChainOfResponsibility<ComponentRequest, Component> chainOfHandlers;
-
-    /** handlers in order of precedence (debug info)*/
-    @Getter
-    private final List<Class<?>> registeredHandlers;
-
-    @Inject
-    private UiComponentFactoryVaa(final List<Handler<Component>> handlers) {
-        this.chainOfHandlers = ChainOfResponsibility.named("UiComponentFactoryVaa", handlers);
-        this.registeredHandlers = handlers.stream()
-                .map(Handler::getClass)
-                .collect(Collectors.toList());
-    }
-
-    @Override
-    public Component buttonFor(final ButtonRequest request) {
-
-        val managedAction = request.getManagedAction();
-        val disablingUiModelIfAny = request.getDisablingUiModelIfAny();
-        val actionEventHandler = request.getActionEventHandler();
-
-        val uiButton = Vaa.newButton(managedAction.getFriendlyName());
-
-        disablingUiModelIfAny.ifPresent(disablingUiModel->{
-//            uiContext.getDisablingDecoratorForButton()
-//                .decorate(uiButton, disablingUiModel);
-            uiButton.setEnabled(false);
-        });
-
-        if(!disablingUiModelIfAny.isPresent()) {
-            uiButton.addClickListener(event->actionEventHandler.accept(managedAction));
-        }
-
-        return uiButton;
-
-    }
-
-    @Override
-    public Component componentFor(final ComponentRequest request) {
-        return chainOfHandlers.handle(request);
-    }
-
-    @Override
-    public Component parameterFor(final ComponentRequest request) {
-        return chainOfHandlers.handle(request);
-    }
-
-    @Override
-    public LabelAndPosition<Component> labelFor(final ComponentRequest request) {
-        throw _Exceptions.unsupportedOperation("unlikely to be needed for Vaadin, "
-                + "since Field components already have their own label");
-    }
-
-
-}
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/UiComponentHandlerVaa.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/UiComponentHandlerVaa.java
deleted file mode 100644
index 051f43d171..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/UiComponentHandlerVaa.java
+++ /dev/null
@@ -1,28 +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.causeway.incubator.viewer.vaadin.ui.components;
-
-import com.vaadin.flow.component.Component;
-
-import org.apache.causeway.viewer.commons.model.components.UiComponentFactory;
-
-public interface UiComponentHandlerVaa
-extends UiComponentFactory.Handler<Component> {
-
-}
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/action/ActionDialog.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/action/ActionDialog.java
deleted file mode 100644
index 5587ea70d1..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/action/ActionDialog.java
+++ /dev/null
@@ -1,222 +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.causeway.incubator.viewer.vaadin.ui.components.action;
-
-import java.util.function.Predicate;
-import java.util.stream.Stream;
-
-import com.vaadin.flow.component.Component;
-import com.vaadin.flow.component.button.Button;
-import com.vaadin.flow.component.button.ButtonVariant;
-import com.vaadin.flow.component.dependency.CssImport;
-import com.vaadin.flow.component.dialog.Dialog;
-import com.vaadin.flow.component.html.Div;
-import com.vaadin.flow.component.html.Footer;
-import com.vaadin.flow.component.html.H2;
-import com.vaadin.flow.component.html.Header;
-import com.vaadin.flow.component.icon.VaadinIcon;
-import com.vaadin.flow.theme.lumo.Lumo;
-
-import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.causeway.core.metamodel.interactions.managed.ParameterNegotiationModel;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.UiComponentFactoryVaa;
-
-import lombok.NonNull;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-
-@CssImport(value = "./css/dialog-overlay.css", themeFor = "vaadin-dialog-overlay")
-@CssImport("./css/action-dialog.css")
-public class ActionDialog extends Dialog {
-
-    private static final long serialVersionUID = 1L;
-
-    public static ActionDialog forManagedAction(
-            final @NonNull UiComponentFactoryVaa uiComponentFactory,
-            final @NonNull ManagedAction managedAction,
-            final @NonNull Predicate<Can<ManagedObject>> submitCallback) {
-
-        val actionDialog = new ActionDialog(uiComponentFactory, managedAction, submitCallback);
-        return actionDialog;
-    }
-
-    protected ActionDialog(
-            final UiComponentFactoryVaa uiComponentFactory,
-            final ManagedAction managedAction,
-            final Predicate<Can<ManagedObject>> submitCallback) {
-
-        setDraggable(true);
-        setModal(false);
-        setResizable(true);
-
-        // Dialog Theme
-
-        getElement().getThemeList().add("action-dialog");
-        setWidth("600px");
-        setHeight("auto");
-
-        // Content
-
-        val actionForm = ActionForm.forManagedAction(uiComponentFactory, managedAction);
-        val content = new Div(actionForm);
-        content.addClassName("dialog-content");
-
-        // Footer
-
-        val footer = footer(managedAction, actionForm.getPendingArgs(), submitCallback);
-
-        // Header
-
-        val hidableComponents = Can.of(content, footer);
-        val header = header(managedAction, hidableComponents);
-
-        // Add to Layout
-
-        add(header, content, footer);
-    }
-
-    // -- HELPER
-
-    private Component header(final ManagedAction managedAction, final Can<Component> hidableComponents) {
-
-        val resizeHandler = DialogResizeHandler.of(this, hidableComponents);
-
-        val title = new H2(managedAction.getFriendlyName());
-        title.addClassName("dialog-title");
-
-        val minButton = new Button(VaadinIcon.ANGLE_DOWN.create());
-        val maxButton = new Button(VaadinIcon.EXPAND_SQUARE.create());
-        val closeButton = new Button(VaadinIcon.CLOSE_SMALL.create());
-
-        val header = new Header(title, minButton, maxButton, closeButton);
-        header.getElement().getThemeList().add(Lumo.DARK);
-
-        // Button Themes
-        Stream.of(minButton, maxButton, closeButton)
-        .forEach(button->
-            button.addThemeVariants(ButtonVariant.LUMO_CONTRAST, ButtonVariant.LUMO_TERTIARY));
-
-        // Button Events
-        resizeHandler.bindMinimise(minButton);
-        resizeHandler.bindMaximise(maxButton);
-        closeButton.addClickListener(event -> close());
-
-        return header;
-    }
-
-    private Component footer(
-            final ManagedAction managedAction,
-            final ParameterNegotiationModel pendingArgs,
-            final Predicate<Can<ManagedObject>> submitCallback) {
-
-        val okButton = new Button("Ok");
-        val cancelButton = new Button("Cancel");
-        val footer = new Footer(okButton, cancelButton);
-
-        // Button Themes
-        okButton.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
-        cancelButton.addThemeVariants(ButtonVariant.LUMO_TERTIARY);
-
-        // Button Events
-        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;
-    }
-
-    // -- RESIZING
-
-    @RequiredArgsConstructor(staticName = "of")
-    private static class DialogResizeHandler {
-
-        private static final String DOCK = "dock";
-        private static final String FULLSCREEN = "fullscreen";
-
-        private boolean isDocked = false;
-        private boolean isFullScreen = false;
-
-        private final Dialog dialog;
-        private final Can<Component> hidableComponents;
-
-        private Button minButton;
-        private Button maxButton;
-
-        public void bindMinimise(final Button minButton) {
-            this.minButton = minButton;
-            minButton.addClickListener(event -> minimise());
-        }
-
-        public void bindMaximise(final Button maxButton) {
-            this.maxButton = maxButton;
-            maxButton.addClickListener(event -> maximise());
-        }
-
-        private void initialSize() {
-            minButton.setIcon(VaadinIcon.ANGLE_DOWN.create());
-            dialog.getElement().getThemeList().remove(DOCK);
-            maxButton.setIcon(VaadinIcon.EXPAND_SQUARE.create());
-            dialog.getElement().getThemeList().remove(FULLSCREEN);
-            dialog.setWidth("600px");
-            dialog.setHeight("auto");
-        }
-
-        private void minimise() {
-            if (isDocked) {
-                initialSize();
-            } else {
-                if (isFullScreen) {
-                    initialSize();
-                }
-                minButton.setIcon(VaadinIcon.ANGLE_UP.create());
-                dialog.getElement().getThemeList().add(DOCK);
-                dialog.setWidth("320px");
-            }
-            isDocked = !isDocked;
-            isFullScreen = false;
-            hidableComponents.forEach(comp->comp.setVisible(!isDocked));
-        }
-
-        private void maximise() {
-            if (isFullScreen) {
-                initialSize();
-            } else {
-                if (isDocked) {
-                    initialSize();
-                }
-                maxButton.setIcon(VaadinIcon.COMPRESS_SQUARE.create());
-                dialog.getElement().getThemeList().add(FULLSCREEN);
-                dialog.setSizeFull();
-                hidableComponents.forEach(comp->comp.setVisible(true));
-            }
-            isFullScreen = !isFullScreen;
-            isDocked = false;
-        }
-
-    }
-
-}
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/action/ActionForm.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/action/ActionForm.java
deleted file mode 100644
index 4e390a3bf1..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/action/ActionForm.java
+++ /dev/null
@@ -1,67 +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.causeway.incubator.viewer.vaadin.ui.components.action;
-
-import com.vaadin.flow.component.formlayout.FormLayout;
-
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.causeway.core.metamodel.interactions.managed.ParameterNegotiationModel;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.UiComponentFactoryVaa;
-import org.apache.causeway.viewer.commons.model.components.UiComponentFactory.ComponentRequest;
-
-import lombok.Getter;
-import lombok.NonNull;
-import lombok.val;
-
-public class ActionForm extends FormLayout {
-
-    private static final long serialVersionUID = 1L;
-
-    @Getter
-    private final ParameterNegotiationModel pendingArgs;
-
-    public static ActionForm forManagedAction(
-            final @NonNull UiComponentFactoryVaa uiComponentFactory,
-            final @NonNull ManagedAction managedAction) {
-
-        val actionForm = new ActionForm(uiComponentFactory, managedAction);
-        return actionForm;
-    }
-
-    protected ActionForm(
-            final UiComponentFactoryVaa uiComponentFactory,
-            final ManagedAction managedAction) {
-
-        pendingArgs = managedAction.startParameterNegotiation();
-
-        pendingArgs.getParamModels().forEach(paramModel->{
-
-            //val paramNr = paramModel.getParamNr(); // zero based
-
-            val request = ComponentRequest.of(paramModel);
-
-            //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/causeway/incubator/viewer/vaadin/ui/components/blob/BlobField.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/blob/BlobField.java
deleted file mode 100644
index c3d2c04dae..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/blob/BlobField.java
+++ /dev/null
@@ -1,68 +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.causeway.incubator.viewer.vaadin.ui.components.blob;
-
-import java.io.ByteArrayInputStream;
-
-import com.vaadin.flow.component.customfield.CustomField;
-import com.vaadin.flow.component.html.Image;
-import com.vaadin.flow.server.InputStreamFactory;
-import com.vaadin.flow.server.StreamResource;
-
-import org.springframework.lang.Nullable;
-
-import org.apache.causeway.applib.value.Blob;
-
-import lombok.val;
-
-public class BlobField extends CustomField<Blob> {
-
-    private static final long serialVersionUID = 1L;
-
-    private final Image image = new Image();
-    private Blob blob;
-
-    public BlobField(String label) {
-        super();
-        setLabel(label);
-        add(image);
-    }
-
-    @Override
-    protected Blob generateModelValue() {
-        return blob;
-    }
-
-    @Override
-    protected void setPresentationValue(@Nullable Blob blob) {
-        this.blob = blob;
-
-        if(blob==null) {
-            image.setSrc(""); // not sure whether this is correct
-            image.setAlt("empty");
-            return;
-        }
-
-        val streamResource = new StreamResource("isr",
-                (InputStreamFactory) () -> new ByteArrayInputStream(blob.getBytes()));
-        image.setSrc(streamResource);
-        image.setAlt(blob.getName());
-    }
-
-}
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/blob/BlobFieldFactory.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/blob/BlobFieldFactory.java
deleted file mode 100644
index a1780e79c4..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/blob/BlobFieldFactory.java
+++ /dev/null
@@ -1,46 +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.causeway.incubator.viewer.vaadin.ui.components.blob;
-
-import com.vaadin.flow.component.Component;
-
-import org.apache.causeway.applib.annotation.PriorityPrecedence;
-import org.apache.causeway.applib.value.Blob;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.UiComponentHandlerVaa;
-import org.apache.causeway.viewer.commons.model.components.UiComponentFactory.ComponentRequest;
-
-import lombok.val;
-
-@org.springframework.stereotype.Component
-@javax.annotation.Priority(PriorityPrecedence.MIDPOINT)
-public class BlobFieldFactory implements UiComponentHandlerVaa {
-
-    @Override
-    public boolean isHandling(final ComponentRequest request) {
-        return request.hasFacetForValueType(Blob.class);
-    }
-
-    @Override
-    public Component handle(final ComponentRequest request) {
-        val uiField = new BlobField(request.getFriendlyName());
-        uiField.setValue(request.getFeatureValue(Blob.class).orElse(null));
-        return uiField;
-    }
-
-}
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/clob/ClobField.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/clob/ClobField.java
deleted file mode 100644
index 81b8f8b80f..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/clob/ClobField.java
+++ /dev/null
@@ -1,58 +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.causeway.incubator.viewer.vaadin.ui.components.clob;
-
-import com.vaadin.flow.component.customfield.CustomField;
-
-import org.springframework.lang.Nullable;
-
-import org.apache.causeway.applib.value.Clob;
-
-// TODO just a stub yet
-//
-public class ClobField extends CustomField<Clob> {
-
-    private static final long serialVersionUID = 1L;
-
-    private Clob clob;
-
-    public ClobField(String label) {
-        super();
-        setLabel(label);
-        // ...
-    }
-
-    @Override
-    protected Clob generateModelValue() {
-        return clob;
-    }
-
-    @Override
-    protected void setPresentationValue(@Nullable Clob clob) {
-        this.clob = clob;
-
-        if(clob==null) {
-            // ...
-            return;
-        }
-
-        // ...
-    }
-
-}
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/clob/ClobFieldFactory.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/clob/ClobFieldFactory.java
deleted file mode 100644
index 48ef81c2b5..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/clob/ClobFieldFactory.java
+++ /dev/null
@@ -1,46 +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.causeway.incubator.viewer.vaadin.ui.components.clob;
-
-import com.vaadin.flow.component.Component;
-
-import org.apache.causeway.applib.annotation.PriorityPrecedence;
-import org.apache.causeway.applib.value.Clob;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.UiComponentHandlerVaa;
-import org.apache.causeway.viewer.commons.model.components.UiComponentFactory.ComponentRequest;
-
-import lombok.val;
-
-@org.springframework.stereotype.Component
-@javax.annotation.Priority(PriorityPrecedence.MIDPOINT)
-public class ClobFieldFactory implements UiComponentHandlerVaa {
-
-    @Override
-    public boolean isHandling(final ComponentRequest request) {
-        return request.hasFacetForValueType(Clob.class);
-    }
-
-    @Override
-    public Component handle(final ComponentRequest request) {
-        val uiField = new ClobField(request.getFriendlyName());
-        uiField.setValue(request.getFeatureValue(Clob.class).orElse(null));
-        return uiField;
-    }
-
-}
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/collection/TableViewVaa.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/collection/TableViewVaa.java
deleted file mode 100644
index 4dc51b3b8b..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/collection/TableViewVaa.java
+++ /dev/null
@@ -1,132 +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.causeway.incubator.viewer.vaadin.ui.components.collection;
-
-import java.util.Optional;
-
-import com.vaadin.flow.component.Component;
-import com.vaadin.flow.component.grid.Grid;
-import com.vaadin.flow.component.orderedlayout.VerticalLayout;
-
-import org.apache.causeway.applib.annotation.Where;
-import org.apache.causeway.core.metamodel.interactions.managed.nonscalar.DataRow;
-import org.apache.causeway.core.metamodel.interactions.managed.nonscalar.DataTableModel;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.causeway.incubator.viewer.vaadin.model.context.UiContextVaa;
-
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-import lombok.NonNull;
-import lombok.val;
-import lombok.extern.log4j.Log4j2;
-
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-@Log4j2
-public class TableViewVaa extends VerticalLayout {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final String NULL_LITERAL = "<NULL>";
-
-    public static TableViewVaa empty() {
-        return new TableViewVaa();
-    }
-
-    /**
-     * Constructs a (page-able) {@link Grid} from given {@code managedCollection}
-     * @param managedCollection
-     * @param where
-     */
-    public static Component forDataTableModel(
-            final @NonNull UiContextVaa uiContext,
-            final @NonNull DataTableModel dataTableModel,
-            final @NonNull Where where) { //TODO not used yet (or is redundant)
-        return dataTableModel.getElementCount()==0
-                ? empty()
-                : new TableViewVaa(dataTableModel);
-    }
-
-    /**
-     *
-     * @param elementSpec - as is common to all given {@code objects} aka elements
-     * @param objects - (wrapped) domain objects to be rendered by this table
-     */
-    private TableViewVaa(
-            final @NonNull DataTableModel dataTableModel) {
-
-        //            final ComboBox<ManagedObject> listBox = new ComboBox<>();
-        //            listBox.setLabel(label + " #" + objects.size());
-        //            listBox.setItems(objects);
-        //            if (!objects.isEmpty()) {
-        //                listBox.setValue(objects.get(0));
-        //            }
-        //            listBox.setItemLabelGenerator(o -> o.titleString());
-
-        val objectGrid = new Grid<DataRow>();
-        add(objectGrid);
-
-        val rows = dataTableModel.getDataRowsFiltered().getValue();
-
-        if (rows.isEmpty()) {
-            //TODO show placeholder: "No rows to display"
-            return;
-        }
-
-        val columns = dataTableModel.getDataColumns().getValue();
-
-        // object link as first column
-        objectGrid.addColumn(row->{
-            // TODO provide icon with link
-            return "obj. ref [" + row.getRowElement().getBookmark().orElse(null) + "]";
-        });
-
-        // property columns
-        columns.forEach(column->{
-            val property = column.getPropertyMetaModel();
-            objectGrid.addColumn(row -> {
-                log.debug("about to get property value for property {}", property.getId());
-                return stringifyPropertyValue(property, row.getRowElement());
-            })
-            .setHeader(property.getCanonicalFriendlyName());
-            //TODO add column description as is provided via property.getColumnDescription()
-        });
-
-        // populate the model
-        objectGrid.setItems(rows.toList());
-        objectGrid.recalculateColumnWidths();
-        objectGrid.setColumnReorderingAllowed(true);
-
-    }
-
-    private String stringifyPropertyValue(
-            final ObjectAssociation property,
-            final ManagedObject targetObject) {
-        try {
-            val propertyValue = property.get(targetObject);
-            return propertyValue == null
-                    ? NULL_LITERAL
-                    : propertyValue.getTitle();
-        } catch (Exception e) {
-            return Optional.ofNullable(e.getMessage()).orElse(e.getClass().getName());
-        }
-    }
-
-
-}
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/debug/DebugField.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/debug/DebugField.java
deleted file mode 100644
index 3ca37552b3..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/debug/DebugField.java
+++ /dev/null
@@ -1,79 +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.causeway.incubator.viewer.vaadin.ui.components.debug;
-
-import com.vaadin.flow.component.customfield.CustomField;
-import com.vaadin.flow.component.details.Details;
-import com.vaadin.flow.component.details.DetailsVariant;
-import com.vaadin.flow.component.formlayout.FormLayout;
-import com.vaadin.flow.component.textfield.TextArea;
-
-import org.apache.causeway.viewer.commons.model.mock.UiMockup;
-
-import lombok.val;
-
-public class DebugField extends CustomField<UiMockup> {
-
-    private static final long serialVersionUID = 1L;
-
-    private final Details details = new Details();
-    private UiMockup model;
-
-    public DebugField(final String label) {
-        super();
-        setLabel(label);
-        add(details);
-
-        val formLayout = new FormLayout();
-        details.addContent(formLayout);
-        details.setSummaryText("Debug");
-        details.addThemeVariants(DetailsVariant.SMALL);
-    }
-
-    @Override
-    protected UiMockup generateModelValue() {
-        return model;
-    }
-
-    @Override
-    protected void setPresentationValue(final UiMockup model) {
-        this.model = model;
-
-        details.setSummaryText(model.getSummaryText());
-
-        details.getContent().findFirst()
-        .map(FormLayout.class::cast)
-        .ifPresent(formLayout->{
-
-            formLayout.removeAll();
-
-            model.getKeyValuePairs().forEach((k, v)->{
-                val textArea = new TextArea();
-                textArea.setLabel(k);
-                textArea.setValue(v);
-                textArea.setInvalid(true);
-                formLayout.add(textArea);
-            });
-
-        });
-
-    }
-
-
-}
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/markup/MarkupField.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/markup/MarkupField.java
deleted file mode 100644
index 9766533def..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/markup/MarkupField.java
+++ /dev/null
@@ -1,60 +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.causeway.incubator.viewer.vaadin.ui.components.markup;
-
-import com.vaadin.flow.component.Html;
-import com.vaadin.flow.component.customfield.CustomField;
-import com.vaadin.flow.component.html.Div;
-
-import org.springframework.lang.Nullable;
-
-import org.apache.causeway.applib.value.Markup;
-
-public class MarkupField extends CustomField<Markup> {
-
-    private static final long serialVersionUID = 1L;
-
-    private final Div div = new Div();
-    private Markup markup;
-
-    public MarkupField(String label) {
-        super();
-        setLabel(label);
-        add(div);
-    }
-
-    @Override
-    protected Markup generateModelValue() {
-        return markup;
-    }
-
-    @Override
-    protected void setPresentationValue(@Nullable Markup markup) {
-        this.markup = markup;
-
-        div.removeAll();
-
-        if(markup==null) {
-            return;
-        }
-
-        div.add(new Html("<div>" + markup.asHtml() + "</div>"));
-    }
-
-}
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/markup/MarkupFieldFactory.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/markup/MarkupFieldFactory.java
deleted file mode 100644
index 87f4c56bcd..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/markup/MarkupFieldFactory.java
+++ /dev/null
@@ -1,45 +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.causeway.incubator.viewer.vaadin.ui.components.markup;
-
-import com.vaadin.flow.component.Component;
-
-import org.apache.causeway.applib.annotation.PriorityPrecedence;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.UiComponentHandlerVaa;
-import org.apache.causeway.viewer.commons.model.components.UiComponentFactory.ComponentRequest;
-
-import lombok.val;
-
-@org.springframework.stereotype.Component
-@javax.annotation.Priority(PriorityPrecedence.MIDPOINT)
-public class MarkupFieldFactory implements UiComponentHandlerVaa {
-
-    @Override
-    public boolean isHandling(final ComponentRequest request) {
-        return request.isFeatureTypeEqualTo(org.apache.causeway.applib.value.Markup.class);
-    }
-
-    @Override
-    public Component handle(final ComponentRequest request) {
-        val uiField = new MarkupField(request.getFriendlyName());
-        uiField.setValue(request.getFeatureValue(org.apache.causeway.applib.value.Markup.class).orElse(null));
-        return uiField;
-    }
-
-}
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/object/ObjectViewVaa.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/object/ObjectViewVaa.java
deleted file mode 100644
index 879668b911..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/object/ObjectViewVaa.java
+++ /dev/null
@@ -1,276 +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.causeway.incubator.viewer.vaadin.ui.components.object;
-
-import java.util.function.Consumer;
-
-import com.vaadin.flow.component.HasComponents;
-import com.vaadin.flow.component.formlayout.FormLayout;
-import com.vaadin.flow.component.formlayout.FormLayout.ResponsiveStep;
-import com.vaadin.flow.component.html.H1;
-import com.vaadin.flow.component.html.H2;
-import com.vaadin.flow.component.html.H3;
-import com.vaadin.flow.component.orderedlayout.FlexLayout;
-import com.vaadin.flow.component.orderedlayout.FlexLayout.FlexWrap;
-import com.vaadin.flow.component.orderedlayout.VerticalLayout;
-import com.vaadin.flow.component.tabs.Tab;
-import com.vaadin.flow.component.tabs.Tabs;
-
-import org.apache.causeway.applib.annotation.Where;
-import org.apache.causeway.applib.layout.component.ActionLayoutData;
-import org.apache.causeway.applib.layout.component.CollectionLayoutData;
-import org.apache.causeway.applib.layout.component.DomainObjectLayoutData;
-import org.apache.causeway.applib.layout.component.FieldSet;
-import org.apache.causeway.applib.layout.component.PropertyLayoutData;
-import org.apache.causeway.applib.layout.grid.bootstrap.BSClearFix;
-import org.apache.causeway.applib.layout.grid.bootstrap.BSCol;
-import org.apache.causeway.applib.layout.grid.bootstrap.BSRow;
-import org.apache.causeway.applib.layout.grid.bootstrap.BSTab;
-import org.apache.causeway.applib.layout.grid.bootstrap.BSTabGroup;
-import org.apache.causeway.commons.internal.assertions._Assert;
-import org.apache.causeway.core.metamodel.interactions.managed.ActionInteraction;
-import org.apache.causeway.core.metamodel.interactions.managed.CollectionInteraction;
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.causeway.core.metamodel.interactions.managed.PropertyInteraction;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.core.metamodel.object.MmTitleUtil;
-import org.apache.causeway.incubator.viewer.vaadin.model.context.UiContextVaa;
-import org.apache.causeway.incubator.viewer.vaadin.model.util.Vaa;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.UiComponentFactoryVaa;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.collection.TableViewVaa;
-import org.apache.causeway.viewer.commons.model.components.UiComponentFactory;
-import org.apache.causeway.viewer.commons.model.decorators.DisablingDecorator.DisablingDecorationModel;
-import org.apache.causeway.viewer.commons.model.layout.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 fromObject(
-            final @NonNull UiContextVaa uiContext,
-            final @NonNull UiComponentFactoryVaa uiComponentFactory,
-            final @NonNull Consumer<ManagedAction> actionEventHandler,
-            final @NonNull ManagedObject managedObject) {
-        return new ObjectViewVaa(uiContext, uiComponentFactory, actionEventHandler, managedObject);
-    }
-
-    /**
-     * Constructs given domain object's view, with all its visible members and actions.
-     * @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().getFeatureIdentifier());
-        _Assert.assertTrue(uiContext.getInteractionService().isInInteraction(), "requires an active interaction");
-
-        val objectTitle = MmTitleUtil.titleOf(managedObject);
-
-        val uiGridLayout = UiGridLayout.bind(managedObject);
-
-        // force new row
-        //formLayout.getElement().appendChild(ElementFactory.createBr());
-
-        val gridVisitor = new UiGridLayout.Visitor<HasComponents, Tabs>(this) {
-
-            @Override
-            protected void onObjectTitle(final HasComponents container, final DomainObjectLayoutData domainObjectData) {
-                val uiTitle = Vaa.add(container, new H1(objectTitle));
-                //                uiTitle.addThemeVariants(
-                //                        ButtonVariant.LUMO_LARGE,
-                //                        ButtonVariant.LUMO_TERTIARY_INLINE);
-            }
-
-            @Override
-            protected HasComponents newRow(final HasComponents container, final BSRow bsRow) {
-                val uiRow = Vaa.add(container, new FlexLayout());
-
-                uiRow.setWidthFull();
-                uiRow.setFlexWrap(FlexWrap.WRAP); // allow line breaking
-
-                // instead of a FlexLayout we need to convert to a layout where we can control
-                // the responsive steps
-                //                val steps = _Lists.of(
-                //                        new ResponsiveStep("0", 1),
-                //                        new ResponsiveStep("50em", 2)
-                //                        );
-
-                return uiRow;
-            }
-
-            @Override
-            protected HasComponents newCol(final HasComponents container, final BSCol bscol) {
-
-                val uiCol = Vaa.add(container, new VerticalLayout());
-
-                final int span = bscol.getSpan();
-                ((FlexLayout)container).setFlexGrow(span, uiCol);
-                val widthEm = String.format("%dem", span * 3); // 1em ~ 16px
-                uiCol.setWidth(null); // clear preset width style
-                uiCol.setMinWidth(widthEm);
-
-                return uiCol;
-            }
-
-            @Override
-            protected HasComponents newActionPanel(final HasComponents container) {
-                val uiActionPanel = Vaa.add(container, new FlexLayout());
-
-                uiActionPanel.setFlexWrap(FlexWrap.WRAP); // allow line breaking
-                uiActionPanel.setAlignItems(Alignment.BASELINE);
-                return uiActionPanel;
-            }
-
-            @Override
-            protected Tabs newTabGroup(final HasComponents container, final BSTabGroup tabGroupData) {
-                val uiTabGroup = Vaa.add(container, new Tabs());
-
-                uiTabGroup.setOrientation(Tabs.Orientation.HORIZONTAL);
-                return uiTabGroup;
-            }
-
-            @Override
-            protected HasComponents newTab(final Tabs container, final BSTab tabData) {
-                val uiTab = Vaa.add(container, new Tab(tabData.getName()));
-                return uiTab;
-            }
-
-            @Override
-            protected HasComponents newFieldSet(final HasComponents container, final FieldSet fieldSetData) {
-
-                Vaa.add(container, new H2(fieldSetData.getName()));
-
-                // handle associated actions
-                val actionBar = newActionPanel(container);
-                for(val actionData : fieldSetData.getActions()) {
-                    onAction(actionBar, actionData);
-                }
-
-                val uiFieldSet = Vaa.add(container, new FormLayout());
-
-                uiFieldSet.setResponsiveSteps(
-                        new ResponsiveStep("0", 1)); // single column only
-
-                return uiFieldSet;
-            }
-
-
-            @Override
-            protected void onClearfix(final HasComponents container, final BSClearFix clearFixData) {
-                // TODO Auto-generated method stub
-            }
-
-            @SuppressWarnings("unused")
-            @Override
-            protected void onAction(final HasComponents container, final ActionLayoutData actionData) {
-
-                val owner = managedObject;
-                val interaction = ActionInteraction.start(owner, actionData.getId(), Where.OBJECT_FORMS);
-                interaction.checkVisibility()
-                .getManagedAction()
-                .ifPresent(managedAction -> {
-
-                    interaction.checkUsability();
-
-                    val uiButton = Vaa.add(container,
-                            uiComponentFactory.buttonFor(
-                                    UiComponentFactory.ButtonRequest.of(
-                                            managedAction,
-                                            DisablingDecorationModel.of(interaction),
-                                            actionEventHandler)));
-                });
-
-            }
-
-            @SuppressWarnings("unused")
-            @Override
-            protected void onProperty(final HasComponents container, final PropertyLayoutData propertyData) {
-
-                val owner = managedObject;
-
-                val interaction = PropertyInteraction.start(owner, propertyData.getId(), Where.OBJECT_FORMS);
-                interaction.checkVisibility()
-                .getManagedProperty()
-                .ifPresent(managedProperty -> {
-
-                    interaction.checkUsability();
-
-                    val propNeg = managedProperty.startNegotiation();
-
-                    val uiProperty = Vaa.add(container,
-                            uiComponentFactory.componentFor(
-                                    UiComponentFactory.ComponentRequest.of(
-                                            propNeg,
-                                            managedProperty,
-                                            DisablingDecorationModel.of(interaction))));
-
-                    // handle associated actions
-                    val actionBar = newActionPanel(container);
-                    for(val actionData : propertyData.getActions()) {
-                        onAction(actionBar, actionData);
-                    }
-
-                });
-            }
-
-            @Override
-            protected void onCollection(final HasComponents container, final CollectionLayoutData collectionData) {
-
-                val owner = managedObject;
-
-                CollectionInteraction.start(owner, collectionData.getId(), Where.OBJECT_FORMS)
-                .checkVisibility()
-                .getManagedCollection()
-                .ifPresent(managedCollection -> {
-                    Vaa.add(container, new H3(managedCollection.getFriendlyName()));
-
-                    // handle associated actions
-                    val actionBar = newActionPanel(container);
-                    for(val actionData : collectionData.getActions()) {
-                        onAction(actionBar, actionData);
-                    }
-
-                    val uiCollection = Vaa.add(container,
-                            TableViewVaa.forDataTableModel(
-                                    uiContext,
-                                    managedCollection.createDataTableModel(),
-                                    Where.PARENTED_TABLES));
-
-                });
-
-            }
-
-        };
-
-        uiGridLayout.visit(gridVisitor);
-        setWidthFull();
-
-    }
-
-
-
-}
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/other/FallbackFieldFactory.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/other/FallbackFieldFactory.java
deleted file mode 100644
index bd632f3c89..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/other/FallbackFieldFactory.java
+++ /dev/null
@@ -1,95 +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.causeway.incubator.viewer.vaadin.ui.components.other;
-
-import java.util.stream.Collectors;
-
-import javax.inject.Inject;
-import javax.inject.Provider;
-
-import com.vaadin.flow.component.Component;
-
-import org.apache.causeway.applib.annotation.PriorityPrecedence;
-import org.apache.causeway.commons.internal.collections._Maps;
-import org.apache.causeway.core.metamodel.facetapi.Facet;
-import org.apache.causeway.core.metamodel.facetapi.FacetAbstract;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.UiComponentFactoryVaa;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.UiComponentHandlerVaa;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.debug.DebugField;
-import org.apache.causeway.viewer.commons.model.components.UiComponentFactory.ComponentRequest;
-import org.apache.causeway.viewer.commons.model.mock.UiMockup;
-
-import lombok.val;
-
-@org.springframework.stereotype.Component
-@javax.annotation.Priority(PriorityPrecedence.LAST)
-public class FallbackFieldFactory implements UiComponentHandlerVaa {
-
-    @Inject private Provider<UiComponentFactoryVaa> uiComponentFactory;
-
-    @Override
-    public boolean isHandling(final ComponentRequest request) {
-        return true; // the last handler in the chain
-    }
-
-    @Override
-    public Component handle(final ComponentRequest request) {
-
-        val spec = request.getManagedFeature().getElementType();
-
-        val debugUiModel = UiMockup.of("type not handled")
-        .withProperty("ObjectFeature.specification.fullIdentifier",  spec.getFullIdentifier())
-        .withProperty("ObjectFeature.identifier",  request.getManagedFeature().getIdentifier().toString());
-
-        val handlerInfo = uiComponentFactory.get().getRegisteredHandlers()
-        .stream()
-        .map(Class::getSimpleName)
-        .map(handlerName->" • " + handlerName)
-        .collect(Collectors.joining("\n"));
-
-        debugUiModel.withProperty("Handlers", handlerInfo);
-
-        spec.streamFacets()
-        .forEach(facet -> {
-            debugUiModel.withProperty(
-                    facet.facetType().getSimpleName(),
-                    summarize(facet));
-        });
-
-
-        val uiField = new DebugField(request.getManagedFeature().getFriendlyName());
-        uiField.setValue(debugUiModel);
-        return uiField;
-    }
-
-    private String summarize(final Facet facet) {
-        val sb = new StringBuilder();
-        sb.append(facet.getClass().getSimpleName());
-        if(facet instanceof FacetAbstract) {
-            val attributeMap = _Maps.<String, Object>newTreeMap();
-            ((FacetAbstract)facet).visitAttributes(attributeMap::put);
-            attributeMap.forEach((k, v)->{
-                sb.append("\n • ").append(k).append(": ").append(v);
-            });
-        }
-        return sb.toString();
-    }
-
-
-}
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/temporal/DateField.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/temporal/DateField.java
deleted file mode 100644
index 77e7741529..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/temporal/DateField.java
+++ /dev/null
@@ -1,57 +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.causeway.incubator.viewer.vaadin.ui.components.temporal;
-
-import java.time.LocalDate;
-
-import com.vaadin.flow.component.customfield.CustomField;
-import com.vaadin.flow.component.datepicker.DatePicker;
-
-import org.springframework.lang.Nullable;
-
-public class DateField extends CustomField<LocalDate> {
-
-    private static final long serialVersionUID = 1L;
-
-    private final DatePicker datePicker = new DatePicker();
-
-    public DateField(String label) {
-        super();
-        setLabel(label);
-        add(datePicker);
-    }
-
-    @Override
-    protected LocalDate generateModelValue() {
-        return datePicker.getValue();
-    }
-
-    @Override
-    protected void setPresentationValue(@Nullable LocalDate newValue) {
-
-        datePicker.setValue(newValue);
-
-        if(newValue==null) {
-            datePicker.setPlaceholder("no date"); //TODO allow translation
-        }
-
-    }
-
-
-}
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/temporal/TemporalFieldFactory.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/temporal/TemporalFieldFactory.java
deleted file mode 100644
index b1d985ba55..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/temporal/TemporalFieldFactory.java
+++ /dev/null
@@ -1,131 +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.causeway.incubator.viewer.vaadin.ui.components.temporal;
-
-import java.time.LocalDate;
-import java.util.Optional;
-
-import com.vaadin.flow.component.Component;
-import com.vaadin.flow.data.converter.DateToSqlDateConverter;
-import com.vaadin.flow.data.converter.LocalDateToDateConverter;
-
-import org.apache.causeway.applib.annotation.PriorityPrecedence;
-import org.apache.causeway.applib.value.semantics.TemporalValueSemantics;
-import org.apache.causeway.applib.value.semantics.TemporalValueSemantics.OffsetCharacteristic;
-import org.apache.causeway.applib.value.semantics.TemporalValueSemantics.TemporalCharacteristic;
-import org.apache.causeway.commons.internal.exceptions._Exceptions;
-import org.apache.causeway.core.metamodel.util.Facets;
-import org.apache.causeway.incubator.viewer.vaadin.ui.binding.BindingsVaa;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.UiComponentHandlerVaa;
-import org.apache.causeway.viewer.commons.model.components.UiComponentFactory.ComponentRequest;
-
-import lombok.val;
-
-@org.springframework.stereotype.Component
-@javax.annotation.Priority(PriorityPrecedence.MIDPOINT)
-public class TemporalFieldFactory implements UiComponentHandlerVaa {
-
-    @Override
-    public boolean isHandling(final ComponentRequest request) {
-        return request.isFeatureTypeEqualTo(java.sql.Date.class)
-            ||(getTemporalValueSemantics(request).isPresent()
-                // TODO lift this restrictions, as we support more types
-                && (
-                        request.isFeatureTypeEqualTo(LocalDate.class)
-//                        || request.isFeatureTypeEqualTo(java.sql.Date.class)
-                ));
-    }
-
-    @Override
-    public Component handle(final ComponentRequest request) {
-
-        val temporalCharacteristic = getTemporalCharacteristic(request);
-        val offsetCharacteristic = getOffsetCharacteristic(request);
-
-        switch(temporalCharacteristic) {
-        case DATE_ONLY:{
-
-            val uiField = new DateField(request.getFriendlyName());
-            val managedFeature = request.getManagedFeature();
-
-            if(request.isFeatureTypeEqualTo(LocalDate.class)) {
-                BindingsVaa.bindFeature(uiField, managedFeature);
-
-            } else if(request.isFeatureTypeEqualTo(java.sql.Date.class)) {
-
-                val converter = new LocalDateToDateConverter().chain(new DateToSqlDateConverter());
-
-                BindingsVaa.bindFeatureWithConverter(uiField, managedFeature, converter, null);
-
-            } else {
-                throw _Exceptions.unmatchedCase(request.getFeatureType());
-            }
-
-            return uiField;
-
-            }
-        case TIME_ONLY:{
-            // TODO ...
-            }
-        case DATE_TIME:{
-            // TODO ...
-            }
-        default:
-            throw _Exceptions.unmatchedCase(temporalCharacteristic);
-        }
-
-    }
-
-    // -- HELPER
-
-    private TemporalCharacteristic getTemporalCharacteristic(final ComponentRequest request) {
-        val temporalSemantics = getTemporalValueSemantics(request).orElse(null);
-        if(temporalSemantics!=null) {
-            return temporalSemantics.getTemporalCharacteristic();
-        }
-        if(request.isFeatureTypeEqualTo(java.sql.Date.class)) {
-            return TemporalCharacteristic.DATE_ONLY;
-        }
-        if(request.isFeatureTypeEqualTo(java.util.Date.class)) {
-            return TemporalCharacteristic.DATE_TIME;
-        }
-        throw _Exceptions.unrecoverable("type %s not handled", request.getFeatureType());
-    }
-
-    private OffsetCharacteristic getOffsetCharacteristic(final ComponentRequest request) {
-        val temporalSemantics = getTemporalValueSemantics(request).orElse(null);
-        if(temporalSemantics!=null) {
-            return temporalSemantics.getOffsetCharacteristic();
-        }
-        if(request.isFeatureTypeEqualTo(java.sql.Date.class)) {
-            return OffsetCharacteristic.LOCAL;
-        }
-        if(request.isFeatureTypeEqualTo(java.util.Date.class)) {
-            return OffsetCharacteristic.LOCAL;
-        }
-        throw _Exceptions.unrecoverable("type %s not handled", request.getFeatureType());
-    }
-
-    private Optional<TemporalValueSemantics<?>> getTemporalValueSemantics(final ComponentRequest request) {
-        return Facets.valueStreamSemantics(request.getFeatureTypeSpec(), TemporalValueSemantics.class)
-                .findFirst()
-                .map(v->(TemporalValueSemantics<?>)v);
-    }
-
-}
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/text/TextFieldFactory.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/text/TextFieldFactory.java
deleted file mode 100644
index c61016cfc1..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/text/TextFieldFactory.java
+++ /dev/null
@@ -1,52 +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.causeway.incubator.viewer.vaadin.ui.components.text;
-
-import com.vaadin.flow.component.Component;
-import com.vaadin.flow.component.textfield.TextField;
-
-import org.apache.causeway.applib.annotation.PriorityPrecedence;
-import org.apache.causeway.incubator.viewer.vaadin.ui.binding.BindingsVaa;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.UiComponentHandlerVaa;
-import org.apache.causeway.viewer.commons.model.components.UiComponentFactory.ComponentRequest;
-
-import lombok.val;
-
-@org.springframework.stereotype.Component
-@javax.annotation.Priority(PriorityPrecedence.MIDPOINT)
-public class TextFieldFactory implements UiComponentHandlerVaa {
-
-    @Override
-    public boolean isHandling(final ComponentRequest request) {
-        return request.hasFacetForValueType(String.class);
-    }
-
-    @Override
-    public Component handle(final ComponentRequest request) {
-
-        val uiField = new TextField(request.getFriendlyName());
-
-        val managedFeature = request.getManagedFeature();
-
-        BindingsVaa.bindFeature(uiField, managedFeature);
-
-        return uiField;
-    }
-
-}
\ No newline at end of file
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/text/uuid/UuidFieldFactory.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/text/uuid/UuidFieldFactory.java
deleted file mode 100644
index ee0a95c45f..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/components/text/uuid/UuidFieldFactory.java
+++ /dev/null
@@ -1,60 +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.causeway.incubator.viewer.vaadin.ui.components.text.uuid;
-
-import java.util.UUID;
-
-import com.vaadin.flow.component.Component;
-import com.vaadin.flow.component.textfield.TextField;
-import com.vaadin.flow.data.converter.StringToUuidConverter;
-
-import org.apache.causeway.applib.annotation.PriorityPrecedence;
-import org.apache.causeway.incubator.viewer.vaadin.ui.binding.BindingsVaa;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.UiComponentHandlerVaa;
-import org.apache.causeway.viewer.commons.model.components.UiComponentFactory.ComponentRequest;
-
-import lombok.val;
-
-@org.springframework.stereotype.Component
-@javax.annotation.Priority(PriorityPrecedence.MIDPOINT)
-public class UuidFieldFactory implements UiComponentHandlerVaa {
-
-    @Override
-    public boolean isHandling(final ComponentRequest request) {
-        return request.isFeatureTypeEqualTo(UUID.class);
-    }
-
-    @Override
-    public Component handle(final ComponentRequest request) {
-
-        val uiField = new TextField(request.getFriendlyName());
-
-        val managedFeature = request.getManagedFeature();
-
-        BindingsVaa.bindFeatureWithConverter(
-                uiField,
-                managedFeature,
-                new StringToUuidConverter("Unable to convert String to UUID"),
-                UUID.nameUUIDFromBytes(new byte[16]));
-
-        return uiField;
-
-    }
-
-}
\ No newline at end of file
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/pages/login/VaadinLoginView.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/pages/login/VaadinLoginView.java
deleted file mode 100644
index 8ae9bc05e6..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/pages/login/VaadinLoginView.java
+++ /dev/null
@@ -1,118 +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.causeway.incubator.viewer.vaadin.ui.pages.login;
-
-import javax.inject.Inject;
-
-import com.vaadin.flow.component.ClickEvent;
-import com.vaadin.flow.component.ComponentEventListener;
-import com.vaadin.flow.component.button.Button;
-import com.vaadin.flow.component.html.Div;
-import com.vaadin.flow.component.html.H1;
-import com.vaadin.flow.component.html.Image;
-import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
-import com.vaadin.flow.component.orderedlayout.VerticalLayout;
-import com.vaadin.flow.component.textfield.PasswordField;
-import com.vaadin.flow.component.textfield.TextField;
-import com.vaadin.flow.router.Route;
-
-import org.apache.causeway.core.config.CausewayConfiguration;
-import org.apache.causeway.core.config.viewer.web.WebAppContextPath;
-import org.apache.causeway.core.security.authentication.AuthenticationRequestPassword;
-import org.apache.causeway.incubator.viewer.vaadin.ui.auth.VaadinAuthenticationHandler;
-import org.apache.causeway.incubator.viewer.vaadin.ui.pages.main.MainViewVaa;
-
-import lombok.val;
-
-/**
- * Yet a minimal working version of a login page.
- *
- */
-@Route("login")
-public class VaadinLoginView extends VerticalLayout {
-
-    private static final long serialVersionUID = 1L;
-
-    private final transient VaadinAuthenticationHandler vaadinAuthenticationHandler;
-
-    @Inject
-    public VaadinLoginView(
-            final CausewayConfiguration causewayConfiguration,
-            final WebAppContextPath webAppContextPath,
-            final VaadinAuthenticationHandler vaadinAuthenticationHandler) {
-
-        this.vaadinAuthenticationHandler = vaadinAuthenticationHandler;
-
-        addTitleAndLogo(causewayConfiguration, webAppContextPath);
-
-        val usernameField = new TextField("Username");
-        val passwordField = new PasswordField("Password");
-
-        val loginButton = new Button("Login");
-        loginButton.getElement().setAttribute("theme", "primary");
-        loginButton.addClickListener((ComponentEventListener<ClickEvent<Button>>)
-                buttonClickEvent -> doLogin(
-                        usernameField.getValue(),
-                        passwordField.getValue()));
-
-        val loginAsSvenButton = new Button("Login (as Sven)");
-        loginAsSvenButton.getElement().setAttribute("theme", "primary");
-        loginAsSvenButton.addClickListener((ComponentEventListener<ClickEvent<Button>>)
-                buttonClickEvent -> doLoginAsSven());
-
-        val buttonsLayout = new HorizontalLayout(loginButton, loginAsSvenButton);
-        val divLayout = new VerticalLayout(usernameField, passwordField, buttonsLayout);
-        divLayout.setAlignSelf(Alignment.START, buttonsLayout);
-        val loginDiv = new Div(divLayout);
-        setAlignItems(Alignment.CENTER);
-        usernameField.focus();
-        add(loginDiv);
-
-    }
-
-    // -- HELPER
-
-    private void doLogin(final String userName, final String secret) {
-        val authenticationRequest = new AuthenticationRequestPassword(userName, secret);
-        if(vaadinAuthenticationHandler.loginToSession(authenticationRequest)) {
-            getUI().ifPresent(ui->ui.navigate(MainViewVaa.class));
-        } else {
-            // TODO indicate to the user: login failed
-        }
-    }
-
-    /** @deprecated early development only */
-    @Deprecated
-    private void doLoginAsSven() {
-        doLogin("sven", "pass");
-    }
-
-    private void addTitleAndLogo(final CausewayConfiguration causewayConfiguration, final WebAppContextPath webAppContextPath) {
-        val applicationName = causewayConfiguration.getViewer().getCommon().getApplication().getName();
-        val applicationLogo = causewayConfiguration.getViewer().getCommon().getApplication().getBrandLogoSignin();
-
-        applicationLogo.ifPresent(logoUrl->{
-            add(new Image(webAppContextPath.prependContextPathIfLocal(logoUrl), "logo"));
-        });
-
-        add(new H1(applicationName));
-
-    }
-
-}
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/pages/main/MainViewVaa.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/pages/main/MainViewVaa.java
deleted file mode 100644
index 4c433467e5..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/pages/main/MainViewVaa.java
+++ /dev/null
@@ -1,160 +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.causeway.incubator.viewer.vaadin.ui.pages.main;
-
-import javax.inject.Inject;
-
-import com.vaadin.flow.component.Component;
-import com.vaadin.flow.component.applayout.AppLayout;
-import com.vaadin.flow.component.dependency.CssImport;
-import com.vaadin.flow.component.dependency.JsModule;
-import com.vaadin.flow.component.html.Div;
-import com.vaadin.flow.router.BeforeEnterEvent;
-import com.vaadin.flow.router.BeforeEnterObserver;
-import com.vaadin.flow.router.Route;
-import com.vaadin.flow.router.RouteAlias;
-
-import org.apache.causeway.applib.annotation.Where;
-import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.commons.internal.exceptions._Exceptions;
-import org.apache.causeway.core.metamodel.context.HasMetaModelContext;
-import org.apache.causeway.core.metamodel.context.MetaModelContext;
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.causeway.core.metamodel.interactions.managed.nonscalar.DataTableModel;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.incubator.viewer.vaadin.model.context.MemberInvocationHandler;
-import org.apache.causeway.incubator.viewer.vaadin.model.context.UiContextVaa;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.UiComponentFactoryVaa;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.collection.TableViewVaa;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.object.ObjectViewVaa;
-import org.apache.causeway.incubator.viewer.vaadin.ui.util.LocalResourceUtil;
-import org.apache.causeway.viewer.commons.applib.services.header.HeaderUiService;
-import org.apache.causeway.viewer.commons.model.decorators.IconDecorator;
-
-import lombok.val;
-import lombok.extern.log4j.Log4j2;
-
-/**
- * top-level view
- */
-@Route("main")
-@RouteAlias("")
-@JsModule("@vaadin/vaadin-lumo-styles/presets/compact.js")
-@CssImport("./css/menu.css")
-@Log4j2
-public class MainViewVaa extends AppLayout
-implements
-    HasMetaModelContext,
-    BeforeEnterObserver,
-    MemberInvocationHandler<Component> {
-
-    private static final long serialVersionUID = 1L;
-
-    private final transient MetaModelContext metaModelContext;
-    private final transient UiContextVaa uiContext;
-    private final transient UiActionHandlerVaa uiActionHandler;
-    private final transient UiComponentFactoryVaa uiComponentFactory;
-    private final transient HeaderUiService headerUiService;
-
-    private Div pageContent = new Div();
-
-    /**
-     * Constructs the main view of the web-application, with the menu-bar and page content.
-     */
-    @Inject
-    public MainViewVaa(
-            final MetaModelContext metaModelContext,
-            final UiActionHandlerVaa uiActionHandler,
-            final HeaderUiService headerUiService,
-            final UiContextVaa uiContext,
-            final UiComponentFactoryVaa uiComponentFactory) {
-
-        this.metaModelContext = metaModelContext;
-        this.uiActionHandler = uiActionHandler;
-        this.headerUiService = headerUiService;
-        this.uiContext = uiContext;
-        this.uiComponentFactory = uiComponentFactory;
-
-        uiContext.setNewPageHandler(this::replaceContent);
-        uiContext.setPageFactory(this);
-    }
-
-    @Override
-    public void beforeEnter(final BeforeEnterEvent event) {
-
-        val faStyleSheet = LocalResourceUtil.ResourceDescriptor.webjars(IconDecorator.FONTAWESOME_RESOURCE);
-        LocalResourceUtil.addStyleSheet(faStyleSheet);
-
-        setPrimarySection(Section.NAVBAR);
-
-        val menuBarContainer = MainView_createHeader.createHeader(
-                metaModelContext,
-                headerUiService.getHeader(),
-                uiActionHandler::handleActionLinkClicked,
-                this::renderHomepage);
-
-        addToNavbar(menuBarContainer);
-        setContent(pageContent = new Div());
-        setDrawerOpened(false);
-        renderHomepage();
-    }
-
-    private void replaceContent(final Component component) {
-        pageContent.removeAll();
-        pageContent.add(component);
-    }
-
-    private void renderHomepage() {
-        log.info("about to render homepage");
-        val homepage = getInteractionService().callAnonymous(metaModelContext::getHomePageAdapter);
-        uiContext.route(homepage);
-    }
-
-    @Override
-    public Component handle(final ManagedObject object) {
-        return ObjectViewVaa.fromObject(
-                uiContext,
-                uiComponentFactory,
-                uiActionHandler::handleActionLinkClicked,
-                object);
-    }
-
-    @Override
-    public Component handle(final ManagedAction managedAction, final Can<ManagedObject> params, final ManagedObject actionResult) {
-        if (actionResult.getSpecification().isPlural()) {
-
-            val dataTableModel = DataTableModel.forAction(managedAction, params, actionResult);
-
-            return TableViewVaa.forDataTableModel(uiContext, dataTableModel, Where.STANDALONE_TABLES);
-        } else {
-            return handle(actionResult);
-        }
-    }
-
-    @Override
-    public MetaModelContext getMetaModelContext() {
-        if(metaModelContext==null) {
-            // TODO needs static recovery
-            throw _Exceptions.notImplemented();
-        }
-        return metaModelContext;
-    }
-
-
-}
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/pages/main/MainView_createHeader.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/pages/main/MainView_createHeader.java
deleted file mode 100644
index 0e95b8e915..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/pages/main/MainView_createHeader.java
+++ /dev/null
@@ -1,111 +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.causeway.incubator.viewer.vaadin.ui.pages.main;
-
-import java.util.function.Consumer;
-
-import com.vaadin.flow.component.Component;
-import com.vaadin.flow.component.Text;
-import com.vaadin.flow.component.html.Div;
-import com.vaadin.flow.component.html.Image;
-import com.vaadin.flow.component.menubar.MenuBar;
-import com.vaadin.flow.component.orderedlayout.FlexComponent.Alignment;
-import com.vaadin.flow.component.orderedlayout.FlexLayout;
-import com.vaadin.flow.component.orderedlayout.FlexLayout.FlexWrap;
-
-import org.apache.causeway.core.metamodel.context.MetaModelContext;
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.causeway.incubator.viewer.vaadin.model.util.Vaa;
-import org.apache.causeway.viewer.commons.applib.services.branding.BrandingUiModel;
-import org.apache.causeway.viewer.commons.applib.services.header.HeaderUiModel;
-import org.apache.causeway.viewer.commons.applib.services.menu.MenuUiService;
-
-import lombok.val;
-
-//@Log4j2
-final class MainView_createHeader {
-
-    static Component createHeader(
-            final MetaModelContext commonContext,
-            final HeaderUiModel headerUiModel,
-            final Consumer<ManagedAction> menuActionEventHandler,
-            final Runnable onHomepageLinkClick) {
-
-        val titleOrLogo = createTitleOrLogo(commonContext, headerUiModel.getBranding());
-        Vaa.setOnClick(titleOrLogo, onHomepageLinkClick);
-
-        val leftMenuBar = new MenuBar();
-        val horizontalSpacer = new Div();
-        //        horizontalSpacer.setWidthFull();
-        val rightMenuBar = new MenuBar();
-
-        leftMenuBar.setOpenOnHover(true);
-        rightMenuBar.setOpenOnHover(true);
-
-        // holds the top level left and right aligned menu parts
-        // TODO does not honor small displays yet, overflow is just not visible
-        val menuBarContainer = new FlexLayout(titleOrLogo, leftMenuBar, horizontalSpacer, rightMenuBar);
-        menuBarContainer.setFlexWrap(FlexWrap.WRAP);
-        menuBarContainer.setAlignSelf(Alignment.CENTER, leftMenuBar);
-        menuBarContainer.setAlignSelf(Alignment.CENTER, rightMenuBar);
-
-        // right align using css
-        rightMenuBar.getStyle().set("margin-left", "auto");
-
-        menuBarContainer.setWidthFull();
-
-        val leftMenuBuilder = MenuBuilderVaa.of(commonContext, menuActionEventHandler, leftMenuBar);
-        val rightMenuBuilder = MenuBuilderVaa.of(commonContext, menuActionEventHandler, rightMenuBar);
-
-        val menuUiModelProvider = commonContext.lookupServiceElseFail(MenuUiService.class);
-
-        headerUiModel.getPrimary().buildMenuItems(menuUiModelProvider, leftMenuBuilder);
-        headerUiModel.getSecondary().buildMenuItems(menuUiModelProvider, rightMenuBuilder);
-        headerUiModel.getTertiary().buildMenuItems(menuUiModelProvider, rightMenuBuilder);
-
-        return menuBarContainer;
-
-    }
-
-    // -- HELPER
-
-
-    private static Component createTitleOrLogo(
-            final MetaModelContext commonContext,
-            final BrandingUiModel brandingUiModel) {
-
-
-        val brandingName = brandingUiModel.getName();
-        val brandingLogo = brandingUiModel.getLogoHref();
-
-        if(brandingLogo.isPresent()) {
-            val webAppContextPath = commonContext.getWebAppContextPath();
-            val logo = new Image(
-                    webAppContextPath.prependContextPathIfLocal(brandingLogo.get()),
-                    "brandingLogo");
-            logo.setWidth("48px"); //TODO make this part of the UI model
-            logo.setHeight("48px"); //TODO make this part of the UI model
-            return logo;
-        }
-        return new Text(brandingName.orElse("App"));
-
-    }
-
-
-}
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/pages/main/MenuBuilderVaa.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/pages/main/MenuBuilderVaa.java
deleted file mode 100644
index 1bc5352401..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/pages/main/MenuBuilderVaa.java
+++ /dev/null
@@ -1,89 +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.causeway.incubator.viewer.vaadin.ui.pages.main;
-
-import java.util.function.Consumer;
-
-import com.vaadin.flow.component.contextmenu.MenuItem;
-import com.vaadin.flow.component.html.Hr;
-import com.vaadin.flow.component.html.Label;
-import com.vaadin.flow.component.menubar.MenuBar;
-
-import org.apache.causeway.core.metamodel.context.MetaModelContext;
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.causeway.incubator.viewer.vaadin.model.action.ActionUiModelFactoryVaa;
-import org.apache.causeway.incubator.viewer.vaadin.model.decorator.Decorators;
-import org.apache.causeway.viewer.commons.applib.services.menu.MenuItemDto;
-import org.apache.causeway.viewer.commons.applib.services.menu.MenuVisitor;
-
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-
-@RequiredArgsConstructor(staticName = "of")
-//@Log4j2
-class MenuBuilderVaa implements MenuVisitor {
-
-    private final MetaModelContext commonContext;
-    private final Consumer<ManagedAction> menuActionEventHandler;
-    private final MenuBar menuBar;
-
-    private MenuItem currentTopLevelMenu = null;
-    private ActionUiModelFactoryVaa actionUiModelFactory = new ActionUiModelFactoryVaa();
-
-    @Override
-    public void addTopLevel(MenuItemDto menuDto) {
-
-        if(menuDto.isTertiaryRoot()) {
-            currentTopLevelMenu = menuBar.addItem(Decorators.getUser()
-                    .decorateWithAvatar(new Label(), commonContext));
-        } else {
-            currentTopLevelMenu = menuBar.addItem(Decorators.getMenu()
-                    .decorateTopLevel(new Label(menuDto.getName())));
-        }
-    }
-
-    @Override
-    public void addSubMenu(MenuItemDto menu) {
-        val managedAction = menu.getManagedAction();
-
-        val actionUiModel = actionUiModelFactory.newActionUiModel(managedAction);
-        currentTopLevelMenu.getSubMenu()
-        .addItem(actionUiModel.createMenuUiComponent(), e->menuActionEventHandler.accept(managedAction));
-    }
-
-    @Override
-    public void addSectionSpacer() {
-        val sectionSpacer = new Hr();
-        val menuItem = currentTopLevelMenu.getSubMenu().addItem(sectionSpacer);
-        menuItem.setEnabled(false);
-        val menuItemElement = menuItem.getElement();
-        menuItemElement.setAttribute("class", "section-spacer");
-    }
-
-    @Override
-    public void addSectionLabel(String named) {
-        val sectionLabel = new Label(named);
-        sectionLabel.addClassName("section-label");
-        val menuItem = currentTopLevelMenu.getSubMenu().addItem(sectionLabel);
-        menuItem.setEnabled(false);
-        val menuItemElement = menuItem.getElement();
-        menuItemElement.setAttribute("class", "section-label");
-    }
-
-}
\ No newline at end of file
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/pages/main/TabUtil.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/pages/main/TabUtil.java
deleted file mode 100644
index b498bb85ab..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/pages/main/TabUtil.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.causeway.incubator.viewer.vaadin.ui.pages.main;
-
-import java.util.Optional;
-import java.util.function.Consumer;
-
-import com.vaadin.flow.component.Component;
-import com.vaadin.flow.component.HasComponents;
-import com.vaadin.flow.component.tabs.Tab;
-import com.vaadin.flow.component.tabs.Tabs;
-import com.vaadin.flow.router.RouteConfiguration;
-import com.vaadin.flow.router.RouterLink;
-
-import org.apache.causeway.core.runtimeservices.menubars.bootstrap.MenuBarsServiceBootstrap;
-
-import lombok.experimental.UtilityClass;
-
-//XXX not used
-@UtilityClass
-final class TabUtil {
-
-    static void createMenuTabs(final MenuBarsServiceBootstrap menuBarsService, final Consumer<Tab> onTabCreated) {
-        // onTabCreated.accept(TabUtil.createTab("Dashboard", DashboardView.class));
-    }
-
-    static void selectTab(final Tabs tabs, final Class<? extends Component> viewClass) {
-        String target = RouteConfiguration.forSessionScope().getUrl(viewClass);
-        Optional<Component> tabToSelect = tabs.getChildren().filter(tab -> {
-            Component child = tab.getChildren().findFirst().get();
-            return child instanceof RouterLink && ((RouterLink) child).getHref().equals(target);
-        }).findFirst();
-        tabToSelect.ifPresent(tab -> tabs.setSelectedTab((Tab) tab));
-    }
-
-    static Tab createTab(final String title, final Class<? extends Component> viewClass) {
-        final String text = null;
-        return createTab(populateLink(new RouterLink(text, viewClass), title));
-    }
-
-    // -- HELPER
-
-    private static Tab createTab(final Component content) {
-        final Tab tab = new Tab();
-        tab.add(content);
-        return tab;
-    }
-
-    private static <T extends HasComponents> T populateLink(final T a, final String title) {
-        a.add(title);
-        return a;
-    }
-
-
-
-}
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/pages/main/UiActionHandlerVaa.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/pages/main/UiActionHandlerVaa.java
deleted file mode 100644
index 97f7945bf3..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/pages/main/UiActionHandlerVaa.java
+++ /dev/null
@@ -1,89 +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.causeway.incubator.viewer.vaadin.ui.pages.main;
-
-import javax.inject.Inject;
-
-import org.springframework.stereotype.Service;
-
-import org.apache.causeway.applib.services.iactnlayer.InteractionService;
-import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.incubator.viewer.vaadin.model.context.UiContextVaa;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.UiComponentFactoryVaa;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.action.ActionDialog;
-
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-import lombok.extern.log4j.Log4j2;
-
-@Service
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-@Log4j2
-public class UiActionHandlerVaa {
-
-    private final UiContextVaa uiContext;
-    private final InteractionService interactionService;
-    private final UiComponentFactoryVaa uiComponentFactory;
-
-    public void handleActionLinkClicked(final ManagedAction managedAction) {
-
-        log.info("about to build an action prompt for {}", managedAction.getIdentifier());
-
-        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,
-                    params->{
-                        log.info("param negotiation done");
-                        invoke(managedAction, params);
-                        return true; //TODO handle vetoes
-                    });
-            actionDialog.open();
-
-
-            return;
-        }
-
-    }
-
-    private void invoke(
-            final ManagedAction managedAction,
-            final Can<ManagedObject> params) {
-
-        interactionService.runAnonymous(()->{
-
-            //Thread.sleep(1000); // simulate long running
-
-            val actionResultOrVeto = managedAction.invoke(params);
-
-            actionResultOrVeto.getSuccess()
-            .ifPresent(actionResult->uiContext.route(managedAction, params, actionResult));
-
-        });
-    }
-
-}
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/pages/main/UiContextVaaDefault.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/pages/main/UiContextVaaDefault.java
deleted file mode 100644
index 7dfd335644..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/pages/main/UiContextVaaDefault.java
+++ /dev/null
@@ -1,110 +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.causeway.incubator.viewer.vaadin.ui.pages.main;
-
-import java.util.Optional;
-import java.util.function.Consumer;
-
-import javax.inject.Inject;
-
-import com.vaadin.flow.component.Component;
-
-import org.springframework.lang.Nullable;
-import org.springframework.stereotype.Service;
-
-import org.apache.causeway.applib.services.iactnlayer.InteractionService;
-import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.incubator.viewer.vaadin.model.context.MemberInvocationHandler;
-import org.apache.causeway.incubator.viewer.vaadin.model.context.UiContextVaa;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import lombok.Setter;
-import lombok.extern.log4j.Log4j2;
-
-@Service
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-@Log4j2
-public class UiContextVaaDefault implements UiContextVaa {
-
-    @Getter(onMethod_ = {@Override})
-    private final InteractionService interactionService;
-
-    @Setter(onMethod_ = {@Override})
-    private Consumer<Component> newPageHandler;
-
-    @Setter(onMethod_ = {@Override})
-    private MemberInvocationHandler<Component> pageFactory;
-
-    // might not be initialized yet
-    private Optional<MemberInvocationHandler<Component>> pageFactory() {
-        return Optional.ofNullable(pageFactory);
-    }
-
-    @Override
-    public void route(final ManagedObject object) {
-        log.info("about to render object {}", object);
-        newPage(pageFactory()
-                .map(pageFactory->pageFactory.handle(object))
-                .orElse(null));
-    }
-
-    @Override
-    public void route(final ManagedAction managedAction, final Can<ManagedObject> params, final ManagedObject actionResult) {
-        log.info("about to render object {}", actionResult);
-        newPage(pageFactory()
-                .map(pageFactory->pageFactory.handle(managedAction, params, actionResult))
-                .orElse(null));
-    }
-
-//    public void route(final Supplier<ManagedObject> objectSupplier) {
-//        interactionService.runAnonymous(()->{
-//            var 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(final @Nullable Component content) {
-        if(newPageHandler!=null && content!=null) {
-            newPageHandler.accept(content);
-        }
-    }
-
-}
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/util/LocalResourceUtil.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/util/LocalResourceUtil.java
deleted file mode 100644
index 0e9ec7c161..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/util/LocalResourceUtil.java
+++ /dev/null
@@ -1,61 +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.causeway.incubator.viewer.vaadin.ui.util;
-
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
-import java.util.function.Supplier;
-
-import com.vaadin.flow.component.UI;
-
-import org.apache.causeway.commons.internal.base._Strings;
-
-import lombok.Value;
-import lombok.experimental.UtilityClass;
-
-@UtilityClass
-public final class LocalResourceUtil {
-
... 982 lines suppressed ...