-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhelloworld.java
More file actions
60 lines (54 loc) · 1.92 KB
/
helloworld.java
File metadata and controls
60 lines (54 loc) · 1.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
//usr/bin/env jbang "$0" "$@" ; exit $?
//SOURCES dev/datastar/*.java
//DEPS io.quarkus.platform:quarkus-bom:3.35.3@pom
//DEPS io.quarkus:quarkus-rest
//JAVAC_OPTIONS -parameters
//JAVA_OPTIONS -Djava.util.logging.manager=org.jboss.logmanager.LogManager
import java.io.IOException;
import java.io.StringReader;
import java.nio.file.Files;
import dev.datastar.Datastar;
import dev.datastar.JaxRsDatastar;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.json.Json;
import jakarta.json.JsonObject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.QueryParam;
import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.sse.SseEventSink;
@ApplicationScoped
@Path("/")
public class helloworld {
static {
System.setProperty("quarkus.http.access-log.enabled ", "true");
}
@GET
@Produces(MediaType.SERVER_SENT_EVENTS)
@Path("hello-world")
public void helloWorld(@QueryParam("datastar") String raw, @Context SseEventSink sink) throws InterruptedException {
var signals = readSignals(raw);
var delay = signals.getJsonNumber("delay").longValue();
var hello = "Hello, world!";
for (var i = 1; i <= hello.length(); i++) {
JaxRsDatastar.send(sink, Datastar
.patchElements()
.replace("<h1 id=\"message\">%s</h1>".formatted(hello.substring(0, i))));
Thread.sleep(delay);
}
}
@GET
@Produces(MediaType.TEXT_HTML)
public String index() throws IOException {
// This is not the correct way to serve static files, but it works for
// hello-world.
return Files.readString(java.nio.file.Path.of("index.html"));
}
private static JsonObject readSignals(String json) {
try (var reader = Json.createReader(new StringReader(json))) {
return reader.readObject();
}
}
}