/* - Ċ Ġ* Ġ================= ======= LICENSE _ START ================================ = Ċ Ġ* Ġids - route - manager Ċ Ġ* Ġ%% Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 ĠF ra un ho fer ĠAI SEC Ċ Ġ* Ġ%% Ċ Ġ* Ġ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 . Ċ Ġ* Ġ================= ======== LICENSE _ END ================================ == Ċ Ġ*/ Ċ package Ġde . fh g . aise c . ids . rm . util Ċ Ċ import Ġorg . apache . camel . model . Choice Definition Ċ import Ġorg . apache . camel . model . Optional Ident ified Definition Ċ import Ġorg . apache . camel . model . Processor Definition Ċ import Ġorg . apache . camel . model . Route Definition Ċ import Ġjava . io . IOException Ċ import Ġjava . io . Writer Ċ import Ġjava . util . concurrent . atomic . Atomic Integer Ċ Ċ class ĠPro log Printer Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPrints Ġa Ġsingle ĠCamel Ġroute Ġin ĠPro log Ġrepresentation . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġwriter ĊĠĠĠĠ Ġ* Ġ@ param Ġroute ĊĠĠĠĠ Ġ* Ġ@ throws ĠIOException ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġprint Single Route ( writer : ĠWriter ?, Ġroute : ĠRoute Definition ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( writer Ġ== Ġnull Ġ|| Ġroute Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠPrint Ġroute Ġentry Ġpoints ĊĠĠĠĠĠĠĠ Ġprint Input ( writer , Ġroute ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPrints Ġa Ġsingle Ġnode Ġof Ġa ĠCamel Ġroute Ġin ĠPro log Ġrepresentation . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġwriter ĊĠĠĠĠ Ġ* Ġ@ param Ġcurrent ĊĠĠĠĠ Ġ* Ġ@ param Ġpreds ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ* Ġ@ throws ĠIOException ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġprint Node ( ĊĠĠĠĠĠĠĠ Ġwriter : ĠWriter , ĊĠĠĠĠĠĠĠ Ġcurrent : ĠProcessor Definition <* >, ĊĠĠĠĠĠĠĠ Ġpreds : ĠList < Optional Ident ified Definition <* >> ĊĠĠĠ Ġ): ĠList < Processor Definition <* >> Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( p Ġin Ġpreds ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġsucc (${ p . id }, Ġ${ current . id }). ĊĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwriter . write ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġstmt (${ current . id }). ĊĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġwriter . write ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġhas _ action (${ current . id }, Ġ"${ current . label } "). ĊĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġpre decessor Ġof Ġnext Ġrecursion Ġis Ġthe Ġcurrent Ġnode ĊĠĠĠĠĠĠĠ Ġval Ġnew Pred s : ĠMutable List < Processor Definition <* >> Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġnew Pred s . add ( current ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( out Ġin Ġcurrent . outputs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġthis Ġis Ġa ĠChoice Definition , Ġthere Ġis Ġno Ġlink Ġbetween Ġits ĠWhere Definitions . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmy Pred s Ġ= ĠArrayList < Optional Ident ified Definition <* >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Ġis ĠChoice Definition ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Pred s . add ( current ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ@ TODO : ĠLooks Ġsomewhat Ġstrange ... Ġis Ġthis Ġcorrect ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Pred s . addAll ( new Pred s ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRe cur sion Ġ... ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġprint Node ( writer , Ġout , Ġmy Pred s ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPre decess ors Ġof Ġa ĠChoice Definition Ġare Ġall Ġlast Ġstm ts Ġof Ġits ĠWhere - Ġand ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOtherwise Definitions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Ġis ĠChoice Definition ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Pred s . addAll ( p ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Pred s . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Pred s . addAll ( p ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnew Pred s ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPrints Ġa Ġsingle ĠFrom Definition Ġ(= Ġa Ġroute Ġentry Ġpoint ) Ġin ĠPro log Ġrepresentation . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠIOException ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġprint Input ( writer : ĠWriter , Ġroute : ĠRoute Definition ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcounter Ġ= ĠAtomicInteger ( 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġroute . input ĊĠĠĠĠĠĠĠ Ġ// ĠMake Ġsure Ġevery Ġinput Ġnode Ġhas Ġa Ġunique Ġid ĊĠĠĠĠĠĠĠ Ġif Ġ( i . id Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi . custom Id Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi . id Ġ= Ġ" input " Ġ+ Ġcounter . increment AndGet () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwriter . write ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġstmt (${ i . id }). ĊĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġwriter . write ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġentr yn ode (${ i . id }). ĊĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġwriter . write ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġhas _ action (${ i . id }, Ġ"${ i . label } "). ĊĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġvar Ġprev : ĠOptional Ident ified Definition < *> ? Ġ= Ġi ĊĠĠĠĠĠĠĠ Ġfor Ġ( next Ġin Ġroute . outputs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint Node ( writer , Ġnext , Ġprev ?. let Ġ{ ĠlistOf ( it ) Ġ} Ġ?: Ġempty List ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprev Ġ= Ġnext ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ