package Ġch . p ont ius . sw iss qr . api . handlers . qr Ċ Ċ import Ġch . p ont ius . sw iss qr . api . basics . Access Manager Ċ import Ġch . p ont ius . sw iss qr . api . basics . Post Rest Handler Ċ import Ġch . p ont ius . sw iss qr . api . model . service . status . Error Status Exception Ċ import Ġch . p ont ius . sw iss qr . api . model . service . status . Status Ċ import Ġch . p ont ius . sw iss qr . api . model . service . bill . Bill Ċ import Ġch . p ont ius . sw iss qr . api . model . users . Permission Ċ import Ġio . jav al in . core . util . Header Ċ import Ġio . jav al in . http . BadRequest Response Ċ import Ġio . jav al in . http . Context Ċ import Ġio . jav al in . plugin . openapi . annotations .* Ċ import Ġnet . code crete . q rb ill . canvas . PDF Canvas Ċ import Ġnet . code crete . q rb ill . canvas . PNG Canvas Ċ import Ġnet . code crete . q rb ill . generator . Graphics Format Ċ import Ġnet . code crete . q rb ill . generator . Language Ċ import Ġnet . code crete . q rb ill . generator . Output Size Ċ import Ġnet . code crete . q rb ill . generator . Q RB ill Ċ Ċ /** Ċ Ġ* ĠA Ġ[ Post Rest Handler ] Ġfor ĠJ aval in Ġthat Ġacts Ġas Ġa Ġsw iss ĠQR Ġcode Ġgenerator Ġthat Ġcan Ġbe Ġused Ġvia ĠHTTP ĠPOST . Ċ Ġ* ĠIt Ġsupports Ġdifferent Ġaddress Ġand Ġinvoice Ġformats . Ċ Ġ* Ċ Ġ* Ġ@ author ĠR alph ĠG asser Ċ Ġ* Ġ@ version Ġ 1 . 0 . 1 Ċ Ġ*/ Ċ class ĠGenerate QR Code Handler Ġ: ĠPost Rest Handler Ġ{ ĊĠĠĠ Ġ/** ĠPath Ġof Ġ[ Generate QR Code Simple Handler ]. Ġ*/ ĊĠĠĠ Ġoverride Ġval Ġroute : ĠString Ġ= Ġ" qr / generate /: type " ĊĊĠĠĠ Ġ/** ĠSet Ġof Ġ[ Permission ] s Ġa Ġuser Ġrequires Ġin Ġorder Ġto Ġbe Ġallowed Ġto Ġuse Ġ[ Generate QR Code Handler ]. Ġ*/ ĊĠĠĠ Ġoverride Ġval Ġrequired Permissions : ĠSet < Permission > Ġ= Ġset Of ( Permission . QR _ CREATE ) ĊĊĠĠĠ Ġ@ Open Api ( ĊĠĠĠĠĠĠĠ Ġsummary Ġ= Ġ" Gener ates Ġa Ġnew ĠQR Ġcode Ġwith Ġthe Ġinformation Ġprovided Ġvia ĠPOST .", ĊĠĠĠĠĠĠĠ Ġpath Ġ= Ġ"/ public / qr / generate /: type ", ĊĠĠĠĠĠĠĠ Ġmethod Ġ= ĠHttpMethod . POST , ĊĠĠĠĠĠĠĠ Ġheaders Ġ= Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOpen Api Param ( Access Manager . API _ KEY _ HEADER , ĠString :: class , Ġdescription Ġ= Ġ" API ĠToken Ġused Ġfor Ġauthentication . ĠSyntax : ĠBearer Ġ< Token >", Ġrequired Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ], ĊĠĠĠĠĠĠĠ ĠpathParams Ġ= Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOpen Api Param (" type ", ĠString :: class , Ġ" Type Ġof Ġgenerated Ġinvoice . ĠCan Ġeither Ġbe ĠA 4 _ POR TRA IT _ SHE ET , ĠQR _ B ILL _ ONLY , ĠQR _ B ILL _ WITH _ HORIZONTAL _ LINE Ġor ĠQR _ CODE _ ONLY ."), ĊĠĠĠĠĠĠĠ Ġ], ĊĠĠĠĠĠĠĠ ĠqueryParams Ġ= Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOpen Api Param (" format ", ĠString :: class , Ġ" File Ġformat Ġof Ġthe Ġresulting ĠQR Ġcode Ġ( PNG , ĠPDF Ġor ĠSVG ). ĠDefaults Ġto ĠPNG ."), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOpen Api Param (" width ", ĠDouble :: class , Ġ" Width Ġof Ġthe Ġresulting ĠQR Ġcode Ġin Ġmm . ĠDefault Ġdepending Ġon Ġtype ."), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOpen Api Param (" height ", ĠDouble :: class , Ġ" Height Ġof Ġthe Ġresulting ĠQR Ġcode Ġin Ġmm . ĠDefault Ġdepending Ġon Ġtype ."), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOpen Api Param (" resolution ", ĠInt :: class , Ġ" Resolution Ġof Ġthe Ġresulting ĠQR Ġcode Ġin Ġmm . ĠDefaults Ġto Ġ 1 5 0 ."), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOpen Api Param (" language ", ĠString :: class , Ġ" Language Ġof Ġthe Ġgenerated Ġbill . ĠOptions Ġare ĠDE , ĠFR , ĠIT Ġor ĠEN . ĠDefaults Ġto ĠEN .") ĊĠĠĠĠĠĠĠ Ġ], ĊĠĠĠĠĠĠĠ Ġrequest Body Ġ= ĠOpen Api RequestBody ([ Open Api Content ( Bill :: class )]), ĊĠĠĠĠĠĠĠ Ġtags Ġ= Ġ[" QR ĠGenerator "], ĊĠĠĠĠĠĠĠ Ġresponses Ġ= Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOpen ApiResponse (" 2 0 0 ", Ġ[ Open Api Content ( ByteArray :: class )]), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOpen ApiResponse (" 4 0 0 ", Ġ[ Open Api Content ( Status . Error Status :: class )]), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOpen ApiResponse (" 4 0 1 ", Ġ[ Open Api Content ( Status . Error Status :: class )]) ĊĠĠĠĠĠĠĠ Ġ] ĊĠĠĠ Ġ) ĊĠĠĠ Ġoverride Ġfun Ġdo Post ( ctx : ĠContext ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/* ĠExtract Ġinvoice Ġdata . Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġbill Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . body As Class ( Bill :: class . java ). to Process able Bill () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠBadRequest Response ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠError Status Exception ( 4 0 0 , Ġ" HTTP Ġbody Ġcould Ġnot Ġbe Ġparsed Ġinto Ġa Ġvalid ĠQR Ġinvoice Ġmodel !") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* ĠExtract Ġand Ġvalidate Ġformat Ġparameters . Ġ*/ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbill . format . output Size Ġ= ĠOutput Size . valueOf ( ctx . path Param Map (). get OrDefault (" type ", Ġ" QR _ B ILL _ ONLY "). toUpperCase ()) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠError Status Exception ( 4 0 0 , Ġ" Illegal Ġvalue Ġfor Ġparameter Ġ' type '. ĠPossible Ġvalues Ġare ĠA 4 _ POR TRA IT _ SHE ET , ĠQR _ B ILL _ ONLY , ĠQR _ B ILL _ WITH _ HORIZONTAL _ LINE Ġor ĠQR _ CODE _ ONLY !") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbill . format . language Ġ= ĠLanguage . valueOf ( ctx . query Param (" language ", Ġ" EN ") !!. toUpperCase ()) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠError Status Exception ( 4 0 0 , Ġ" Illegal Ġvalue Ġfor Ġparameter Ġ' language '. ĠPossible Ġvalues Ġare ĠDE , ĠFR , ĠIT Ġor ĠEN !") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġctx . query Param (" width ") ?. toDouble OrNull () Ġ?: Ġwhen ( bill . format . output Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOutput Size . A 4 _ POR TRA IT _ SHE ET Ġ-> Ġ 2 1 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOutput Size . QR _ B ILL _ ONLY Ġ-> Ġ 2 1 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOutput Size . QR _ B ILL _ WITH _ HORIZONTAL _ LINE Ġ-> Ġ 2 1 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOutput Size . QR _ CODE _ ONLY Ġ-> Ġ 4 6 . 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġctx . query Param (" height ") ?. toDouble OrNull () Ġ?: Ġwhen ( bill . format . output Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOutput Size . A 4 _ POR TRA IT _ SHE ET Ġ-> Ġ 2 9 7 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOutput Size . QR _ B ILL _ WITH _ HORIZONTAL _ LINE Ġ-> Ġ 1 1 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOutput Size . QR _ B ILL _ ONLY Ġ-> Ġ 1 0 5 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOutput Size . QR _ CODE _ ONLY Ġ-> Ġ 4 6 . 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresolution Ġ= Ġctx . query Param (" resolution ") ?. toInt OrNull () Ġ?: Ġ 1 5 0 ĊĊĠĠĠĠĠĠĠ Ġif Ġ( width Ġ< Ġ 0 . 0 Ġ|| Ġheight Ġ< Ġ 0 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠError Status Exception ( 4 0 0 , Ġ" Specified Ġformat Ġis Ġinvalid : ĠWidth Ġand Ġheight Ġmust Ġbe Ġgreater Ġthan Ġzero .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( resolution Ġ< Ġ 1 4 4 Ġ|| Ġresolution Ġ>= Ġ 6 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠError Status Exception ( 4 0 0 , Ġ" Specified Ġformat Ġis Ġinvalid : ĠResolution Ġmust Ġbe Ġbetween Ġ 1 4 4 Ġand Ġ 6 0 0 dpi .") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* ĠValidate ĠQR Ġbill . Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġvalidation Ġ= ĠQ RB ill . validate ( bill ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! validation . isValid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠError Status Exception ( 4 0 0 , Ġ" Specified Ġbill Ġis Ġnot Ġvalid : Ġ${ validation . validation Messages . join ToString ("\ n \ n ") Ġ{ Ġit . message Key Ġ}} ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* ĠGenerate ĠQR Ġcode . Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġwhen ( Graphics Format . valueOf ( ctx . query Param (" format ", Ġ" PNG ") !!. toUpperCase ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGraphics Format . PNG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbill . format . graphics Format Ġ= ĠGraphics Format . PNG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠPNG Canvas ( width , Ġheight , Ġresolution , Ġ" Arial , ĠHelvetica , Ġsans - serif ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQ RB ill . draw ( bill , Ġcanvas ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . contentType (" image / png ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGraphics Format . PDF Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbill . format . graphics Format Ġ= ĠGraphics Format . PDF ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠPDF Canvas ( width , Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQ RB ill . draw ( bill , Ġcanvas ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . contentType (" application / pdf ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGraphics Format . SVG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbill . format . graphics Format Ġ= ĠGraphics Format . SVG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . contentType (" image / svg ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQ RB ill . generate ( bill ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* ĠWrite Ġresults . Ġ*/ ĊĠĠĠĠĠĠĠ Ġctx . result ( data ) ĊĠĠĠ Ġ} Ċ }