package Ġorg . x ber y . art be ams . ever note . service Ċ Ċ import Ġcom . ever note . ed am . error . ED AM NotFoundException Ċ import Ġcom . ever note . ed am . not est ore . Note Filter Ċ import Ġcom . ever note . ed am . not est ore . Note Store . Client Ċ import Ġcom . ever note . ed am . type . Note Ċ import Ġcom . ever note . ed am . type . Note SortOrder Ċ import Ġcom . ever note . ed am . type . Notebook Ċ import Ġcom . ever note . ed am . user store . Constants Ċ import Ġcom . ever note . ed am . user store . User Store Ċ import Ġcom . ever note . thrift . protocol . T Binary Protocol Ċ import Ġcom . ever note . thrift . transport . TH ttp Client Ċ import Ġorg . slf 4 j . Logger Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġorg . x ber y . art be ams . common . html . Html Utils Ċ import Ġorg . x ber y . art be ams . common . text . Normalization Helper Ċ import Ġorg . x ber y . art be ams . ever note . config . E ver note Config Ċ import Ġjava . time . Instant Ċ import Ġjava . util . regex . Pattern Ċ Ċ /** Ċ Ġ* Ġ@ author ĠR ade k ĠBer an Ċ Ġ*/ Ċ @ Component Ċ open Ġclass ĠE ver note Api ( private Ġval Ġever note Config : ĠE ver note Config ) Ġ{ ĊĠĠĠ Ġprivate Ġval ĠLogger : ĠLogger Ġ= ĠLoggerFactory . getLogger ( this :: class . java ) ĊĠĠĠ Ġprivate Ġval Ġnormalization Helper : ĠNormal ization Helper Ġ= ĠNormal ization Helper () ĊĠĠĠ Ġ// ĠTODO ĠR Be : ĠMove Ġconstants Ġto Ġconfiguration ĊĠĠĠ Ġprivate Ġval ĠNOT ES _ LIMIT : ĠInt Ġ= Ġ 5 0 ĊĠĠĠ Ġprivate ĊĠĠĠ Ġval ĠUSER _ STORE _ URL : ĠString Ġ= Ġ" https :// www . ever note . com / ed am / user " ĊĠĠĠ Ġprivate ĊĠĠĠ Ġval ĠUSER _ AGENT : ĠString Ġ= Ġ" E ver note / CMS Ġ( Java ) Ġ" Ġ+ ĠConstants . ED AM _ VERSION _ MAJOR Ġ+ Ġ"." Ġ+ ĠConstants . ED AM _ VERSION _ MINOR ĊĠĠĠ Ġprivate Ġval ĠCLIENT _ NAME : ĠString Ġ= Ġ" CMS Ġ( Java )" ĊĠĠĠ Ġprivate ĊĠĠĠ Ġval ĠBR _ INS IDE _ DI VS : ĠPattern Ġ= ĠPattern . compile ("< div [^ > ]* >< br [^ > ]* ></ div >") ĊĠĠĠ Ġprivate Ġval ĠDIV _ END _ START : ĠPattern Ġ= ĠPattern . compile ("</ div >< div [^ > ]* >") ĊĊĠĠĠ Ġ// ĠSee Ġhttps :// dev . ever note . com / doc / reference / Note Store . html # Fn _ Note Store _ update Note ĊĠĠĠ Ġfun Ġupdate Note ( note Guid : ĠString , Ġcontent : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . info (" Updating Ġnote Ġ${ note Guid } Ġin ĠE ver note ") ĊĠĠĠĠĠĠĠ Ġval Ġnote Store Client : ĠClient Ġ= Ġget E ver note Store Client () ĊĠĠĠĠĠĠĠ Ġval Ġnote Ġ= Ġfind Note By Guid ( note Guid , Ġnote Store Client ) ĊĠĠĠĠĠĠĠ Ġ// Ġ\ R Ġ Ġmatches Ġany Ġline Ġseparator ĊĠĠĠĠĠĠĠ Ġval Ġever note Content : ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"<? xml Ġversion =\" 1 . 0 \" Ġencoding =\" UTF - 8 \" ? >< ! DOCTYPE Ġen - note ĠSYSTEM Ġ\" http :// xml . ever note . com / pub / en ml 2 . dtd \">< en - note >" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( if Ġ( content . isEmpty ()) Ġ"" Ġelse Ġcontent . replace ( Return Regex , Ġ"< br Ġ/> ")) Ġ+ Ġ"</ en - note >" ĊĠĠĠĠĠĠĠ Ġnote . content Ġ= Ġever note Content ĊĠĠĠĠĠĠĠ Ġnote . updated Ġ= ĠInstant . now (). to Epoch Milli () ĊĠĠĠĠĠĠĠ Ġnote Store Client . update Note ( ever note Config . developer Token , Ġnote ) ĊĠĠĠĠĠĠĠ ĠLogger . info (" Updating Ġnote Ġ${ note Guid } Ġin ĠE ver note Ġ- Ġfinished ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Note By Guid ( note Guid : ĠString , Ġnote Store Client : ĠClient ): ĠNote Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnote Store Client . get Note ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġever note Config . developer Token , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnote Guid , Ġtrue , Ġtrue , Ġfalse , Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Note Opt By Guid ( note Guid : ĠString , Ġnote Store Client : ĠClient ): ĠNote ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnote Store Client . get Note ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġever note Config . developer Token , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Guid , Ġtrue , Ġtrue , Ġfalse , Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ(_ : ĠED AM NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . warn (" Note Ġnot Ġfound Ġin ĠE ver note Ġby Ġguid Ġ$ note Guid ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLoads Ġnotes Ġfrom ĠE ver note Ġnotebook Ġwith Ġgiven Ġname . ĠPossible ĠHTML Ġtags Ġare Ġstripped Ġfrom Ġthe Ġcontent . ĊĠĠĠĠ Ġ* Ġ@ param Ġnotebook Name ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġload Notes ( notebook Name : ĠString ): ĠList < org . x ber y . art be ams . ever note . domain . Note > Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . info (" Loading Ġnotes Ġfrom ĠE ver note Ġnotebook Ġ${ notebook Name }") ĊĠĠĠĠĠĠĠ Ġval Ġnote Store Client : ĠClient Ġ= Ġget E ver note Store Client () ĊĠĠĠĠĠĠĠ Ġval Ġnotebook Ġ= Ġfind Notebook ( note Store Client , Ġnotebook Name ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( notebook Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotes Ġ= Ġlist Notes ( note Store Client , Ġnotebook . guid ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . info ("${ notes . size } Ġnotes Ġfound ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe ĠNote Ġwith Ġits Ġcontent Ġand Ġresources Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotes . map NotNull Ġ{ Ġnote Ġ-> Ġfind Note With Clean ed Content By Guid ( note . guid , Ġnote Store Client ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . info (" Notebook Ġnot Ġfound ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLoads Ġnote Ġwith Ġgiven ĠGUID Ġfrom ĠE ver note . ĠPossible ĠHTML Ġtags Ġare Ġstripped Ġfrom Ġthe Ġcontent . ĊĠĠĠĠ Ġ* Ġ@ param Ġnote Guid ĊĠĠĠĠ Ġ* Ġ@ param Ġnote Store Client ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfind Note With Clean ed Content By Guid ( note Guid : ĠString , Ġnote Store Client : ĠClient ): Ġorg . x ber y . art be ams . ever note . domain . Note ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnote Detail Opt : ĠNote ? Ġ= Ġfind Note Opt By Guid ( note Guid , Ġnote Store Client ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnote Detail Opt ?. let Ġ{ Ġnote Detail Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody : ĠString Ġ= Ġif Ġ( note Detail . content Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhtml Without Br Inside Div s : ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBR _ INS IDE _ DI VS . matcher ( note Detail . content ). replaceAll ("\ r \ n \ r \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhtml Without Div End Start : ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDIV _ END _ START . matcher ( html Without Br Inside Div s ). replaceAll ("\ r \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Without Html : ĠString Ġ= ĠHtml Utils . strip Html Tags ( html Without Div End Start ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Without Html ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorg . x ber y . art be ams . ever note . domain . Note ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Detail . guid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Detail . title , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Detail . created ?. let Ġ{ ĠInstant . of Epoch Milli ( it ) Ġ} Ġ?: ĠInstant . now (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Detail . updated ?. let Ġ{ ĠInstant . of Epoch Milli ( it ) Ġ} Ġ?: ĠInstant . now () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Notebook ( note Store Client : ĠClient , Ġnotebook Name : ĠString ): ĠNotebook ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnotebook Name Normalized : ĠString Ġ= Ġnormalization Helper . normalize ( notebook Name ) ĊĠĠĠĠĠĠĠ Ġval Ġnotebooks Ġ= Ġnote Store Client . list Not ebooks ( ever note Config . developer Token ) ĊĠĠĠĠĠĠĠ ĠLogger . info ("${ notebooks . size } Ġnotebooks Ġfound ") ĊĠĠĠĠĠĠĠ Ġreturn Ġnotebooks . find Ġ{ Ġnb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnb Name Norm : ĠString Ġ= Ġnormalization Helper . normalize ( nb . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnb Name Norm Ġ!= Ġnull Ġ&& Ġnb Name Norm Ġ== Ġnotebook Name Normalized ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠList Ġnotes Ġfrom Ġgiven Ġnotebook . ĠSee Ġhttps :// github . com / ever note / ever note - sdk - java / blob / master / sample / client / ED AM Demo . java ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġlist Notes ( ever note Store Client : ĠClient , Ġnotebook Guid : ĠString ): ĠList < Note > Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . info (" Listing Ġnotes ") ĊĠĠĠĠĠĠĠ Ġ// ĠSearch Ġfor Ġthe Ġnotes Ġin Ġnotebook , Ġordered Ġby Ġcreation Ġdate ĊĠĠĠĠĠĠĠ Ġval Ġfilter : ĠNote Filter Ġ= ĠNote Filter () ĊĠĠĠĠĠĠĠ Ġfilter . notebook Guid Ġ= Ġnotebook Guid ĊĠĠĠĠĠĠĠ Ġfilter . order Ġ= ĠNote SortOrder . CREATED . value ĊĠĠĠĠĠĠĠ Ġfilter . set Ascending ( true ) ĊĠĠĠĠĠĠĠ Ġvar Ġnotes Ġ= Ġmutable ListOf < Note >() ĊĠĠĠĠĠĠĠ Ġvar Ġoffset : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġtotal Notes : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnote List Ġ= Ġever note Store Client . find Notes ( ever note Config . developer Token , Ġfilter , Ġoffset , ĠNOT ES _ LIMIT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Notes Ġ= Ġnote List . getTotal Notes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ= Ġoffset Ġ+ ĠNOT ES _ LIMIT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotes . addAll ( note List . notes ) ĊĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( offset Ġ< Ġtotal Notes ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnotes ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInitialize Ġthe Ġnote St ro re . ĠSee ĊĠĠĠĠ Ġ* Ġhttps :// github . com / ever note / ever note - sdk - java / blob / master / sample / client / ED AM Demo . java ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget E ver note Store Client (): ĠClient Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġup Ġthe ĠUser Store Ġclient Ġand Ġcheck Ġthat Ġwe Ġcan Ġspeak Ġto Ġthe Ġserver ĊĠĠĠĠĠĠĠ Ġval Ġuser Store Trans : ĠT HttpClient Ġ= ĠT HttpClient ( USER _ STORE _ URL ) ĊĠĠĠĠĠĠĠ Ġuser Store Trans . set Custom Header (" User - Agent ", ĠUSER _ AGENT ) ĊĠĠĠĠĠĠĠ Ġval Ġuser Store Protocol Ġ= ĠT Binary Protocol ( user Store Trans ) ĊĠĠĠĠĠĠĠ Ġval Ġuser Store Ġ= ĠUser Store . Client ( user Store Protocol , Ġuser Store Protocol ) ĊĠĠĠĠĠĠĠ Ġval Ġversion Ok Ġ= Ġuser Store . check Version ( CLIENT _ NAME , ĠConstants . ED AM _ VERSION _ MAJOR , ĠConstants . ED AM _ VERSION _ MINOR ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! version Ok ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" In compatible ĠE ver note Ġclient Ġprotocol Ġversion . Ġ${ ĠConstants . ED AM _ VERSION _ MAJOR Ġ}. ${ ĠConstants . ED AM _ VERSION _ MINOR Ġ} Ġexpected .") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe ĠURL Ġused Ġto Ġinteract Ġwith Ġthe Ġcontents Ġof Ġthe Ġuser 's Ġaccount ĊĠĠĠĠĠĠĠ Ġ// ĠWhen Ġyour Ġapplication Ġauthentic ates Ġusing ĠOAuth , Ġthe ĠNote Store ĠURL ĊĠĠĠĠĠĠĠ Ġ// Ġwill Ġbe Ġreturned Ġalong Ġwith Ġthe Ġauth Ġtoken Ġin Ġthe Ġfinal ĠOAuth Ġrequest . ĊĠĠĠĠĠĠĠ Ġ// ĠIn Ġthat Ġcase , Ġyou Ġdon 't Ġneed Ġto Ġmake Ġthis Ġcall . ĊĠĠĠĠĠĠĠ Ġval Ġdeveloper Token Ġ= Ġever note Config . developer Token ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( developer Token Ġ== Ġnull Ġ|| Ġdeveloper Token . trim (). isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġ ĠIllegalStateException (" Invalid ĠE ver note Ġdeveloper Ġtoken : Ġ$ developer Token ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnot est ore Url Ġ= Ġuser Store . get Note Store Url ( developer Token ) ĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġup Ġthe ĠNote Store Ġclient ĊĠĠĠĠĠĠĠ Ġval Ġnote Store Trans Ġ= ĠT HttpClient ( not est ore Url ) ĊĠĠĠĠĠĠĠ Ġnote Store Trans . set Custom Header (" User - Agent ", ĠUSER _ AGENT ) ĊĠĠĠĠĠĠĠ Ġval Ġnote Store Protocol Ġ= ĠT Binary Protocol ( note Store Trans ) ĊĠĠĠĠĠĠĠ Ġreturn ĠClient ( note Store Protocol , Ġnote Store Protocol ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠReturn Regex Ġ= Ġ"\\ R ". to Regex () ĊĠĠĠ Ġ} Ċ } Ċ