package Ġcom . r 3 . ref app . client . utils Ċ Ċ import Ġnet . cord a . core . contracts . Amount Ċ import Ġnet . cord a . core . crypto . Secure Hash Ċ import Ġjava . util .* ĊĊ Ċ object ĠController Utils Ġ{ ĊĊĠĠĠ Ġprivate Ġconst Ġval ĠHEX _ DIG ITS Ġ= Ġ" 0 1 2 3 4 5 6 7 8 9 abcdef ABCDEF " ĊĠĠĠ Ġprivate Ġconst Ġval ĠATT ACH MENT _ HASH _ LENGTH Ġ= Ġ 6 4 ĊĠĠĠ Ġprivate Ġval Ġavailable C urrencies Ġ= ĠCurrency . get Available C urrencies (). map Ġ{ Ġit . toString () Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturn Ġ[ Amount ] Ġfor Ġquantity Ġof Ġcurrency Ġunits Ġand Ġcurrency Ġcode ĊĠĠĠĠ Ġ* Ġ@ param Ġquantity Ġin Ġcurrency Ġunits ĊĠĠĠĠ Ġ* Ġ@ param Ġtoken Type Ġcurrency Ġcode ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ Currency ] ĊĠĠĠĠ Ġ* Ġ@ throws Ġ[ IllegalArgumentException ] Ġif Ġcurrency Ġcode Ġis Ġinvalid ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Amount From Quantity And Currency ( quantity : ĠLong , Ġtoken Type : ĠString ): ĠAmount < Currency > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrency Ġ= Ġget Currency Instance FromString ( token Type ) ĊĠĠĠĠĠĠĠ Ġreturn ĠAmount ( quantity , Ġcurrency ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturn Ġ[ Currency ] Ġfor Ġcurrency Ġcode ĠString . ĊĠĠĠĠ Ġ* Ġ@ param Ġtoken Type Ġcurrency Ġcode ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ Currency ] ĊĠĠĠĠ Ġ* Ġ@ throws Ġ[ IllegalArgumentException ] Ġif Ġcurrency Ġcode Ġis Ġinvalid ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Currency Instance FromString ( token Type : ĠString ): ĠCurrency Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! available C urrencies . contains ( token Type )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Invalid Ġcurrency Ġcode Ġ'$ token Type ', Ġavailable Ġc urrencies Ġare : Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ available C urrencies ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠCurrency . getInstance ( token Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConverts Ġa Ġlist Ġof Ġstring Ġto Ġa ĠList Ġof ĠPair < Secure Hash , ĠString > ĊĠĠĠĠ Ġ* Ġ@ param Ġattachments Ġthe Ġstrings Ġare Ġexpected Ġto Ġbe Ġin Ġname Str : secure Hash Ġformat Ġotherwise Ġthe Ġconversion Ġwill Ġfail ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException ĠThe Ġstring Ġare Ġnot Ġin Ġcorrect Ġformat Ġor Ġsecond Ġstring Ġcannot Ġbe Ġconverted Ġinto Ġa ĠSecure Hash ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġprocess String Attachments ( attachments : ĠList < String >): ĠList < Pair < Secure Hash , ĠString >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġattachments . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġss Ġ= Ġit . split (': ') ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( ss . size Ġ== Ġ 2 ) Ġ{ Ġ" attachment Ġ$ it Ġnot Ġin Ġa Ġcorrect Ġformat , Ġ` name : secure Hash ` Ġexpected " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( ss [ 0 ]. isNotBlank ()) Ġ{ Ġ" attachment Ġname Ġmust Ġnot Ġbe Ġempty " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( ss [ 1 ]. length Ġ== ĠATT ACH MENT _ HASH _ LENGTH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Incorrect Ġattachment Ġhash Ġlength Ġ( got Ġ${ ss [ 1 ]. length }, Ġexpected Ġ${ ATTACHMENT _ HASH _ LENGTH })" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( ss [ 1 ]. all Ġ{ Ġchar Ġ-> ĠHEX _ DIG ITS . contains ( char ) Ġ}) Ġ{ Ġ" attachment Ġhash Ġis Ġnot Ġa Ġvalid ĠHEX ĠString " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Secure Hash . parse ( ss [ 1 ]), Ġss [ 0 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }