From 6af9eb1840250e629b151395b75a498ef4634c92 Mon Sep 17 00:00:00 2001 From: Harald Pehl Date: Tue, 20 Oct 2026 20:00:29 +0200 Subject: [PATCH 1/3] feat: add Identifiers.java for HasIdentifier contract with dave Centralizes static identifiers used by HasIdentifier components into a single file, mirroring the OuiaIds.java pattern for OUIA IDs. These identifiers are synced to dave via pnpm sync:identifiers and serve as the contract for [data-identifier="..."] selectors. Includes: - 20 static constants (columns, finder items, breadcrumb, tasks) - build() method for dynamic identifiers (mirrors Id.build()) - fromTemplate() for address template-based identifiers All configuration column and finder item classes updated to reference Identifiers constants instead of local string literals. Closes #428 (partial) --- .../op/configuration/ConfigurationColumn.java | 15 ++-- .../hal/op/configuration/InterfaceColumn.java | 3 +- .../hal/op/configuration/PathColumn.java | 5 +- .../hal/op/configuration/SubsystemColumn.java | 5 +- .../configuration/SystemPropertyColumn.java | 5 +- .../configuration/socket/InboundColumn.java | 3 +- .../socket/OutboundLocalColumn.java | 3 +- .../socket/OutboundRemoteColumn.java | 3 +- .../socket/SocketBindingGroupColumn.java | 3 +- .../socket/SocketBindingTypeColumn.java | 9 +- .../org/jboss/hal/resources/Identifiers.java | 90 +++++++++++++++++++ 11 files changed, 122 insertions(+), 22 deletions(-) create mode 100644 resources/src/main/java/org/jboss/hal/resources/Identifiers.java diff --git a/op/console/src/main/java/org/jboss/hal/op/configuration/ConfigurationColumn.java b/op/console/src/main/java/org/jboss/hal/op/configuration/ConfigurationColumn.java index 23c40e14..a278f6b1 100644 --- a/op/console/src/main/java/org/jboss/hal/op/configuration/ConfigurationColumn.java +++ b/op/console/src/main/java/org/jboss/hal/op/configuration/ConfigurationColumn.java @@ -20,6 +20,7 @@ import jakarta.inject.Inject; import org.jboss.hal.op.configuration.socket.SocketBindingGroupColumn; +import org.jboss.hal.resources.Identifiers; import org.jboss.hal.ui.finder.ColumnProvider; import org.jboss.hal.ui.finder.ColumnRegistry; import org.patternfly.extension.finder.FinderColumn; @@ -43,8 +44,8 @@ @Dependent public class ConfigurationColumn implements ColumnProvider { - /** Column identifier used for registration and OUIA test IDs. */ - public static final String ID = "configuration-column"; + /** Column identifier used for registration and test IDs. */ + public static final String ID = Identifiers.CONFIGURATION_COLUMN; private final Instance registry; @@ -62,31 +63,31 @@ public String identifier() { public FinderColumn get() { return finderColumn(ID) .addHeader(finderColumnHeader("Configuration")) - .addItem(finderItem("subsystems-item", "Subsystems") + .addItem(finderItem(Identifiers.SUBSYSTEMS_ITEM, "Subsystems") .nextColumn(registry.get().column(SubsystemColumn.ID)) .onPreview((item, preview) -> stackPreview(preview, "Subsystems", stack -> stack .addItem(stackItem().add(content(p).editorial().html(SUBSYSTEM_DESCRIPTION)))))) - .addItem(finderItem("interfaces-item", "Interfaces") + .addItem(finderItem(Identifiers.INTERFACES_ITEM, "Interfaces") .nextColumn(registry.get().column(InterfaceColumn.ID)) .onPreview((item, preview) -> stackPreview(preview, "Interfaces", stack -> stack .addItem(stackItem() .add(content(p).editorial().html(INTERFACE_DESCRIPTION_1)) .add(content(p).editorial().html(INTERFACE_DESCRIPTION_2)))))) - .addItem(finderItem("socket-bindings-item", "Socket Bindings") + .addItem(finderItem(Identifiers.SOCKET_BINDINGS_ITEM, "Socket Bindings") .nextColumn(registry.get().column(SocketBindingGroupColumn.ID)) .onPreview((item, preview) -> stackPreview(preview, "Socket Bindings", stack -> stack .addItem(stackItem().add(content(p).editorial().html(SOCKET_BINDING_DESCRIPTION)))))) - .addItem(finderItem("paths-item", "Paths") + .addItem(finderItem(Identifiers.PATHS_ITEM, "Paths") .nextColumn(registry.get().column(PathColumn.ID)) .onPreview((item, preview) -> stackPreview(preview, "Paths", stack -> stack .addItem(stackItem() .add(content(p).editorial().html(PATH_DESCRIPTION_1)) .add(content(p).editorial().html(PATH_DESCRIPTION_2)))))) - .addItem(finderItem("system-properties-item", "System Properties") + .addItem(finderItem(Identifiers.SYSTEM_PROPERTIES_ITEM, "System Properties") .nextColumn(registry.get().column(SystemPropertyColumn.ID)) .onPreview((item, preview) -> stackPreview(preview, "System Properties", stack -> stack diff --git a/op/console/src/main/java/org/jboss/hal/op/configuration/InterfaceColumn.java b/op/console/src/main/java/org/jboss/hal/op/configuration/InterfaceColumn.java index e43bf370..dda4801d 100644 --- a/op/console/src/main/java/org/jboss/hal/op/configuration/InterfaceColumn.java +++ b/op/console/src/main/java/org/jboss/hal/op/configuration/InterfaceColumn.java @@ -27,6 +27,7 @@ import org.jboss.hal.dmr.dispatch.Dispatcher; import org.jboss.hal.meta.AddressTemplate; import org.jboss.hal.meta.StatementContext; +import org.jboss.hal.resources.Identifiers; import org.jboss.hal.ui.finder.ColumnProvider; import org.patternfly.extension.finder.FinderColumn; import org.patternfly.extension.finder.FinderItem; @@ -59,7 +60,7 @@ @Dependent public class InterfaceColumn implements ColumnProvider { - public static final String ID = "interface-column"; + public static final String ID = Identifiers.INTERFACE_COLUMN; private static final AddressTemplate TEMPLATE = AddressTemplate.ofTrusted("interface=*"); private final Dispatcher dispatcher; diff --git a/op/console/src/main/java/org/jboss/hal/op/configuration/PathColumn.java b/op/console/src/main/java/org/jboss/hal/op/configuration/PathColumn.java index 9c5b7ed2..9f30d568 100644 --- a/op/console/src/main/java/org/jboss/hal/op/configuration/PathColumn.java +++ b/op/console/src/main/java/org/jboss/hal/op/configuration/PathColumn.java @@ -18,6 +18,7 @@ import jakarta.enterprise.context.Dependent; import org.jboss.hal.meta.AddressTemplate; +import org.jboss.hal.resources.Identifiers; import org.jboss.hal.ui.finder.ColumnProvider; import org.patternfly.extension.finder.FinderColumn; @@ -28,8 +29,8 @@ @Dependent public class PathColumn implements ColumnProvider { - /** Column identifier used for registration and OUIA test IDs. */ - public static final String ID = "path-column"; + /** Column identifier used for registration and test IDs. */ + public static final String ID = Identifiers.PATH_COLUMN; private static final AddressTemplate TEMPLATE = AddressTemplate.ofTrusted("path=*"); @Override diff --git a/op/console/src/main/java/org/jboss/hal/op/configuration/SubsystemColumn.java b/op/console/src/main/java/org/jboss/hal/op/configuration/SubsystemColumn.java index b6de9ce2..a6dbd680 100644 --- a/op/console/src/main/java/org/jboss/hal/op/configuration/SubsystemColumn.java +++ b/op/console/src/main/java/org/jboss/hal/op/configuration/SubsystemColumn.java @@ -21,6 +21,7 @@ import org.jboss.elemento.Id; import org.jboss.elemento.router.PlaceManager; import org.jboss.hal.meta.AddressTemplate; +import org.jboss.hal.resources.Identifiers; import org.jboss.hal.ui.finder.ColumnProvider; import org.patternfly.extension.finder.FinderColumn; @@ -45,8 +46,8 @@ @Dependent public class SubsystemColumn implements ColumnProvider { - /** Column identifier used for registration and OUIA test IDs. */ - public static final String ID = "subsystem-column"; + /** Column identifier used for registration and test IDs. */ + public static final String ID = Identifiers.SUBSYSTEM_COLUMN; private static final AddressTemplate TEMPLATE = AddressTemplate.ofTrusted("subsystem=*"); private final PlaceManager placeManager; diff --git a/op/console/src/main/java/org/jboss/hal/op/configuration/SystemPropertyColumn.java b/op/console/src/main/java/org/jboss/hal/op/configuration/SystemPropertyColumn.java index 665bdaf2..c4c4fc6f 100644 --- a/op/console/src/main/java/org/jboss/hal/op/configuration/SystemPropertyColumn.java +++ b/op/console/src/main/java/org/jboss/hal/op/configuration/SystemPropertyColumn.java @@ -18,6 +18,7 @@ import jakarta.enterprise.context.Dependent; import org.jboss.hal.meta.AddressTemplate; +import org.jboss.hal.resources.Identifiers; import org.jboss.hal.ui.finder.ColumnProvider; import org.patternfly.extension.finder.FinderColumn; @@ -28,8 +29,8 @@ @Dependent public class SystemPropertyColumn implements ColumnProvider { - /** Column identifier used for registration and OUIA test IDs. */ - public static final String ID = "system-property-column"; + /** Column identifier used for registration and test IDs. */ + public static final String ID = Identifiers.SYSTEM_PROPERTY_COLUMN; private static final AddressTemplate TEMPLATE = AddressTemplate.ofTrusted("system-property=*"); @Override diff --git a/op/console/src/main/java/org/jboss/hal/op/configuration/socket/InboundColumn.java b/op/console/src/main/java/org/jboss/hal/op/configuration/socket/InboundColumn.java index 385535de..ff6b16aa 100644 --- a/op/console/src/main/java/org/jboss/hal/op/configuration/socket/InboundColumn.java +++ b/op/console/src/main/java/org/jboss/hal/op/configuration/socket/InboundColumn.java @@ -17,6 +17,7 @@ import jakarta.enterprise.context.Dependent; +import org.jboss.hal.resources.Identifiers; import org.jboss.hal.ui.finder.ColumnProvider; import org.patternfly.extension.finder.FinderColumn; @@ -26,7 +27,7 @@ @Dependent public class InboundColumn implements ColumnProvider { - public static final String ID = "socket-binding-inbound"; + public static final String ID = Identifiers.SOCKET_BINDING_INBOUND; @Override public String identifier() { diff --git a/op/console/src/main/java/org/jboss/hal/op/configuration/socket/OutboundLocalColumn.java b/op/console/src/main/java/org/jboss/hal/op/configuration/socket/OutboundLocalColumn.java index 97807b67..20d33e64 100644 --- a/op/console/src/main/java/org/jboss/hal/op/configuration/socket/OutboundLocalColumn.java +++ b/op/console/src/main/java/org/jboss/hal/op/configuration/socket/OutboundLocalColumn.java @@ -17,6 +17,7 @@ import jakarta.enterprise.context.Dependent; +import org.jboss.hal.resources.Identifiers; import org.jboss.hal.ui.finder.ColumnProvider; import org.patternfly.extension.finder.FinderColumn; @@ -26,7 +27,7 @@ @Dependent public class OutboundLocalColumn implements ColumnProvider { - public static final String ID = "socket-binding-outbound-local"; + public static final String ID = Identifiers.SOCKET_BINDING_OUTBOUND_LOCAL; @Override public String identifier() { diff --git a/op/console/src/main/java/org/jboss/hal/op/configuration/socket/OutboundRemoteColumn.java b/op/console/src/main/java/org/jboss/hal/op/configuration/socket/OutboundRemoteColumn.java index 7ece1b76..b2362ada 100644 --- a/op/console/src/main/java/org/jboss/hal/op/configuration/socket/OutboundRemoteColumn.java +++ b/op/console/src/main/java/org/jboss/hal/op/configuration/socket/OutboundRemoteColumn.java @@ -17,6 +17,7 @@ import jakarta.enterprise.context.Dependent; +import org.jboss.hal.resources.Identifiers; import org.jboss.hal.ui.finder.ColumnProvider; import org.patternfly.extension.finder.FinderColumn; @@ -26,7 +27,7 @@ @Dependent public class OutboundRemoteColumn implements ColumnProvider { - public static final String ID = "socket-binding-outbound-remote"; + public static final String ID = Identifiers.SOCKET_BINDING_OUTBOUND_REMOTE; @Override public String identifier() { diff --git a/op/console/src/main/java/org/jboss/hal/op/configuration/socket/SocketBindingGroupColumn.java b/op/console/src/main/java/org/jboss/hal/op/configuration/socket/SocketBindingGroupColumn.java index f76b3b55..b998fcdd 100644 --- a/op/console/src/main/java/org/jboss/hal/op/configuration/socket/SocketBindingGroupColumn.java +++ b/op/console/src/main/java/org/jboss/hal/op/configuration/socket/SocketBindingGroupColumn.java @@ -20,6 +20,7 @@ import jakarta.inject.Inject; import org.jboss.hal.meta.AddressTemplate; +import org.jboss.hal.resources.Identifiers; import org.jboss.hal.ui.finder.ColumnProvider; import org.jboss.hal.ui.finder.ColumnRegistry; import org.patternfly.extension.finder.FinderColumn; @@ -31,7 +32,7 @@ @Dependent public class SocketBindingGroupColumn implements ColumnProvider { - public static final String ID = "socket-binding-group-column"; + public static final String ID = Identifiers.SOCKET_BINDING_GROUP_COLUMN; private static final AddressTemplate TEMPLATE = AddressTemplate.ofTrusted("socket-binding-group=*"); private final Instance registry; diff --git a/op/console/src/main/java/org/jboss/hal/op/configuration/socket/SocketBindingTypeColumn.java b/op/console/src/main/java/org/jboss/hal/op/configuration/socket/SocketBindingTypeColumn.java index 53954f4d..88f8e934 100644 --- a/op/console/src/main/java/org/jboss/hal/op/configuration/socket/SocketBindingTypeColumn.java +++ b/op/console/src/main/java/org/jboss/hal/op/configuration/socket/SocketBindingTypeColumn.java @@ -19,6 +19,7 @@ import jakarta.enterprise.inject.Instance; import jakarta.inject.Inject; +import org.jboss.hal.resources.Identifiers; import org.jboss.hal.ui.finder.ColumnProvider; import org.jboss.hal.ui.finder.ColumnRegistry; import org.patternfly.extension.finder.FinderColumn; @@ -40,7 +41,7 @@ @Dependent public class SocketBindingTypeColumn implements ColumnProvider { - public static final String ID = "socket-binding-type"; + public static final String ID = Identifiers.SOCKET_BINDING_TYPE; private final Instance registry; @Inject @@ -57,15 +58,15 @@ public String identifier() { public FinderColumn get() { return finderColumn(ID) .addHeader(finderColumnHeader("Type")) - .addItem(finderItem("inbound", "Inbound") + .addItem(finderItem(Identifiers.INBOUND_ITEM, "Inbound") .icon(far.circleLeft()) .store(RESOURCE_NAME, SOCKET_BINDING) .nextColumn(registry.get().column(InboundColumn.ID))) - .addItem(finderItem("outbound-local", "Outbound Local") + .addItem(finderItem(Identifiers.OUTBOUND_LOCAL_ITEM, "Outbound Local") .store(RESOURCE_NAME, LOCAL_DESTINATION_OUTBOUND_SOCKET_BINDING) .icon(far.circleRight()) .nextColumn(registry.get().column(OutboundLocalColumn.ID))) - .addItem(finderItem("outbound-remote", "Outbound Remote") + .addItem(finderItem(Identifiers.OUTBOUND_REMOTE_ITEM, "Outbound Remote") .store(RESOURCE_NAME, REMOTE_DESTINATION_OUTBOUND_SOCKET_BINDING) .icon(fas.circleArrowRight()) .nextColumn(registry.get().column(OutboundRemoteColumn.ID))); diff --git a/resources/src/main/java/org/jboss/hal/resources/Identifiers.java b/resources/src/main/java/org/jboss/hal/resources/Identifiers.java new file mode 100644 index 00000000..0f99b121 --- /dev/null +++ b/resources/src/main/java/org/jboss/hal/resources/Identifiers.java @@ -0,0 +1,90 @@ +/* + * Copyright 2024 Red Hat + * + * Licensed 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 + * + * https://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.jboss.hal.resources; + +import org.jboss.elemento.Id; + +/** + * Static identifiers used by components that implement {@code HasIdentifier}. These identifiers are synchronized with the dave + * test suite and serve as the contract for element identification using {@code [data-identifier="..."]} selectors. + * + *

+ * There are two kinds of identifiers: + * + *

    + *
  1. Static identifiers — string constants defined in this interface (e.g. {@link #CONFIGURATION_COLUMN}, + * {@link #SUBSYSTEMS_ITEM}). Use these for components whose identity is known at compile time.
  2. + *
  3. Dynamic identifiers — composed at runtime via {@link #build(String, String...)} or + * {@link #fromTemplate(String)}. Use these for components whose identity depends on runtime data (e.g. resource names from + * DMR, address templates).
  4. + *
+ * + * @see OuiaIds + */ +public interface Identifiers { + + String ALL_TASKS = "all-tasks"; + String BREADCRUMB_ROOT = "root"; + String CONFIGURATION_COLUMN = "configuration-column"; + String INBOUND_ITEM = "inbound"; + String INTERFACE_COLUMN = "interface-column"; + String INTERFACES_ITEM = "interfaces-item"; + String OUTBOUND_LOCAL_ITEM = "outbound-local"; + String OUTBOUND_REMOTE_ITEM = "outbound-remote"; + String PATH_COLUMN = "path-column"; + String PATHS_ITEM = "paths-item"; + String SOCKET_BINDING_GROUP_COLUMN = "socket-binding-group-column"; + String SOCKET_BINDING_INBOUND = "socket-binding-inbound"; + String SOCKET_BINDING_OUTBOUND_LOCAL = "socket-binding-outbound-local"; + String SOCKET_BINDING_OUTBOUND_REMOTE = "socket-binding-outbound-remote"; + String SOCKET_BINDING_TYPE = "socket-binding-type"; + String SOCKET_BINDINGS_ITEM = "socket-bindings-item"; + String SUBSYSTEM_COLUMN = "subsystem-column"; + String SUBSYSTEMS_ITEM = "subsystems-item"; + String SYSTEM_PROPERTIES_ITEM = "system-properties-item"; + String SYSTEM_PROPERTY_COLUMN = "system-property-column"; + + /** + * Composes an identifier from segments, delegating to {@link Id#build(String, String...)}. + * + * @param first the first segment + * @param rest additional segments + * @return a composite identifier like {@code first-rest[0]-rest[1]-...} + */ + static String build(String first, String... rest) { + return Id.build(first, rest); + } + + /** + * Produces an identifier from an address template string. Mirrors the logic of + * {@code AddressTemplate.identifier()} by replacing special characters ({@code /}, {@code =}, {@code :}, {@code *}) with + * safe delimiters before passing through {@link Id#build(String, String...)}. + * + * @param template the address template string (e.g. {@code "subsystem=datasources/data-source=*"}) + * @return a safe identifier derived from the template + */ + static String fromTemplate(String template) { + if (template == null || template.isEmpty()) { + return "root"; + } + String safeTemplate = template + .replace("/", "-s-") + .replace("=", "-e-") + .replace(":", "-c-") + .replace("*", "-w-"); + return Id.build(safeTemplate); + } +} From c94415d6582ea113782a2ac76e40d592275e4cc3 Mon Sep 17 00:00:00 2001 From: Harald Pehl Date: Tue, 20 Oct 2026 20:03:03 +0200 Subject: [PATCH 2/3] refactor: delegate AddressTemplate.identifier() to Identifiers.fromTemplate() Single source of truth for the template-to-identifier conversion logic. AddressTemplate now delegates to Identifiers.fromTemplate() instead of duplicating the replacement and Id.build() call. --- .../java/org/jboss/hal/meta/AddressTemplate.java | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/meta/src/main/java/org/jboss/hal/meta/AddressTemplate.java b/meta/src/main/java/org/jboss/hal/meta/AddressTemplate.java index d5bd5fb5..053870d0 100644 --- a/meta/src/main/java/org/jboss/hal/meta/AddressTemplate.java +++ b/meta/src/main/java/org/jboss/hal/meta/AddressTemplate.java @@ -21,10 +21,10 @@ import java.util.Optional; import java.util.function.Predicate; -import org.jboss.elemento.Id; import org.jboss.hal.dmr.ModelNode; import org.jboss.hal.dmr.ResourceAddress; import org.jboss.hal.meta.WildcardResolver.Direction; +import org.jboss.hal.resources.Identifiers; import static java.util.Collections.emptyList; import static java.util.Collections.singletonList; @@ -448,16 +448,7 @@ public Iterator iterator() { /** @return a sanitized, DOM-safe identifier derived from this template, suitable for use as an HTML element ID */ public String identifier() { - if (isEmpty()) { - return "root"; - } else { - String safeTemplate = template - .replace("/", "-s-") - .replace("=", "-e-") - .replace(":", "-c-") - .replace("*", "-w-"); - return Id.build(safeTemplate); - } + return Identifiers.fromTemplate(template); } // ------------------------------------------------------ resolve From 0bbee722ba1fc3adda26683b77640385c0b7d41d Mon Sep 17 00:00:00 2001 From: Harald Pehl Date: Tue, 20 Oct 2026 20:25:26 +0200 Subject: [PATCH 3/3] feat: complete Identifiers.java with all static HasIdentifier constants (#433) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Audit all PFJ HasIdentifier component usages across halOP and centralize static identifiers in Identifiers.java (20 → 62 constants). Update 18 source files to reference Identifiers.* instead of string literals. Document dynamic identifier conventions in Javadoc. --- .../security/CredentialStoreTabs.java | 3 +- .../jboss/hal/op/dashboard/OverviewCard.java | 7 +- .../jboss/hal/op/dashboard/RuntimeCard.java | 13 ++-- .../jboss/hal/op/dashboard/StatusCard.java | 3 +- .../jboss/hal/op/endpoint/EndpointForm.java | 11 ++-- .../jboss/hal/op/endpoint/EndpointTable.java | 5 +- .../hal/op/navigation/NavigationProducer.java | 13 ++-- .../op/notification/NotificationElements.java | 7 +- .../op/notification/NotificationListener.java | 5 +- .../task/statistics/ExpressionsSection.java | 3 +- .../task/statistics/NewExpressionModal.java | 3 +- .../op/task/statistics/ResourcesSection.java | 9 +-- .../org/jboss/hal/resources/Identifiers.java | 65 ++++++++++++++++++- .../ui/modelbrowser/ModelBrowserDetail.java | 7 +- .../resource/dialog/AddResourceDialogs.java | 5 +- .../hal/ui/resource/shell/ResourceTabs.java | 14 ++-- .../ui/resource/table/AttributesTable.java | 3 +- .../ui/resource/table/CapabilitiesTable.java | 3 +- .../ui/resource/table/OperationsTable.java | 3 +- 19 files changed, 127 insertions(+), 55 deletions(-) diff --git a/op/console/src/main/java/org/jboss/hal/op/configuration/security/CredentialStoreTabs.java b/op/console/src/main/java/org/jboss/hal/op/configuration/security/CredentialStoreTabs.java index 0cf7ba4e..0abf1b04 100644 --- a/op/console/src/main/java/org/jboss/hal/op/configuration/security/CredentialStoreTabs.java +++ b/op/console/src/main/java/org/jboss/hal/op/configuration/security/CredentialStoreTabs.java @@ -23,6 +23,7 @@ import org.jboss.hal.dmr.dispatch.Dispatcher; import org.jboss.hal.env.Environment; +import org.jboss.hal.resources.Identifiers; import org.jboss.hal.meta.AddressTemplate; import org.jboss.hal.meta.Metadata; import org.jboss.hal.ui.resource.shell.ResourceTabs; @@ -57,7 +58,7 @@ public boolean appliesTo(Environment environment, AddressTemplate template) { @Override public Promise customizeTabs(AddressTemplate template, Metadata metadata, ResourceTabs defaultTabs) { - return Promise.resolve(defaultTabs.addTab(1, "credential-store-aliases", "Aliases", + return Promise.resolve(defaultTabs.addTab(1, Identifiers.CREDENTIAL_STORE_ALIASES_TAB, "Aliases", aliasManager(dispatcher, template, metadata).element())); } } diff --git a/op/console/src/main/java/org/jboss/hal/op/dashboard/OverviewCard.java b/op/console/src/main/java/org/jboss/hal/op/dashboard/OverviewCard.java index d3eb7f63..74dbb4c1 100644 --- a/op/console/src/main/java/org/jboss/hal/op/dashboard/OverviewCard.java +++ b/op/console/src/main/java/org/jboss/hal/op/dashboard/OverviewCard.java @@ -25,6 +25,7 @@ import org.jboss.hal.dmr.dispatch.Dispatcher; import org.jboss.hal.env.Environment; import org.jboss.hal.meta.AddressTemplate; +import org.jboss.hal.resources.Identifiers; import org.jboss.hal.meta.Metadata; import org.jboss.hal.meta.MetadataRepository; import org.jboss.hal.meta.StatementContext; @@ -176,7 +177,7 @@ public void refresh() { // Test of the native popover var consoleTerm = descriptionListTerm(sentenceCase("console-version")); var consoleText = (HTMLElement) consoleTerm.textDelegate(); - var consoleGroup = descriptionListGroup("console-version") + var consoleGroup = descriptionListGroup(Identifiers.CONSOLE_VERSION) .addTerm(consoleTerm) .addDescription(descriptionListDescription(environment.applicationVersion().toString())); consoleText.classList.add(modifier(helpText)); @@ -195,7 +196,7 @@ public void refresh() { .addItem(consoleGroup) .addItem(dlg(envAttributes, "stability", dld -> dld.add(stabilityLabel(environment.serverStability())))) - .addItem(descriptionListGroup("operation-mode") + .addItem(descriptionListGroup(Identifiers.OPERATION_MODE) .addTerm(descriptionListTerm(sentenceCase("operation-mode"))) .addDescription(descriptionListDescription(environment.operationMode().name()))) .addItem(configFileDlg(envAttributes, envNode)) @@ -252,7 +253,7 @@ private DescriptionListGroup configFileDlg(AttributeDescriptions envAttributes, String domainConfig = filename(envNode.get("domain-config-file").asString()); String hostConfig = filename(envNode.get("host-config-file").asString()); String label = sentenceCase("config-file"); - return descriptionListGroup("config-file") + return descriptionListGroup(Identifiers.CONFIG_FILE) .addTerm(descriptionListTerm(label).icon(gear()) .help(attributeDescriptionPopover(label, envAttributes.get("domain-config-file"), descriptionOnly))) .addDescription(descriptionListDescription() diff --git a/op/console/src/main/java/org/jboss/hal/op/dashboard/RuntimeCard.java b/op/console/src/main/java/org/jboss/hal/op/dashboard/RuntimeCard.java index 5135cc80..8595c337 100644 --- a/op/console/src/main/java/org/jboss/hal/op/dashboard/RuntimeCard.java +++ b/op/console/src/main/java/org/jboss/hal/op/dashboard/RuntimeCard.java @@ -25,6 +25,7 @@ import org.jboss.hal.dmr.Operation; import org.jboss.hal.dmr.dispatch.Dispatcher; import org.jboss.hal.meta.AddressTemplate; +import org.jboss.hal.resources.Identifiers; import org.jboss.hal.meta.Metadata; import org.jboss.hal.meta.MetadataRepository; import org.jboss.hal.meta.StatementContext; @@ -209,18 +210,18 @@ private Card hostInfoCard(ModelNode modelNode, AttributeDescriptions ad) { .addTitle(cardTitle() .run(ct -> ct.textDelegate().appendChild(title(2, xl, "Host").element()))) .addBody(cardBody().add(descriptionList() - .addItem(descriptionListGroup("host-name") + .addItem(descriptionListGroup(Identifiers.HOST_NAME) .addTerm(descriptionListTerm("Name") .help(attributeDescriptionPopover("Name", ad.get("host-operating-system"), descriptionOnly))) .addDescription(descriptionListDescription(modelNode.get("host-operating-system").asString()))) - .addItem(descriptionListGroup("host-arch") + .addItem(descriptionListGroup(Identifiers.HOST_ARCH) .addTerm(descriptionListTerm("Architecture") .help(attributeDescriptionPopover("Architecture", cpuAd.get("host-cpu-arch"), descriptionOnly))) .addDescription(descriptionListDescription( ModelNodeHelper.nested(modelNode, "host-cpu.host-cpu-arch").asString()))) - .addItem(descriptionListGroup("host-cores") + .addItem(descriptionListGroup(Identifiers.HOST_CORES) .addTerm(descriptionListTerm("Cores") .help(attributeDescriptionPopover("Cores", cpuAd.get("host-core-count"), descriptionOnly))) @@ -234,17 +235,17 @@ private Card jvmInfoCard(ModelNode modelNode, AttributeDescriptions ad) { .addTitle(cardTitle() .run(ct -> ct.textDelegate().appendChild(title(2, xl, "JVM").element()))) .addBody(cardBody().add(descriptionList() - .addItem(descriptionListGroup("jvm-name") + .addItem(descriptionListGroup(Identifiers.JVM_NAME) .addTerm(descriptionListTerm("Name")) .addDescription(descriptionListDescription( ModelNodeHelper.nested(modelNode, "jvm.name").asString()))) - .addItem(descriptionListGroup("jvm-version") + .addItem(descriptionListGroup(Identifiers.JVM_VERSION) .addTerm(descriptionListTerm("Version") .help(attributeDescriptionPopover("Version", jvmAd.get("jvm-version"), descriptionOnly))) .addDescription(descriptionListDescription( ModelNodeHelper.nested(modelNode, "jvm.jvm-version").asString()))) - .addItem(descriptionListGroup("jvm-vendor") + .addItem(descriptionListGroup(Identifiers.JVM_VENDOR) .addTerm(descriptionListTerm("Vendor") .help(attributeDescriptionPopover("Vendor", jvmAd.get("jvm-vendor"), descriptionOnly))) diff --git a/op/console/src/main/java/org/jboss/hal/op/dashboard/StatusCard.java b/op/console/src/main/java/org/jboss/hal/op/dashboard/StatusCard.java index d79dd441..d1a0f63f 100644 --- a/op/console/src/main/java/org/jboss/hal/op/dashboard/StatusCard.java +++ b/op/console/src/main/java/org/jboss/hal/op/dashboard/StatusCard.java @@ -23,6 +23,7 @@ import org.jboss.hal.dmr.dispatch.Dispatcher; import org.jboss.hal.env.Environment; import org.jboss.hal.meta.AddressTemplate; +import org.jboss.hal.resources.Identifiers; import org.jboss.hal.meta.Metadata; import org.jboss.hal.meta.MetadataRepository; import org.jboss.hal.meta.StatementContext; @@ -153,7 +154,7 @@ public void refresh() { } cardBody.add(descriptionList() .autoFit() - .addItem(descriptionListGroup("runtime-configuration-state") + .addItem(descriptionListGroup(Identifiers.RUNTIME_CONFIGURATION_STATE) .addTerm(descriptionListTerm("Configuration state") .help(attributeDescriptionPopover("Configuration state", rootAttributes.get("runtime-configuration-state"), descriptionOnly))) diff --git a/op/console/src/main/java/org/jboss/hal/op/endpoint/EndpointForm.java b/op/console/src/main/java/org/jboss/hal/op/endpoint/EndpointForm.java index 9974a9c6..2054ed1e 100644 --- a/op/console/src/main/java/org/jboss/hal/op/endpoint/EndpointForm.java +++ b/op/console/src/main/java/org/jboss/hal/op/endpoint/EndpointForm.java @@ -16,6 +16,7 @@ package org.jboss.hal.op.endpoint; import org.jboss.elemento.IsElement; +import org.jboss.hal.resources.Identifiers; import org.jboss.hal.resources.OuiaIds; import org.patternfly.component.form.Form; import org.patternfly.component.form.FormGroupControl; @@ -71,22 +72,22 @@ class EndpointForm implements IsElement, OuiaSupport input.autocomplete("off"))))) - .addGroup(formGroup("mi-protocol").required() + .addGroup(formGroup(Identifiers.ENDPOINT_PROTOCOL).required() .addLabel(formGroupLabel("Protocol").noPaddingTop()) .addControl(formGroupControl() .add(secureSwitch = switch_("mi-protocol", "mi-protocol", false) .label("HTTPS")))) - .addGroup(formGroup("mi-host").required() + .addGroup(formGroup(Identifiers.ENDPOINT_HOST).required() .addLabel(formGroupLabel("Host")) .addControl(formGroupControl() .addControl(hostInput = textInput("mi-host") .placeholder(DEFAULT_HOST)))) - .addGroup(formGroup("mi-port").required() + .addGroup(formGroup(Identifiers.ENDPOINT_PORT).required() .addLabel(formGroupLabel("Port")) .addControl(formGroupControl() .addControl(portInput = textInput(number, "mi-port") @@ -95,7 +96,7 @@ class EndpointForm implements IsElement, OuiaSupport, OuiaSupport delete; EndpointTable(Callback create, Consumer update, Consumer delete) { - emptyRow = tr("endpoint-empty") + emptyRow = tr(Identifiers.ENDPOINT_EMPTY) .addItem(td().colSpan(4) .add(bullseye() .add(emptyState() @@ -73,7 +74,7 @@ class EndpointTable implements IsElement, OuiaSupport notifications.markAllAsRead())) - .addItem(menuItem("clear-all", "Clear all") + .addItem(menuItem(Identifiers.CLEAR_ALL, "Clear all") .ouiaId(OuiaIds.NOTIFICATION_CLEAR_ALL) .onClick((e, c) -> notifications.clearAll())) - .addItem(menuItem("unclear-last", "Unclear last") + .addItem(menuItem(Identifiers.UNCLEAR_LAST, "Unclear last") .ouiaId(OuiaIds.NOTIFICATION_UNCLEAR_LAST) .onClick((e, c) -> notifications.unclearLast()))))))) .addBody(notificationDrawerBody); diff --git a/op/console/src/main/java/org/jboss/hal/op/notification/NotificationListener.java b/op/console/src/main/java/org/jboss/hal/op/notification/NotificationListener.java index cf23f95c..1fe52184 100644 --- a/op/console/src/main/java/org/jboss/hal/op/notification/NotificationListener.java +++ b/op/console/src/main/java/org/jboss/hal/op/notification/NotificationListener.java @@ -24,6 +24,7 @@ import org.jboss.hal.core.NotificationModification; import org.jboss.hal.core.NotificationModificationEvent; import org.jboss.hal.core.Notifications; +import org.jboss.hal.resources.Identifiers; import org.jboss.hal.resources.Keys; import org.patternfly.component.ComponentType; import org.patternfly.component.Severity; @@ -195,9 +196,9 @@ private NotificationDrawerItem ndi(Notification notification) { .addMenu(dropdownMenu() .addContent(menuContent() .addList(menuList() - .addItem(menuItem("mark-all-read", "Mark as read") + .addItem(menuItem(Identifiers.MARK_ALL_READ, "Mark as read") .onClick((e, c) -> notifications.markAsRead(notification.id))) - .addItem(menuItem("clear-all", "Clear") + .addItem(menuItem(Identifiers.CLEAR_ALL, "Clear") .onClick((e, c) -> notifications.clear(notification.id)))))); return notificationDrawerItem(notification.severity(), notification.id, notification.title) .hoverable() diff --git a/op/console/src/main/java/org/jboss/hal/op/task/statistics/ExpressionsSection.java b/op/console/src/main/java/org/jboss/hal/op/task/statistics/ExpressionsSection.java index 332ed60f..7bb4e141 100644 --- a/op/console/src/main/java/org/jboss/hal/op/task/statistics/ExpressionsSection.java +++ b/op/console/src/main/java/org/jboss/hal/op/task/statistics/ExpressionsSection.java @@ -23,6 +23,7 @@ import org.jboss.hal.dmr.Operation; import org.jboss.hal.dmr.dispatch.Dispatcher; import org.jboss.hal.meta.AddressTemplate; +import org.jboss.hal.resources.Identifiers; import org.patternfly.component.button.Button; import org.patternfly.component.page.PageGroup; import org.patternfly.component.table.Tbody; @@ -114,7 +115,7 @@ static ExpressionsSection expressionsSection(StatisticsTask task, Dispatcher dis .onClick((e, c) -> newExpression()))))) .add(table() .addHead(thead() - .addRow(tr("expressions-head") + .addRow(tr(Identifiers.EXPRESSIONS_HEAD) .addItem(th("expression").width(width60).text(EXPRESSION_COLUMN)) .addItem(th("system-property").width(width40).text(SYSTEM_PROPERTY_COLUMN)) .addItem(th("first-action") diff --git a/op/console/src/main/java/org/jboss/hal/op/task/statistics/NewExpressionModal.java b/op/console/src/main/java/org/jboss/hal/op/task/statistics/NewExpressionModal.java index 2938a500..4ca97d02 100644 --- a/op/console/src/main/java/org/jboss/hal/op/task/statistics/NewExpressionModal.java +++ b/op/console/src/main/java/org/jboss/hal/op/task/statistics/NewExpressionModal.java @@ -18,6 +18,7 @@ import java.util.function.Consumer; import org.jboss.hal.dmr.Expression; +import org.jboss.hal.resources.Identifiers; import org.jboss.hal.resources.OuiaIds; import org.patternfly.component.ValidationStatus; import org.patternfly.component.form.TextInput; @@ -85,7 +86,7 @@ void open() { .add(renderExpression("${expression:default}")) .add("."))) .addBody(modalBody() - .add(form().addGroup(formGroup("new-expression").required() + .add(form().addGroup(formGroup(Identifiers.NEW_EXPRESSION).required() .addLabel(formGroupLabel("Expression")) .addControl(formGroupControl() .addControl(textInput) diff --git a/op/console/src/main/java/org/jboss/hal/op/task/statistics/ResourcesSection.java b/op/console/src/main/java/org/jboss/hal/op/task/statistics/ResourcesSection.java index d2a81056..3224a2cb 100644 --- a/op/console/src/main/java/org/jboss/hal/op/task/statistics/ResourcesSection.java +++ b/op/console/src/main/java/org/jboss/hal/op/task/statistics/ResourcesSection.java @@ -29,6 +29,7 @@ import org.jboss.hal.dmr.Operation; import org.jboss.hal.dmr.dispatch.Dispatcher; import org.jboss.hal.meta.AddressTemplate; +import org.jboss.hal.resources.Identifiers; import org.jboss.hal.model.filter.NameAttribute; import org.patternfly.component.button.Button; import org.patternfly.component.emptystate.EmptyState; @@ -168,9 +169,9 @@ static ResourcesSection resourcesSection(StatisticsTask task, Dispatcher dispatc this.filter.add(new StatisticsEnabledAttribute()); this.expressionMenuLists = new HashMap<>(); - this.selectFilteredMenuItem = menuItem("select-filtered", "Select filtered").disabled() + this.selectFilteredMenuItem = menuItem(Identifiers.SELECT_FILTERED, "Select filtered").disabled() .onClick((e, c) -> selectFiltered()); - this.selectAllMenuItem = menuItem("select-all", "Select all") + this.selectAllMenuItem = menuItem(Identifiers.SELECT_ALL, "Select all") .onClick((e, c) -> selectAll()); String bulkSelectId = Id.build(StatisticsTask.TASK_ID, "bulk-select"); this.bulkSelectCheckbox = checkboxWrapped(bulkSelectId, bulkSelectId).standalone() @@ -218,7 +219,7 @@ static ResourcesSection resourcesSection(StatisticsTask task, Dispatcher dispatc .addMenu(dropdownMenu() .addContent(menuContent() .addList(menuList() - .addItem(menuItem("select-none", + .addItem(menuItem(Identifiers.SELECT_NONE, "Select none") .onClick( (e, c) -> selectNone())) @@ -238,7 +239,7 @@ static ResourcesSection resourcesSection(StatisticsTask task, Dispatcher dispatc .add(resourcesTable .onMultiSelect((e, c, rows) -> onSelection(rows)) .addHead(thead() - .addRow(tr("resources-head") + .addRow(tr(Identifiers.RESOURCES_HEAD) .addItem(th().screenReader("Row select")) .addItem(th("resource").width(width60).text(RESOURCE_COLUMN)) .addItem(th(STATISTICS_ENABLED).width(width40) diff --git a/resources/src/main/java/org/jboss/hal/resources/Identifiers.java b/resources/src/main/java/org/jboss/hal/resources/Identifiers.java index 0f99b121..ca526070 100644 --- a/resources/src/main/java/org/jboss/hal/resources/Identifiers.java +++ b/resources/src/main/java/org/jboss/hal/resources/Identifiers.java @@ -32,20 +32,79 @@ * DMR, address templates). * * + *

Dynamic identifier conventions

+ *

+ * Components whose identity depends on runtime data use these patterns: + * + *

    + *
  • BreadcrumbItem / TreeViewItem: {@code AddressTemplate.identifier()} via + * {@link #fromTemplate(String)}
  • + *
  • FinderItem (resources): {@code Id.build(node.asString())} — the resource name
  • + *
  • DataListItem: derived from child resource name
  • + *
  • Tr (data rows): {@code attribute.name()}, {@code operation.name()}, or + * {@code capability.name()}
  • + *
  • MenuItem (filters): {@code FilterAttribute.NAME + "-true"/"-false"} pattern
  • + *
  • MenuItem (resources): {@code template.identifier()} or + * {@code Id.build(template.template)}
  • + *
  • FormGroup / DescriptionListGroup (resource forms/views): attribute name from + * {@code AttributeDescription}
  • + *
+ * * @see OuiaIds */ public interface Identifiers { + String ADD_RESOURCE_STEP = "add-resource"; String ALL_TASKS = "all-tasks"; + String ATTRIBUTES_HEAD = "attributes-head"; + String ATTRIBUTES_TAB = "resource-tabs-attributes"; String BREADCRUMB_ROOT = "root"; + String CAPABILITIES_HEAD = "capabilities-head"; + String CAPABILITIES_TAB = "resource-tabs-capabilities"; + String CLEAR_ALL = "clear-all"; + String CONFIG_FILE = "config-file"; String CONFIGURATION_COLUMN = "configuration-column"; + String CONSOLE_VERSION = "console-version"; + String CREDENTIAL_STORE_ALIASES_TAB = "credential-store-aliases"; + String DATA_TAB = "resource-tabs-data"; + String ENDPOINT_EMPTY = "endpoint-empty"; + String ENDPOINT_HEAD = "endpoint-head"; + String ENDPOINT_HOST = "mi-host"; + String ENDPOINT_NAME = "mi-name"; + String ENDPOINT_PORT = "mi-port"; + String ENDPOINT_PROTOCOL = "mi-protocol"; + String ENDPOINT_URL = "mi-url"; + String EXPRESSIONS_HEAD = "expressions-head"; + String HOST_ARCH = "host-arch"; + String HOST_CORES = "host-cores"; + String HOST_NAME = "host-name"; String INBOUND_ITEM = "inbound"; String INTERFACE_COLUMN = "interface-column"; String INTERFACES_ITEM = "interfaces-item"; + String JVM_NAME = "jvm-name"; + String JVM_VENDOR = "jvm-vendor"; + String JVM_VERSION = "jvm-version"; + String MARK_ALL_READ = "mark-all-read"; + String NAV_CONFIGURATION = "/configuration"; + String NAV_DASHBOARD = "/"; + String NAV_DEPLOYMENTS = "/deployments"; + String NAV_MODEL_BROWSER = "/management-model"; + String NAV_RUNTIME = "/runtime"; + String NAV_TASKS = "/tasks"; + String NEW_EXPRESSION = "new-expression"; + String OPERATION_MODE = "operation-mode"; + String OPERATIONS_HEAD = "operations-head"; + String OPERATIONS_TAB = "resource-tabs-operations"; String OUTBOUND_LOCAL_ITEM = "outbound-local"; String OUTBOUND_REMOTE_ITEM = "outbound-remote"; String PATH_COLUMN = "path-column"; String PATHS_ITEM = "paths-item"; + String RESOURCES_HEAD = "resources-head"; + String RUNTIME_CONFIGURATION_STATE = "runtime-configuration-state"; + String SELECT_ALL = "select-all"; + String SELECT_FILTERED = "select-filtered"; + String SELECT_LOCATION_STEP = "select-location"; + String SELECT_NONE = "select-none"; String SOCKET_BINDING_GROUP_COLUMN = "socket-binding-group-column"; String SOCKET_BINDING_INBOUND = "socket-binding-inbound"; String SOCKET_BINDING_OUTBOUND_LOCAL = "socket-binding-outbound-local"; @@ -56,6 +115,7 @@ public interface Identifiers { String SUBSYSTEMS_ITEM = "subsystems-item"; String SYSTEM_PROPERTIES_ITEM = "system-properties-item"; String SYSTEM_PROPERTY_COLUMN = "system-property-column"; + String UNCLEAR_LAST = "unclear-last"; /** * Composes an identifier from segments, delegating to {@link Id#build(String, String...)}. @@ -69,9 +129,8 @@ static String build(String first, String... rest) { } /** - * Produces an identifier from an address template string. Mirrors the logic of - * {@code AddressTemplate.identifier()} by replacing special characters ({@code /}, {@code =}, {@code :}, {@code *}) with - * safe delimiters before passing through {@link Id#build(String, String...)}. + * Produces an identifier from an address template string. Replaces the special characters ({@code /}, {@code =}, {@code :}, + * {@code *}) with safe delimiters before passing through {@link Id#build(String, String...)}. * * @param template the address template string (e.g. {@code "subsystem=datasources/data-source=*"}) * @return a safe identifier derived from the template diff --git a/ui/src/main/java/org/jboss/hal/ui/modelbrowser/ModelBrowserDetail.java b/ui/src/main/java/org/jboss/hal/ui/modelbrowser/ModelBrowserDetail.java index d4b9cedc..7ef5a5b7 100644 --- a/ui/src/main/java/org/jboss/hal/ui/modelbrowser/ModelBrowserDetail.java +++ b/ui/src/main/java/org/jboss/hal/ui/modelbrowser/ModelBrowserDetail.java @@ -25,6 +25,7 @@ import org.jboss.hal.meta.AddressTemplate; import org.jboss.hal.meta.Metadata; import org.jboss.hal.resources.Dataset; +import org.jboss.hal.resources.Identifiers; import org.jboss.hal.resources.HalClasses; import org.jboss.hal.ui.modelbrowser.ModelBrowserEvents.AddResource; import org.jboss.hal.ui.modelbrowser.ModelBrowserEvents.DeleteResource; @@ -149,9 +150,9 @@ private String highlightTab() { if (value != null) { return Highlight.parse(value) .map(h -> switch (h.type()) { - case ATTRIBUTE -> ResourceTabs.DATA_TAB; - case OPERATION -> ResourceTabs.OPERATIONS_TAB; - case CAPABILITY -> ResourceTabs.CAPABILITIES_TAB; + case ATTRIBUTE -> Identifiers.DATA_TAB; + case OPERATION -> Identifiers.OPERATIONS_TAB; + case CAPABILITY -> Identifiers.CAPABILITIES_TAB; }) .orElse(null); } diff --git a/ui/src/main/java/org/jboss/hal/ui/resource/dialog/AddResourceDialogs.java b/ui/src/main/java/org/jboss/hal/ui/resource/dialog/AddResourceDialogs.java index e79cbe52..9c69c0a9 100644 --- a/ui/src/main/java/org/jboss/hal/ui/resource/dialog/AddResourceDialogs.java +++ b/ui/src/main/java/org/jboss/hal/ui/resource/dialog/AddResourceDialogs.java @@ -26,6 +26,7 @@ import org.jboss.hal.meta.description.AttributeDescription; import org.jboss.hal.meta.description.OperationDescription; import org.jboss.hal.resources.HalClasses; +import org.jboss.hal.resources.Identifiers; import org.jboss.hal.resources.Keys; import org.jboss.hal.resources.OuiaIds; import org.jboss.hal.ui.resource.PipelineContext; @@ -120,7 +121,7 @@ public static Promise addResourceWizard(List templat } private static WizardStep selectLocationStep(Wizard wizard, List templates, String resource) { - return wizardStep("select-location", "Select location") + return wizardStep(Identifiers.SELECT_LOCATION_STEP, "Select location") .onEnter((wzd, step) -> wzd.footer().nextButton().disabled(!wzd.context().has(Keys.FINDER_TEMPLATE))) .add(stack().gutter() .addItem(stackItem() @@ -160,7 +161,7 @@ private static WizardStep selectLocationStep(Wizard wizard, List { AddressTemplate template = wizard.context().get(Keys.FINDER_TEMPLATE); diff --git a/ui/src/main/java/org/jboss/hal/ui/resource/shell/ResourceTabs.java b/ui/src/main/java/org/jboss/hal/ui/resource/shell/ResourceTabs.java index b1af8107..4fb54e8d 100644 --- a/ui/src/main/java/org/jboss/hal/ui/resource/shell/ResourceTabs.java +++ b/ui/src/main/java/org/jboss/hal/ui/resource/shell/ResourceTabs.java @@ -22,6 +22,7 @@ import org.jboss.elemento.IsElement; import org.jboss.hal.meta.AddressTemplate; import org.jboss.hal.meta.Metadata; +import org.jboss.hal.resources.Identifiers; import org.jboss.hal.resources.OuiaIds; import org.jboss.hal.ui.resource.table.AttributesTable; import org.jboss.hal.ui.resource.table.CapabilitiesTable; @@ -67,11 +68,6 @@ public static ResourceTabs resourceTabs(AddressTemplate template, Metadata metad // ------------------------------------------------------ instance - public static final String DATA_TAB = "resource-tabs-data"; - public static final String ATTRIBUTES_TAB = "resource-tabs-attributes"; - public static final String OPERATIONS_TAB = "resource-tabs-operations"; - public static final String CAPABILITIES_TAB = "resource-tabs-capabilities"; - record TabDescriptor(String id, String title, Promise content, String css) {} private final List descriptors; @@ -81,15 +77,15 @@ record TabDescriptor(String id, String title, Promise content, Stri ResourceTabs(AddressTemplate template, Metadata metadata) { this.descriptors = new ArrayList<>(); - this.descriptors.add(new TabDescriptor(DATA_TAB, "Data", + this.descriptors.add(new TabDescriptor(Identifiers.DATA_TAB, "Data", Promise.resolve(resourceData(template, metadata).element()), util("pt-md"))); if (!metadata.resourceDescription().attributes().isEmpty()) { - this.descriptors.add(new TabDescriptor(ATTRIBUTES_TAB, "Attributes", + this.descriptors.add(new TabDescriptor(Identifiers.ATTRIBUTES_TAB, "Attributes", Promise.resolve(new AttributesTable(metadata).element()), util("pt-md"))); } - this.descriptors.add(new TabDescriptor(OPERATIONS_TAB, "Operations", + this.descriptors.add(new TabDescriptor(Identifiers.OPERATIONS_TAB, "Operations", Promise.resolve(new OperationsTable(template, metadata).element()), util("pt-md"))); - this.descriptors.add(new TabDescriptor(CAPABILITIES_TAB, "Capabilities", + this.descriptors.add(new TabDescriptor(Identifiers.CAPABILITIES_TAB, "Capabilities", uic().modelGraphTools().ping() .then(available -> Promise.resolve(new CapabilitiesTable(metadata, available).element())), null)); diff --git a/ui/src/main/java/org/jboss/hal/ui/resource/table/AttributesTable.java b/ui/src/main/java/org/jboss/hal/ui/resource/table/AttributesTable.java index 01b2cb56..af8bd683 100644 --- a/ui/src/main/java/org/jboss/hal/ui/resource/table/AttributesTable.java +++ b/ui/src/main/java/org/jboss/hal/ui/resource/table/AttributesTable.java @@ -18,6 +18,7 @@ import org.jboss.elemento.IsElement; import org.jboss.elemento.logger.Logger; import org.jboss.hal.meta.Metadata; +import org.jboss.hal.resources.Identifiers; import org.jboss.hal.meta.description.AttributeDescription; import org.jboss.hal.resources.Keys; import org.patternfly.component.emptystate.EmptyState; @@ -74,7 +75,7 @@ public AttributesTable(Metadata metadata) { .add(attributesToolbar(filter, visible, total)) .add(table(anyComplexAttributes ? TableType.treeTable : TableType.table) .addHead(thead().css(util("mt-sm")) - .addRow(tr("attributes-head") + .addRow(tr(Identifiers.ATTRIBUTES_HEAD) .addItem(th("name").width(width60).text("Name")) .addItem(th("type").width(width20).text("Type")) .addItem(th("storage").width(width10).text("Storage")) diff --git a/ui/src/main/java/org/jboss/hal/ui/resource/table/CapabilitiesTable.java b/ui/src/main/java/org/jboss/hal/ui/resource/table/CapabilitiesTable.java index 25be6713..6f8aad6f 100644 --- a/ui/src/main/java/org/jboss/hal/ui/resource/table/CapabilitiesTable.java +++ b/ui/src/main/java/org/jboss/hal/ui/resource/table/CapabilitiesTable.java @@ -34,6 +34,7 @@ import org.jboss.hal.core.mgt.CapabilityReference; import org.jboss.hal.meta.AddressTemplate; import org.jboss.hal.meta.Metadata; +import org.jboss.hal.resources.Identifiers; import org.jboss.hal.meta.description.CapabilityDescription; import org.jboss.hal.meta.description.CapabilityDescriptions; import org.jboss.hal.meta.description.ResourceDescription; @@ -105,7 +106,7 @@ public CapabilitiesTable(Metadata metadata, boolean mgtAvailable) { this.expandedCapabilities = new HashSet<>(); this.table = table(mgtAvailable ? TableType.expandable : TableType.table) .addHead(thead().css(util("mt-sm")) - .addRow(tr("capabilities-head") + .addRow(tr(Identifiers.CAPABILITIES_HEAD) .run(tr -> { if (mgtAvailable) { tr.addItem(th().screenReader("Row expansion")); diff --git a/ui/src/main/java/org/jboss/hal/ui/resource/table/OperationsTable.java b/ui/src/main/java/org/jboss/hal/ui/resource/table/OperationsTable.java index 987ce3c6..1fc96599 100644 --- a/ui/src/main/java/org/jboss/hal/ui/resource/table/OperationsTable.java +++ b/ui/src/main/java/org/jboss/hal/ui/resource/table/OperationsTable.java @@ -23,6 +23,7 @@ import org.jboss.hal.env.Settings; import org.jboss.hal.meta.AddressTemplate; import org.jboss.hal.meta.Metadata; +import org.jboss.hal.resources.Identifiers; import org.jboss.hal.meta.description.AttributeDescription; import org.jboss.hal.meta.description.OperationDescription; import org.jboss.hal.meta.description.ResourceDescription; @@ -119,7 +120,7 @@ public OperationsTable(AddressTemplate template, Metadata metadata) { .add(operationsToolbar(filter, visible, total)) .add(table() .addHead(thead() - .addRow(tr("operations-head") + .addRow(tr(Identifiers.OPERATIONS_HEAD) .addItem(th("name").width(width35).text("Name")) .addItem(th("parameters").width(width45).text("Parameters")) .addItem(th("return-value").width(width20).text("Return value"))