Skip to content

Commit 6b0e7fd

Browse files
committed
Changes after coderabbit review
1 parent 711e436 commit 6b0e7fd

8 files changed

Lines changed: 40 additions & 55 deletions

File tree

src/main/java/com/example/HelloController.java

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -35,33 +35,29 @@ private void initialize() {
3535
messageView.setItems(model.getMessages());
3636
messageView.setCellFactory(showOnlyMessages());
3737

38-
chatButton.setOnAction(event -> {
39-
String input = chatArea.getText().trim();
40-
if (!input.isEmpty()) {
41-
model.setMessageToSend(input);
42-
model.sendMessage();
43-
chatArea.clear();
44-
}
45-
});
4638
}
4739

4840
private static Callback<ListView<NtfyMessageDto>, ListCell<NtfyMessageDto>> showOnlyMessages() {
4941
return List -> new ListCell<>() {
5042
@Override
5143
protected void updateItem(NtfyMessageDto item, boolean empty) {
5244
super.updateItem(item, empty);
53-
if (empty) {
45+
if (empty || item == null) {
5446
setText(null);
5547
} else {
56-
setText(getItem().message());
48+
setText(item.message());
5749
}
5850
}
5951
};
6052
}
6153

62-
public void sendMessage(ActionEvent actionEvent) throws IOException, InterruptedException {
63-
model.sendMessage();
54+
public void sendMessage(ActionEvent actionEvent) {
55+
String input = chatArea.getText().trim();
56+
if (!input.isEmpty()) {
57+
model.setMessageToSend(input);
58+
model.sendMessage();
59+
chatArea.clear();
60+
}
6461
}
65-
6662
}
6763

src/main/java/com/example/HelloFX.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.example;
22

3-
import io.github.cdimascio.dotenv.Dotenv;
43
import javafx.application.Application;
54
import javafx.fxml.FXMLLoader;
65
import javafx.scene.Parent;

src/main/java/com/example/HelloModel.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,19 @@ public CompletableFuture<Void> sendMessage() {
5252
}
5353

5454
public void receiveMessage() {
55+
connection.receive(m->runOnFx(()-> messages.add(m)));
56+
}
5557

56-
connection.receive(m->Platform.runLater(()-> messages.add(m)));
57-
//
58+
private static void runOnFx(Runnable task) {
59+
try {
60+
if (Platform.isFxApplicationThread()) task.run();
61+
else Platform.runLater(task);
62+
} catch (IllegalStateException notInitialized) {
63+
// JavaFX toolkit not initialized (e.g., unit tests): run inline
64+
task.run();
65+
}
5866
}
67+
5968
}
6069

6170

src/main/java/com/example/NtfyConnection.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
public interface NtfyConnection {
77

8-
public CompletableFuture<Void> send(String message);
8+
CompletableFuture<Void> send(String message);
99

10-
public void receive(Consumer<NtfyMessageDto> messageHandler);
10+
void receive(Consumer<NtfyMessageDto> messageHandler);
1111
}

src/main/java/com/example/NtfyConnectionImpl.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,6 @@ public CompletableFuture<Void> send(String message) {
4242
return null;
4343
});
4444
}
45-
// // Todo: handle long blocking send request to not freeze the java FX thread
46-
// //1. Use thread send message?
47-
// //2. Use async?
4845

4946
@Override
5047
public void receive (Consumer < NtfyMessageDto > messageHandler) {

src/main/java/com/example/NtfyMessageDto.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,10 @@
33
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
44

55
@JsonIgnoreProperties(ignoreUnknown = true)
6-
public record NtfyMessageDto(String id,long time, String event, String topic, String message){}
6+
public record NtfyMessageDto(
7+
String id,
8+
long time,
9+
String event,
10+
String topic,
11+
String message
12+
){}

src/main/resources/css/style.css

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,47 +3,38 @@
33
styles.css
44
*/
55
.root {
6-
/* -fx-background-color: linear-gradient(to bottom, #8b0000, #ffd700);*/
76
-fx-background-color: #ffffff, linear-gradient(to bottom, #8b0000, #ffd700);
87
-fx-background-insets: 0, 4;
98
-fx-background-radius: 0, 3;
109

1110
}
12-
/*.list-view{*/
13-
/* -fx-background-color: linear-gradient(to bottom, #8b0000, #ffd700);*/
14-
/*}*/
1511
.list-view {
16-
-fx-background-color: transparent; /* Gör bakgrunden transparent */
12+
-fx-background-color: transparent; /* Make background transparent */
1713
-fx-background-insets: 0;
1814
-fx-padding: 0;
19-
-fx-border-color: transparent; /* Ta bort kantlinje */
20-
/* ... (tidigare stilar) */
21-
-fx-background-radius: 5; /* Rundade hörn */
15+
-fx-border-color: transparent;
16+
-fx-background-radius: 5;
2217
-fx-border-radius: 5;
2318
}
2419
.list-cell{
2520
-fx-background-color: transparent;
2621
-fx-border-color: transparent;
2722
-fx-control-inner-background: transparent;
2823
}
29-
/* Ta bort bakgrund och kantlinje när musen är över */
24+
/* Remove background and border on hover */
3025
.list-cell:filled:hover {
3126
-fx-background-color: #e0e0e0;
3227
-fx-text-fill: #000000;
3328
}
34-
/* ------------------------------------------------------------------- */
35-
/* 3. STYLA DEN MARKERADE CELLEN (SELECTED) */
36-
/* ------------------------------------------------------------------- */
29+
3730
.list-cell:filled:selected {
38-
/* En modern, accentuerad bakgrundsfärg (t.ex. blå) */
31+
3932
-fx-background-color: #007bff;
40-
-fx-text-fill: white; /* Vit text för hög kontrast */
33+
-fx-text-fill: white;
4134

42-
/* Lägg till en liten inre skugga för djup */
4335
-fx-effect: dropshadow(three-pass-box, rgba(0,0,0,0.2), 5, 0, 0, 0);
4436
}
4537

46-
/* Ta bort kantlinje när man är markerad */
4738
.list-cell:filled:selected .text {
4839
-fx-font-weight: bold;
4940
}

src/test/java/com/example/HelloModelTest.java

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,6 @@
2121
@WireMockTest
2222
class HelloModelTest {
2323

24-
/**
25-
* Initierar JavaFX Toolkit en gång innan alla tester i klassen.
26-
*/
27-
@BeforeAll
28-
public static void initToolkit() {
29-
// Kontrollera om Toolkiten redan är igång för att undvika IllegalStateException
30-
try {
31-
Platform.startup(() -> {
32-
});
33-
} catch (IllegalStateException e) {
34-
// Toolkit är redan igång, ignorera
35-
}
36-
}
3724

3825
@Test
3926
@DisplayName("Given a model with messageToSend when calling sendMessage then send")
@@ -98,24 +85,24 @@ void checkReceivedMessagesAfterSendingAMessageToAFakeServer(WireMockRuntimeInfo
9885

9986
Awaitility.await()
10087
.atMost(Duration.ofSeconds(4))
101-
.pollInterval(Duration.ofMillis(100)) // Kolla var 100:e ms
88+
.pollInterval(Duration.ofMillis(100))
10289
.untilAsserted(() -> {
10390
assertThat(model.getMessages()).isNotEmpty();
10491
assertThat(model.getMessages().getLast().message()).isEqualTo("Hello World");
10592
});
10693
}
10794

108-
// Test som skickar in ett fake:at meddelande via record och kollar att meddelandet finns i observablelistan
95+
// Test that sends a fake message via record and verifies that the message appears in the observable list
10996
@Test
11097
void checkThatReceivedFakeMessageAppearInList() {
11198
var spy = new NtfyConnectionSpy();
11299
var model = new HelloModel(spy);
113100

114-
//Skapa ett meddelande genom en record och skicka den till listan
101+
// Create a message through a record and send it to the list
115102
var fakeMessage = new NtfyMessageDto("id1", 1746598362, "message", "fmtopic", "Hallå");
116103
spy.simulateIncomingMessage(fakeMessage);
117104

118-
// kontrollera att Meddelandet finns i listan
105+
// Verify that the message is in the list
119106
assertThat(model.getMessages()).extracting(NtfyMessageDto::message).contains("Hallå");
120107

121108
}

0 commit comments

Comments
 (0)