package Ġcom . cle ver o ad . bootstrap . kotlin _ validators ĊĊ Ċ import Ġandroid . content . Context Ċ import Ġjava . util . regex . Pattern Ċ Ċ open Ġclass ĠInv ite Code Validator Ġprivate Ġconstructor ( private Ġval Ġmin Length : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠmaxLength : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġempty Error : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġinvalid Error : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġadditional Regex : ĠRegex ?) Ġ: ĠValidator Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġinline Ġfun Ġbuild ( context : ĠContext , Ġblock : ĠInv ite Code Validator . Builder . () Ġ-> ĠUnit ) Ġ= ĠInv ite Code Validator . Builder ( context ). apply ( block ). build () ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuilder ( context : ĠContext ) Ġ= ĠInv ite Code Validator . Builder ( context ) ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetDefault Validator ( context : ĠContext ) Ġ= Ġbuilder ( context ). build () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvalidate ( code : ĠString ?): ĠValidation Response Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġerror Ġ= Ġif Ġ( code . isNull OrEmpty ()) Ġempty Error Ġelse Ġif Ġ(! is Code Valid ( code )) Ġinvalid Error Ġelse Ġ"" ĊĠĠĠĠĠĠĠ Ġreturn ĠValidation Response Impl ( error . isEmpty (), Ġerror ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Code Valid ( code : ĠString ) Ġ= Ġ! code . isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġcode . length Ġ>= Ġmin Length Ġ&& Ġcode . length Ġ<= ĠmaxLength ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġcheck Pattern And Validate ( code ) ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Pattern And Validate ( code : ĠString ) Ġ= Ġadditional Regex ?. matches ( code ) Ġ?: Ġtrue ĊĊĠĠĠ Ġclass ĠBuilder Ġconstructor ( a Context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcontext Ġ= Ġa Context . application Context ĊĠĠĠĠĠĠĠ Ġvar Ġmin Length : ĠInt Ġ= Ġcontext . resources . getInteger ( R . integer . min _ code _ length ) ĊĠĠĠĠĠĠĠ Ġvar ĠmaxLength : ĠInt Ġ= Ġcontext . resources . getInteger ( R . integer . max _ code _ length ) ĊĠĠĠĠĠĠĠ Ġvar Ġempty Error : ĠString Ġ= Ġcontext . getString ( R . string . code _ is _ empty ) ĊĠĠĠĠĠĠĠ Ġvar Ġinvalid Error : ĠString Ġ= Ġcontext . getString ( R . string . code _ is _ invalid ) ĊĠĠĠĠĠĠĠ Ġvar Ġadditional Regex : ĠRegex ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġfun Ġmin Length ( length : ĠInt ) Ġ= Ġapply Ġ{ Ġif Ġ( length Ġ> Ġ 0 ) Ġmin Length Ġ= Ġlength Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠmaxLength ( length : ĠInt ) Ġ= Ġapply Ġ{ Ġif Ġ( length Ġ> Ġ 0 ) ĠmaxLength Ġ= Ġlength Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġempty Error ( error : ĠString ?) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty Error Ġ= Ġerror Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġinvalid Error ( error : ĠString ?) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalid Error Ġ= Ġerror Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġadditional Regex ( additional Regex : ĠRegex ?) Ġ= Ġapply Ġ{ Ġthis . additional Regex Ġ= Ġadditional Regex Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġadditional Regex ( additional Regex : ĠString ?) Ġ= Ġapply Ġ{ Ġthis . additional Regex Ġ= Ġadditional Regex ?. to Regex () Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġadditional Regex ( additional Regex : ĠPattern ?) Ġ= Ġapply Ġ{ Ġthis . additional Regex Ġ= Ġadditional Regex ?. to Regex () Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild (): ĠValidator Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmaxLength Ġ= ĠMath . max ( maxLength , Ġmin Length ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠInv ite Code Validator ( min Length , ĠmaxLength , Ġempty Error , Ġinvalid Error , Ġadditional Regex ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ