package Ġorg . ny pl . simpl ified . reader . bookmarks . api Ċ Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġorg . joda . time . DateTime Ċ import Ġorg . joda . time . DateTime Zone Ċ import Ġorg . joda . time . format . DateTime Format Ċ import Ġorg . joda . time . format . ISO DateTime Format Ċ import Ġorg . ny pl . simpl ified . books . api . Bookmark Ċ import Ġorg . ny pl . simpl ified . books . api . Bookmark Kind Ċ import Ġjava . net . URI Ċ Ċ data Ġclass ĠBook mark Annotation Selector Node ( ĊĠ Ġval Ġtype : ĠString , ĊĠ Ġval Ġvalue : ĠString Ċ ) Ċ Ċ data Ġclass ĠBook mark Annotation Target Node ( ĊĠ Ġval Ġsource : ĠString , ĊĠ Ġval Ġselector : ĠBook mark Annotation Selector Node Ċ ) Ċ Ċ data Ġclass ĠBook mark Annotation Body Node ( ĊĠ Ġval Ġtimestamp : ĠString , ĊĠ Ġval Ġdevice : ĠString , ĊĠ Ġval Ġchapter Title : ĠString ?, ĊĠ Ġval Ġbook Progress : ĠFloat ? Ċ ) Ċ Ċ data Ġclass ĠBook mark Annotation ( ĊĠ Ġval Ġcontext : ĠString ?, ĊĠ Ġval Ġbody : ĠBook mark Annotation Body Node , ĊĠ Ġval Ġid : ĠString ?, ĊĠ Ġval Ġtype : ĠString , ĊĠ Ġval Ġmotivation : ĠString , ĊĠ Ġval Ġtarget : ĠBook mark Annotation Target Node Ċ ) Ġ{ ĊĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġthis . target . selector . value Ġ== Ġ( other Ġas ĠBook mark Annotation ). target . selector . value ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠ Ġreturn Ġthis . target . selector . value . hashCode () ĊĠ Ġ} ĊĊĠ Ġval Ġkind : ĠBook mark Kind Ġ= ĊĠĠĠ ĠBook mark Kind . of Mot ivation ( this . mot ivation ) Ċ } Ċ Ċ data Ġclass ĠBook mark Annotation First Node ( ĊĠ Ġval Ġitems : ĠList < Bookmark Annotation >, ĊĠ Ġval Ġtype : ĠString , ĊĠ Ġval Ġid : ĠString Ċ ) Ċ Ċ data Ġclass ĠBook mark Annotation Response ( ĊĠ Ġval Ġcontext : ĠList < String >, ĊĠ Ġval Ġtotal : ĠInt , ĊĠ Ġval Ġtype : ĠList < String >, ĊĠ Ġval Ġid : ĠString , ĊĠ Ġval Ġfirst : ĠBook mark Annotation First Node Ċ ) Ċ Ċ object ĠBook mark Annotations Ġ{ ĊĊĠ Ġprivate Ġval Ġdate Parser Ġ= ĊĠĠĠ ĠISO DateTime Format . dateTime Parser () ĊĠ Ġprivate Ġval Ġdate Formatter Ġ= ĊĠĠĠ ĠDateTime Format . for Pattern (" yyyy - MM - dd ' T ' HH : mm : ss ' Z '") ĊĊĠ Ġfun Ġto Bookmark ( ĊĠĠĠ ĠobjectMapper : ĠObjectMapper , ĊĠĠĠ Ġannotation : ĠBook mark Annotation ĊĠ Ġ): ĠBook mark Ġ{ ĊĠĠĠ Ġval Ġlocation JSON Ġ= ĊĠĠĠĠĠ ĠBook mark Annotations JSON . deserialize Location ( ĊĠĠĠĠĠĠĠ ĠobjectMapper Ġ= ĠobjectMapper , ĊĠĠĠĠĠĠĠ Ġvalue Ġ= Ġannotation . target . selector . value ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġtime Ġ= ĊĠĠĠĠĠ Ġif Ġ( annotation . body . timestamp Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . date Parser . parse DateTime ( annotation . body . timestamp ) ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠDateTime . now ( DateTime Zone . UTC ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn ĠBook mark . create ( ĊĠĠĠĠĠ Ġop ds Id Ġ= Ġannotation . target . source , ĊĠĠĠĠĠ Ġlocation Ġ= Ġlocation JSON , ĊĠĠĠĠĠ Ġkind Ġ= ĠBook mark Kind . of Mot ivation ( annotation . mot ivation ), ĊĠĠĠĠĠ Ġtime Ġ= Ġtime , ĊĠĠĠĠĠ Ġchapter Title Ġ= Ġannotation . body . chapter Title Ġ?: Ġ"", ĊĠĠĠĠĠ Ġbook Progress Ġ= Ġannotation . body . book Progress ?. toDouble (), ĊĠĠĠĠĠ Ġuri Ġ= Ġif Ġ( annotation . id Ġ!= Ġnull ) ĠURI . create ( annotation . id ) Ġelse Ġnull , ĊĠĠĠĠĠ Ġdevice ID Ġ= Ġannotation . body . device ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġfun Ġfrom Bookmark ( ĊĠĠĠ ĠobjectMapper : ĠObjectMapper , ĊĠĠĠ Ġbookmark : ĠBook mark ĊĠ Ġ): ĠBook mark Annotation Ġ{ ĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* ĠCheck Ġfor Ġsome Ġvalues Ġthat Ġwere Ġlikely Ġadded Ġby Ġ[ to Bookmark ]. ĠWrite Ġspecial Ġvalues Ġhere ĊĠĠĠĠ Ġ* Ġto Ġensure Ġthat Ġ[ from Bookmark ] Ġis Ġthe Ġexact Ġinverse Ġof Ġ[ to Bookmark ]. ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġval Ġchapter Title Ġ= ĊĠĠĠĠĠ Ġif Ġ( bookmark . chapter Title Ġ== Ġ"") Ġ{ ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġbookmark . chapter Title ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġbook Progress Ġ= ĊĠĠĠĠĠ Ġif Ġ( bookmark . book Progress Ġ== Ġ 0 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġbookmark . book Progress ?. toFloat () ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġtimestamp Ġ= ĊĠĠĠĠĠ Ġthis . date Formatter . print ( bookmark . time ) ĊĊĠĠĠ Ġval Ġbody Annotation Ġ= ĊĠĠĠĠĠ ĠBook mark Annotation Body Node ( ĊĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġtimestamp , ĊĠĠĠĠĠĠĠ Ġdevice Ġ= Ġbookmark . device ID , ĊĠĠĠĠĠĠĠ Ġchapter Title Ġ= Ġchapter Title , ĊĠĠĠĠĠĠĠ Ġbook Progress Ġ= Ġbook Progress ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġlocation JSON Ġ= ĊĠĠĠĠĠ ĠBook mark Annotations JSON . serialize Location ( ĊĠĠĠĠĠĠĠ ĠobjectMapper Ġ= ĠobjectMapper , ĊĠĠĠĠĠĠĠ Ġlocation Ġ= Ġbookmark . location ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġtarget Ġ= ĊĠĠĠĠĠ ĠBook mark Annotation Target Node ( ĊĠĠĠĠĠĠĠ Ġbookmark . op ds Id , ĊĠĠĠĠĠĠĠ ĠBook mark Annotation Selector Node (" oa : Fragment Selector ", Ġlocation JSON ) ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġreturn ĠBook mark Annotation ( ĊĠĠĠĠĠ Ġcontext Ġ= Ġ" http :// www . w 3 . org / ns / anno . json ld ", ĊĠĠĠĠĠ Ġbody Ġ= Ġbody Annotation , ĊĠĠĠĠĠ Ġid Ġ= Ġbookmark . uri ?. toString (), ĊĠĠĠĠĠ Ġtype Ġ= Ġ" Annotation ", ĊĠĠĠĠĠ Ġmotivation Ġ= Ġbookmark . kind . mot ivation URI , ĊĠĠĠĠĠ Ġtarget Ġ= Ġtarget ĊĠĠĠ Ġ) ĊĠ Ġ} Ċ } Ċ