Skip to content

Resource shell SPI #320

Description

@hpehl

Overview

The ResourceShell provides a composable framework for CRUD operations on arbitrary WildFly management resources. The ModelBrowser is currently the most prominent consumer. While the generic UX works well for the vast majority of resources, some resources benefit from a more specialized UI.

This umbrella issue tracks all SPI contracts for the resource shell. Each SPI contract is a separate sub-issue that can be designed and implemented independently.

Design Decisions

  1. Separate registries per concern — each SPI contract has its own registry rather than one monolithic interface. This keeps concerns decoupled and allows incremental adoption.
  2. Registration key — providers register against a combination of Environment (which provides operation mode, stability level, product version, etc.) and an AddressTemplate (which can contain wildcards). This allows providers to be scoped by resource type and conditional on server capabilities.
  3. CDI-based discovery — providers are CDI beans discovered at startup. External modules can contribute providers by placing implementation JARs on the classpath — no compile-time dependency on the provider is required.

SPI Contracts

Current Architecture

The ResourceShell is a pure layout container that composes optional children:

ResourceShell
├── Sticky header group
│   ├── ResourceBreadcrumb (optional)
│   └── ResourceHeader (optional)
└── Content section
    ├── ResourceTabs (option A)
    │   ├── Data tab → ResourceData → Pipeline → ResourceView / ResourceForm
    │   ├── Attributes tab → AttributesTable
    │   ├── Operations tab → OperationsTable
    │   └── Capabilities tab → CapabilitiesTable
    └── ResourceList (option B)
        └── DataList of child resources

All intelligence lives in the composed children. The shell itself has no behavior and no data loading.

Package

All SPI contracts live in org.jboss.hal.ui.resource.spi.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions