Skip to content

Commit 66f9fa4

Browse files
committed
add Trigger
1 parent 06b341a commit 66f9fa4

File tree

9 files changed

+182
-5
lines changed

9 files changed

+182
-5
lines changed

pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
<groupId>com.codingapi.springboot</groupId>
1414
<artifactId>springboot-parent</artifactId>
15-
<version>1.4.10</version>
15+
<version>1.4.11.dev</version>
1616

1717
<url>https://github.com/codingapi/springboot-framewrok</url>
1818
<name>springboot-parent</name>

springboot-starter-data-fast/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<artifactId>springboot-parent</artifactId>
77
<groupId>com.codingapi.springboot</groupId>
8-
<version>1.4.10</version>
8+
<version>1.4.11.dev</version>
99
</parent>
1010
<modelVersion>4.0.0</modelVersion>
1111

springboot-starter-id-generator/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<artifactId>springboot-parent</artifactId>
77
<groupId>com.codingapi.springboot</groupId>
8-
<version>1.4.10</version>
8+
<version>1.4.11.dev</version>
99
</parent>
1010
<modelVersion>4.0.0</modelVersion>
1111

springboot-starter-security-jwt/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<artifactId>springboot-parent</artifactId>
88
<groupId>com.codingapi.springboot</groupId>
9-
<version>1.4.10</version>
9+
<version>1.4.11.dev</version>
1010
</parent>
1111

1212
<artifactId>springboot-starter-security-jwt</artifactId>

springboot-starter/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>com.codingapi.springboot</groupId>
77
<artifactId>springboot-parent</artifactId>
8-
<version>1.4.10</version>
8+
<version>1.4.11.dev</version>
99
</parent>
1010
<artifactId>springboot-starter</artifactId>
1111

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package com.codingapi.springboot.framework.trigger;
2+
3+
public interface Trigger {
4+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package com.codingapi.springboot.framework.trigger;
2+
3+
import java.lang.reflect.ParameterizedType;
4+
import java.util.ArrayList;
5+
import java.util.Iterator;
6+
import java.util.List;
7+
import java.util.Map;
8+
import java.util.concurrent.ConcurrentHashMap;
9+
10+
@SuppressWarnings("all")
11+
public class TriggerContext{
12+
13+
public static TriggerContext getInstance() {
14+
return instance;
15+
}
16+
17+
private final static TriggerContext instance = new TriggerContext();
18+
19+
20+
private final Map<Class<? extends Trigger>,List<TriggerHandler>> triggers;
21+
22+
private TriggerContext(){
23+
this.triggers = new ConcurrentHashMap<>();
24+
}
25+
26+
public void addTrigger(TriggerHandler trigger){
27+
Class<? extends Trigger> clazz = getTriggerClass(trigger);
28+
List<TriggerHandler> triggerList = this.triggers.get(clazz);
29+
if(triggerList==null){
30+
triggerList = new ArrayList<>();
31+
this.triggers.put(clazz,triggerList);
32+
}
33+
triggerList.add(trigger);
34+
}
35+
36+
37+
private Class<? extends Trigger> getTriggerClass(TriggerHandler trigger){
38+
ParameterizedType parameterizedType = (ParameterizedType) trigger.getClass().getGenericInterfaces()[0];
39+
return (Class<? extends Trigger>) parameterizedType.getActualTypeArguments()[0];
40+
}
41+
42+
43+
public void trigger(Trigger trigger){
44+
Class<? extends Trigger> clazz = trigger.getClass();
45+
Iterator<TriggerHandler> iterator = triggers.get(clazz).iterator();
46+
while (iterator.hasNext()){
47+
TriggerHandler handler = iterator.next();
48+
Class<? extends Trigger> triggerClass = getTriggerClass(handler);
49+
if(triggerClass.equals(clazz)) {
50+
if (handler.preTrigger(trigger)) {
51+
handler.trigger(trigger);
52+
if (handler.remove()) {
53+
iterator.remove();
54+
}
55+
}
56+
}
57+
}
58+
}
59+
60+
public void clear(Class<? extends Trigger> clazz){
61+
triggers.get(clazz).clear();
62+
}
63+
64+
65+
public boolean isEmpty(Class<? extends Trigger> clazz){
66+
return triggers.get(clazz).isEmpty();
67+
}
68+
69+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.codingapi.springboot.framework.trigger;
2+
3+
4+
public interface TriggerHandler<T extends Trigger> {
5+
6+
boolean preTrigger(T trigger);
7+
8+
void trigger(T trigger);
9+
10+
boolean remove();
11+
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
package com.codingapi.springboot.framework.trigger;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
import org.junit.jupiter.api.Test;
6+
7+
import static org.junit.jupiter.api.Assertions.assertFalse;
8+
import static org.junit.jupiter.api.Assertions.assertTrue;
9+
10+
class TriggerHandlerContextTest {
11+
12+
@Test
13+
void addTrigger() {
14+
TriggerContext.getInstance().addTrigger(new TriggerHandler<MyTrigger>() {
15+
@Override
16+
public boolean preTrigger(MyTrigger trigger) {
17+
return false;
18+
}
19+
20+
@Override
21+
public void trigger(MyTrigger trigger) {
22+
23+
}
24+
25+
@Override
26+
public boolean remove() {
27+
return false;
28+
}
29+
});
30+
31+
TriggerContext.getInstance().addTrigger(new TriggerHandler<MyTrigger2>() {
32+
@Override
33+
public boolean preTrigger(MyTrigger2 trigger) {
34+
return false;
35+
}
36+
37+
@Override
38+
public void trigger(MyTrigger2 trigger) {
39+
40+
}
41+
42+
@Override
43+
public boolean remove() {
44+
return false;
45+
}
46+
});
47+
48+
assertFalse(TriggerContext.getInstance().isEmpty(MyTrigger.class));
49+
TriggerContext.getInstance().clear(MyTrigger.class);
50+
assertTrue(TriggerContext.getInstance().isEmpty(MyTrigger.class));
51+
}
52+
53+
@Test
54+
void trigger() {
55+
TriggerContext.getInstance().addTrigger(new TriggerHandler<MyTrigger>() {
56+
@Override
57+
public boolean preTrigger(MyTrigger trigger) {
58+
return true;
59+
}
60+
61+
@Override
62+
public void trigger(MyTrigger trigger) {
63+
System.out.println(trigger.getName());
64+
}
65+
66+
@Override
67+
public boolean remove() {
68+
return true;
69+
}
70+
});
71+
72+
MyTrigger trigger = new MyTrigger("bob");
73+
74+
TriggerContext.getInstance().trigger(trigger);
75+
assertTrue(TriggerContext.getInstance().isEmpty(MyTrigger.class));
76+
77+
}
78+
79+
@AllArgsConstructor
80+
private static class MyTrigger implements Trigger{
81+
@Getter
82+
private final String name;
83+
}
84+
85+
@AllArgsConstructor
86+
private static class MyTrigger2 implements Trigger{
87+
@Getter
88+
private final String name;
89+
}
90+
91+
92+
}

0 commit comments

Comments
 (0)