Skip to content

Commit eee23b9

Browse files
committed
extended search of the triggers
1 parent 9bdf937 commit eee23b9

File tree

9 files changed

+67
-25
lines changed

9 files changed

+67
-25
lines changed

core/src/main/java/org/sterl/spring/persistent_tasks/api/TaskId.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,9 @@ public AddTriggerRequest<T> newUniqueTrigger(T state) {
2424
return new TaskTriggerBuilder<>(this).state(state).build();
2525
}
2626

27-
@SuppressWarnings("rawtypes")
28-
public static TaskId<?> of(String taskId) {
27+
public static TaskId<Serializable> of(String taskId) {
2928
if (taskId == null || taskId.isBlank()) return null;
30-
return new TaskId(taskId);
29+
return new TaskId<>(taskId);
3130
}
3231

3332
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)

core/src/main/java/org/sterl/spring/persistent_tasks/api/TriggerKey.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
import java.time.OffsetDateTime;
55
import java.util.UUID;
66

7+
import org.apache.commons.lang3.StringUtils;
8+
import org.springframework.lang.Nullable;
9+
710
import lombok.AllArgsConstructor;
811
import lombok.Builder;
912
import lombok.Data;
@@ -24,11 +27,22 @@ public class TriggerKey implements Serializable {
2427
private String id;
2528
private String taskName;
2629

27-
public static TriggerKey of(String id, TaskId<?> taskId) {
30+
public static TriggerKey of(@Nullable String id, String taskName) {
31+
if (StringUtils.trimToNull(id) == null
32+
&& StringUtils.trimToNull(taskName) == null) return null;
33+
34+
var taskId = StringUtils.trimToNull(taskName) == null
35+
? null
36+
: new TaskId<Serializable>(taskName.trim());
37+
return of(StringUtils.trimToNull(id), taskId);
38+
}
39+
40+
public static TriggerKey of(@Nullable String id, TaskId<? extends Serializable> taskId) {
2841
return new TriggerKey(id == null ? UUID.randomUUID().toString() : id, taskId.name());
2942
}
3043

3144
public TaskId<Serializable> toTaskId() {
45+
if (taskName == null) return null;
3246
return new TaskId<>(taskName);
3347
}
3448
/**

core/src/main/java/org/sterl/spring/persistent_tasks/history/HistoryService.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import org.springframework.data.domain.PageRequest;
99
import org.springframework.data.domain.Pageable;
1010
import org.springframework.data.domain.Sort.Direction;
11-
import org.sterl.spring.persistent_tasks.api.TaskId;
1211
import org.sterl.spring.persistent_tasks.api.TriggerKey;
1312
import org.sterl.spring.persistent_tasks.history.model.TriggerHistoryDetailEntity;
1413
import org.sterl.spring.persistent_tasks.history.model.TriggerHistoryLastStateEntity;
@@ -78,7 +77,15 @@ public long countTriggers(TriggerKey key) {
7877
return triggerHistoryDetailRepository.countByKey(key);
7978
}
8079

81-
public Page<TriggerHistoryLastStateEntity> findTriggerState(TaskId<?> taskId, Pageable page) {
82-
return triggerHistoryDetailRepository.findAll(page);
80+
public Page<TriggerHistoryLastStateEntity> findTriggerState(
81+
TriggerKey key, Pageable page) {
82+
if (key == null) return triggerHistoryDetailRepository.findAll(page);
83+
if (key.getId() == null && key.getTaskName() != null) {
84+
return triggerHistoryDetailRepository.findAll(key.getTaskName(), page);
85+
}
86+
return triggerHistoryDetailRepository.findAll(
87+
key.getId(),
88+
key.getTaskName(),
89+
page);
8390
}
8491
}

core/src/main/java/org/sterl/spring/persistent_tasks/history/api/TriggerHistoryResource.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@
99
import org.springframework.web.bind.annotation.GetMapping;
1010
import org.springframework.web.bind.annotation.PathVariable;
1111
import org.springframework.web.bind.annotation.RequestMapping;
12+
import org.springframework.web.bind.annotation.RequestParam;
1213
import org.springframework.web.bind.annotation.RestController;
1314
import org.sterl.spring.persistent_tasks.api.Trigger;
15+
import org.sterl.spring.persistent_tasks.api.TriggerKey;
1416
import org.sterl.spring.persistent_tasks.history.HistoryService;
1517
import org.sterl.spring.persistent_tasks.history.api.HistoryConverter.FromLastTriggerStateEntity;
1618
import org.sterl.spring.persistent_tasks.history.api.HistoryConverter.FromTriggerStateDetailEntity;
@@ -32,9 +34,11 @@ public List<Trigger> listInstances(@PathVariable("instanceId") long instanceId)
3234

3335
@GetMapping("history")
3436
public PagedModel<Trigger> list(
37+
@RequestParam(name = "id", required = false) String taskId,
38+
@RequestParam(name = "taskName", required = false) String name,
3539
@PageableDefault(size = 100, direction = Direction.DESC, sort = "id") Pageable pageable) {
3640

3741
return FromLastTriggerStateEntity.INSTANCE.toPage( //
38-
historyService.findTriggerState(null, pageable));
42+
historyService.findTriggerState(TriggerKey.of(taskId, name), pageable));
3943
}
4044
}

core/src/main/java/org/sterl/spring/persistent_tasks/shared/repository/TriggerDataRepository.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,22 @@
1313
import org.sterl.spring.persistent_tasks.api.TriggerKey;
1414
import org.sterl.spring.persistent_tasks.shared.model.HasTriggerData;
1515
import org.sterl.spring.persistent_tasks.shared.model.TriggerStatus;
16-
import org.sterl.spring.persistent_tasks.trigger.model.TriggerEntity;
1716

1817
@NoRepositoryBean
1918
public interface TriggerDataRepository<T extends HasTriggerData> extends JpaRepository<T, Long> {
20-
19+
@Query("""
20+
SELECT e FROM #{#entityName} e
21+
WHERE (e.data.key.id LIKE :id% OR :id = NULL)
22+
OR (e.data.key.taskName = :taskName OR :taskName = NULL)
23+
""")
24+
Page<T> findAll(@Param("id") String id,
25+
@Param("taskName") String taskName, Pageable page);
26+
2127
@Query("""
2228
SELECT e FROM #{#entityName} e
2329
WHERE e.data.key.taskName = :taskName
2430
""")
25-
Page<TriggerEntity> findAll(
26-
@Param("taskName") String taskName, Pageable page);
31+
Page<T> findAll(@Param("taskName") String taskName, Pageable page);
2732

2833
@Query("""
2934
SELECT COUNT(e.data.key)

core/src/main/java/org/sterl/spring/persistent_tasks/trigger/TriggerService.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,14 @@ public Optional<TriggerEntity> get(TriggerKey triggerKey) {
9393
return readTrigger.get(triggerKey);
9494
}
9595

96+
@Transactional(readOnly = true , timeout = 10)
97+
public Page<TriggerEntity> findAllTriggers(TriggerKey key, Pageable page) {
98+
return this.readTrigger.listTriggers(key, page);
99+
}
100+
96101
@Transactional(readOnly = true , timeout = 10)
97102
public Page<TriggerEntity> findAllTriggers(TaskId<?> task, Pageable page) {
98-
return this.editTrigger.listTriggers(task, page);
103+
return this.readTrigger.listTriggers(task, page);
99104
}
100105

101106
public void deleteAll() {
@@ -137,7 +142,7 @@ public Optional<TriggerEntity> cancel(TriggerKey key) {
137142
* @return the amount of stored tasks
138143
*/
139144
@Transactional(timeout = 5, readOnly = true)
140-
public long countTriggers(@Nullable TaskId<String> taskId) {
145+
public long countTriggers(@Nullable TaskId<?> taskId) {
141146
if (taskId == null || taskId.name() == null) {
142147
return 0L;
143148
}

core/src/main/java/org/sterl/spring/persistent_tasks/trigger/api/TriggerResource.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,12 @@ public long count() {
3737

3838
@GetMapping("triggers")
3939
public PagedModel<Trigger> list(
40-
@RequestParam(name = "taskId", required = false) String taskId,
40+
@RequestParam(name = "id", required = false) String taskId,
41+
@RequestParam(name = "taskName", required = false) String name,
4142
@PageableDefault(size = 100, direction = Direction.DESC, sort = "id")
4243
Pageable pageable) {
4344
return FromTriggerEntity.INSTANCE.toPage(
44-
triggerService.findAllTriggers(TaskId.of(taskId), pageable));
45+
triggerService.findAllTriggers(TriggerKey.of(taskId, name), pageable));
4546
}
4647

4748
@PostMapping("triggers/{taskName}/{id}/run-at")

core/src/main/java/org/sterl/spring/persistent_tasks/trigger/component/EditTriggerComponent.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,17 @@
77
import java.util.Optional;
88

99
import org.springframework.context.ApplicationEventPublisher;
10-
import org.springframework.data.domain.Page;
11-
import org.springframework.data.domain.Pageable;
1210
import org.springframework.lang.NonNull;
1311
import org.springframework.stereotype.Component;
1412
import org.springframework.transaction.annotation.Transactional;
1513
import org.sterl.spring.persistent_tasks.api.AddTriggerRequest;
16-
import org.sterl.spring.persistent_tasks.api.TaskId;
1714
import org.sterl.spring.persistent_tasks.api.TriggerKey;
1815
import org.sterl.spring.persistent_tasks.shared.model.TriggerData;
1916
import org.sterl.spring.persistent_tasks.shared.model.TriggerStatus;
2017
import org.sterl.spring.persistent_tasks.trigger.event.TriggerAddedEvent;
2118
import org.sterl.spring.persistent_tasks.trigger.event.TriggerCanceledEvent;
22-
import org.sterl.spring.persistent_tasks.trigger.event.TriggerSuccessEvent;
2319
import org.sterl.spring.persistent_tasks.trigger.event.TriggerFailedEvent;
20+
import org.sterl.spring.persistent_tasks.trigger.event.TriggerSuccessEvent;
2421
import org.sterl.spring.persistent_tasks.trigger.model.TriggerEntity;
2522
import org.sterl.spring.persistent_tasks.trigger.repository.TriggerRepository;
2623

@@ -37,11 +34,6 @@ public class EditTriggerComponent {
3734
private final StateSerializer stateSerializer = new StateSerializer();
3835
private final TriggerRepository triggerRepository;
3936

40-
public Page<TriggerEntity> listTriggers(TaskId<?> task, Pageable page) {
41-
if (task == null) return triggerRepository.findAll(page);
42-
return triggerRepository.findAll(task.name(), page);
43-
}
44-
4537
public Optional<TriggerEntity> completeTaskWithSuccess(TriggerKey key, Serializable state) {
4638
return this.completeTaskWithStatus(key, state, null);
4739
}

core/src/main/java/org/sterl/spring/persistent_tasks/trigger/component/ReadTriggerComponent.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
package org.sterl.spring.persistent_tasks.trigger.component;
22

3+
import java.io.Serializable;
34
import java.time.OffsetDateTime;
45
import java.util.List;
56
import java.util.Optional;
67

8+
import org.springframework.data.domain.Page;
9+
import org.springframework.data.domain.Pageable;
710
import org.springframework.lang.Nullable;
11+
import org.sterl.spring.persistent_tasks.api.TaskId;
812
import org.sterl.spring.persistent_tasks.api.TriggerKey;
913
import org.sterl.spring.persistent_tasks.shared.model.TriggerStatus;
1014
import org.sterl.spring.persistent_tasks.shared.stereotype.TransactionalCompontant;
@@ -46,4 +50,15 @@ public boolean hasPendingTriggers() {
4650
public List<TriggerEntity> findTriggersLastPingAfter(OffsetDateTime dateTime) {
4751
return triggerRepository.findTriggersLastPingAfter(dateTime);
4852
}
53+
54+
public Page<TriggerEntity> listTriggers(TriggerKey key, Pageable page) {
55+
if (key == null) return triggerRepository.findAll(page);
56+
if (key.getId() == null) return listTriggers(key.toTaskId(), page);
57+
return listTriggers(key.toTaskId(), page);
58+
}
59+
60+
public Page<TriggerEntity> listTriggers(TaskId<? extends Serializable> task, Pageable page) {
61+
if (task == null) return triggerRepository.findAll(page);
62+
return triggerRepository.findAll(task.name(), page);
63+
}
4964
}

0 commit comments

Comments
 (0)