1
1
package org .pdown .gui .rest ;
2
2
3
+ import com .fasterxml .jackson .databind .ObjectMapper ;
3
4
import java .util .HashMap ;
4
5
import java .util .List ;
5
6
import java .util .Map ;
6
- import javax .script .Invocable ;
7
- import javax .script .ScriptEngine ;
8
7
import org .pdown .core .boot .HttpDownBootstrap ;
8
+ import org .pdown .core .entity .HttpResponseInfo ;
9
9
import org .pdown .core .util .HttpDownUtil ;
10
10
import org .pdown .gui .extension .ExtensionContent ;
11
11
import org .pdown .gui .extension .ExtensionInfo ;
12
12
import org .pdown .gui .extension .HookScript ;
13
13
import org .pdown .gui .extension .HookScript .Event ;
14
14
import org .pdown .gui .extension .util .ExtensionUtil ;
15
+ import org .pdown .rest .content .HttpDownContent ;
15
16
import org .pdown .rest .controller .HttpDownRestCallback ;
16
17
import org .pdown .rest .entity .DownInfo ;
17
18
import org .pdown .rest .form .HttpRequestForm ;
19
+ import org .pdown .rest .form .TaskForm ;
18
20
import org .slf4j .Logger ;
19
21
import org .slf4j .LoggerFactory ;
22
+ import org .springframework .beans .BeanUtils ;
20
23
import org .springframework .util .StringUtils ;
21
24
22
25
public class HttpDownAppCallback extends HttpDownRestCallback {
@@ -26,56 +29,96 @@ public class HttpDownAppCallback extends HttpDownRestCallback {
26
29
@ Override
27
30
public void onStart (HttpDownBootstrap httpDownBootstrap ) {
28
31
super .onStart (httpDownBootstrap );
32
+ commonHook (httpDownBootstrap , HookScript .EVENT_START , false );
29
33
}
30
34
31
35
@ Override
32
36
public void onResume (HttpDownBootstrap httpDownBootstrap ) {
33
37
super .onResume (httpDownBootstrap );
38
+ commonHook (httpDownBootstrap , HookScript .EVENT_RESUME , false );
39
+ }
40
+
41
+ @ Override
42
+ public void onPause (HttpDownBootstrap httpDownBootstrap ) {
43
+ super .onPause (httpDownBootstrap );
44
+ commonHook (httpDownBootstrap , HookScript .EVENT_PAUSE , false );
34
45
}
35
46
36
47
@ Override
37
48
public void onError (HttpDownBootstrap httpDownBootstrap ) {
38
49
super .onError (httpDownBootstrap );
50
+ commonHook (httpDownBootstrap , HookScript .EVENT_ERROR , true );
51
+ }
52
+
53
+ @ Override
54
+ public void onDone (HttpDownBootstrap httpDownBootstrap ) {
55
+ super .onDone (httpDownBootstrap );
56
+ commonHook (httpDownBootstrap , HookScript .EVENT_DONE , true );
57
+ }
58
+
59
+ private void commonHook (HttpDownBootstrap httpDownBootstrap , String event , boolean async ) {
39
60
DownInfo downInfo = findDownInfo (httpDownBootstrap );
40
- if (downInfo != null ) {
61
+ Map <String , Object > taskInfo = buildTaskInfo (downInfo );
62
+ if (taskInfo != null ) {
41
63
//遍历扩展模块是否有对应的处理
42
64
List <ExtensionInfo > extensionInfos = ExtensionContent .get ();
43
- Map <String , Object > taskForm = new HashMap <>();
44
- taskForm .put ("id" , downInfo .getId ());
45
- taskForm .put ("data" , downInfo .getData ());
46
- taskForm .put ("request" , HttpRequestForm .parse (downInfo .getBootstrap ().getRequest ()));
47
- taskForm .put ("response" , downInfo .getBootstrap ().getResponse ());
48
65
for (ExtensionInfo extensionInfo : extensionInfos ) {
49
66
if (extensionInfo .getMeta ().isEnabled ()) {
50
67
if (extensionInfo .getHookScript () != null
51
68
&& !StringUtils .isEmpty (extensionInfo .getHookScript ().getScript ())) {
52
- Event event = extensionInfo .getHookScript ().hasEvent (HookScript . EVENT_ERROR , HttpDownUtil .getUrl (httpDownBootstrap .getRequest ()));
53
- if (event != null ) {
69
+ Event e = extensionInfo .getHookScript ().hasEvent (event , HttpDownUtil .getUrl (httpDownBootstrap .getRequest ()));
70
+ if (e != null ) {
54
71
try {
55
- //初始化js引擎
56
- ScriptEngine engine = ExtensionUtil .buildExtensionRuntimeEngine (extensionInfo );
57
- Invocable invocable = (Invocable ) engine ;
58
- //执行error方法
59
- invocable .invokeFunction (StringUtils .isEmpty (event .getMethod ()) ? HookScript .EVENT_ERROR : event .getMethod (), taskForm );
60
- } catch (Exception e ) {
61
- LOGGER .error ("An exception occurred while error()" , e );
72
+ //执行钩子函数
73
+ Object result = ExtensionUtil .invoke (extensionInfo , e , taskInfo , async );
74
+ if (result != null ) {
75
+ ObjectMapper objectMapper = new ObjectMapper ();
76
+ String temp = objectMapper .writeValueAsString (result );
77
+ TaskForm taskForm = objectMapper .readValue (temp , TaskForm .class );
78
+ if (taskForm .getRequest () != null ) {
79
+ httpDownBootstrap .setRequest (
80
+ HttpDownUtil .buildRequest (taskForm .getRequest ().getMethod (),
81
+ taskForm .getRequest ().getUrl (),
82
+ taskForm .getRequest ().getHeads (),
83
+ taskForm .getRequest ().getBody ())
84
+ );
85
+ }
86
+ if (taskForm .getResponse () != null ) {
87
+ httpDownBootstrap .setResponse (taskForm .getResponse ());
88
+ }
89
+ if (taskForm .getData () != null ) {
90
+ downInfo .setData (taskForm .getData ());
91
+ }
92
+ HttpDownContent .getInstance ().save ();
93
+ }
94
+ } catch (Exception ex ) {
95
+ LOGGER .error ("An hook exception occurred while " + event + "()" , ex );
62
96
}
63
97
}
64
-
65
98
}
66
99
}
67
100
}
68
101
}
69
102
}
70
103
71
- @ Override
72
- public void onProgress (HttpDownBootstrap httpDownBootstrap ) {
73
- super .onProgress (httpDownBootstrap );
104
+ private Map <String , Object > buildTaskInfo (DownInfo downInfo ) {
105
+ if (downInfo != null ) {
106
+ Map <String , Object > taskForm = new HashMap <>();
107
+ taskForm .put ("id" , downInfo .getId ());
108
+ taskForm .put ("data" , clone (downInfo .getData (), new HashMap <String , Object >()));
109
+ taskForm .put ("request" , HttpRequestForm .parse (downInfo .getBootstrap ().getRequest ()));
110
+ taskForm .put ("response" , clone (downInfo .getBootstrap ().getResponse (), new HttpResponseInfo ()));
111
+ return taskForm ;
112
+ }
113
+ return null ;
74
114
}
75
115
76
- @ Override
77
- public void onDone (HttpDownBootstrap httpDownBootstrap ) {
78
- super .onDone (httpDownBootstrap );
116
+ private Object clone (Object source , Object target ) {
117
+ if (source != null && target != null ) {
118
+ BeanUtils .copyProperties (source , target );
119
+ return target ;
120
+ }
121
+ return null ;
79
122
}
80
123
81
124
}
0 commit comments