package Ġorg . battery park dev . pub med ref . app Ċ Ċ import Ġai . wise cube . pub med . Pub med Parser Ċ import Ġarrow . core . Either Ċ import Ġcom . google . common . f logger . Fluent Logger Ċ import Ġorg . battery park dev . pub med ref . model . Pub Med Entry Ċ import Ġorg . battery park dev . pub med ref . neo 4 j . Neo 4 j Pub Med Loader Ċ import Ġorg . battery park dev . pub med ref . neo 4 j . Neo 4 j Utils Ċ import Ġorg . battery park dev . pub med ref . service . Pub Med Retrie val Service Ċ import Ġjava . util . stream . Stream Ċ Ċ const Ġval Ġpub Med Template Ġ= ĊĠĠĠ Ġ" https :// e utils . ncbi . nlm . nih . gov / ent rez / e utils / ef etch . fc gi ? db = pub med & amp ; id = PUB MED ID & amp ; ret mode = xml " Ċ const Ġval Ġpub Med Token Ġ= Ġ" PUB MED ID " Ċ const Ġval Ġstart Tag Ġ= Ġ"< Pub med Article Set >" Ċ const Ġval ĠUTF 8 _ BO M Ġ= Ġ"\ u FE FF " Ċ Ċ class ĠPub Med Graph App Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlogger : ĠFluent Logger Ġ= ĠFluent Logger . for En closing Class (); ĊĊĠĠĠ Ġ// private Ġval Ġparser Ġ= ĠPub med Parser () ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġprocess Pub Med Id Stream Ġ( ids : ĠStream < Int >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapp Ġ= ĠPub Med Graph App () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNeo 4 j Utils . clear Relationships And Labels () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġids . filter Ġ{ Ġit Ġ> Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġit Ġ-> Ġapp . process Pub Med Node ById ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġprocess Pub Med Node ById ( pub med Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġorigin Entry Ġ= Ġload Origin Nodes ( pub med Id . toString ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ!= Ġorigin Entry ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Reference Nodes ( origin Entry ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload C itation Nodes ( origin Entry ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* Ċ Load Ġall Ġthe ĠOrigin Ġnodes Ġindividually Ċ Ġ*/ ĊĠĠĠ Ġfun Ġload Origin Nodes ( pub med Id : ĠString ): ĠPub Med Entry ? Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . at F ine (). log (" Processing ĠPub Med ĠId : Ġ$ pub med Id ") ĊĠĠĠĠĠĠĠ ĠNeo 4 j Utils . delete Existing Origin Node ( pub med Id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġload Pub Med Entry ById ( pub med Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload C itation Nodes ( pub Med Entry : ĠPub Med Entry ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . at Info (). log (" Processing ĠC itations ") ĊĠĠĠĠĠĠĠ Ġval ĠparentId Ġ= Ġpub Med Entry . pub med Id ĊĠĠĠĠĠĠĠ Ġval Ġlabel Ġ= Ġ" C itation " ĊĠĠĠĠĠĠĠ Ġpub Med Entry . citation Set . stream (). forEach Ġ{ Ġid Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . at F ine (). log (" Ġ ĠC itation Ġid : Ġ$ id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOnly Ġfetch Ġthe ĠPub Med Ġdata Ġfrom ĠN CB I Ġif Ġthe Ġdatabase Ġdoes Ġnot ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontain Ġa ĠPub Med Reference Ġnode Ġfor Ġthis Ġc itation Ġid ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Neo 4 j Utils . pub Med Node Exists Predicate ( id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . at Info (). log (" Ġ ĠFetch ing Ġc itation Ġ Ġid : Ġ$ id Ġfrom ĠN CB I ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcit Entry Ġ= Ġload Pub Med Entry ById ( id , Ġlabel , ĠparentId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNeo 4 j Utils . create Pub Med Relationship ( label , ĠparentId , Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNeo 4 j Utils . add Label ( id , Ġlabel ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Reference Nodes ( pub Med Entry : ĠPub Med Entry ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . at Info (). log (" Processing ĠReferences ") ĊĠĠĠĠĠĠĠ Ġval ĠparentId Ġ= Ġpub Med Entry . pub med Id Ġ Ġ// Ġid Ġof Ġorigin Ġnode ĊĠĠĠĠĠĠĠ Ġval Ġlabel Ġ= Ġ" Reference " ĊĠĠĠĠĠĠĠ Ġpub Med Entry . reference Set . stream (). forEach Ġ{ Ġid Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . at F ine (). log (" Ġ ĠReference Ġid : Ġ$ id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Neo 4 j Utils . pub Med Node Exists Predicate ( id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . at Info (). log (" Ġ ĠFetch ing Ġreference Ġid : Ġ$ id Ġfrom ĠN CB I ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġref Entry Ġ= Ġload Pub Med Entry ById ( id , Ġlabel , ĠparentId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNeo 4 j Utils . create Pub Med Relationship ( label , ĠparentId , Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNeo 4 j Utils . add Label ( id , Ġlabel ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Pub Med Entry ById ( pub med Id : ĠString , Ġlabel : ĠString Ġ= Ġ" Origin ", ĠparentId : ĠString Ġ= Ġ"") : ĠPub Med Entry ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( val Ġret Either Ġ= ĠPub Med Retrie val Service . retrieve Pub Med Article ( pub med Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEither . Right Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpub med Article Ġ= Ġret Either . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpub med Entry Ġ= ĠPub Med Entry . parse Pub Med Article ( pub med Article , Ġlabel , ĠparentId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNeo 4 j Pub Med Loader . load Pub Med Entry ( pub med Entry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpub med Entry ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEither . Left Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . at Se vere (). log ( ret Either . value . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /* Ċ Add Ġsupport Ġfor Ġmultiple Ġorigin Ġpub med Ġids Ċ */ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġval Ġpub med Id Stream Ġ= ĠlistOf ( 2 5 3 0 3 9 7 7 , Ġ 3 3 0 2 4 2 6 3 , Ġ 2 8 4 6 7 8 2 9 ). stream () ĊĊĠĠĠ Ġ// Ġclear Ġexisting Ġrelationships Ġand Ġsecondary Ġlabels ĊĠĠĠ ĠNeo 4 j Utils . clear Relationships And Labels () ĊĠĠ ĠPub Med Graph App . process Pub Med Id Stream ( pub med Id Stream ) Ċ } ĊĊ