package Ġcom ._ 2 horizon . cv a . retrie val . ec m wf . publications Ċ Ċ import Ġorg . js oup . J soup Ċ import Ġorg . js oup . nodes . Document Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . net . URL Ċ import Ġjavax . inject . Singleton Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠFrank ĠL ie ber Ġ( li ef ra ) Ġon Ġ 2 0 2 0 - 0 5 - 2 1 . Ċ Ġ*/ Ċ @ Singleton Ċ class ĠE cm wf Public ations Html Download And Extract Service Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠLoggerFactory . getLogger ( java Class ) ĊĊĠĠĠ Ġfun Ġdownload And Extract Publication Type And PDF ( nodeId : ĠInt ): ĠPublic ation Extra Metadata Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġxml Ġ= Ġdownload Publication Html ( nodeId ) ĊĊĠĠĠĠĠĠĠ Ġval Ġpublication Type Ġ= Ġextract E cm wf Publication Type ( xml ) ĊĠĠĠĠĠĠĠ Ġval Ġpublication PDF Ġ= Ġextract E cm wf Publication PDF ( xml ) ĊĠĠĠĠĠĠĠ Ġval Ġpublication Link Ġ= Ġextract E cm wf Publication Link ( xml ) ĊĊĠĠĠĠĠĠĠ Ġcheck ( publication PDF . size Ġ< Ġ 2 ) Ġ{ Ġ" publication PDF Ġsize Ġnot Ġ 1 Ġbut Ġ$ publication PDF " Ġ} ĊĠĠĠĠĠĠĠ Ġcheck ( publication PDF . size Ġ< Ġ 2 ) Ġ{ Ġ" publication PDF Ġsize Ġnot Ġ 1 Ġbut Ġ$ publication PDF " Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠPublic ation Extra Metadata ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublication Type Ġ= Ġpublication Type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublication PDF Ġ= Ġpublication PDF . first OrNull (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublication Link Ġ= Ġpublication Link . first OrNull () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdownload Publication Html ( nodeId : ĠInt ): ĠDocument Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpublication Url Ġ= Ġ" https :// www . ec m wf . int / node /$ nodeId " ĊĠĠĠĠĠĠĠ Ġlog . debug (" Go ing Ġto Ġrequest Ġpublication Url Ġ$ publication Url ") ĊĠĠĠĠĠĠĠ Ġval Ġxml Ġ= ĠJ soup . parse ( URL ( publication Url ), Ġ 6 0 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġxml ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġextract E cm wf Publication Type ( html Doc : ĠDocument ): ĠString Ġ= Ġhtml Doc . select First ("# bib lio - node ") ĊĠĠĠĠĠĠĠ Ġ. select (" tr ") ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġtr Ġ-> Ġtr . select (" td "). first (). text () Ġ== Ġ" Publication ĠType " Ġ} ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġtr Ġ-> Ġtr . select (" td "). last (). text () Ġ} ĊĠĠĠĠĠĠĠ Ġ. first () ĊĊĠĠĠ Ġprivate Ġfun Ġextract E cm wf Publication PDF ( html Doc : ĠDocument ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( html Doc . select (". field - name - field - publication - file "). size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhtml Doc . select (". field - name - field - publication - file ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" a ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġa Ġ-> Ġa . attr (" abs : href ") Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġextract E cm wf Publication Link ( html Doc : ĠDocument ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( html Doc . select (". region - sidebar - second "). size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhtml Doc . select (". region - sidebar - second ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" a [ href ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġa Ġ-> Ġa . attr (" abs : href ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Not Ġ{ Ġa Ġ-> Ġa . startsWith (" https :// www . ec m wf . int / file /") Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠPublic ation Extra Metadata ( ĊĠĠĠ Ġval Ġpublication Type : ĠString , ĊĠĠĠ Ġval Ġpublication PDF : ĠString ?, ĊĠĠĠ Ġval Ġpublication Link : ĠString ? Ċ ) ĊĊĊ