/* Ċ Ġ* Ċ Ġ* Ġ Ġ* ĠCopyright Ġ 2 0 2 0 ĠN ECT EC Ċ Ġ* Ġ Ġ* ĠĠ ĠNational ĠElectron ics Ġand ĠComputer ĠTechnology ĠCenter , ĠTh ail and Ċ Ġ* Ġ Ġ* Ċ Ġ* Ġ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* Ġ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ġ Ġ* Ċ Ġ* Ġ Ġ* ĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ġ Ġ* Ċ Ġ* Ġ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* Ġ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* Ġ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġf fc . air sync . api . sync Ċ Ċ import Ġf fc . air sync . api . sync . Pro Sync . Update Func Ċ Ċ /** Ċ Ġ* ĠProcess Ġ à¸ģà¸²à¸£ Ġsync Ċ Ġ*/ Ċ class ĠV 1 Pro Sync < T > Ġ: ĠPro Sync < T > Ġ{ ĊĠĠĠ Ġprivate Ġval Ġutil Ġ= ĠSet Util < T >() ĊĊĠĠĠ Ġoverride Ġfun Ġupdate ( a : ĠList < T >, Ġb : ĠList < T >, Ġforce Update : ĠBoolean , Ġfunc : Ġ( item : ĠT ) Ġ-> ĠUpdate Func < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġupdate Pre Data Ġ= Ġutil . intersection ( a , Ġb ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠSet Util . Func < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġidentity : ĠString Ġ= Ġfunc ( it ). identity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġupdate Pre Data . forEach Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( force Update ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunc ( item . first ). update To ( item . second ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnormal Update ( func , Ġitem ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ== Ġ à¹Ħ à¸¡ à¹Ī à¸ķ à¹ī à¸Ńà¸ĩ à¹Ģ à¸Ń à¸² à¹Ģ à¸ŀ à¸£ à¸²à¸ ° à¹ģ à¸Ľ à¸¥ à¸§ à¹Ī à¸² à¹Ħ à¸¡ à¹Ī à¸¡ à¸µ à¸ģà¸²à¸£ à¸Ń à¸± à¸ŀ à¹Ģ à¸Ķ à¸Ĺ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnormal Update ( func : Ġ( item : ĠT ) Ġ-> ĠUpdate Func < T >, Ġitem : ĠPair < T , ĠT >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( func ( item . first ). unix Time Ġ> Ġfunc ( item . second ). unix Time ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunc ( item . first ). update To ( item . second ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( func ( item . second ). unix Time Ġ> Ġfunc ( item . first ). unix Time ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunc ( item . second ). update To ( item . first ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate New Data In B ( a : ĠList < T >, Ġb : ĠList < T >, Ġfunc : Ġ( item : ĠT ) Ġ-> ĠPro Sync . Create Func ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcreate Pre Data Ġ= Ġutil . difference ( a , Ġb ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠSet Util . Func < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġidentity : ĠString Ġ= Ġfunc ( it ). identity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. filter Ġ{ Ġ! func ( it ). b Is Delete Ġ} ĊĊĠĠĠĠĠĠĠ Ġcreate Pre Data . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunc ( it ). create In B () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete Data In B ( a : ĠList < T >, Ġb : ĠList < T >, Ġfunc : Ġ( item : ĠT ) Ġ-> ĠPro Sync . Delete Func ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdelete Pre Data Ġ= Ġutil . difference ( b , Ġa ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠSet Util . Func < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġidentity : ĠString Ġ= Ġfunc ( it ). identity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. filter Ġ{ Ġ! func ( it ). b Is Delete Ġ} ĊĊĠĠĠĠĠĠĠ Ġdelete Pre Data . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunc ( it ). delete In B () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ