Skip to content

Commit 07df9e8

Browse files
phillip-krugergsmet
authored andcommitted
Get hold of the assistant in another way
Signed-off-by: Phillip Kruger <[email protected]> (cherry picked from commit aa18649)
1 parent e367f47 commit 07df9e8

File tree

5 files changed

+35
-47
lines changed

5 files changed

+35
-47
lines changed

extensions/devui/runtime/src/main/java/io/quarkus/devui/runtime/comms/JsonRpcMessage.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
public class JsonRpcMessage<T> {
99
private T response;
1010
private MessageType messageType;
11-
private boolean alreadySerialized = false;
1211

1312
public JsonRpcMessage() {
1413
}
@@ -33,12 +32,4 @@ public MessageType getMessageType() {
3332
public void setMessageType(MessageType messageType) {
3433
this.messageType = messageType;
3534
}
36-
37-
public boolean isAlreadySerialized() {
38-
return alreadySerialized;
39-
}
40-
41-
public void setAlreadySerialized(boolean alreadySerialized) {
42-
this.alreadySerialized = alreadySerialized;
43-
}
4435
}

extensions/devui/runtime/src/main/java/io/quarkus/devui/runtime/comms/JsonRpcRouter.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -202,15 +202,17 @@ private void routeToRuntimeMethod(JsonRpcRequest jsonRpcRequest, JsonRpcResponse
202202
}
203203
uni.subscribe()
204204
.with(item -> {
205-
if (item != null && JsonRpcMessage.class.isAssignableFrom(item.getClass())) {
206-
JsonRpcMessage<?> jsonRpcMessage = (JsonRpcMessage<?>) item;
207-
Object response = jsonRpcMessage.getResponse();
208-
if (jsonRpcMessage.isAlreadySerialized()) {
205+
if (item != null && Map.class.isAssignableFrom(item.getClass())) {
206+
Map map = (Map) item;
207+
if (map.size() == 3 && map.containsKey("alreadySerialized") && map.containsKey("messageType")
208+
&& map.containsKey("response") && map.get("alreadySerialized").equals("true")) {
209+
Object response = map.get("response");
210+
209211
// The message response was already serialized, write text directly to socket
210212
jrrw.write("{\"id\":" + jsonRpcRequest.getId() + ",\"result\":{\"messageType\":\""
211-
+ jsonRpcMessage.getMessageType().name() + "\",\"object\":" + response + "}}");
213+
+ map.get("messageType") + "\",\"object\":" + response + "}}");
212214
} else {
213-
codec.writeResponse(jrrw, jsonRpcRequest.getId(), response, jsonRpcMessage.getMessageType());
215+
codec.writeResponse(jrrw, jsonRpcRequest.getId(), item, MessageType.Response);
214216
}
215217
} else {
216218
codec.writeResponse(jrrw, jsonRpcRequest.getId(), item, MessageType.Response);

extensions/hibernate-orm/runtime-dev/pom.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@
1919
</dependency>
2020
<dependency>
2121
<groupId>io.quarkus</groupId>
22-
<artifactId>quarkus-devui</artifactId>
23-
<optional>true</optional>
22+
<artifactId>quarkus-assistant-dev</artifactId>
2423
</dependency>
2524
<dependency>
2625
<groupId>com.fasterxml.jackson.core</groupId>

extensions/hibernate-orm/runtime-dev/src/main/java/io/quarkus/hibernate/orm/dev/ui/HibernateOrmDevJsonRpcService.java

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import java.util.concurrent.CompletableFuture;
1212
import java.util.concurrent.CompletionStage;
1313

14+
import jakarta.enterprise.inject.Instance;
1415
import jakarta.inject.Inject;
1516

1617
import org.eclipse.microprofile.config.ConfigProvider;
@@ -28,9 +29,6 @@
2829
import io.agroal.api.AgroalDataSource;
2930
import io.agroal.api.configuration.AgroalDataSourceConfiguration;
3031
import io.quarkus.assistant.runtime.dev.Assistant;
31-
import io.quarkus.devui.runtime.comms.JsonRpcMessage;
32-
import io.quarkus.devui.runtime.comms.JsonRpcRouter;
33-
import io.quarkus.devui.runtime.comms.MessageType;
3432
import io.quarkus.hibernate.orm.dev.HibernateOrmDevController;
3533
import io.quarkus.hibernate.orm.dev.HibernateOrmDevInfo;
3634
import io.quarkus.hibernate.orm.runtime.customized.QuarkusConnectionProvider;
@@ -44,7 +42,7 @@ public class HibernateOrmDevJsonRpcService {
4442
private final String allowedHost;
4543

4644
@Inject
47-
Optional<Assistant> assistant;
45+
Instance<Optional<Assistant>> assistant;
4846

4947
public HibernateOrmDevJsonRpcService() {
5048
this.isDev = LaunchMode.current().isDev() && !LaunchMode.current().isRemoteDev();
@@ -104,18 +102,18 @@ You are an expert in writing Hibernate Query Language (HQL) queries.
104102
* based on pageNumber and pageSize are returned. For mutation statements, a custom message including the number of affected
105103
* records is returned.
106104
* <p>
107-
* This method handles result serialization (to JSON) internally, and returns a {@link JsonRpcMessage<String>} to avoid
108-
* further processing by the {@link JsonRpcRouter}.
105+
* This method handles result serialization (to JSON) internally, and returns a JsonRpc Message in Map format to avoid
106+
* further processing by the Dev UI JsonRpcRouter.
109107
*
110108
* @param persistenceUnit The name of the persistence unit within which the query will be executed
111109
* @param query The user query (be it an HQL query or a plain-text statement when using assistant)
112110
* @param pageNumber The page number, used for selection query results pagination
113111
* @param pageSize The page size, used for selection query results pagination
114112
* @param assistant Whether to use the assistant to generate the HQL query based on the user input
115113
* @param interactive Enable assistant's interactive mode, answering the original user request in natural language
116-
* @return a {@link JsonRpcMessage<String>} containing the resulting {@link DataSet} serialized to JSON.
114+
* @return a JsonRpcMessage containing the resulting {@link DataSet} serialized to JSON.
117115
*/
118-
public CompletionStage<JsonRpcMessage<String>> executeHQL(
116+
public CompletionStage<Map<String, String>> executeHQL(
119117
String persistenceUnit,
120118
String query,
121119
Integer pageNumber,
@@ -150,7 +148,11 @@ public CompletionStage<JsonRpcMessage<String>> executeHQL(
150148
}
151149

152150
if (Boolean.TRUE.equals(assistant)) {
153-
Assistant a = this.assistant.orElse(null);
151+
if (!this.assistant.isResolvable()) {
152+
return errorDataSet(
153+
"The assistant is not available, please install the Chappie extension.");
154+
}
155+
Assistant a = this.assistant.get().orElse(null);
154156
if (a == null || !a.isAvailable()) {
155157
return errorDataSet(
156158
"The assistant is not available, please check the Quarkus assistant extension is correctly configured.");
@@ -176,7 +178,7 @@ public CompletionStage<JsonRpcMessage<String>> executeHQL(
176178
return dataSetCompletionStage.thenCompose(dataSet -> {
177179
if (dataSet.error() != null) {
178180
// If there was an error executing the query, return it directly
179-
return CompletableFuture.completedStage(toJson(dataSet));
181+
return CompletableFuture.completedStage(toMap(dataSet));
180182
}
181183
CompletionStage<Map<String, String>> interactiveCompletionStage = a.assistBuilder()
182184
.systemMessage(SYSTEM_MESSAGE)
@@ -192,11 +194,11 @@ public CompletionStage<JsonRpcMessage<String>> executeHQL(
192194
});
193195
});
194196
} else {
195-
return dataSetCompletionStage.thenApply(HibernateOrmDevJsonRpcService::toJson);
197+
return dataSetCompletionStage.thenApply(HibernateOrmDevJsonRpcService::toMap);
196198
}
197199
} else {
198200
DataSet result = executeHqlQuery(query, sf, pageNumber, pageSize);
199-
return CompletableFuture.completedStage(toJson(result));
201+
return CompletableFuture.completedStage(toMap(result));
200202
}
201203
}
202204

@@ -259,15 +261,15 @@ private static DataSet executeHqlQuery(String hql, SessionFactoryImplementor sf,
259261
});
260262
}
261263

262-
private static CompletionStage<JsonRpcMessage<String>> errorDataSet(String errorMessage) {
263-
return CompletableFuture.completedStage(toJson(new DataSet(null, null, -1, null, errorMessage)));
264+
private static CompletionStage<Map<String, String>> errorDataSet(String errorMessage) {
265+
return CompletableFuture.completedStage(toMap(new DataSet(null, null, -1, null, errorMessage)));
264266
}
265267

266-
private static JsonRpcMessage<String> messageDataset(String query, String message, long resultCount) {
267-
return toJson(new DataSet(null, query, resultCount, message, null));
268+
private static Map<String, String> messageDataset(String query, String message, long resultCount) {
269+
return toMap(new DataSet(null, query, resultCount, message, null));
268270
}
269271

270-
private static JsonRpcMessage<String> toJson(DataSet dataSet) {
272+
private static Map<String, String> toMap(DataSet dataSet) {
271273
StringBuilder jsonBuilder = new StringBuilder("{");
272274
jsonBuilder.append("\"resultCount\":").append(dataSet.resultCount());
273275
if (dataSet.data() != null) {
@@ -277,9 +279,13 @@ private static JsonRpcMessage<String> toJson(DataSet dataSet) {
277279
appendIfNonNull(jsonBuilder, "message", dataSet.message());
278280
appendIfNonNull(jsonBuilder, "error", dataSet.error());
279281
jsonBuilder.append("}");
280-
JsonRpcMessage<String> message = new JsonRpcMessage<>(jsonBuilder.toString(), MessageType.Response);
281-
message.setAlreadySerialized(true);
282-
return message;
282+
283+
Map<String, String> map = Map.of(
284+
"response", jsonBuilder.toString(),
285+
"messageType", "Response",
286+
"alreadySerialized", "true");
287+
288+
return map;
283289
}
284290

285291
private static void appendIfNonNull(StringBuilder sb, String fieldName, String value) {

extensions/hibernate-orm/runtime/pom.xml

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,6 @@
4141
<groupId>io.quarkus</groupId>
4242
<artifactId>quarkus-narayana-jta</artifactId>
4343
</dependency>
44-
<dependency>
45-
<groupId>io.quarkus</groupId>
46-
<artifactId>quarkus-vertx-http</artifactId>
47-
<optional>true</optional>
48-
</dependency>
49-
<dependency>
50-
<groupId>io.quarkus</groupId>
51-
<artifactId>quarkus-devui</artifactId>
52-
<optional>true</optional>
53-
</dependency>
5444
<dependency>
5545
<groupId>io.quarkus</groupId>
5646
<artifactId>quarkus-junit5-internal</artifactId>

0 commit comments

Comments
 (0)