/* Ċ Ġ* ĠMIT ĠLicense Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠPH AST Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġfr . ph ast . cql . services . utils Ċ Ċ import Ġorg . cq framework . cql . cql 2 elm . C ql Translator Ċ import Ġorg . cq framework . cql . elm . execution . Library Ċ import Ġorg . hl 7 . cql _ annotations . r 1 . C ql To Elm Info Ċ import Ġorg . w 3 c . dom . Named Node Map Ċ import Ġjava . util .* Ċ Ċ object ĠTrans lator Option Util Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġthe Ġtranslator Ġoptions Ġused Ġto Ġgenerate Ġan Ġelm ĠLibrary . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠReturns Ġnull Ġif Ġthe Ġtranslator Ġoptions Ġcould Ġnot Ġbe Ġdetermined . ĊĠĠĠĠ Ġ* Ġ( for Ġexample , Ġthe ĠLibrary Ġwas Ġtranslated Ġwithout Ġannotations ) ĊĠĠĠĠ Ġ* Ġ@ param Ġlibrary ĠThe Ġlibrary Ġto Ġextract s Ġthe Ġoptions Ġfrom . ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġset Ġof Ġoptions Ġused Ġto Ġtranslate Ġthe Ġlibrary . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Translator Options ( library : ĠLibrary ): ĠEnum Set < C ql Translator . Options >? Ġ{ ĊĠĠĠĠĠĠĠ ĠObjects . requireNonNull ( library , Ġ" library Ġcan Ġnot Ġbe Ġnull ") ĊĠĠĠĠĠĠĠ Ġif Ġ( library . annotation Ġ== Ġnull Ġ|| Ġlibrary . annotation . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtranslator Options Ġ= Ġget Translator Options ( library . annotation ) ĊĠĠĠĠĠĠĠ Ġreturn Ġparse Translator Options ( translator Options ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTODO : ĠThis Ġhas Ġsome Ġhack ery Ġto Ġwork Ġaround Ġtype Ġserialization Ġthat 's Ġbeing Ġtracked Ġhere : ĊĠĠĠ Ġ// Ġhttps :// github . com / DB CG / cql _ engine / issues / 4 3 6 ĊĠĠĠ Ġ// ĠOnce Ġthe Ġde serializers Ġare Ġfixed Ġthis Ġshould Ġonly Ġneed Ġengine Ġannotation Ġtypes . ĊĠĠĠ Ġprivate Ġfun Ġget Translator Options ( annotations : ĠList < Any >): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( o Ġin Ġannotations ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLibrary Ġmapped Ġthrough Ġthe Ġ ĠLibrary Ġmapper ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe ĠLibrary Ġmapper Ġcurrently Ġuses Ġthe Ġtranslator Ġtypes Ġinstead Ġof Ġthe Ġengine ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtypes Ġbecause Ġthat 's Ġall Ġthere Ġare . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( o Ġis ĠC ql To Elm Info ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġo . translator Options ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLibrary Ġloaded Ġfrom ĠJSON ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( o Ġis ĠLinkedHashMap < *, Ġ* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġl hm Ġ= Ġo Ġas ĠLinkedHashMap < String , ĠString > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= Ġl hm [" translator Options "] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( options Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġoptions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLibrary Ġread Ġfrom ĠXML ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠElement Ns Impl Ġis Ġa Ġprivate Ġclass Ġinternal Ġto Ġthe ĠJVM ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthat Ġwe Ġaren 't Ġallowed Ġto Ġuse , Ġhence Ġall Ġthe Ġreflection ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( o . java Class . simple Name Ġ== Ġ" Element NS Impl ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelement Ns Class : ĠClass < *> Ġ= Ġo . java Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġelement Ns Class . getMethod (" getAttributes ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Map Ġ= Ġmethod . invoke ( o ) Ġas ĠNamed Node Map ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġattribute Node Ġ= Ġnode Map . getName d Item (" translator Options ") Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattribute Node . node Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠParses Ġa Ġstring Ġrepresenting ĠC QL ĠTrans lator ĠOptions Ġinto Ġan ĠEnum Set . ĠThe Ġstring Ġis Ġexpected ĊĠĠĠĠ Ġ* Ġto Ġbe Ġa Ġcomma Ġdelimited Ġlist Ġof Ġvalues Ġfrom Ġthe ĠC ql Translator . Options Ġenumeration . ĊĠĠĠĠ Ġ* ĠFor Ġexample Ġ" Enable List Promotion , ĠEnable List Dem otion ". ĊĠĠĠĠ Ġ* Ġ@ param Ġtranslator Options Ġthe Ġstring Ġto Ġparse ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġset Ġof Ġoptions ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġparse Translator Options ( translator Options : ĠString ?): ĠEnum Set < C ql Translator . Options >? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( translator Options Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġoption Set Ġ= ĠEnum Set . none Of ( C ql Translator . Options :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= Ġtranslator Options . trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ}. split ("," . to Regex ()). to Typed Array () ĊĠĠĠĠĠĠĠ Ġfor Ġ( option Ġin Ġoptions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoption Set . add ( C ql Translator . Options . valueOf ( option )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġoption Set ĊĠĠĠ Ġ} Ċ } Ċ