/* Ċ Ġ* ĠLicensed Ġto Ġthe ĠApache ĠSoftware ĠFoundation Ġ( ASF ) Ġunder Ġone Ċ Ġ* Ġor Ġmore Ġcontributor Ġlicense Ġagreements . Ġ ĠSee Ġthe ĠNOTICE Ġfile Ċ Ġ* Ġdistributed Ġwith Ġthis Ġwork Ġfor Ġadditional Ġinformation Ċ Ġ* Ġregarding Ġcopyright Ġownership . Ġ ĠThe ĠASF Ġlicenses Ġthis Ġfile Ċ Ġ* Ġto Ġyou Ġ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 Ġnet . pot ot sk iy . apps . lom out . api . script . loader Ċ Ċ import Ġnet . pot ot sk iy . apps . lom out . api . AppConfig Exception Ċ import Ġnet . pot ot sk iy . apps . lom out . api . Message Bundle . message Ċ import Ġnet . pot ot sk iy . apps . lom out . api . UNDEFINED _ COLUMN Ċ import Ġnet . pot ot sk iy . apps . lom out . api . UNDEFINED _ ROW Ċ import Ġnet . pot ot sk iy . apps . lom out . api . document . Document Ċ import Ġnet . pot ot sk iy . apps . lom out . api . script . L om out Dsl Ċ import Ġnet . pot ot sk iy . apps . lom out . api . script . Script Build Helper Ċ import Ġnet . pot ot sk iy . apps . lom out . api . sus pect ed Location Ċ import Ġkotlin . reflect . K Class Ċ Ċ /** Ċ Ġ* ĠDefine Ġentity Ġload Ġconfiguration Ċ Ġ* Ċ Ġ* Ġ@ property Ġheaders Row ĠThe Ġheader Ġrow Ġnumber Ċ Ġ* Ġ@ property Ġrows To Skip ĠThe Ġnumber Ġof Ġrows Ġbefore Ġstart Ġloading Ċ Ġ* Ġ@ property Ġmax Absent Days ĠThe Ġdays Ġto Ġstore Ġentity Ġthat Ġis Ġremoved Ġfrom Ġsource Ġdata Ċ Ġ* Ġ@ property Ġentity ĠThe Ġentity Ġtype Ċ Ġ* Ġ@ property Ġsources ĠSource Ġfor Ġloading Ċ Ġ* Ġ@ property Ġfield Sets ĠField Ġsets Ġof Ġsources Ċ Ġ* Ġ@ constructor Ċ Ġ*/ Ċ data Ġclass ĠLoad < T Ġ: ĠDocument >( ĊĠĠĠ Ġval Ġheaders Row : ĠInt , ĊĠĠĠ Ġval Ġrows To Skip : ĠInt , ĊĠĠĠ Ġval Ġmax Absent Days : ĠInt , ĊĠĠĠ Ġval Ġentity : ĠK Class < T >, ĊĠĠĠ Ġval Ġsources : ĠSource Data Collection , ĊĠĠĠ Ġval Ġfield Sets : ĠField Set Collection Ċ ) Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEntity Ġloading Ġconfiguration Ġbuilder Ġclass ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ property Ġhelper ĠThe Ġconfig Ġbuild Ġhelper ĊĠĠĠĠ Ġ* Ġ@ property Ġentity Type ĠThe Ġentity Ġtype ĊĠĠĠĠ Ġ* Ġ@ property Ġheaders Row ĠThe Ġnumber Ġof Ġheader Ġrow ĊĠĠĠĠ Ġ* Ġ@ property Ġrows To Skip ĠThe Ġnumber Ġof Ġrows Ġto Ġskip Ġbefore Ġstart Ġloading ĊĠĠĠĠ Ġ* Ġ@ property Ġmax Absent Days ĠThe Ġday Ġto Ġkeep Ġremoved Ġentities ĊĠĠĠĠ Ġ* Ġ@ property Ġsources ĠThe Ġloading Ġsources ĊĠĠĠĠ Ġ* Ġ@ property Ġfield Sets ĠField Ġsets Ġof Ġsource ĊĠĠĠĠ Ġ* Ġ@ constructor ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ L om out Dsl ĊĠĠĠ Ġclass ĠBuilder < T Ġ: ĠDocument >( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġhelper : ĠScript Build Helper , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġentity Type : ĠK Class < T > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġheaders Row : ĠInt Ġ= ĠUN DEFINED _ ROW ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġrows To Skip : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġmax Absent Days : ĠInt Ġ= Ġdefault Absent Days ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġsources : ĠSource Data Collection ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġfield Sets : ĠField Set Collection ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠConfigure Ġheader Ġrow Ġnumber , Ġ* optional , Ġdefault : Ġno Ġheader * ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġrow ĠThe Ġrow Ġnumber , Ġzero Ġbased ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġheaders Row ( row : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheaders Row Ġ= Ġrow ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠConfigure Ġnumber Ġof Ġrows Ġto Ġskip , Ġ* optional , Ġdefault : Ġ 0 *, Ġif Ġsource Ġhas Ġheard Ġrow Ġthis Ġrow Ġwill Ġbe Ġskipped ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġrows ĠThe Ġnumber Ġof Ġrows Ġ( including Ġheader Ġrow ) ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġrows To Skip ( rows : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . rows To Skip Ġ= Ġrows ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠConfigure Ġhow Ġlong Ġto Ġkeep Ġremoved Ġentity Ġin Ġthe ĠDB ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġdays ĠDays Ġto Ġkeep ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġkeep Absent For Days ( days : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . max Absent Days Ġ= Ġdays ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠConfigure Ġsources Ġto Ġload Ġentities ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠĠĠĠĠ Ġ* Ġ... ĊĠĠĠĠĠĠĠĠ Ġ* Ġ Ġfrom Sources Ġ{ ĊĠĠĠĠĠĠĠĠ Ġ* ĠĠĠĠĠ Ġsource Ġ{ Ġfile (... ); Ġsheet (...) Ġ} ĊĠĠĠĠĠĠĠĠ Ġ* ĠĠĠĠĠ Ġsource Ġ{ Ġfile (... ); Ġsheet (...) Ġ} ĊĠĠĠĠĠĠĠĠ Ġ* ĠĠĠĠĠ Ġ... ĊĠĠĠĠĠĠĠĠ Ġ* Ġ Ġ} ĊĠĠĠĠĠĠĠĠ Ġ* Ġ... ĊĠĠĠĠĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠĠĠĠĠ Ġ* Ġ* Ġsource ĠâĢĶ Ġ** at Ġleast Ġone Ġsource Ġmust Ġbe Ġdefined ** ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġblock ĠS ources Ġconfiguration ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Sources ( block : ĠSource Data Collection . Builder . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . sources Ġ= ĠSource Data Collection . Builder ( helper ). apply ( block ). build () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠDefine Ġsource Ġfield Ġsets ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠĠĠĠĠ Ġ* Ġ... ĊĠĠĠĠĠĠĠĠ Ġ* Ġ Ġsource Fields Ġ{ ĊĠĠĠĠĠĠĠĠ Ġ* ĠĠĠĠĠ Ġmain (" name ") Ġ{... } ĊĠĠĠĠĠĠĠĠ Ġ* ĠĠĠĠĠ Ġextra (" name ) Ġ{... } ĊĠĠĠĠĠĠĠĠ Ġ* ĠĠĠĠĠ Ġextra (" name ) Ġ{... } ĊĠĠĠĠĠĠĠĠ Ġ* ĠĠĠĠĠ Ġ... ĊĠĠĠĠĠĠĠĠ Ġ* Ġ Ġ} ĊĠĠĠĠĠĠĠĠ Ġ* Ġ... ĊĠĠĠĠĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠĠĠĠĠ Ġ* Ġ* Ġmain ĠâĢĶ Ġdefine Ġmain Ġfield Ġset , Ġ** mandatory **, Ġonly Ġone Ġis Ġallowed ĊĠĠĠĠĠĠĠĠ Ġ* Ġ* Ġextra ĠâĢĶ Ġdefine Ġextra Ġfield Ġset , Ġ* optional * ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġblock ĠSource Ġfields Ġdefinition ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġsource Fields ( block : ĠField Set Collection . Builder < T >. () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Sets Ġ= ĠField Set Collection . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhelper , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentity Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheaders Row Ġ!= ĠUN DEFINED _ COLUMN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsources , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheaders Row , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply ( block ). build () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠBuild Ġentity Ġloading Ġconfiguration ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠLoad ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġbuild (): ĠLoad < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheaders Row Ġ= Ġthis . headers Row ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrows To Skip Ġ= Ġthis . rows To Skip ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsources Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . sources ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠApp Config Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuspect ed Location (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage (" message . error . script . load . no _ source ", Ġentity Type . qualified Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate Field Column Definition () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠLoad ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheaders Row , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrows To Skip , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Absent Days , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentity Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsources , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Sets ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠApp Config Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuspect ed Location (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage (" message . error . script . load . no _ fieldset ", Ġentity Type . qualified Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġvalidate Field Column Definition () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfields Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( field Sets ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠApp Config Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuspect ed Location (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage (" message . error . script . load . no _ fieldset ", Ġentity Type . qualified Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . field To Attr . toList () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatten () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toMap () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . headers Row Ġ== ĠUN DEFINED _ ROW Ġ&& Ġfields . any Ġ{ Ġit . key . column Ġ== ĠUN DEFINED _ COLUMN Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠApp Config Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuspect ed Location (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage (" message . error . script . field . column . not _ defined ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfields . filter Ġ{ Ġit . key . column Ġ== ĠUN DEFINED _ COLUMN Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . value . name Ġ}. join ToString (", Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠComp anion Ġobject ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠDefault Ġdays Ġto Ġkeep ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval Ġdefault Absent Days Ġ= Ġ 5 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ