package Ġcom . github . c et one k . big biz nis . integration . c nb Ċ Ċ import Ġcom . github . c et one k . big biz nis . integration . c nb . converter . Csv Http Message Converter Ċ import Ġcom . github . c et one k . big biz nis . application . utility . getLogger Ċ import Ġcom . github . c et one k . big biz nis . application . utility . date . format For C nb A rad Ċ import Ġcom . github . c et one k . big biz nis . application . utility . date . format For C nb Exchange Api Ċ import Ġorg . springframework . boot . web . client . Rest Template Builder Ċ import Ġorg . springframework . http . Response Entity Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġorg . springframework . web . client . Rest Template Ċ import Ġorg . springframework . web . util . Uri Components Builder Ċ import Ġjava . time . LocalDate Ċ Ċ @ Component Ċ class ĠC zech National Bank Client ( rest Template Builder : ĠRest Template Builder ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠLOGGER Ġ= Ġget Logger ( this :: class . java ) ĊĊĠĠĠ Ġval ĠDA IL Y _ EX CHANGE _ RAT ES _ URL Ġ= Ġ" https :// www . c nb . cz / cs / fin anc ni _ tr hy / dev iz ovy _ tr h / kur zy _ dev iz ove ho _ tr hu / den ni _ kur z . xml " ĊĊĠĠĠ Ġfinal Ġval ĠAR AD _ BASE _ URL Ġ= Ġ" https :// www . c nb . cz / c nb / STAT . AR AD Y _ PKG . VY ST UP " ĊĊĠĠĠ Ġval ĠNO MIN AL _ A VER AGE _ QU AR TER LY _ SAL ARIES _ URL Ġ= Ġ"$ AR AD _ BASE _ URL ? p _ period = 3 & p _ sort = 2 & p _ des = 5 0 & p _ se st uid = 2 1 7 3 7 & p _ uka = 1 & p _ str id = AC FA " ĊĠĠĠ Ġval ĠMON TH LY _ UN EMP LOY MENT _ URL Ġ= Ġ"$ AR AD _ BASE _ URL ? p _ period = 1 & p _ sort = 2 & p _ des = 5 0 & p _ se st uid = 2 1 7 5 1 & p _ uka = 1 & p _ str id = ACH AB " ĊĠĠĠ Ġval ĠQU AR TER LY _ REAL _ G DP _ 2 0 1 0 _ PR ICES Ġ= Ġ"$ AR AD _ BASE _ URL ? p _ period = 3 & p _ sort = 2 & p _ des = 3 & p _ se st uid = 2 9 9 3 0 & p _ uka = 1 & p _ str id = ACL " ĊĊĠĠĠ Ġval ĠDATE _ QUERY Ġ= Ġ" date " ĊĠĠĠ Ġval ĠFROM _ QUERY Ġ= Ġ" p _ od " ĊĠĠĠ Ġval ĠTO _ QUERY Ġ= Ġ" p _ do " ĊĠĠĠ Ġval ĠLANG _ QUERY Ġ= Ġ" p _ lang " ĊĠĠĠ Ġval ĠFORMAT _ QUERY Ġ= Ġ" p _ format " ĊĠĠĠ Ġval ĠDEC IMAL _ SEPARATOR _ QUERY Ġ= Ġ" p _ dec sep " ĊĊĠĠĠ Ġprivate Ġval Ġrest Template : ĠRest Template Ġ= Ġrest Template Builder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. additional Message Converters ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠCsv Http Message Converter < Salary Dto , ĠS all ary Root Dto >() Ġ{}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠCsv Http Message Converter < Une mploy ment Rate Dto , ĠU ne mploy ment Rate Root Dto >() Ġ{}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠCsv Http Message Converter < G ross D ome stic Product Dto , ĠG ross D ome stic Product Root Dto >() Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġfun Ġfetch Exchange Rate For Day ( date : ĠLocalDate Ġ= ĠLocalDate . now ()): ĠResponseEntity < Exchange Rate Root Dto > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= ĠUri Components Builder . from Http Url ( DA IL Y _ EX CHANGE _ RAT ES _ URL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. query Param ( DATE _ QUERY , Ġdate . format For C nb Exchange Api ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Uri () ĊĊĠĠĠĠĠĠĠ Ġval Ġentity Ġ= Ġrest Template . get For Entity ( url , ĠExchange Rate Root Dto :: class . java ) ĊĊĠĠĠĠĠĠĠ ĠLOGGER . info (" fetch ing Ġexchange Ġrates Ġfor Ġdate : Ġ${ date }, Ġhttp : Ġ${ entity . statusCode Value }") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġentity ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfetch Nominal Average Sal aries ( from : ĠLocalDate , Ġto : ĠLocalDate ): ĠList < Salary Dto > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġbasic From To C nb A rad Uri Builder ( NO MIN AL _ A VER AGE _ QU AR TER LY _ SAL ARIES _ URL , Ġfrom , Ġto ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Uri () ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrest Template . get For Entity ( url , ĠS all ary Root Dto :: class . java ) ĊĊĠĠĠĠĠĠĠ ĠLOGGER . info (" fetch ing Ġnominal Ġaverage Ġsal aries Ġwithin Ġrange Ġ$ from Ġ- Ġ$ to , Ġhttp : Ġ${ result . statusCode Value }") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult . body ?. list ?. filter Ġ{ Ġit . isValid Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalStateException (" Salary Ġlist Ġis Ġnull Ġbut Ġit Ġshould nt Ġbe Ġnull !") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfetch Monthly Une mploy ment Rates ( from : ĠLocalDate , Ġto : ĠLocalDate ): ĠList < Une mploy ment Rate Dto > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġbasic From To C nb A rad Uri Builder ( MONTH LY _ UN EMP LOY MENT _ URL , Ġfrom , Ġto ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Uri () ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrest Template . get For Entity ( url , ĠU ne mploy ment Rate Root Dto :: class . java ) ĊĊĠĠĠĠĠĠĠ ĠLOGGER . info (" fetch ing Ġmonthly Ġun employment Ġrates Ġ$ from Ġ- Ġ$ to , Ġhttp : Ġ${ result . statusCode Value }") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult . body ?. list ?. filter Ġ{ Ġit . isValid Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalStateException (" Employ ment Ġrates Ġlist Ġis Ġnull Ġbut Ġit Ġshould nt Ġbe !") ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfetch Qu arter ly Real G dp 2 0 1 0 Prices ( from : ĠLocalDate , Ġto : ĠLocalDate Ġ= ĠLocalDate . now ()): ĠList < G ross D ome stic Product Dto > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠFIXME : Ġ 8 / 9 / 2 1 Ġreturns Ġhtml Ġerror Ġat m ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġbasic From To C nb A rad Uri Builder ( QU AR TER LY _ REAL _ G DP _ 2 0 1 0 _ PR ICES , Ġfrom , Ġto ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Uri () ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrest Template . get For Entity ( url , ĠG ross D ome stic Product Root Dto :: class . java ) ĊĊĠĠĠĠĠĠĠ ĠLOGGER . info (" fetch ing Ġquarter ly Ġreal Ġg dp Ġ$ from Ġ- Ġ$ to , Ġhttp : Ġ${ result . statusCode Value }") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult . body ?. list ?. filter Ġ{ Ġit . isValid Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalStateException (" Real Ġg dp Ġlist Ġis Ġnull Ġbut Ġit Ġshould nt Ġbe !") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbasic From To C nb A rad Uri Builder ( url : ĠString , Ġfrom : ĠLocalDate , Ġto : ĠLocalDate Ġ= ĠLocalDate . now ()): ĠUri Components Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠUri Components Builder . from Http Url ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Base A rad Queries () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. query Param ( FROM _ QUERY , Ġfrom . format For C nb A rad ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. query Param ( TO _ QUERY , Ġto . format For C nb A rad ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠUri Components Builder . add Base A rad Queries (): ĠUri Components Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . query Param ( LANG _ QUERY , Ġ" CS ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. query Param ( FORMAT _ QUERY , Ġ" 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. query Param ( DECIMAL _ SEPARATOR _ QUERY , Ġ". ") ĊĠĠĠ Ġ} Ċ Ċ }