package Ġorg . b atter yp ak dev . go graph db . go . model Ċ Ċ import Ġorg . b atter yp ak dev . go graph db . go . pub med . model . Go Pub Med Identifier Ċ Ċ data Ġclass ĠGo Term ( ĊĠĠĠ Ġval Ġgo Id : ĠString , Ġval Ġnamespace : ĠString , Ġval Ġname : ĠString , ĊĠĠĠ Ġval Ġdefinition : ĠString , Ġval Ġpub med Identifiers : ĠList < Go Pub Med Identifier >, ĊĠĠĠ Ġval Ġsyn onyms : ĠList < Go Syn onym >, ĊĠĠĠ Ġval Ġrelationship List : ĠList < Relationship >, ĊĠĠĠ Ġval Ġx ref List : ĠList < X ref > Ċ ) Ċ Ċ { ĊĠĠĠ Ġfun ĠisValid (): Boolean Ġ= ĊĠĠĠĠĠĠĠ Ġ( go Id . isNotBlank (). and ( name . isNotBlank (). and ( namespace . isNotBlank ()))) ĊĊĠĠĠ Ġcompanion Ġobject Ġ: ĠAbstract Model Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ ĠFunction Ġto Ġprocess Ġa Ġlist Ġof Ġtext Ġlines Ġen compass ing Ġa ĠGO ĠTerm ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġgenerate Go Term ( ter ml ines : ĠList < String >): ĠGo Term Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġgo Id : ĠString Ġ= Ġ" Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġgo Name : ĠString Ġ= Ġ" Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġgo Namespace : ĠString Ġ= Ġ" Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġgo Definition : ĠString Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġter ml ines . forEach Ġ{ Ġline Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( resolve First Word ( line )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id " Ġ-> Ġgo Id Ġ= Ġline . substring ( line . indexOf (" GO :" )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name " Ġ-> Ġgo Name Ġ= Ġline . substring ( 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" namespace " Ġ-> Ġgo Namespace Ġ= Ġline . substring ( 1 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" def " Ġ-> Ġgo Definition Ġ= Ġresolve Quoted String ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{} Ġ Ġ// Ġignore Ġother Ġlines ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠGo Term ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgo Id , Ġgo Namespace , Ġgo Name , Ġgo Definition , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Pub Med Identifiers ( go Id , ter ml ines ), ĠGo Syn onym . resolve Syn onyms ( ter ml ines ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRelationship . resolve Relationships ( ter ml ines ), ĠX ref . resolve X refs ( ter ml ines ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠ ĠFunction Ġto Ġresolve Ġa ĠList Ġof ĠPub Med ĠI ds Ġfrom Ġa ĠGO ĠTerm ĊĠĠĠ ĠInput Ġparameter Ġis Ġa ĠList Ġof Ġlines Ġcomp ris ing Ġa Ġcomplete ĊĠĠĠ ĠGO ĠTerm ĊĠĠĠ ĠFormat Ġis ĠPM ID : 7 7 2 2 6 4 3 ĊĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġresolve Pub Med Identifiers ( go Id : ĠString , Ġlines : ĠList < String >): ĠList < Go Pub Med Identifier > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġp mid Set Ġ= Ġmutable Set Of < Int >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp mid Label Ġ= Ġ" PM ID " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp mid Length Ġ= Ġ 1 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlines . stream (). filter Ġ{ Ġline Ġ-> Ġline . contains ( pm id Label ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġline Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtext Ġ= Ġline ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( index Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġtext . indexOf ( pm id Label ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ>= Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġp mid Set . add ( text . substring ( index + 5 , Ġindex Ġ+ Ġp mid Length ). toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp mid Set . add ( parse PM ID ( text . substring ( index Ġ+ Ġ 5 ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext . substring ( index Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpb Identifiers Ġ= Ġmutable ListOf < Go Pub Med Identifier >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp mid Set . forEach Ġ{ Ġid Ġ-> Ġpb Identifiers . add ( Go Pub Med Identifier ( id , go Id ," Publication ")) } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpb Identifiers . toList () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠGo Syn onym ( ĊĠĠĠ Ġval Ġsyn onym Text : ĠString , ĊĠĠĠ Ġval Ġsyn onym Type : ĠString Ċ ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ: ĠAbstract Model Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġresolve Syn onyms ( term Lines : ĠList < String >): ĠList < Go Syn onym > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsyn onyms Ġ= Ġmutable ListOf < Go Syn onym >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġterm Lines . filter Ġ{ Ġline Ġ-> Ġline . startsWith (" syn onym :") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġsyn Ġ-> Ġsyn onyms . add ( resolve Syn onym ( syn )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsyn onyms . toList () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġresolve Syn onym ( line : ĠString ): ĠGo Syn onym Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġresolve Quoted String ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠstartIndex Ġ= Ġline . lastIndexOf ('" ') Ġ+ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Index Ġ= ĠstartIndex Ġ+ Ġline . substring ( startIndex ). indexOf (' Ġ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġline . substring ( startIndex , Ġend Index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠGo Syn onym ( text , Ġtype ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠRelationship ( ĊĠĠĠ Ġval Ġtype : ĠString , ĊĠĠĠ Ġval Ġqualifier : ĠString Ġ= Ġ"", ĊĠĠĠ Ġval Ġtarget Id : ĠString , ĊĠĠĠ Ġval Ġdescription : ĠString Ċ ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ: ĠAbstract Model Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġrelationship Filter ( line : ĠString ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( resolve First Word ( line )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" is _ a ", Ġ" intersection _ of ", Ġ" relationship " Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġresolve Relationships ( ter ml ines : ĠList < String >): ĠList < Relationship > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrelationships Ġ= Ġmutable ListOf < Relationship >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġter ml ines . filter Ġ{ Ġline Ġ-> Ġrelationship Filter ( line ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġline Ġ-> Ġrelationships . add ( resolve Relationship ( line )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrelationships ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġresolve Relationship ( line : ĠString ): ĠRelationship Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġresolve First Word ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Start Ġ= Ġline . indexOf (" GO :") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Id Ġ= Ġline . substring ( target Start , Ġtarget Start Ġ+ Ġ 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescription Ġ= Ġline . substring ( target Start Ġ+ Ġ 1 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRelationship ( type , Ġresolve Qualifier ( line ), Ġtarget Id , Ġdescription ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġresolve Qualifier ( line : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolon Index Ġ= Ġline . indexOf (": ") Ġ+ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgo Index Ġ= Ġline . indexOf (" GO :") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġline . substring ( colon Index , Ġgo Index ). trim () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠX ref ( ĊĠĠĠ Ġval Ġsource : ĠString , ĊĠĠĠ Ġval Ġid : ĠString , ĊĠĠĠ Ġval Ġdescription : ĠString Ġ= Ġ"" Ċ ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ: ĠAbstract Model Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġresolve X refs ( term Lines : ĠList < String >): ĠList < X ref > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx refs Ġ= Ġmutable ListOf < X ref >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġterm Lines . filter Ġ{ Ġline Ġ-> Ġline . startsWith (" xref ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġline Ġ-> Ġx refs . add ( resolve X ref ( line )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġx refs ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġresolve X ref ( line : ĠString ): ĠX ref Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource And Id Ġ= Ġline . split (" Ġ" )[ 1 ]. split (": ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Ġ= Ġsource And Id [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġsource And Id [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠX ref ( source , Ġid , Ġresolve Quoted String ( line )) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġval Ġsyn onyms Ġ= ĠlistOf < String >( ĊĠĠĠĠĠĠĠ Ġ" syn onym : Ġ\" activation Ġof Ġre ceptor Ġinternal ization \" ĠN ARROW Ġ[] ", ĊĠĠĠĠĠĠĠ Ġ" syn onym : Ġ\" stim ulation Ġof Ġre ceptor Ġinternal ization \" ĠN ARROW Ġ[] ", ĊĠĠĠĠĠĠĠ Ġ" syn onym : Ġ\" up Ġreg ulation Ġof Ġre ceptor Ġinternal ization \" ĠEX ACT Ġ[] ", ĊĠĠĠĠĠĠĠ Ġ" syn onym : Ġ\" up - reg ulation Ġof Ġre ceptor Ġinternal ization \" ĠEX ACT Ġ[] ", ĊĠĠĠĠĠĠĠ Ġ" syn onym : Ġ\" up reg ulation Ġof Ġre ceptor Ġinternal ization \" ĠEX ACT Ġ[] " ĊĠĠĠ Ġ) ĊĠĠĠ ĠGo Syn onym . resolve Syn onyms ( syn onyms ). forEach Ġ{ Ġsyn Ġ-> ĊĠĠĠĠĠĠĠ Ġprintln ("${ syn . syn onym Text } ĠĠ Ġ${ syn . syn onym Type }") ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġrelationships Ġ= ĠlistOf < String >( ĊĠĠĠĠĠĠĠ Ġ" is _ a : ĠGO : 0 0 0 6 3 5 5 Ġ! Ġreg ulation Ġof Ġtran scription , ĠDNA - temp lated ", ĊĠĠĠĠĠĠĠ Ġ" is _ a : ĠGO : 1 9 0 3 0 4 7 Ġ! Ġmit otic Ġcell Ġcycle Ġprocess ", ĊĠĠĠĠĠĠĠ Ġ" intersection _ of : ĠGO : 0 0 0 6 3 5 5 Ġ! Ġreg ulation Ġof Ġtran scription , ĠDNA - temp lated ", ĊĠĠĠĠĠĠĠ Ġ" intersection _ of : Ġpart _ of ĠGO : 0 0 0 0 0 8 2 Ġ! ĠG 1 / S Ġtransition Ġof Ġmit otic Ġcell Ġcycle ", ĊĠĠĠĠĠĠĠ Ġ" relationship : Ġpart _ of ĠGO : 0 0 0 0 0 8 2 Ġ! ĠG 1 / S Ġtransition Ġof Ġmit otic Ġcell Ġcycle " ĊĠĠĠ Ġ) ĊĠĠĠ ĠRelationship . resolve Relationships ( relationships ). forEach Ġ{ Ġrel Ġ-> ĊĠĠĠĠĠĠĠ Ġprintln ("${ rel . type } ĠĠ Ġ${ rel . qual ifier } Ġ Ġ${ rel . target Id } ĠĠ Ġ${ rel . description }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġx refs Ġ= ĠlistOf < String >( ĊĠĠĠĠĠĠĠ Ġ" xref : ĠEC : 3 . 2 . 1 . 1 0 8 ", ĊĠĠĠĠĠĠĠ Ġ" xref : ĠMeta Cyc : L ACT ASE - RX N ", ĊĠĠĠĠĠĠĠ Ġ" xref : ĠReact ome : R - H SA - 1 8 9 0 6 2 Ġ\" l act ose Ġ+ ĠH 2 O Ġ=> ĠD - glu co se Ġ+ ĠD - gal act ose \"", ĊĠĠĠĠĠĠĠ Ġ" xref : ĠReact ome : R - H SA - 5 6 5 8 0 0 1 Ġ\" Defect ive ĠL CT Ġdoes Ġnot Ġhydro ly ze ĠL ac \"", ĊĠĠĠĠĠĠĠ Ġ" xref : ĠR HE A : 1 0 0 7 6 " ĊĠĠĠ Ġ) ĊĠĠĠ ĠX ref . resolve X refs ( xref s ). forEach Ġ{ Ġx ref Ġ-> ĊĠĠĠĠĠĠĠ Ġprintln ("${ xref . source } ĠĠ Ġ${ xref . id } Ġ Ġ${ xref . description }") ĊĠĠĠ Ġ} Ċ } ĊĊ