11package org .pdown .gui .rest ;
22
3+ import com .fasterxml .jackson .databind .ObjectMapper ;
34import java .util .HashMap ;
45import java .util .List ;
56import java .util .Map ;
6- import javax .script .Invocable ;
7- import javax .script .ScriptEngine ;
87import org .pdown .core .boot .HttpDownBootstrap ;
8+ import org .pdown .core .entity .HttpResponseInfo ;
99import org .pdown .core .util .HttpDownUtil ;
1010import org .pdown .gui .extension .ExtensionContent ;
1111import org .pdown .gui .extension .ExtensionInfo ;
1212import org .pdown .gui .extension .HookScript ;
1313import org .pdown .gui .extension .HookScript .Event ;
1414import org .pdown .gui .extension .util .ExtensionUtil ;
15+ import org .pdown .rest .content .HttpDownContent ;
1516import org .pdown .rest .controller .HttpDownRestCallback ;
1617import org .pdown .rest .entity .DownInfo ;
1718import org .pdown .rest .form .HttpRequestForm ;
19+ import org .pdown .rest .form .TaskForm ;
1820import org .slf4j .Logger ;
1921import org .slf4j .LoggerFactory ;
22+ import org .springframework .beans .BeanUtils ;
2023import org .springframework .util .StringUtils ;
2124
2225public class HttpDownAppCallback extends HttpDownRestCallback {
@@ -26,56 +29,96 @@ public class HttpDownAppCallback extends HttpDownRestCallback {
2629 @ Override
2730 public void onStart (HttpDownBootstrap httpDownBootstrap ) {
2831 super .onStart (httpDownBootstrap );
32+ commonHook (httpDownBootstrap , HookScript .EVENT_START , false );
2933 }
3034
3135 @ Override
3236 public void onResume (HttpDownBootstrap httpDownBootstrap ) {
3337 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 );
3445 }
3546
3647 @ Override
3748 public void onError (HttpDownBootstrap httpDownBootstrap ) {
3849 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 ) {
3960 DownInfo downInfo = findDownInfo (httpDownBootstrap );
40- if (downInfo != null ) {
61+ Map <String , Object > taskInfo = buildTaskInfo (downInfo );
62+ if (taskInfo != null ) {
4163 //遍历扩展模块是否有对应的处理
4264 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 ());
4865 for (ExtensionInfo extensionInfo : extensionInfos ) {
4966 if (extensionInfo .getMeta ().isEnabled ()) {
5067 if (extensionInfo .getHookScript () != null
5168 && !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 ) {
5471 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 );
6296 }
6397 }
64-
6598 }
6699 }
67100 }
68101 }
69102 }
70103
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 ;
74114 }
75115
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 ;
79122 }
80123
81124}
0 commit comments