package Ġcom . ss . android . ug c . by tex . common . graph . cache ; Ċ Ċ import Ġcom . ss . android . ug c . by tex . common . configuration . Boolean Property Ċ import Ġcom . ss . android . ug c . by tex . common . graph . Graph Ċ import Ġcom . ss . android . ug c . by tex . common . graph . Graph Builder Ċ import Ġcom . ss . android . ug c . by tex . common . graph . Node Ċ import Ġjava . io . File Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ Ċ class ĠCached Graph Builder ( private Ġval Ġgraph Cache File : ĠFile ?, Ġshould Load Cache : ĠBoolean , Ġprivate Ġval Ġshould Save Cache : ĠBoolean ) Ġ: ĠGraph Builder () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġuse Ram Cache Ġ= Ġtrue ĊĊĠĠĠ Ġconstructor ( graph Cache File : ĠFile ?, Ġshould Load Cache : ĠBoolean , Ġshould Save Cache : ĠBoolean , Ġuse Ram Cache : ĠBoolean Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: Ġthis ( graph Cache File , Ġshould Load Cache , Ġshould Save Cache ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . use Ram Cache Ġ= Ġuse Ram Cache ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġgraph Cache Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAs ynchronous Graph Cache Storage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Graph Cache Storage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( use Ram Cache Ġ&& ĠBoolean Property . ENABLE _ RAM _ CACHE . value () Ġ&& ĠBoolean Property . ENABLE _ RAM _ NODES _ CACHE . value ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRam Node Cache Storage () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGson File Class Cache Storage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( use Ram Cache Ġ&& ĠBoolean Property . ENABLE _ RAM _ CACHE . value () Ġ&& ĠBoolean Property . ENABLE _ RAM _ CLASSES _ CACHE . value ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRam Classes Cache Storage () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġval Ġis Cache Valid Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould Load Cache Ġ&& Ġgraph Cache . load Cache ( graph Cache File , Ġthis ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRam Classes Cache Storage (). clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRam Node Cache Storage (). clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraph Cache File ?. delete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Failed Ġto Ġload Ġcache ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( graph Cache File Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraph Cache File . delete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRam Classes Cache Storage (). clear Cache ( graph Cache File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRam Node Cache Storage (). clear Cache ( graph Cache File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġis Cache Valid (): ĠBoolean Ġ= Ġis Cache Valid ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġfrom Ġcache Ġduring Ġincremental Ġbuild ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġadd Nodes ( nodes : ĠMap < String , ĠNode >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( node Map . isEmpty () Ġ&& Ġnodes Ġis ĠConcurrent HashMap ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĩı å°ĳ å¤įåĪ¶ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode Map Ġ= Ġnodes ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode Map . put All ( nodes ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġoverride Ġfun Ġbuild (): ĠGraph Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgraph Ġ= Ġsuper . build () ĊĠĠĠĠĠĠĠ Ġif Ġ( should Save Cache ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Boolean Property . ENABLE _ ASYNC _ SAVE _ CACHE . value ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraph Cache . save Cache Async ( graph Cache File , Ġnode Map ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraph Cache . save Cache ( graph Cache File , Ġnode Map ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġgraph ĊĠĠĠ Ġ} Ċ } Ċ