2
2
3
3
import java .util .List ;
4
4
import java .util .Objects ;
5
+ import java .util .Optional ;
5
6
import java .util .stream .Collectors ;
6
7
8
+ import io .quarkiverse .temporal .deployment .TemporalProcessor ;
7
9
import io .quarkiverse .temporal .deployment .WorkerBuildItem ;
8
10
import io .quarkiverse .temporal .deployment .WorkflowBuildItem ;
9
11
import io .quarkus .deployment .IsDevelopment ;
10
12
import io .quarkus .deployment .annotations .BuildProducer ;
11
13
import io .quarkus .deployment .annotations .BuildStep ;
14
+ import io .quarkus .deployment .annotations .BuildSteps ;
15
+ import io .quarkus .deployment .builditem .LaunchModeBuildItem ;
16
+ import io .quarkus .deployment .dev .devservices .GlobalDevServicesConfig ;
12
17
import io .quarkus .devui .spi .page .CardPageBuildItem ;
13
18
import io .quarkus .devui .spi .page .ExternalPageBuilder ;
14
19
import io .quarkus .devui .spi .page .Page ;
15
20
import io .quarkus .devui .spi .page .PageBuilder ;
16
21
import io .quarkus .devui .spi .page .TableDataPageBuilder ;
22
+ import io .quarkus .vertx .http .deployment .NonApplicationRootPathBuildItem ;
23
+ import io .quarkus .vertx .http .runtime .management .ManagementInterfaceBuildTimeConfig ;
17
24
import io .temporal .client .WorkflowClient ;
18
25
19
26
/**
20
27
* Dev UI card for displaying important details such Temporal version.
21
28
*/
29
+ @ BuildSteps (onlyIf = IsDevelopment .class )
22
30
public class TemporalDevUIProcessor {
23
31
24
- @ BuildStep (onlyIf = IsDevelopment .class )
25
- void createCard (BuildProducer <CardPageBuildItem > cardPageBuildItemBuildProducer , List <WorkflowBuildItem > workflows ,
26
- List <WorkerBuildItem > workers ) {
32
+ @ BuildStep
33
+ void createCard (
34
+ BuildProducer <CardPageBuildItem > cardPageBuildItemBuildProducer ,
35
+ List <WorkflowBuildItem > workflows ,
36
+ List <WorkerBuildItem > workers ,
37
+ GlobalDevServicesConfig globalDevServicesConfig ,
38
+ TemporalUiConfig uiConfig ,
39
+ TemporalDevserviceConfig temporalDevserviceConfig ,
40
+ ManagementInterfaceBuildTimeConfig managementInterfaceBuildTimeConfig ,
41
+ LaunchModeBuildItem launchMode ,
42
+ NonApplicationRootPathBuildItem nonApplicationRootPathBuildItem ) {
27
43
final CardPageBuildItem card = new CardPageBuildItem ();
28
44
29
45
final PageBuilder <ExternalPageBuilder > versionPage = Page .externalPageBuilder ("Version" )
@@ -58,11 +74,47 @@ void createCard(BuildProducer<CardPageBuildItem> cardPageBuildItemBuildProducer,
58
74
card .addBuildTimeData ("workers" ,
59
75
workers .stream ().map (WorkerBuildTimeData ::new ).collect (Collectors .toList ()));
60
76
77
+ uiPage (uiConfig .url (), temporalDevserviceConfig , managementInterfaceBuildTimeConfig , launchMode ,
78
+ nonApplicationRootPathBuildItem , card );
79
+
61
80
card .setCustomCard ("qwc-temporal-card.js" );
62
81
63
82
cardPageBuildItemBuildProducer .produce (card );
64
83
}
65
84
85
+ private void uiPage (
86
+ Optional <String > configPath ,
87
+ TemporalDevserviceConfig temporalDevserviceConfig ,
88
+ ManagementInterfaceBuildTimeConfig managementInterfaceBuildTimeConfig ,
89
+ LaunchModeBuildItem launchMode ,
90
+ NonApplicationRootPathBuildItem nonApplicationRootPathBuildItem ,
91
+ CardPageBuildItem card ) {
92
+ var path = configPath ;
93
+
94
+ // check if the UI url is set in the config or if the devservice is enabled
95
+ if (!path .isPresent () && Boolean .TRUE .equals (temporalDevserviceConfig .enabled ())) {
96
+ var defaultBasePath = nonApplicationRootPathBuildItem .resolveManagementPath (
97
+ TemporalProcessor .FEATURE ,
98
+ managementInterfaceBuildTimeConfig ,
99
+ launchMode );
100
+
101
+ path = Optional .of (defaultBasePath );
102
+ }
103
+
104
+ // if the path is not set, we don't have a UI to link to
105
+ if (!path .isPresent ()) {
106
+ return ;
107
+ }
108
+
109
+ // add the UI page
110
+ final PageBuilder <ExternalPageBuilder > uiPage = Page .externalPageBuilder ("UI" )
111
+ .icon ("font-awesome-solid:desktop" )
112
+ .url (path .get (), path .get ())
113
+ .isHtmlContent ();
114
+
115
+ card .addPage (uiPage );
116
+ }
117
+
66
118
static class WorkflowBuildTimeData {
67
119
WorkflowBuildTimeData (WorkflowBuildItem item ) {
68
120
this .name = item .workflow .getName ().replaceAll ("\\ B\\ w+(\\ .[a-z])" , "$1" );
@@ -88,7 +140,7 @@ static class WorkerBuildTimeData {
88
140
this .workflows = item .workflows .stream ().map (workflow -> workflow .getName ().replaceAll ("\\ B\\ w+(\\ .[a-z])" , "$1" ))
89
141
.collect (Collectors .toList ());
90
142
this .activities = item .activities .stream ()
91
- .map (activities -> activities .getName ().replaceAll ("\\ B\\ w+(\\ .[a-z])" , "$1" )).collect (Collectors .toList ());
143
+ .map (activity -> activity .getName ().replaceAll ("\\ B\\ w+(\\ .[a-z])" , "$1" )).collect (Collectors .toList ());
92
144
}
93
145
94
146
private final String name ;
0 commit comments