66import io .vertx .reactivex .core .Vertx ;
77import org .apache .logging .log4j .Logger ;
88import in .erail .glue .annotation .StartService ;
9+ import in .erail .model .Event ;
910import in .erail .model .RequestEvent ;
1011import in .erail .model .ResponseEvent ;
1112import io .netty .handler .codec .http .HttpResponseStatus ;
2223 *
2324 * @author vinay
2425 */
25- public abstract class RESTServiceImpl implements RESTService , MaybeTransformer <RequestEvent , ResponseEvent > {
26-
27- private static final ResponseEvent DEFAULT_REPONSE_EVENT = new ResponseEvent ();
26+ public abstract class RESTServiceImpl implements RESTService , MaybeTransformer <Event , Event > {
2827
2928 private String mOperationId ;
3029 private String mServiceUniqueId ;
3130 private Vertx mVertx ;
3231 private boolean mEnable = false ;
3332 private Logger mLog ;
3433 private Scheduler mScheduler = Schedulers .io ();
35- private ResponseEvent mDefaultResponseEvent = DEFAULT_REPONSE_EVENT ;
34+ private Event mDefaultEvent ;
3635 private boolean mSecure = false ;
3736 private String mAuthority ;
3837 private Class <? extends RequestEvent > mRequestEventClass = RequestEvent .class ;
39- private MaybeTransformer <RequestEvent , RequestEvent > mPreProcessProcessors [];
40- private MaybeTransformer <ResponseEvent , ResponseEvent > mPostProcessProcessors [];
38+ private Class <? extends ResponseEvent > mResponseEventClass = ResponseEvent .class ;
39+ private MaybeTransformer <Event , Event > mPreProcessProcessors [];
40+ private MaybeTransformer <Event , Event > mPostProcessProcessors [];
4141
4242 @ StartService
43- public void start () {
43+ public void start () throws InstantiationException , IllegalAccessException {
44+
45+ mDefaultEvent = new Event (getRequestEventClass ().newInstance (), getResponseEventClass ().newInstance ());
46+
4447 if (mEnable ) {
4548 getVertx ()
4649 .eventBus ()
@@ -60,12 +63,13 @@ public Single<JsonObject> handleRequest(Message<JsonObject> pMessage) {
6063 return Single
6164 .just (pMessage )
6265 .map (m -> pMessage .body ().mapTo (getRequestEventClass ()))
66+ .map (this ::createEvent )
6367 .flatMapMaybe (this ::handleEvent )
64- .toSingle (getDefaultResponseEvent ())
65- .map (resp -> JsonObject .mapFrom (resp ))
68+ .toSingle (getDefaultEvent ())
69+ .map (resp -> JsonObject .mapFrom (resp . getResponse () ))
6670 .doOnSuccess (resp -> pMessage .reply (resp ))
6771 .doOnError (err -> {
68- ResponseEvent resp = new ResponseEvent ()
72+ ResponseEvent resp = getResponseEventClass (). newInstance ()
6973 .setStatusCode (HttpResponseStatus .BAD_REQUEST .code ())
7074 .setMediaType (MediaType .PLAIN_TEXT_UTF_8 )
7175 .setBody (ExceptionUtils .getMessage (err ).getBytes ());
@@ -76,43 +80,30 @@ public Single<JsonObject> handleRequest(Message<JsonObject> pMessage) {
7680 }
7781
7882 @ Override
79- public Maybe <ResponseEvent > handleEvent (RequestEvent pRequest ) {
80-
83+ public Maybe <Event > handleEvent (Event pEvent ) {
8184 return Maybe
82- .just (pRequest )
83- .compose (this :: preProcess )
85+ .just (pEvent )
86+ .compose (composePipeline ( getPreProcessProcessors ()) )
8487 .compose (this )
85- .compose (this :: postProcess );
88+ .compose (composePipeline ( getPostProcessProcessors ()) );
8689 }
8790
88- public MaybeSource < RequestEvent > preProcess ( Maybe < RequestEvent > pRequest ) {
91+ protected MaybeTransformer < Event , Event > composePipeline ( MaybeTransformer < Event , Event >[] pProcessors ) {
8992
90- if (getPreProcessProcessors () == null || getPreProcessProcessors () .length == 0 ) {
91- return pRequest ;
93+ if (pProcessors == null || pProcessors .length == 0 ) {
94+ return ( Maybe < Event > pEvent ) -> pEvent ;
9295 }
9396
94- return Arrays
95- .stream (getPreProcessProcessors () )
96- .reduce (pRequest , (acc , p ) -> acc .compose (p ), (a , b ) -> a );
97+ return ( Maybe < Event > pEvent ) -> Arrays
98+ .stream (pProcessors )
99+ .reduce (pEvent , (acc , p ) -> acc .compose (p ), (a , b ) -> a );
97100 }
98101
99102 @ Override
100- public MaybeSource <ResponseEvent > apply (Maybe <RequestEvent > pRequest ) {
103+ public final MaybeSource <Event > apply (Maybe <Event > pRequest ) {
101104 return process (pRequest );
102105 }
103-
104- public abstract MaybeSource <ResponseEvent > process (Maybe <RequestEvent > pRequest );
105-
106- public Maybe <ResponseEvent > postProcess (Maybe <ResponseEvent > pResponse ) {
107-
108- if (getPostProcessProcessors () == null || getPostProcessProcessors ().length == 0 ) {
109- return pResponse ;
110- }
111-
112- return Arrays
113- .stream (getPostProcessProcessors ())
114- .reduce (pResponse , (acc , p ) -> acc .compose (p ), (a , b ) -> a );
115- }
106+ public abstract MaybeSource <Event > process (Maybe <Event > pEvent );
116107
117108 @ Override
118109 public String getOperationId () {
@@ -164,12 +155,12 @@ public void setScheduler(Scheduler pScheduler) {
164155 this .mScheduler = pScheduler ;
165156 }
166157
167- public ResponseEvent getDefaultResponseEvent () {
168- return mDefaultResponseEvent ;
158+ public Event getDefaultEvent () {
159+ return mDefaultEvent ;
169160 }
170161
171- public void setDefaultResponseEvent ( ResponseEvent pDefaultResponseEvent ) {
172- this .mDefaultResponseEvent = pDefaultResponseEvent ;
162+ public void setDefaultEvent ( Event pDefaultEvent ) {
163+ this .mDefaultEvent = pDefaultEvent ;
173164 }
174165
175166 @ Override
@@ -190,6 +181,7 @@ public void setAuthority(String pAuthority) {
190181 this .mAuthority = pAuthority ;
191182 }
192183
184+ @ Override
193185 public Class <? extends RequestEvent > getRequestEventClass () {
194186 return mRequestEventClass ;
195187 }
@@ -198,19 +190,28 @@ public void setRequestEventClass(Class<? extends RequestEvent> pRequestEventClas
198190 this .mRequestEventClass = pRequestEventClass ;
199191 }
200192
201- public MaybeTransformer <RequestEvent , RequestEvent >[] getPreProcessProcessors () {
193+ @ Override
194+ public Class <? extends ResponseEvent > getResponseEventClass () {
195+ return mResponseEventClass ;
196+ }
197+
198+ public void setResponseEventClass (Class <? extends ResponseEvent > pResponseEventClass ) {
199+ this .mResponseEventClass = pResponseEventClass ;
200+ }
201+
202+ public MaybeTransformer <Event , Event >[] getPreProcessProcessors () {
202203 return mPreProcessProcessors ;
203204 }
204205
205- public void setPreProcessProcessors (MaybeTransformer <RequestEvent , RequestEvent >[] pPreProcessProcessors ) {
206+ public void setPreProcessProcessors (MaybeTransformer <Event , Event >[] pPreProcessProcessors ) {
206207 this .mPreProcessProcessors = pPreProcessProcessors ;
207208 }
208209
209- public MaybeTransformer <ResponseEvent , ResponseEvent >[] getPostProcessProcessors () {
210+ public MaybeTransformer <Event , Event >[] getPostProcessProcessors () {
210211 return mPostProcessProcessors ;
211212 }
212213
213- public void setPostProcessProcessors (MaybeTransformer <ResponseEvent , ResponseEvent >[] pPostProcessProcessors ) {
214+ public void setPostProcessProcessors (MaybeTransformer <Event , Event >[] pPostProcessProcessors ) {
214215 this .mPostProcessProcessors = pPostProcessProcessors ;
215216 }
216217
0 commit comments