package Ġcom . ph anna . em v _ qr _ code Ċ Ċ import Ġjava . lang . Exception Ċ Ċ class ĠMer chant Present ed Encoder Ġ{ ĊĠĠĠ Ġprivate Ġval Ġdata Ġ= ĠData Object Types . data () ĊĠĠĠ Ġprivate Ġval Ġdata Field Ġ= Ġmutable Map Of < String , ĠString >() ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpayload : ĠString ĊĠĠĠ Ġlateinit Ġvar Ġmerchant Account Information : ĠMer chant Account Information ĊĠĠĠ Ġlateinit Ġvar Ġadditional Data Field Template : ĠAdditional Data Field ĊĠĠĠ Ġvar Ġpayload Format Indicator : ĠString Ġ= Ġ"" ĊĠĠĠ Ġvar Ġpoint Of Init iation Method : ĠString Ġ= Ġ"" ĊĠĠĠ Ġvar Ġmerchant Category Code : ĠString Ġ= Ġ"" ĊĠĠĠ Ġvar Ġtransaction Currency : ĠString Ġ= Ġ"" ĊĠĠĠ Ġvar Ġtransaction Amount : ĠString Ġ= Ġ"" ĊĠĠĠ Ġvar Ġcountry Code : ĠString Ġ= Ġ"" ĊĠĠĠ Ġvar Ġmerchant Name : ĠString Ġ= Ġ"" ĊĠĠĠ Ġvar Ġmerchant City : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġfun Ġencode (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġpayload Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠ Ġif Ġ( payload Format Indicator . length Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Field [ data [" payload Format Indicator "]. toString ()] Ġ= Ġpayload Format Indicator ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" payload Format Indicator Ġis Ġrequired ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( point Of Init iation Method . length Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Field [ data [" point Of Init iation Method "]. toString ()] Ġ= Ġpoint Of Init iation Method ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( merchant Category Code . length Ġ== Ġ 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Field [ data [" merchant Category Code "]. toString ()] Ġ= Ġmerchant Category Code ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" merchant Category Code Ġis Ġrequired ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( this :: merchant Account Information . isInitialized Ġ&& Ġmerchant Account Information . value . length Ġ<= Ġ 9 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Field [ merchant Account Information . tag ] Ġ= Ġmerchant Account Information . value ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException In Initializer Error (" merchant Account Information Ġmust Ġbe Ġinitialized ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprintln ( merchant City . length ) ĊĠĠĠĠĠĠĠ Ġif Ġ( merchant City . isNotBlank () Ġ&& Ġmerchant City . length Ġ<= Ġ 1 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Field [ data [" merchant City "]. toString ()] Ġ= Ġmerchant City ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" merchant City Ġis Ġrequired ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( merchant Name . isNotBlank () Ġ&& Ġmerchant Name . length Ġ<= Ġ 2 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Field [ data [" merchant Name "]. toString ()] Ġ= Ġmerchant Name ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" merchant Name Ġis Ġrequired ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( country Code . length Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Field [ data [" country Code "]. toString ()] Ġ= Ġcountry Code ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" country Code Ġis Ġrequired ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( transaction Amount . isNotBlank () Ġ&& Ġtransaction Amount . length Ġ<= Ġ 1 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Field [ data [" transaction Amount "]. toString ()] Ġ= Ġtransaction Amount ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( transaction Currency . length Ġ== Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Field [ data [" transaction Currency "]. toString ()] Ġ= Ġtransaction Currency ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" transaction Currency Ġis Ġrequired ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( this :: additional Data Field Template . isInitialized Ġ&& Ġadditional Data Field Template . toString (). length Ġ<= Ġ 9 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Field [ data [" additional Data Field Template "]. toString ()] Ġ= Ġadditional Data Field Template . toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdata Field . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayload Ġ+= Ġit . key . pad Start ( 2 , Ġ' 0 ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayload Ġ+= Ġit . value . length . toString (). pad Start ( 2 , Ġ' 0 ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayload Ġ+= Ġit . value . pad Start ( 2 , Ġ' 0 ') ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpayload Ġ+= ĠCRC . ID Ġ+ ĠCRC . VALUE _ LENGTH ĊĊĠĠĠĠĠĠĠ Ġval Ġcrc Ġ= ĠCRC . calculate ( payload ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġpayload . plus ( crc ) ĊĠĠĠ Ġ} Ċ } Ċ