package Ġeu . t ib . ork g . prototype . statements . domain . model Ċ Ċ import Ġjava . io . BufferedReader Ċ import Ġjava . io . InputStream Reader Ċ import Ġjava . net . Http URLConnection Ċ import Ġjava . net . URL Ċ import Ġjava . util . Optional Ċ import Ġorg . springframework . http . HttpStatus . NOT _ FOUND Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġorg . springframework . transaction . annotation . Transactional Ċ import Ġorg . springframework . web . server . ResponseStatus Exception Ċ Ċ @ Service Ċ @ Transactional Ċ class ĠDo i Service ( ĊĠĠĠ Ġprivate Ġval Ġliteral Service : ĠLiteral Service Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġregister Do i ( doi Data : ĠString , Ġcredentials : ĠString , Ġurl : ĠString ): ĠOptional < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhttp Connection Ġ= Ġprepare Http Call ( url , Ġcredentials ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdoi Register Request ( doi Data , Ġhttp Connection ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOptional . of ( ResponseStatus Exception ( NOT _ FOUND , Ġ" Error Ġcreating ĠDO I "). toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOptional . of ( ResponseStatus Exception ( NOT _ FOUND , Ġ" Error Ġestablish ing Ġconnection "). toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprepare Http Call ( url : ĠString , Ġcredentials : ĠString ): ĠHttp URLConnection Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdatac ite Url Ġ= ĠURL ( url ) ĊĠĠĠĠĠĠĠ Ġval Ġcon Ġ= Ġdatac ite Url . open Connection () Ġas ĠHttp URLConnection ĊĠĠĠĠĠĠĠ Ġcon . request Method Ġ= Ġ" POST " ĊĠĠĠĠĠĠĠ Ġcon . setRequest Property (" Content - Type ", Ġ" application / vnd . api + json ; Ġutf - 8 ") ĊĠĠĠĠĠĠĠ Ġcon . setRequest Property (" Authorization ", Ġ" Basic Ġ$ credentials ") ĊĠĠĠĠĠĠĠ Ġcon . setRequest Property (" Accept ", Ġ" application / json ") ĊĠĠĠĠĠĠĠ Ġcon . do Output Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġreturn Ġcon ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdoi Register Request ( doi Data : ĠString , Ġhttp Connection : ĠHttp URLConnection ): ĠOptional < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġhttp Connection . output Stream . write ( doi Data . toByteArray ( charset (" utf - 8 "))) ĊĠĠĠĠĠĠĠ Ġval Ġresponse Body Ġ= ĠBufferedReader ( InputStream Reader ( http Connection . inputStream , Ġ" utf - 8 ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. read Lines () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ("\ n ", Ġtransform Ġ= ĠString :: trim ) ĊĠĠĠĠĠĠĠ Ġreturn ĠOptional . of ( response Body ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Related P apers ( related Resources : ĠSet < ResourceId >): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdoi List : ĠMutable Set < String > Ġ= Ġmutable Set Of () ĊĠĠĠĠĠĠĠ Ġrelated Resources . map Ġ{ Ġresource Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdoi Ġ= Ġliteral Service . find DO I By Contribution Id ( resourceId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( doi . isPresent Ġ&& Ġ! doi List . contains ( doi . get (). label )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdoi List . add ( doi . get (). label ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdoi List . join ToString ("\ n ", Ġtransform Ġ= Ġ{ Ġ""" < related Identifier Ġrelation Type =" References " Ġrelated Identifier Type =" DO I ">$ it </ related Identifier > """ Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ