Skip to content

Commit 856115a

Browse files
committed
Review fixes
1 parent 83f795f commit 856115a

File tree

4 files changed

+26
-29
lines changed

4 files changed

+26
-29
lines changed

extras/task-store-database-jpa/src/test/java/io/a2a/extras/taskstore/database/jpa/JpaDatabaseTaskStoreTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import static org.junit.jupiter.api.Assertions.assertNull;
77
import static org.junit.jupiter.api.Assertions.assertTrue;
88

9+
import java.time.OffsetDateTime;
910
import java.util.ArrayList;
1011
import java.util.Collections;
1112
import java.util.HashMap;
@@ -420,7 +421,7 @@ public void testListTasksCombinedFilters() {
420421
public void testListTasksPagination() {
421422
// Create 5 tasks with same timestamp to ensure ID-based pagination works
422423
// (With timestamp DESC sorting, same timestamps allow ID ASC tie-breaking)
423-
java.time.OffsetDateTime sameTimestamp = java.time.OffsetDateTime.now(java.time.ZoneOffset.UTC);
424+
OffsetDateTime sameTimestamp = OffsetDateTime.now(java.time.ZoneOffset.UTC);
424425
for (int i = 1; i <= 5; i++) {
425426
Task task = new Task.Builder()
426427
.id("task-page-" + i)
@@ -580,7 +581,7 @@ public void testListTasksDefaultPageSize() {
580581
public void testListTasksOrderingById() {
581582
// Create tasks with same timestamp to test ID-based tie-breaking
582583
// (spec requires sorting by timestamp DESC, then ID ASC)
583-
java.time.OffsetDateTime sameTimestamp = java.time.OffsetDateTime.now(java.time.ZoneOffset.UTC);
584+
OffsetDateTime sameTimestamp = OffsetDateTime.now(java.time.ZoneOffset.UTC);
584585

585586
Task task1 = new Task.Builder()
586587
.id("task-order-a")

server-common/src/main/java/io/a2a/server/requesthandlers/DefaultRequestHandler.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,11 @@
55
import static io.a2a.server.util.async.AsyncUtils.processor;
66
import static java.util.concurrent.TimeUnit.*;
77

8+
import java.time.Instant;
89
import java.util.ArrayList;
10+
import java.util.HashMap;
911
import java.util.List;
12+
import java.util.Map;
1013
import java.util.Objects;
1114
import java.util.Optional;
1215
import java.util.Set;
@@ -172,9 +175,9 @@ public ListTasksResult onListTasks(ListTasksParams params, ServerCallContext con
172175
// Validate lastUpdatedAfter timestamp if provided
173176
if (params.lastUpdatedAfter() != null) {
174177
// Check if timestamp is in the future (optional validation per spec)
175-
java.time.Instant now = java.time.Instant.now();
178+
Instant now = Instant.now();
176179
if (params.lastUpdatedAfter().isAfter(now)) {
177-
java.util.Map<String, Object> errorData = new java.util.HashMap<>();
180+
Map<String, Object> errorData = new HashMap<>();
178181
errorData.put("parameter", "lastUpdatedAfter");
179182
errorData.put("reason", "Timestamp cannot be in the future");
180183
throw new InvalidParamsError(null, "Invalid params", errorData);

server-common/src/main/java/io/a2a/server/tasks/InMemoryTaskStore.java

Lines changed: 11 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -38,28 +38,17 @@ public void delete(String taskId) {
3838

3939
@Override
4040
public ListTasksResult list(ListTasksParams params) {
41-
Stream<Task> taskStream = tasks.values().stream();
42-
43-
// Apply filters
44-
if (params.contextId() != null) {
45-
taskStream = taskStream.filter(task -> params.contextId().equals(task.getContextId()));
46-
}
47-
if (params.status() != null) {
48-
taskStream = taskStream.filter(task ->
49-
task.getStatus() != null && params.status().equals(task.getStatus().state())
50-
);
51-
}
52-
if (params.lastUpdatedAfter() != null) {
53-
taskStream = taskStream.filter(task ->
54-
task.getStatus() != null &&
55-
task.getStatus().timestamp() != null &&
56-
task.getStatus().timestamp().toInstant().isAfter(params.lastUpdatedAfter())
57-
);
58-
}
59-
60-
// Sort by status timestamp descending (most recent first), then by ID ascending for stable ordering
61-
List<Task> allFilteredTasks = taskStream
62-
.sorted(Comparator.comparing((Task t) -> t.getStatus().timestamp(), Comparator.nullsLast(Comparator.reverseOrder()))
41+
// Filter and sort tasks in a single stream pipeline
42+
List<Task> allFilteredTasks = tasks.values().stream()
43+
.filter(task -> params.contextId() == null || params.contextId().equals(task.getContextId()))
44+
.filter(task -> params.status() == null ||
45+
(task.getStatus() != null && params.status().equals(task.getStatus().state())))
46+
.filter(task -> params.lastUpdatedAfter() == null ||
47+
(task.getStatus() != null &&
48+
task.getStatus().timestamp() != null &&
49+
task.getStatus().timestamp().toInstant().isAfter(params.lastUpdatedAfter())))
50+
.sorted(Comparator.comparing((Task t) -> t.getStatus().timestamp(),
51+
Comparator.nullsLast(Comparator.reverseOrder()))
6352
.thenComparing(Task::getId))
6453
.toList();
6554

transport/rest/src/main/java/io/a2a/transport/rest/handler/RestHandler.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,11 @@
1111
import jakarta.enterprise.context.ApplicationScoped;
1212
import jakarta.inject.Inject;
1313

14+
import java.time.Instant;
15+
import java.time.format.DateTimeParseException;
16+
import java.util.HashMap;
1417
import java.util.List;
18+
import java.util.Map;
1519
import java.util.concurrent.Flow;
1620

1721
import io.a2a.server.PublicAgentCard;
@@ -205,9 +209,9 @@ public HTTPRestResponse listTasks(@Nullable String contextId, @Nullable String s
205209
}
206210
if (lastUpdatedAfter != null) {
207211
try {
208-
paramsBuilder.lastUpdatedAfter(java.time.Instant.parse(lastUpdatedAfter));
209-
} catch (java.time.format.DateTimeParseException e) {
210-
java.util.Map<String, Object> errorData = new java.util.HashMap<>();
212+
paramsBuilder.lastUpdatedAfter(Instant.parse(lastUpdatedAfter));
213+
} catch (DateTimeParseException e) {
214+
Map<String, Object> errorData = new HashMap<>();
211215
errorData.put("parameter", "lastUpdatedAfter");
212216
errorData.put("reason", "Must be valid ISO-8601 timestamp");
213217
throw new InvalidParamsError(null, "Invalid params", errorData);

0 commit comments

Comments
 (0)