package Ġcom . mime tis . dot m im . sync . batch Ċ Ċ import Ġkotlinx . serialization . Serial Name Ċ import Ġkotlinx . serialization . Serializable Ċ import Ġkotlinx . serialization . Transient Ċ import Ġcom . mime tis . dot m im . sync . Db Sync Adapter Ċ import Ġcom . mime tis . dot m im . sync . orche str ators . Base Orche strator Ċ import Ġcom . mime tis . dot m im . sync . set . Sync Set Ċ import Ġcom . mime tis . dot m im . sync . set . Sync Table Ċ import Ġjava . io . File Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . ArrayList Ċ Ċ /** Ċ Ġ* ĠRepresents Ġa ĠBatch , Ġcontaining Ġa Ġfull Ġor Ġserialized Ġchange Ġset Ċ Ġ*/ Ċ @ Serializable Ċ class ĠBatch Info () Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIs Ġthe Ġbatch Ġparts Ġare Ġin Ġmemory ĊĠĠĠĠ Ġ* ĠIf Ġtrue , Ġonly Ġone ĠB PI ĊĠĠĠĠ Ġ* ĠIf Ġfalse , Ġseveral Ġserialized ĠB PI ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Transient ĊĠĠĠ Ġvar Ġin Memory : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIf Ġin Ġmemory , Ġreturn Ġthe Ġin Ġmemory ĠD m ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Transient ĊĠĠĠ Ġvar Ġin Memory Data : ĠSync Set ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġor ĠSets Ġdirectory Ġname ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Serial Name (" dirname ") ĊĠĠĠ Ġvar Ġdirectory Name : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġor Ġsets Ġdirectory Ġroot ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Serial Name (" dir ") ĊĠĠĠ Ġvar Ġdirectory Root : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġor Ġsets Ġserver Ġtimestamp ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Serial Name (" ts ") ĊĠĠĠ Ġvar Ġtimestamp : ĠLong Ġ= Ġ 0 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠList Ġof Ġbatch Ġparts Ġif Ġnot Ġin Ġmemory ĊĠĠĠĠ Ġ*/ ĊĠĠ Ġ@ Serial Name (" parts ") ĊĠĠĠ Ġvar Ġbatch Parts Info : ĠArrayList < Batch Part Info >? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġor ĠSets Ġthe Ġrows Ġcount Ġcontained Ġin Ġthe Ġbatch Ġinfo ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Serial Name (" count ") ĊĠĠĠ Ġvar Ġrows Count : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġor ĠSets Ġthe ĠSerialization ĠFactory ĠKey Ġused Ġto Ġserialize Ġthis Ġbatch Ġinfo Ġ( if Ġnot Ġin Ġmemory ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Serial Name (" ser ") ĊĠĠĠ Ġvar Ġserializer Factory Key : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIntern ally Ġsetting Ġschema ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Serial Name (" schema ") ĊĠĠĠ Ġvar Ġsanitized Schema : ĠSync Set Ġ= ĠSync Set () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġa Ġnew ĠBatch Info , Ġcontaining Ġall ĠBatch Part Info ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( in Memory : ĠBoolean , Ġin Schema : ĠSync Set , Ġroot Directory : ĠString Ġ= Ġ"", Ġdirectory Name : ĠString Ġ= Ġ"") Ġ: Ġthis () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . in Memory Ġ= Ġin Memory ĊĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġneed Ġto Ġcreate Ġa Ġchange Ġtable Ġset , Ġcontaining Ġtable Ġwith Ġcolumns Ġnot Ġreadonly ĊĠĠĠĠĠĠĠ Ġfor Ġ( table Ġin Ġin Schema . tables ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDb Sync Adapter . create Changes Table ( in Schema . tables [ table . tableName , Ġtable . schema Name ] !! , Ġthis . sanit ized Schema ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġnot Ġin Ġmemory , Ġgenerate Ġa Ġdirectory Ġname Ġand Ġinitialize Ġbatch Ġparts Ġlist ĊĠĠĠĠĠĠĠ Ġif Ġ(! this . in Memory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . directory Root Ġ= Ġroot Directory ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . batch Parts Info Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . directory Name Ġ= Ġif Ġ( directory Name . isNotBlank ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSimpleDateFormat (" yyyy _ MM _ dd _ ss ", ĠLocale . getDefault ()). format ( Calendar . getInstance ( Locale . getDefault ()). time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirectory Name ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġchanges Ġto Ġbatch Ġinfo . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Changes ( changes : ĠSync Set , Ġbatch Index : ĠInt Ġ= Ġ 0 , Ġis Last Batch : ĠBoolean Ġ= Ġtrue , Ġorche strator : ĠBase Orche strator ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . in Memory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . serializer Factory Key Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . in Memory Data Ġ= Ġchanges ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġthis . serializer Factory Key Ġ= Ġserializer Factory Key . key ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbp Id Ġ= Ġgenerate New FileName ( batch Index . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// var ĠfileName Ġ= ĠPath . Combine ( this . Get Directory FullPath (), Ġbp Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb pi Ġ= ĠBatch Part Info . create Batch Part Info ( batch Index , Ġchanges , Ġbp Id , Ġget Directory FullPath (), Ġis Last Batch , Ġorche strator ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġadd Ġthe Ġbatch part info Ġtp Ġthe Ġcurrent Ġbatch info ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . batch Parts Info ?. add ( b pi ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġfull Ġpath Ġof Ġthe ĠBatch Ġdirectory ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Directory FullPath (): ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( in Memory ) Ġ"" Ġelse ĠFile ( directory Root , Ġdirectory Name ). absolute Path ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEnsure Ġthe Ġlast Ġbatch Ġpart Ġ( if Ġnot Ġin Ġmemory ) Ġhas Ġthe Ġcorrect ĠIs Last Batch Ġflag ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġensure Last Batch () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . in Memory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . batch Parts Info !!. isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġlast Ġindex ĊĠĠĠĠĠĠĠ Ġval Ġmax Index Ġ= Ġthis . batch Parts Info !!. max Of Ġ{ Ġt B pi Ġ-> Ġt B pi . index Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġcorre t Ġlast Ġbatch ĊĠĠĠĠĠĠĠ Ġthis . batch Parts Info !!. forEach Ġ{ Ġb pi Ġ-> Ġb pi . is Last Batch Ġ= Ġb pi . index Ġ== Ġmax Index Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġif Ġthis Ġbatch info Ġhas Ġsome Ġdata Ġ( in Ġmemory Ġor Ġnot ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhas Data (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . sanit ized Schema Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNullPointerException (" Batch Ġinfo Ġschema Ġshould Ġnot Ġbe Ġnull ") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( in Memory Ġ&& Ġin Memory Data Ġ!= Ġnull Ġ&& Ġin Memory Data !!. has Tables Ġ&& Ġin Memory Data !!. has Rows ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! in Memory Ġ&& Ġbatch Parts Info Ġ!= Ġnull Ġ&& Ġbatch Parts Info !!. isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrows Count Ġ= Ġbatch Parts Info !!. sum Of Ġ{ Ġb pi Ġ-> Ġb pi . rows Count Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrows Count Ġ> Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġif Ġthis Ġbatch info Ġhas Ġsome Ġdata Ġ( in Ġmemory Ġor Ġnot ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhas Data ( tableName : ĠString , Ġschema Name : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . sanit ized Schema Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNullPointerException (" Batch Ġinfo Ġschema Ġshould Ġnot Ġbe Ġnull ") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( in Memory Ġ&& Ġin Memory Data Ġ!= Ġnull Ġ&& Ġin Memory Data !!. has Tables ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtable Ġ= Ġin Memory Data !!. tables [ tableName , Ġschema Name ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( table Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtable . has Rows ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! in Memory Ġ&& Ġbatch Parts Info Ġ!= Ġnull Ġ&& Ġbatch Parts Info !!. isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtable Info Ġ= ĠBatch Part Table Info ( tableName , Ġschema Name ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb pt is Ġ= Ġbatch Parts Info ?. map Ġ{ Ġb pi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb pi . tables ?. filter Ġ{ Ġt Ġ-> Ġt . equals ByName ( table Info ) Ġ} Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ?. flatten () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( b pt is Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġb pt is . sum Of Ġ{ Ġb pt i Ġ-> Ġb pt i . rows Count Ġ} Ġ> Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClear Ġall Ġbatch Ġparts Ġinfo Ġand Ġtry Ġto Ġdelete Ġtmp Ġfolder Ġif Ġneeded ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġclear ( delete Folder : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . in Memory Ġ&& Ġthis . in Memory Data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . in Memory Data ?. clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠDelete Ġfolders Ġbefore Ġdeleting Ġbatch Ġparts ĊĠĠĠĠĠĠĠ Ġif Ġ( delete Folder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . try Remove Directory () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . batch Parts Info Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . batch Parts Info ?. forEach Ġ{ Ġit . clear () Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . batch Parts Info ?. clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġtry Ġto Ġdelete Ġthe ĠBatch Ġtmp Ġdirectory Ġand Ġall Ġthe Ġfiles Ġstored Ġin Ġit ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtry Remove Directory () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠOnce Ġwe Ġhave Ġapplied Ġall Ġthe Ġbatch , Ġwe Ġcan Ġsafely Ġremove Ġthe Ġtemp Ġdir Ġand Ġall Ġit 's Ġfiles ĊĠĠĠĠĠĠĠ Ġif Ġ(! this . in Memory Ġ&& Ġthis . directory Root . isNotBlank () Ġ&& Ġthis . directory Name . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtmp Directory Ġ= ĠFile ( this . get Directory FullPath ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! tmp Directory . exists ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtmp Directory . delete Re cursively () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing Ġhere ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Table ( tableName : ĠString , Ġschema Name : ĠString , Ġorche strator : ĠBase Orche strator ? Ġ= Ġnull ): ĠList < Sync Table ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . sanit ized Schema Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNullPointerException (" Batch Ġinfo Ġschema Ġshould Ġnot Ġbe Ġnull ") ĊĊĠĠĠĠĠĠĠ Ġval Ġtable Info Ġ= ĠBatch Part Table Info ( tableName , Ġschema Name ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( in Memory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . serializer Factory Key Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . in Memory Data Ġ!= Ġnull Ġ&& Ġthis . in Memory Data !!. has Tables ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( this . in Memory Data !!. tables [ tableName , Ġschema Name ] !! ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb pi Tables Ġ= Ġbatch Parts Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . filter Ġ{ Ġb pi Ġ-> Ġb pi . rows Count Ġ> Ġ 0 Ġ&& Ġb pi . tables !!. any Ġ{ Ġt Ġ-> Ġt . equals ByName ( table Info ) Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . sorted By Ġ{ Ġt Ġ-> Ġt . index Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( b pi Tables Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġb pi Tables . map NotNull Ġ{ Ġbatch Part in Info Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġload Ġonly Ġif Ġnot Ġalready Ġloaded Ġin Ġmemory ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( batch Part in Info . data Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbatch Part in Info . load Batch ( this . sanit ized Schema , Ġget Directory FullPath (), Ġorche strator ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe Ġtable Ġfrom Ġthe Ġbatch Part Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgenerate Ġa Ġtmp ĠSync Table Ġfor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbatch Table Ġ= Ġbatch Part in Info . data ?. tables ?. first OrNull Ġ{ Ġbt Ġ-> Ġbt . equals ByName ( Sync Table ( tableName , Ġschema Name )) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( batch Table Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġmay Ġneed Ġthis Ġsame ĠBatch Part Info Ġfor Ġanother Ġtable , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbut Ġwe Ġdispose Ġit Ġanyway , Ġbecause Ġmemory Ġcan Ġbe Ġquickly Ġa Ġbot tleneck ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġbatch part infos Ġare Ġres ident Ġin Ġmemory ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbatch Part in Info . data ?. clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbatch Part in Info . data Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map NotNull Ġbatch Table ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġgenerate Ġa Ġbatch Ġfile Ġname ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġgenerate New FileName ( batch Index : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġwhen Ġ( batch Index . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ" 0 0 0 $ batch Index " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġ" 0 0 ${ batch Index }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġ" 0 ${ batch Index }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// 4 Ġ-> Ġindex Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠException (" Overflow Exception : Ġtoo Ġmuch Ġbatches Ġ!!! ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"${ index }_${ UUID . randomUUID (). toString (). replace (".", Ġ"_ ") }. batch " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ