Skip to content

Commit b808b47

Browse files
Merge pull request quarkusio#49776 from phillip-kruger/welcome-page-contributions
Allow extensions to contribute to welcome message
2 parents 25ceb27 + f8a7cd6 commit b808b47

File tree

5 files changed

+81
-8
lines changed

5 files changed

+81
-8
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package io.quarkus.devui.spi.welcome;
2+
3+
import io.quarkus.devui.spi.AbstractDevUIBuildItem;
4+
5+
/**
6+
* Adds dynamic data to the welcome page
7+
*/
8+
public final class DynamicWelcomeBuildItem extends AbstractDevUIBuildItem {
9+
10+
private final String html;
11+
12+
public DynamicWelcomeBuildItem(String html) {
13+
super();
14+
this.html = html;
15+
}
16+
17+
public String getHTML() {
18+
return this.html;
19+
}
20+
}

extensions/devui/deployment/src/main/java/io/quarkus/devui/deployment/welcome/WelcomeData.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ public class WelcomeData {
1010
public String resourcesDir;
1111
public String sourceDir;
1212
public List<SelectedExtension> selectedExtensions = new ArrayList<>();
13+
public String dynamicContent;
1314

1415
public void addSelectedExtension(String name, String description, URL guide) {
1516
selectedExtensions.add(new SelectedExtension(name, description, guide));

extensions/devui/deployment/src/main/java/io/quarkus/devui/deployment/welcome/WelcomeProcessor.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import io.quarkus.devui.deployment.InternalPageBuildItem;
1919
import io.quarkus.devui.deployment.extension.Extension;
2020
import io.quarkus.devui.spi.page.Page;
21+
import io.quarkus.devui.spi.welcome.DynamicWelcomeBuildItem;
2122

2223
/**
2324
* This creates Welcome page
@@ -26,11 +27,13 @@ public class WelcomeProcessor {
2627

2728
@BuildStep(onlyIf = IsLocalDevelopment.class)
2829
InternalPageBuildItem createWelcomePages(CurateOutcomeBuildItem curateOutcomeBuildItem,
30+
List<DynamicWelcomeBuildItem> dynamicWelcomeBuildItems,
2931
ExtensionsBuildItem extensionsBuildItem) {
3032

3133
InternalPageBuildItem welcomePageBuildItem = new InternalPageBuildItem("Welcome", 99999);
3234

33-
welcomePageBuildItem.addBuildTimeData("welcomeData", createWelcomeData(curateOutcomeBuildItem, extensionsBuildItem),
35+
welcomePageBuildItem.addBuildTimeData("welcomeData",
36+
createWelcomeData(curateOutcomeBuildItem, dynamicWelcomeBuildItems, extensionsBuildItem),
3437
"Contains high level information about the Quarkus application, including the configFile, resourcesDir, sourceDir and selectedExtensions");
3538

3639
welcomePageBuildItem.addPage(Page.webComponentPageBuilder()
@@ -44,6 +47,7 @@ InternalPageBuildItem createWelcomePages(CurateOutcomeBuildItem curateOutcomeBui
4447
}
4548

4649
private WelcomeData createWelcomeData(CurateOutcomeBuildItem curateOutcomeBuildItem,
50+
List<DynamicWelcomeBuildItem> dynamicWelcomeBuildItems,
4751
ExtensionsBuildItem extensionsBuildItem) {
4852

4953
WorkspaceModule workspaceModule = curateOutcomeBuildItem.getApplicationModel().getApplicationModule();
@@ -52,6 +56,7 @@ private WelcomeData createWelcomeData(CurateOutcomeBuildItem curateOutcomeBuildI
5256
welcomeData.configFile = getConfigFile(workspaceModule);
5357
welcomeData.sourceDir = getSourceDir(workspaceModule);
5458
welcomeData.resourcesDir = getResourcesDir(workspaceModule);
59+
welcomeData.dynamicContent = getDynamicContent(dynamicWelcomeBuildItems, welcomeData.resourcesDir);
5560

5661
List<Extension> selectedExtensions = getSelectedExtensions(workspaceModule, extensionsBuildItem);
5762
for (Extension extension : selectedExtensions) {
@@ -151,4 +156,19 @@ private Map<String, Extension> getExtensionMap(ExtensionsBuildItem extensionsBui
151156
return all;
152157
}
153158

159+
private String getDynamicContent(List<DynamicWelcomeBuildItem> dynamicWelcomeBuildItems, String resourceDir) {
160+
if (dynamicWelcomeBuildItems == null || dynamicWelcomeBuildItems.isEmpty())
161+
return null;
162+
163+
StringBuilder sb = new StringBuilder();
164+
for (DynamicWelcomeBuildItem dynamicWelcomeBuildItem : dynamicWelcomeBuildItems) {
165+
166+
String extensionProvidedHTML = dynamicWelcomeBuildItem.getHTML();
167+
extensionProvidedHTML = extensionProvidedHTML.replace("${devuiState.welcomeData.resourcesDir}", resourceDir);
168+
169+
sb.append(extensionProvidedHTML);
170+
// TODO: Add order ? Add extension name ? Add paragraph
171+
}
172+
return sb.toString();
173+
}
154174
}

extensions/devui/resources/src/main/resources/dev-ui/qwc/qwc-welcome.js

Lines changed: 27 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

extensions/web-dependency-locator/deployment/src/main/java/io/quarkus/webdependency/locator/deployment/devui/WebDependencyLocatorDevUIProcessor.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import io.quarkus.deployment.annotations.BuildStep;
1010
import io.quarkus.devui.spi.page.CardPageBuildItem;
1111
import io.quarkus.devui.spi.page.Page;
12+
import io.quarkus.devui.spi.welcome.DynamicWelcomeBuildItem;
1213
import io.quarkus.webdependency.locator.deployment.ImportMapBuildItem;
1314

1415
public class WebDependencyLocatorDevUIProcessor {
@@ -53,4 +54,15 @@ public void createPages(BuildProducer<CardPageBuildItem> cardPageProducer,
5354
cardPageProducer.produce(cardPageBuildItem);
5455
}
5556

57+
@BuildStep(onlyIf = IsDevelopment.class)
58+
public DynamicWelcomeBuildItem createDynamicWelcomeData() {
59+
return new DynamicWelcomeBuildItem(DYNAMIC_WELCOME);
60+
}
61+
62+
private static final String DYNAMIC_WELCOME = """
63+
<span>Learn how you can <a href="https://quarkus.io/guides/web-dependency-locator" target="_blank">add your own web content</a></span>
64+
<span>Static assets: <code>${devuiState.welcomeData.resourcesDir}/META-INF/resources/</code> OR </span>
65+
<span>Dynamic assets: <code>${devuiState.welcomeData.resourcesDir}/web</code></span>
66+
""";
67+
5668
}

0 commit comments

Comments
 (0)