This is an automated email from the ASF dual-hosted git repository. joergrade pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/isis.git
commit 399c946bbb30175ef3b0e3b78db50a79cfd4810d Author: Jörg Rade <[email protected]> AuthorDate: Fri Oct 15 18:22:30 2021 +0200 ISIS-2348 Replay User Events (2/n) --- .../kotlin/org/apache/isis/client/kroviz/App.kt | 12 +++- .../core/aggregator/DomainTypesAggregator.kt | 3 +- .../isis/client/kroviz/core/event/ReplayCommand.kt | 66 +++++++++++++++++++--- .../org/apache/isis/client/kroviz/ui/core/RoApp.kt | 30 +++------- .../apache/isis/client/kroviz/ui/core/RoIconBar.kt | 2 +- .../apache/isis/client/kroviz/ui/core/RoMenuBar.kt | 5 +- .../isis/client/kroviz/ui/core/RoStatusBar.kt | 2 +- .../apache/isis/client/kroviz/ui/core/RoView.kt | 1 - .../apache/isis/client/kroviz/ui/core/UiManager.kt | 41 +++++++++----- .../client/kroviz/ui/dialog/NotificationDialog.kt | 3 +- .../apache/isis/client/kroviz/ui/panel/GeoMap.kt | 3 +- 11 files changed, 116 insertions(+), 52 deletions(-) diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/App.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/App.kt index c452081..1024b93 100644 --- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/App.kt +++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/App.kt @@ -23,24 +23,34 @@ import io.kvision.pace.Pace import io.kvision.panel.VPanel import io.kvision.panel.root import org.apache.isis.client.kroviz.ui.core.RoApp +import org.apache.isis.client.kroviz.ui.core.UiManager class App : Application() { + var roApp : RoApp? = null + init { Pace.init() require("css/kroviz.css") + initRoApp() } override fun start() { val r = root("kroviz", addRow = true) val v = VPanel() - v.add(RoApp) + v.add(roApp!!) r.add(v) } override fun dispose(): Map<String, Any> { return mapOf() } + + fun initRoApp() { + roApp = RoApp() + UiManager.app = this + } + } fun main() { diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/DomainTypesAggregator.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/DomainTypesAggregator.kt index 07be0ed..dab1653 100644 --- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/DomainTypesAggregator.kt +++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/aggregator/DomainTypesAggregator.kt @@ -22,6 +22,7 @@ import org.apache.isis.client.kroviz.core.event.LogEntry import org.apache.isis.client.kroviz.core.model.DiagramDM import org.apache.isis.client.kroviz.to.* import org.apache.isis.client.kroviz.ui.core.RoStatusBar +import org.apache.isis.client.kroviz.ui.core.UiManager class DomainTypesAggregator(val url: String) : BaseAggregator() { @@ -39,7 +40,7 @@ class DomainTypesAggregator(val url: String) : BaseAggregator() { } if (dpm.canBeDisplayed()) { - RoStatusBar.updateDiagram(dpm as DiagramDM) + UiManager.getRoStatusBar().updateDiagram(dpm as DiagramDM) dpm.isRendered = true } } diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayCommand.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayCommand.kt index 4352db4..9ae653e 100644 --- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayCommand.kt +++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/core/event/ReplayCommand.kt @@ -19,32 +19,82 @@ package org.apache.isis.client.kroviz.core.event import io.kvision.utils.createInstance +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import org.apache.isis.client.kroviz.core.aggregator.AggregatorWithLayout import org.apache.isis.client.kroviz.core.aggregator.BaseAggregator +import org.apache.isis.client.kroviz.main import org.apache.isis.client.kroviz.to.Link import org.apache.isis.client.kroviz.to.Represention -import org.apache.isis.client.kroviz.ui.core.RoApp class ReplayCommand { fun execute() { - val events = EventStore.log + val events = copyEvents(EventStore.log) EventStore.reset() - RoApp.reset() + main() console.log("[ReplayCommand.execute]") console.log(events) + console.log(events.size) val userActions = events.filter { - it.type == Represention.HOMEPAGE.name || - it.type == Represention.OBJECT_ACTION.name + (it.type == Represention.HOMEPAGE.type) || + it.type == Represention.OBJECT_ACTION.type || + it.type == Represention.OBJECT.type || + it.hasDisplayModel() } + console.log(userActions) + console.log(userActions.size) userActions.forEach { val link = Link(href = it.url) - val clazz = it.getAggregator()::class - val aggregator = clazz.createInstance<BaseAggregator>() + var aggregator: BaseAggregator? = null + if (it.nOfAggregators > 0) { + val clazz = it.getAggregator()::class + aggregator = clazz.createInstance<BaseAggregator>() + } //eventually put a thinkTime here - ResourceProxy().fetch(link,aggregator, it.subType) + wait(1000) + console.log(link) + console.log(aggregator) + ResourceProxy().fetch(link, aggregator, it.subType) } } + + private fun copyEvents(inputList: List<LogEntry>): List<LogEntry> { + val outputList = mutableListOf<LogEntry>() + inputList.forEach { + outputList.add(copyEvent(it)) + } + return outputList + } + + private fun copyEvent(input: LogEntry): LogEntry { + val resourceSpecification = ResourceSpecification(input.url, input.subType) + val output = LogEntry( + resourceSpecification, + input.title, + input.request, + input.createdAt + ) + output.type = input.type + return output + } + + fun wait(milliseconds: Long) { + GlobalScope.launch { + delay(milliseconds) + } + } + + private fun LogEntry.hasDisplayModel(): Boolean { + if (this.nOfAggregators > 0) { + val aggregator = this.getAggregator() + return (aggregator is AggregatorWithLayout) + } + return false + } + } \ No newline at end of file diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoApp.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoApp.kt index e6d5ef0..9aab4ba 100644 --- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoApp.kt +++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoApp.kt @@ -23,37 +23,25 @@ import io.kvision.core.UNIT import io.kvision.panel.HPanel import io.kvision.panel.SimplePanel -object RoApp : SimplePanel() { +class RoApp : SimplePanel() { - private var roView: RoView? = null + val roView = RoView() + val roMenuBar = RoMenuBar() + val roIconBar = RoIconBar() + val roStatusBar = RoStatusBar() init { - setup() - } - - private fun setup() { - this.add(RoMenuBar.navbar) - roView = RoView() + this.add(roMenuBar.navbar) val view = HPanel() { width = CssSize(100, UNIT.perc) } view.addCssClass("main") - view.add(RoIconBar.panel) - view.add(roView!!.tabPanel) + view.add(roIconBar.panel) + view.add(roView.tabPanel) this.add(view) - this.add(RoStatusBar.navbar) - } - - fun reset() { - val kids = this.children - kids?.clear() - setup() - } - - fun getRoView(): RoView { - return roView!! + this.add(roStatusBar.navbar) } } diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoIconBar.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoIconBar.kt index 0d98ec5..ceece35 100644 --- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoIconBar.kt +++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoIconBar.kt @@ -36,7 +36,7 @@ import io.kvision.html.ButtonStyle import io.kvision.panel.SimplePanel import io.kvision.panel.VPanel -object RoIconBar : SimplePanel() { +class RoIconBar : SimplePanel() { val panel = VPanel() private val icons = mutableListOf<SimplePanel>() diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoMenuBar.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoMenuBar.kt index e841014..b8715a5 100644 --- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoMenuBar.kt +++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoMenuBar.kt @@ -20,7 +20,6 @@ package org.apache.isis.client.kroviz.ui.core import io.kvision.core.CssSize import io.kvision.core.UNIT -import io.kvision.core.style import io.kvision.dropdown.DropDown import io.kvision.html.Button import io.kvision.html.ButtonStyle @@ -40,7 +39,7 @@ import org.apache.isis.client.kroviz.ui.panel.* import org.apache.isis.client.kroviz.utils.IconManager import org.apache.isis.client.kroviz.utils.Point -object RoMenuBar : SimplePanel() { +class RoMenuBar : SimplePanel() { lateinit var navbar: Navbar private lateinit var nav: Nav @@ -80,7 +79,7 @@ object RoMenuBar : SimplePanel() { ) mainMenu.add( - buildMenuEntry("Toolbar", "Toolbar", { RoIconBar.toggle() }) + buildMenuEntry("Toolbar", "Toolbar", { UiManager.getRoIconBar().toggle() }) ) mainMenu.add( diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoStatusBar.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoStatusBar.kt index 4159af2..b94ee36 100644 --- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoStatusBar.kt +++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoStatusBar.kt @@ -34,7 +34,7 @@ import org.apache.isis.client.kroviz.ui.dialog.DiagramDialog import org.apache.isis.client.kroviz.ui.dialog.NotificationDialog import org.apache.isis.client.kroviz.utils.IconManager -object RoStatusBar { +class RoStatusBar { val navbar = Navbar(type = NavbarType.FIXEDBOTTOM) private val nav = Nav(rightAlign = true) diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoView.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoView.kt index 300e313..ac32af2 100644 --- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoView.kt +++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/RoView.kt @@ -59,7 +59,6 @@ class RoView() { } fun removeTab(tab: SimplePanel) { - console.log("[RoView.removeTab]") tabCount-- UiManager.closeView(tab) } diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/UiManager.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/UiManager.kt index 625fd9d..a6f9a77 100644 --- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/UiManager.kt +++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/core/UiManager.kt @@ -23,6 +23,7 @@ import io.kvision.dropdown.ContextMenu import io.kvision.panel.SimplePanel import io.kvision.utils.ESC_KEY import kotlinx.browser.window +import org.apache.isis.client.kroviz.App import org.apache.isis.client.kroviz.core.Session import org.apache.isis.client.kroviz.core.aggregator.BaseAggregator import org.apache.isis.client.kroviz.core.aggregator.ObjectAggregator @@ -46,6 +47,7 @@ import org.w3c.dom.events.KeyboardEvent */ object UiManager { + var app: App? = null private var session: Session? = null private val popups = mutableListOf<Widget>() private val settings = mutableMapOf<String, Any>() @@ -68,8 +70,24 @@ object UiManager { }) } + private fun getRoApp(): RoApp { + return app!!.roApp!! + } + + private fun getRoView(): RoView { + return getRoApp().roView + } + + fun getRoIconBar(): RoIconBar { + return getRoApp().roIconBar + } + + fun getRoStatusBar(): RoStatusBar { + return getRoApp().roStatusBar + } + private fun activeObject(): ObjectDM? { - val activeTab = RoApp.getRoView().findActive() + val activeTab = getRoView().findActive() if (activeTab != null) { return (activeTab as RoDisplay).displayModel } @@ -77,14 +95,12 @@ object UiManager { } fun add(title: String, panel: SimplePanel, aggregator: BaseAggregator = UndefinedDispatcher()) { - RoApp.getRoView().addTab(title, panel) + getRoView().addTab(title, panel) EventStore.addView(title, aggregator, panel) } fun remove(panel: SimplePanel) { - console.log("[UiManager.remove]") - // EventStore.closeView(title) - RoApp.getRoView().removeTab(panel) + getRoView().removeTab(panel) } /** @@ -103,8 +119,8 @@ object UiManager { DomUtil.appendTo(uuid, svgCode) val panel = buildSvgPanel(uuid) - RoApp.getRoView().addTab(title, panel) - val tab = RoApp.getRoView().findActive()!! as RoTab + getRoView().addTab(title, panel) + val tab = getRoView().findActive()!! as RoTab val svg = ScalableVectorGraphic(svgCode, uuid) tab.svg = svg @@ -114,7 +130,6 @@ object UiManager { } fun closeView(tab: SimplePanel) { - console.log("[UiManager.closeView]") val tt = tab.title if (tt != null) { EventStore.closeView(tt) @@ -122,15 +137,15 @@ object UiManager { } fun amendMenu(menuBars: Menubars) { - RoMenuBar.amendMenu(menuBars) + getRoApp().roMenuBar.amendMenu(menuBars) } fun updateStatus(entry: LogEntry) { - RoStatusBar.update(entry) + getRoStatusBar().update(entry) } fun updateUser(user: String) { - RoStatusBar.updateUser(user) + getRoStatusBar().updateUser(user) } fun openCollectionView(aggregator: BaseAggregator) { @@ -153,12 +168,12 @@ object UiManager { } fun openDialog(panel: RoDialog) { - RoApp.add(panel) + getRoApp().add(panel) push(panel) } fun closeDialog(panel: RoDialog) { - RoApp.remove(panel) + getRoApp().remove(panel) pop() } diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/NotificationDialog.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/NotificationDialog.kt index bb4ff37..ab2d562 100644 --- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/NotificationDialog.kt +++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/dialog/NotificationDialog.kt @@ -22,6 +22,7 @@ import org.apache.isis.client.kroviz.to.ValueType import org.apache.isis.client.kroviz.ui.core.FormItem import org.apache.isis.client.kroviz.ui.core.RoDialog import org.apache.isis.client.kroviz.ui.core.RoStatusBar +import org.apache.isis.client.kroviz.ui.core.UiManager class NotificationDialog(val message: String) : Command() { @@ -39,7 +40,7 @@ class NotificationDialog(val message: String) : Command() { } override fun execute(action: String?) { - RoStatusBar.acknowledge() + UiManager.getRoStatusBar().acknowledge() } } diff --git a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/GeoMap.kt b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/GeoMap.kt index e92a122..8c863c0 100644 --- a/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/GeoMap.kt +++ b/incubator/clients/kroviz/src/main/kotlin/org/apache/isis/client/kroviz/ui/panel/GeoMap.kt @@ -29,6 +29,7 @@ import io.kvision.maps.LatLng import io.kvision.maps.maps import io.kvision.panel.HPanel import io.kvision.utils.pc +import org.apache.isis.client.kroviz.ui.core.UiManager /** * Sample to be called from RoMenuBar @@ -50,7 +51,7 @@ class GeoMap : HPanel() { val reha = LatLng(53.6824359, 10.7661037) m.addMarker(reha) - RoIconBar.add(createLocationIcon()) + UiManager.getRoIconBar().add(createLocationIcon()) setDropTargetData(Constants.stdMimeType) { id -> val mrk = parseMarker(id!!)
