/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 - 2 0 2 1 ĠExact pro Ġ( Exact pro ĠSystems ĠLimited ) Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . exact pro . th 2 . codec Ċ Ċ import Ġcom . exact pro . th 2 . codec . configuration . ApplicationContext Ċ import Ġcom . exact pro . th 2 . common . grpc .* Ċ import Ġcom . exact pro . th 2 . common . schema . message . Message Router Ċ Ċ class ĠSync Decoder ( ĊĠĠĠ Ġrouter : ĠMessage Router < Message Group Batch >, ĊĠĠĠ Ġapplication Context : ĠApplication Context , ĊĠĠĠ Ġprivate Ġval Ġprocessor : ĠAbstract Codec Processor < Raw Message , ĠList < Message . Builder >> Ċ ) Ġ: ĠAbstract Sync Codec ( ĊĠĠĠ Ġrouter , ĊĠĠĠ Ġapplication Context Ċ ) Ġ{ ĊĊĊĠĠĠ Ġoverride Ġfun Ġcheck Result ( proto Result : ĠMessage Group ): ĠBoolean Ġ= Ġproto Result . messages Count Ġ> Ġ 0 ĊĠĠĠ Ġoverride Ġfun Ġget Direction (): ĠDirection Ġ= ĠDirection . DECODE ĊĊĠĠĠ Ġoverride Ġfun Ġcheck Result Batch ( result Batch : ĠMessage Group Batch ): ĠBoolean Ġ= Ġresult Batch . groups Count Ġ> Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun Ġprocess Message Group ( it : ĠMessage Group ): ĠMessage Group ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( it . messages Count Ġ< Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġgroup Builder Ġ= ĠMessage Group . newBuilder () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( not Type Message Ġin Ġit . messages List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( not Type Message . has Raw Message ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġraw Message Ġ= Ġnot Type Message . raw Message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstart Seq Ġ= ĠDEFAULT _ SUB SEQUENCE _ NUMBER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocessor . process ( raw Message ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . metadata Builder . id Builder . add Sub sequence ( start Seq ++) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Builder . add Messages ( Any Message . newBuilder (). setMessage ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Builder . add Messages ( not Type Message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( group Builder . messages Count Ġ> Ġ 0 ) Ġgroup Builder . build () Ġelse Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ SUB SEQUENCE _ NUMBER Ġ= Ġ 1 ĊĠĠĠ Ġ} Ċ }