package Ġorg . battery park dev . publication . pub med . model Ċ Ċ import Ġai . wise cube . pub med .* Ċ import Ġorg . battery park dev . publication . pub med . service . Pub Med Retrie val Service Ċ Ċ data Ġclass ĠPub Med Entry ( ĊĠĠĠ Ġval Ġlabel : ĠString , ĊĠĠĠ Ġval Ġpub med Id : ĠInt , ĊĠĠĠ Ġval Ġparent Pub Med Id : ĠInt , ĊĠĠĠ Ġval Ġp mc Id : ĠString Ġ= Ġ"", ĊĠĠĠ Ġval Ġdoi Id : ĠString Ġ= Ġ"", ĊĠĠĠ Ġval Ġjournal Name : ĠString , ĊĠĠĠ Ġval Ġjournal Issue : ĠString , ĊĠĠĠ Ġval Ġarticle Title : ĠString , ĊĠĠĠ Ġval Ġabstract : ĠString , ĊĠĠĠ Ġval Ġauthor Caption : ĠString , ĊĠĠĠ Ġval Ġreference Set : ĠSet < Int >, ĊĠĠĠ Ġval Ġc itation Set : ĠSet < Int >, ĊĠĠĠ Ġval Ġc ited By Count : ĠInt Ċ ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠ ĠFunction Ġto Ġparse Ġattributes Ġfrom Ġthe ĠPub Med Article ĠJ a XB Ġmodel Ġobject . ĊĠĠĠĠĠĠ ĠPrimary Ġnode Ġlabel Ġis ĠPublic ation . ĊĠĠĠĠĠĠ ĠSecondary Ġlabel Ġshould Ġbe Ġone Ġof Ġ( Pub Med , ĠPub Med Reference , ĠPub Med C itation ) ĊĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġparse Pub Med Article ( pub med Article : ĠPub med Article , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecondary Label : ĠString Ġ= Ġ" Ġ", ĠparentId : ĠInt Ġ= Ġ 0 ): ĠPub Med Entry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp mid Ġ= Ġpub med Article . med line C itation . pm id . get value (). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp mc id Ġ= Ġresolve Article Id ByType ( pub med Article , Ġ" pmc ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdo iid Ġ= Ġresolve Article Id ByType ( pub med Article , Ġ" doi ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthors Ġ= Ġgenerate Author Caption ( pub med Article ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjournal Name Ġ= Ġpub med Article . med line C itation . article . journal . title ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjournal Issue Ġ= Ġresolve Journal Issue ( pub med Article ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġmodify Internal Quotes ( Ġpub med Article . med line C itation . article . article Title . get value ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġabstract Ġ= Ġmodify Internal Quotes ( Ġresolve Abstract ( pub med Article )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcit ations Ġ= ĠPub Med Retrie val Service . retrieve C itation Ids ( pm id . toString ()) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPub Med Entry ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecondary Label , Ġp mid , ĠparentId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp mc id , Ġdo iid , Ġjournal Name , Ġjournal Issue , Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabstract , Ġauthors , Ġresolve Reference Id Set ( pub med Article ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcit ations , Ġcit ations . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ ĠPrivate Ġfunction Ġto Ġcollect Ġthe Ġset Ġof ĠPub Med ĠI ds Ġfor Ġthis Ġarticle 's ĊĠĠĠĠĠĠĠ Ġreferences ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġresolve Reference Id Set ( pub med Article : ĠPub med Article ): ĠSet < Int > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġref Set Ġ= Ġmutable Set Of < Int >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpub med Article . pub med Data . reference List . stream (). forEach Ġ{ Ġref L Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġref L . reference . stream (). forEach Ġ{ Ġref Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ref . article IdList Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( article Id Ġin Ġref . article IdList . article Id . stream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ!= Ġarticle Id . get value (). toInt OrNull ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġref Set . add ( article Id . get value (). toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġref Set . toSet () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ ĠPrivate Ġfunction Ġto Ġresolve Ġthe Ġarticle 's Ġabstract ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġresolve Abstract ( pub med Article : ĠPub med Article ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġabs Text List Ġ= Ġpub med Article . med line C itation . article ?. abstract ?. abstract Text Ġ?: ĠlistOf < Abstract Text >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( abs Text List . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġ Ġabs Text List [ 0 ]. get value () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ ĠPrivate Ġfunction Ġto Ġresolve Ġan Ġarticle 's Ġid Ġbased Ġon Ġa Ġsupplied Ġtype ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġresolve Article Id ByType ( pub med Article : ĠPub med Article , Ġtype : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarticle Id Ġ= Ġpub med Article . pub med Data . article IdList . article Id . first OrNull Ġ{ Ġit . id Type Ġ== Ġtype Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( article Id Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> article Id . get value () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠ ĠFunction Ġto Ġgenerate Ġa ĠString Ġwith Ġthe Ġnames Ġof Ġthe Ġfirst ĊĠĠĠĠĠĠ Ġtwo Ġ( max ) Ġauthors Ġplus Ġet Ġal Ġif Ġ> Ġ 2 Ġauthors ĊĠĠĠĠĠĠ Ġe . g . Ġ ĠSmith , ĠRobert ; ĠJ ones , ĠM ary , Ġet Ġal ĊĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġgenerate Author Caption ( pub med Article : ĠPub med Article ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthor List Ġ= Ġpub med Article . med line C itation . article ?. author List ?. author ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( author List Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġwhen Ġ( author List . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġprocess Author Name ( author List [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġprocess Author Name ( author List [ 0 ]) Ġ+ Ġ"; Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Author Name ( author List [ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġprocess Author Name ( author List [ 0 ]) Ġ+ Ġ"; Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Author Name ( author List [ 1 ]) Ġ+ Ġ"; Ġet Ġal " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ ĠPrivate Ġfunction Ġto Ġresolve Ġauthor Ġnames ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġprocess Author Name ( author : ĠAuthor ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthor Name List Ġ= Ġauthor . lastName Or Fore Name Or Initial s Or Suffix Or Collect ive Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġname Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( author Name List [ 0 ] Ġis ĠCollect ive Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( author Name List [ 0 ] Ġas ĠCollect ive Name ). get value () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠlastName : ĠLast Name Ġ= Ġauthor Name List [ 0 ] Ġas ĠLast Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= ĠlastName . get value () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( author Name List . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname 1 Ġ Ġ= Ġwhen Ġ( author Name List [ 1 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFore Name Ġ-> Ġ( author Name List [ 1 ] Ġas ĠFore Name ). get value () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInitial s Ġ-> Ġ( author Name List [ 1 ] Ġas ĠInitial s ). get value () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ( author Name List [ 1 ] Ġas ĠS uffix ). get value () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ"$ name , Ġ$ name 1 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġname ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġprocess Pagination ( page : ĠPagination ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmed line P gn Ġ= Ġpage . start Page Or End Page Or Med line P gn [ 0 ] Ġas ĠMed line P gn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmed line P gn . get value () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġprocess E Location ( e loc : ĠE Location ID ): ĠString Ġ= Ġe loc . get value () ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġresolve Journal Issue ( pub med Article : ĠPub med Article ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġret Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjournal Issue Ġ= Ġpub med Article . med line C itation . article . journal . journal Issue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġyear Ġ= Ġif Ġ( journal Issue . pub Date . year Or Month Or Day Or Season Or Med line Date [ 0 ] Ġis ĠYear ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( journal Issue . pub Date . year Or Month Or Day Or Season Or Med line Date [ 0 ] Ġas ĠYear ). get value () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvol Ġ= Ġjournal Issue . volume Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġissue Ġ= Ġjournal Issue . issue Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġp gn : ĠString Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pub med Article . med line C itation . article . pagination Or E Location ID . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp gn Ġ= Ġwhen Ġ( pub med Article . med line C itation . article . pagination Or E Location ID [ 0 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPagination Ġ-> Ġprocess Pagination ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpub med Article . med line C itation . article . pagination Or E Location ID [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġas ĠPagination ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠE Location ID Ġ-> Ġprocess E Location ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpub med Article . med line C itation . article . pagination Or E Location ID [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġas ĠE Location ID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( vol . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret Ġ= Ġ"$ year Ġ$ vol " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( issue . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret Ġ= Ġ"$ ret ($ issue )" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p gn . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret Ġ= Ġ"$ ret :${ p gn }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠ ĠDouble Ġquotes Ġ( i . e . Ġ") Ġinside Ġa Ġtext Ġfield Ġcauses ĠCy pher ĊĠĠ Ġprocessing Ġerrors ĊĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġmodify Internal Quotes ( text : ĠString ): ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext . replace (" \"", Ġ"' ") ĊĊĠĠĠ Ġ} Ċ } ĊĊ