From d3339878c78699f57d8368aac5ceb73023cc701a Mon Sep 17 00:00:00 2001 From: Ladislav Thon Date: Wed, 9 Oct 2024 12:01:56 +0200 Subject: [PATCH] ArC: add support for inactive beans in dev UI --- .../arc/deployment/devui/DevBeanInfo.java | 6 +++++ .../main/resources/dev-ui/qwc-arc-beans.js | 24 ++++++++++++++++--- .../dev-ui/qwc-arc-removed-components.js | 22 +++++++++++++++-- .../arc/runtime/devui/ArcJsonRPCService.java | 15 ++++++++++++ 4 files changed, 62 insertions(+), 5 deletions(-) diff --git a/extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/devui/DevBeanInfo.java b/extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/devui/DevBeanInfo.java index ff367d475dbde..98d646827eb9a 100644 --- a/extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/devui/DevBeanInfo.java +++ b/extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/devui/DevBeanInfo.java @@ -172,6 +172,12 @@ public boolean isGenerated() { return isGenerated; } + // only exists to make sure that the JSON objects already have the field + // and don't have to change their shape later + public boolean isInactive() { + return false; + } + public String getDescription() { return description(false); } diff --git a/extensions/arc/deployment/src/main/resources/dev-ui/qwc-arc-beans.js b/extensions/arc/deployment/src/main/resources/dev-ui/qwc-arc-beans.js index fb0267df6e27c..b7f0fa17190f1 100644 --- a/extensions/arc/deployment/src/main/resources/dev-ui/qwc-arc-beans.js +++ b/extensions/arc/deployment/src/main/resources/dev-ui/qwc-arc-beans.js @@ -1,4 +1,5 @@ import { LitElement, html, css} from 'lit'; +import { JsonRpc } from 'jsonrpc'; import { columnBodyRenderer } from '@vaadin/grid/lit.js'; import { beans } from 'build-time-data'; import { beanIdsWithDependencyGraphs } from 'build-time-data'; @@ -13,6 +14,7 @@ import './qwc-arc-bean-graph.js'; * This component shows the Arc Beans */ export class QwcArcBeans extends LitElement { + jsonRpc = new JsonRpc(this); static styles = css` .arctable { @@ -58,11 +60,27 @@ export class QwcArcBeans extends LitElement { this._selectedBean = null; } + connectedCallback() { + super.connectedCallback(); + + this.jsonRpc.getInactiveBeans().then(inactiveBeans => { + let inactive = new Set(inactiveBeans.result); + let newBeans = []; + for (let bean of this._beans) { + if (inactive.has(bean.id)) { + bean.inactive = true; + } + newBeans.push(bean); + } + this._beans = newBeans; + }); + } + render() { if (this._beans) { - if(this._selectedBean){ + if (this._selectedBean) { return this._renderBeanGraph(); - }else{ + } else { return this._renderBeanList(); } } else { @@ -143,7 +161,7 @@ export class QwcArcBeans extends LitElement { ${level ? html`${kind}` : html`${kind}` - }`; + } ${bean.inactive ? html`Inactive` : ''}`; } _kindClassRenderer(bean){ diff --git a/extensions/arc/deployment/src/main/resources/dev-ui/qwc-arc-removed-components.js b/extensions/arc/deployment/src/main/resources/dev-ui/qwc-arc-removed-components.js index 4532b052a728b..dae5fd0717cad 100644 --- a/extensions/arc/deployment/src/main/resources/dev-ui/qwc-arc-removed-components.js +++ b/extensions/arc/deployment/src/main/resources/dev-ui/qwc-arc-removed-components.js @@ -1,5 +1,5 @@ import { LitElement, html, css} from 'lit'; - +import { JsonRpc } from 'jsonrpc'; import '@vaadin/tabs'; import '@vaadin/tabsheet'; import '@vaadin/grid'; @@ -15,6 +15,8 @@ import 'qui-ide-link'; * This component shows the Arc RemovedComponents */ export class QwcArcRemovedComponents extends LitElement { + jsonRpc = new JsonRpc(this); + static styles = css` .fullHeight { height: 100%; @@ -45,6 +47,22 @@ export class QwcArcRemovedComponents extends LitElement { this._removedInterceptors = removedInterceptors; } + connectedCallback() { + super.connectedCallback(); + + this.jsonRpc.getInactiveBeans().then(inactiveBeans => { + let inactive = new Set(inactiveBeans.result); + let newRemovedBeans = []; + for (let bean of this._removedBeans) { + if (inactive.has(bean.id)) { + bean.inactive = true; + } + newRemovedBeans.push(bean); + } + this._removedBeans = newRemovedBeans; + }); + } + render() { return html` @@ -175,7 +193,7 @@ export class QwcArcRemovedComponents extends LitElement { ${level ? html`${kind}` : html`${kind}` - }`; + } ${bean.inactive ? html`Inactive` : ''}`; } _kindClassRenderer(bean){ diff --git a/extensions/arc/runtime/src/main/java/io/quarkus/arc/runtime/devui/ArcJsonRPCService.java b/extensions/arc/runtime/src/main/java/io/quarkus/arc/runtime/devui/ArcJsonRPCService.java index 27fec9e33bbab..c2de24e73fd49 100644 --- a/extensions/arc/runtime/src/main/java/io/quarkus/arc/runtime/devui/ArcJsonRPCService.java +++ b/extensions/arc/runtime/src/main/java/io/quarkus/arc/runtime/devui/ArcJsonRPCService.java @@ -7,9 +7,13 @@ import java.util.ArrayList; import java.util.List; +import jakarta.enterprise.inject.Any; import jakarta.enterprise.inject.Instance; +import jakarta.enterprise.inject.spi.Bean; import jakarta.inject.Inject; +import io.quarkus.arc.Arc; +import io.quarkus.arc.InjectableBean; import io.quarkus.arc.runtime.devconsole.Invocation; import io.quarkus.arc.runtime.devconsole.InvocationsMonitor; import io.quarkus.arc.runtime.devmode.EventInfo; @@ -103,4 +107,15 @@ private String timeString(LocalDateTime time) { int lastIndexOfDot = timestamp.lastIndexOf("."); return lastIndexOfDot > 0 ? timestamp.substring(0, lastIndexOfDot) : timestamp; } + + public List getInactiveBeans() { + List result = new ArrayList<>(); + for (Bean bean : Arc.container().beanManager().getBeans(Object.class, Any.Literal.INSTANCE)) { + InjectableBean injectableBean = (InjectableBean) bean; + if (!injectableBean.isActive()) { + result.add(injectableBean.getIdentifier()); + } + } + return result; + } }