package Ġcom . mime tis . dot m im . sync Ċ Ċ import Ġandroid . util . Log Ċ import Ġcom . mime tis . dot m im . sync . args . Progress Args Ċ import Ġcom . mime tis . dot m im . sync . enum er ations . Conflict Resolution Policy Ċ import Ġcom . mime tis . dot m im . sync . enum er ations . Sync Provision Ċ import Ġcom . mime tis . dot m im . sync . enum er ations . Sync Type Ċ import Ġcom . mime tis . dot m im . sync . orche str ators . Local Orche strator Ċ import Ġcom . mime tis . dot m im . sync . orche str ators . Remote Orche strator Ċ import Ġcom . mime tis . dot m im . sync . parameter . Sync Parameters Ċ import Ġcom . mime tis . dot m im . sync . scopes . Server Scope Info Ċ import Ġcom . mime tis . dot m im . sync . set . Sync Set Ċ import Ġcom . mime tis . dot m im . sync . setup . Sync Setup Ċ import Ġjava . util .* Ċ Ċ class ĠSync Agent ( ĊĠĠĠĠĠĠĠ Ġclient Provider : ĠCore Provider , ĊĠĠĠĠĠĠĠ Ġval Ġremote Orche strator : ĠRemote Orche strator , ĊĠĠĠĠĠĠĠ Ġval Ġoptions : ĠSync Options , ĊĠĠĠĠĠĠĠ Ġval Ġsetup : ĠSync Setup , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġscope Name : ĠString Ġ= ĠSync Options . Default Scope Name Ċ ) Ġ{ ĊĠĠĠ Ġval Ġlocal Orche strator : ĠLocal Orche strator Ġ= ĠLocal Orche strator ( client Provider , Ġoptions , Ġsetup , Ġscope Name ) ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġschema : ĠSync Set ĊĠĠĠ Ġval Ġparameters : ĠSync Parameters Ġ= ĠSync Parameters () ĊĊĠĠĠ Ġsuspend Ġfun Ġsynchronize ( sync Type : ĠSync Type Ġ= ĠSync Type . Normal , Ġprogress : ĠProgress < Progress Args >? Ġ= Ġnull ): ĠSync Result Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠstartTime Ġ= Ġut c Now () ĊĠĠĠĠĠĠĠ Ġvar Ġcomplete Time Ġ= Ġut c Now () ĊĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠSync Context ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsessionId Ġ= ĠUUID . randomUUID (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscope Name Ġ= Ġthis . scope Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters Ġ= Ġthis . parameters , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsync Type Ġ= Ġsync Type ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠResult , Ġwith Ġsync Ġresults Ġstats . ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠSync Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . sessionId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartTime , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomplete Time , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġserver Scope Info : ĠServer Scope Info ? ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . local Orche strator . sync Context Ġ= Ġcontext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . remote Orche strator . sync Context Ġ= Ġcontext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . local Orche strator . startTime Ġ= ĠstartTime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . remote Orche strator . startTime Ġ= ĠstartTime ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Orche strator . begin Session ( progress ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġclient Scope Info Ġ= Ġlocal Orche strator . getClient Scope ( progress ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . client Scope Id Ġ= Ġclient Scope Info . id ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġclient Ġis Ġnew Ġor Ġelse Ġschema Ġdoes Ġnot Ġexists ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġneed Ġto Ġget Ġit Ġfrom Ġserver ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( client Scope Info . isNew Scope Ġ|| Ġclient Scope Info . schema Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEnsure Ġschema Ġis Ġdefined Ġon Ġremote Ġside ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġaction Ġwill Ġcreate Ġschema Ġon Ġserver Ġif Ġneeded ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġschema Ġalready Ġexists Ġon Ġserver , Ġthen Ġthe Ġserver Ġsetup Ġwill Ġbe Ġcompared Ġwith Ġthis Ġone ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġsetup Ġis Ġdifferent , Ġit Ġwill Ġbe Ġmigrated . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġso Ġserver Scope Info . Setup ĠMUST Ġbe Ġequal Ġto Ġthis . Setup ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserver Scope Info Ġ= Ġthis . remote Orche strator . ensure Schema ( progress ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠA ffect Ġlocal Ġsetup Ġsince Ġthe Ġsetup Ġcould Ġpotentially Ġcomes Ġfrom ĠWeb Ġserver ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠA ffect Ġlocal Ġsetup Ġ( e quivalent Ġto Ġthis . Setup ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! this . setup . equals By Properties ( server Scope Info . setup ) Ġ&& Ġ! this . setup . has Tables ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . local Orche strator . setup Ġ= Ġserver Scope Info . setup ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPro vision Ġlocal Ġdatabase ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprovision Ġ= ĠEnum Set . of ( Sync Provision . Table , ĠSync Provision . Tracking Table , ĠSync Provision . Stored Pro cedures , ĠSync Provision . Triggers ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . local Orche strator . provision ( server Scope Info . schema !! , Ġprovision , Ġfalse , Ġclient Scope Info , Ġprogress ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġschema Ġfor Ġagent , Ġjust Ġto Ġlet Ġthe Ġopportunity Ġto Ġuser Ġto Ġuse Ġit . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . schema Ġ= Ġserver Scope Info . schema !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDo Ġwe Ġneed Ġto Ġupgrade Ġ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( local Orche strator . internal Need sTo Upgrade ( context , Ġclient Scope Info )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Scope Ġ= Ġthis . local Orche strator . upgrade ( client Scope Info , Ġprogress ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Scope Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Scope Info Ġ= Ġnew Scope ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġon Ġremote Ġorche strator Ġget Ġscope Ġinfo Ġas Ġwell ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġsetup Ġis Ġdifferent , Ġit Ġwill Ġbe Ġmigrated . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġso Ġserver Scope Info . Setup ĠMUST Ġbe Ġequal Ġto Ġthis . Setup ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserver Scope Info Ġ= Ġthis . remote Orche strator . getServer Scope ( progress ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcompare Ġlocal Ġsetup Ġoptions Ġwith Ġsetup Ġprovided Ġon ĠSync Agent Ġconstructor Ġ( check Ġif Ġpref Ġ/ Ġs uf Ġhave Ġchanged ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Same Options Ġ= Ġclient Scope Info . setup !!. has Same Options ( this . setup ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcompare Ġlocal Ġsetup Ġstr uc ut re Ġwith Ġremote Ġstructure ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Same Structure Ġ= Ġclient Scope Info . setup !!. has Same Structure ( server Scope Info . setup ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Same Structure ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet t Ġschema Ġ& Ġsetup ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . schema Ġ= Ġclient Scope Info . schema !! ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// schema Ġcould Ġbe Ġnull Ġif Ġfrom Ġweb Ġserver ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( server Scope Info . schema Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserver Scope Info . schema Ġ= Ġclient Scope Info . schema ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġfull Ġschema Ġfrom Ġserver ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserver Scope Info Ġ= Ġthis . remote Orche strator . ensure Schema ( progress ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġcorrect Ġschema ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . schema Ġ= Ġserver Scope Info . schema !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠA ffect Ġlocal Ġsetup Ġ( e quivalent Ġto Ġthis . Setup ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . local Orche strator . setup . filters Ġ= Ġserver Scope Info . setup . filters ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . local Orche strator . setup . tables Ġ= Ġserver Scope Info . setup . tables ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// this . Local Orche strator . Setup . Version Ġ= Ġserver Scope Info . Setup . Version ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġone Ġof Ġthe Ġcomparison Ġis Ġfalse , Ġwe Ġmake Ġa Ġmigration ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! has Same Options Ġ|| Ġ! has Same Structure ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . local Orche strator . migration ( client Scope Info . setup !! , Ġserver Scope Info . schema !! , Ġprogress ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Scope Info . setup Ġ= Ġthis . setup ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Scope Info . schema Ġ= Ġserver Scope Info . schema ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġget Ġscope Ġagain ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Scope Info . schema Ġ= Ġserver Scope Info . schema ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Scope Info . setup Ġ= Ġserver Scope Info . setup ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBefore Ġcall Ġthe Ġchanges Ġfrom Ġlocal orche strator , Ġcheck Ġif Ġwe Ġare Ġoutdated ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context . sync Type Ġ!= ĠSync Type . Re initialize Ġ&& Ġcontext . sync Type Ġ!= ĠSync Type . Re initialize With Upload ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Out D ated Ġ= Ġthis . local Orche strator . is Out D ated ( client Scope Info , Ġserver Scope Info ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġclient Ġdoes Ġnot Ġchange ĠSync Type Ġto ĠRe initialize Ġ/ ĠRe initialize With Upload Ġon ĠSync Interceptor , Ġwe Ġraise Ġan Ġerror ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġotherwise , Ġwe Ġare Ġoutdated , Ġbut Ġwe Ġcan Ġcontinue , Ġbecause Ġwe Ġhave Ġa Ġnew Ġmode . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Out D ated ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" Client Ġid Ġoutdated , Ġbut Ġwe Ġchange Ġmode Ġto Ġ${ context . sync Type }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . progress Percentage Ġ= Ġ 0 . 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOn Ġlocal Ġorche strator , Ġget Ġlocal Ġchanges ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Changes Ġ= Ġthis . local Orche strator . get Changes ( client Scope Info , Ġprogress ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRe initialize Ġtimestamp Ġis Ġin ĠRe init ĠMode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context . sync Type Ġ== ĠSync Type . Re initialize Ġ|| Ġcontext . sync Type Ġ== ĠSync Type . Re initialize With Upload ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Scope Info . last Server Sync Timestamp Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġif Ġwe Ġneed Ġto Ġget Ġall Ġrows Ġfrom Ġthe Ġdatasource ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfrom Scratch Ġ= Ġclient Scope Info . isNew Scope Ġ|| Ġcontext . sync Type Ġ== ĠSync Type . Re initialize Ġ|| Ġcontext . sync Type Ġ== ĠSync Type . Re initialize With Upload ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIF Ġis Ġnew Ġand Ġwe Ġhave Ġa Ġsnapshot Ġdirectory , Ġtry Ġto Ġapply Ġa Ġsnapshot ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( from Scratch ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġsnapshot Ġfiles ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġserver Snapshot Changes Ġ= Ġthis . remote Orche strator . get Snapshot ( this . schema , Ġprogress ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠApply Ġsnapshot ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( server Snapshot Changes . second Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( snapshot Changes Applied On Client , Ġclient SI ) Ġ= Ġthis . local Orche strator . apply Snapshot ( client Scope Info , Ġserver Snapshot Changes . second , Ġclient Changes . first , Ġserver Snapshot Changes . first , Ġserver Snapshot Changes . third , Ġprogress ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . snapshot Changes Applied On Client Ġ= Ġsnapshot Changes Applied On Client ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Scope Info Ġ= Ġclient SI ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . progress Percentage Ġ= Ġ 0 . 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġapply Ġis Ġ 2 5 %, Ġget Ġchanges Ġis Ġ 2 0 % ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġserver Changes Ġ= Ġthis . remote Orche strator . apply Then Get Changes ( client Scope Info , Ġclient Changes . second , Ġprogress ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPolicy Ġis Ġalways ĠServer Ġpolicy , Ġso Ġreverse Ġthis Ġpolicy Ġto Ġget Ġthe Ġclient Ġpolicy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreverse Conflict Resolution Policy Ġ= Ġif Ġ( server Changes . value 3 Ġ== ĠConflict Resolution Policy . Server W ins ) ĠConflict Resolution Policy . Client W ins Ġelse ĠConflict Resolution Policy . Server W ins ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġif Ġwe Ġhave Ġalready Ġapplied Ġa Ġsnapshot , Ġso Ġfar Ġwe Ġdon 't Ġneed Ġto Ġreset Ġtable Ġeven Ġif Ġwe Ġare Ġi ĠRe initialize ĠMode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsnapshot Applied Ġ= Ġresult . snapshot Changes Applied On Client Ġ!= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġapply Ġis Ġ 2 5 % ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . progress Percentage Ġ= Ġ 0 . 7 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Changes Applied Ġ= Ġthis . local Orche strator . apply Changes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Scope Info , Ġthis . schema , Ġserver Changes . value 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Changes . first , Ġserver Changes . value 1 , Ġreverse Conflict Resolution Policy , Ġsnapshot Applied , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserver Changes . value 5 !! , Ġprogress ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomplete Time Ġ= Ġut c Now () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . local Orche strator . complete Time Ġ= Ġcomplete Time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . remote Orche strator . complete Time Ġ= Ġcomplete Time ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . complete Time Ġ= Ġcomplete Time ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAll Ġclients Ġchanges Ġselected ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . client Changes Selected Ġ= Ġclient Changes . third ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . server Changes Selected Ġ= Ġserver Changes . value 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . changes Applied On Client Ġ= Ġclient Changes Applied . first ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . changes Applied On Server Ġ= Ġserver Changes . value 4 !! ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBegin Ġsession ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . progress Percentage Ġ= Ġ 1 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . local Orche strator . end Session ( progress ) ĊĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġex ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġthis . session State Ġ= ĠSync Session State . Ready Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġthis . Session StateChanged ?. Invoke ( this , Ġthis . Session State ); ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġremote Orche strator . options Ġ= Ġoptions ĊĠĠĠĠĠĠĠ Ġremote Orche strator . setup Ġ= Ġsetup ĊĠĠĠĠĠĠĠ Ġremote Orche strator . scope Name Ġ= Ġscope Name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠSync Agent :: class . java . simple Name ĊĠĠĠ Ġ} Ċ } Ċ