/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 Ġby ĠPeter Ġde ĠVo cht Ċ Ġ* Ċ Ġ* ĠAll Ġrights Ġreserved . ĠNo Ġpart Ġof Ġthis Ġpublication Ġmay Ġbe Ġrepro duced , Ġdistributed , Ġor Ċ Ġ* Ġtransmitted Ġin Ġany Ġform Ġor Ġby Ġany Ġmeans , Ġincluding Ġphoto copying , Ġrecording , Ġor Ġother Ċ Ġ* Ġelectronic Ġor Ġmechan ical Ġmethods , Ġwithout Ġthe Ġprior Ġwritten Ġpermission Ġof Ġthe Ġpublisher , Ċ Ġ* Ġexcept Ġin Ġthe Ġcase Ġof Ġbrief Ġquot ations Ġembod ied Ġin Ġcritical Ġreviews Ġand Ġcertain Ġother Ċ Ġ* Ġnon commercial Ġuses Ġpermitted Ġby Ġcopyright Ġlaw . Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġsim sage . rest Ċ Ċ import Ġcom . fasterxml . jackson . databind . Deserialization Feature Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġorg . apache . http . HttpResponse Ċ import Ġorg . apache . http . client . methods . HttpPost Ċ import Ġorg . apache . http . entity . String Entity Ċ import Ġorg . apache . http . impl . client . HttpClient s Ċ import Ġorg . apache . http . util . Entity Utils Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . beans . factory . annotation . Value Ċ import Ġorg . springframework . http . HttpHeaders Ċ import Ġorg . springframework . http . HttpStatus Ċ import Ġorg . springframework . http . MediaType Ċ import Ġorg . springframework . http . Response Entity Ċ import Ġorg . springframework . web . bind . annotation .* ĊĊ Ċ /** Ċ Ġ* ĠCreated Ġby Ġp eter Ġon Ġ 8 / 0 4 / 1 6 . Ċ Ġ*/ Ċ @ Cross Origin ( orig ins Ġ= ĠarrayOf ("* ")) Ċ @ RestController Ċ @ RequestMapping ("/") Ċ class ĠQuery Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Query :: class . java ) ĊĊĠĠĠ Ġ// Ġthe Ġids Ġare Ġset Ġin Ġsim sage . properties , Ġthese Ġvalues Ġmust Ġbe Ġset ĊĠĠĠ Ġ// Ġsee : Ġhttps :// sim sage . nz / api . html ĊĠĠĠ Ġ@ Value ("\ ${ sim sage . organisation . id }") ĊĠĠĠ Ġlateinit Ġvar Ġorganisation Id : ĠString ĊĊĠĠĠ Ġ@ Value ("\ ${ sim sage . kb . id }") ĊĠĠĠ Ġlateinit Ġvar Ġkb Id : ĠString ĊĊĠĠĠ Ġ@ Value ("\ ${ sim sage . security . id }") ĊĠĠĠ Ġlateinit Ġvar Ġsecurity Id : ĠString ĊĊĊĊĠĠĠ Ġclass ĠAction Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġaction Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġvar Ġparameters Ġ= ĠArrayList < String >() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠJavascript Query Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcustomer Id Ġ= Ġ"" Ġ Ġ// Ġ// Ġyour Ġcustomer 's Ġid Ġ( session Ġmanagement , Ġthe Ġsession Ġtie ) ĊĠĠĠĠĠĠĠ Ġvar Ġquery Ġ= Ġ"" Ġ Ġ// ĠEnglish Ġlanguage Ġquery ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠSim S age Query ( var Ġquery : ĠString , Ġvar Ġorganisation Id : ĠString , Ġvar Ġkb Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġnum Results Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġvar Ġscore Threshold Ġ= Ġ 0 . 5 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠQuery Result Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġurl Ġ= Ġ"" Ġ Ġ// Ġresult Ġorigin ĊĠĠĠĠĠĠĠ Ġvar Ġscore Ġ= Ġ 0 . 0 f ; Ġ Ġ// Ġquery Ġre levance , Ġ 1 . 0 Ġ== Ġ 1 0 0 % ĊĠĠĠĠĠĠĠ Ġvar Ġaction List Ġ= ĠArrayList < Action >() Ġ Ġ// Ġlist Ġof Ġparameters Ġto Ġthis Ġaction ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠSim S age Response Object Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠsessionId Ġ= Ġ""; Ġ// Ġthe Ġuser 's Ġsession , Ġsame Ġas Ġthe Ġcustomer Id Ġ( context Ġrelated ) ĊĠĠĠĠĠĠĠ Ġvar Ġjob Id Ġ= Ġ""; Ġ// Ġjob Ġidentifier ĊĠĠĠĠĠĠĠ Ġvar Ġorganisation Id Ġ= Ġ""; Ġ// Ġthe Ġorganisation ĊĠĠĠĠĠĠĠ Ġvar Ġkb Id Ġ= Ġ""; Ġ// Ġthe Ġkb Ġto Ġquery ĊĠĠĠĠĠĠĠ Ġvar Ġemail Ġ= Ġ""; Ġ// Ġthe Ġuser Ġ/ Ġowner ĊĠĠĠĠĠĠĠ Ġvar Ġquery Ġ= Ġ""; Ġ// Ġthe Ġquery Ġasked ĊĠĠĠĠĠĠĠ Ġvar Ġscore Threshold Ġ= Ġ 0 . 0 1 f ; Ġ// Ġthe Ġscore Ġthreshold Ġused Ġ/ Ġspecified ĊĠĠĠĠĠĠĠ Ġvar Ġnum Results Ġ= Ġ 1 0 ; Ġ// Ġthe Ġnumber Ġof Ġresults Ġto Ġreturn ĊĠĠĠĠĠĠĠ Ġvar Ġerror Str Ġ= Ġ""; Ġ// Ġany Ġerror Ġreporting Ġfrom Ġthe Ġquery Ġengine ĊĠĠĠĠĠĠĠ Ġvar Ġerror Ġ= Ġ""; Ġ// Ġany Ġerror Ġreporting Ġfrom Ġthe Ġmain Ġapi ĊĠĠĠĠĠĠĠ Ġvar Ġquery Result List Ġ= ĠArrayList < QueryResult >() Ġ; Ġ// Ġthe Ġresult Ġset ĊĠĠĠĠĠĠĠ Ġvar Ġcontext Stack Ġ= ĠArrayList < String >(); ĠĠĠ Ġ// Ġstack Ġof Ġthe Ġstates , Ġmost Ġrecent Ġat Ġthe Ġtop ĊĠĠĠĠĠĠĠ Ġvar Ġcontext Ġ= ĠHashMap < String , ĠString >(); Ġ// Ġuser 's Ġcontext ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġpost Ġa Ġquery Ġto ĠSim S age Ġand Ġreturn Ġthe Ġresponse Ġto Ġour Ġjavascript Ġclient ĊĠĠĠĠ Ġ* Ġ@ return Ġa ĠSim S age Ġquery Ġresult Ġlist Ġor Ġan Ġerror Ġmessage ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ RequestMapping ( value Ġ= ĠarrayOf ("/ query "), Ġproduces Ġ= ĠarrayOf (" application / json "), Ġmethod Ġ= ĠarrayOf ( Request Method . POST )) ĊĠĠĠ Ġfun Ġquery (@ RequestBody Ġparameters : ĠJavascript Query ): ĠResponseEntity < *> Ġ{ ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( organisation Id . isEmpty () Ġ|| Ġorganisation Id Ġ== Ġ"? ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġerror (" please Ġset Ġorg ans iation Ġid Ġand Ġthe Ġother Ġvalues Ġbefore Ġrunning Ġthis Ġserver .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parameters . query . trim (). isEmpty () Ġ|| Ġparameters . customer Id . trim (). isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġerror (" invalid Ġparameter ( s )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhttp client Ġ= ĠHttpClient s . create Default () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhttp Post Ġ= ĠHttp Post (" https :// cloud . sim sage . nz / api / query /${ parameters . customer Id }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhttp Post . setHeader (" Content - Type ", Ġ" application / json ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhttp Post . setHeader (" Security - Id ", Ġsecurity Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhttp Post . setHeader (" API - Version ", Ġ" 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhttp Post . set Entity ( String Entity ( ObjectMapper (). writeValue AsString ( Sim S age Query ( parameters . query , Ġorganisation Id , Ġkb Id )))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpost ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠhttpResponse Ġ= Ġhttp client . execute ( http Post ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( httpResponse . status Line . statusCode Ġ!= Ġ 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġerror ( httpResponse . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsim S age Data Ġ= Ġretrieve Resource From Response ( httpResponse , ĠSim S age Response Object :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreturn Ġquery Ġresult Ġlist Ġ- Ġall Ġour Ġclient Ġis Ġinterested Ġin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠjsonObject ( sim S age Data . query Result List ) ĊĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġerror ( ex . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġreturn Ġan Ġerror Ġmessage Ġin Ġa Ġsim sage Ġresponse Ġobject ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġerror ( err Str : ĠString ) Ġ: ĠResponseEntity < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠSim S age Response Object () ĊĠĠĠĠĠĠĠ Ġresponse . error Ġ= Ġerr Str ĊĠĠĠĠĠĠĠ Ġreturn ĠjsonObject ( response ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġreturn Ġa Ġjson Ġobject ĊĠĠĠĠ Ġ* Ġ@ param Ġitem Ġthe Ġobject Ġto Ġreturn ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġ< T > ĠjsonObject ( item : ĠT ): ĠResponseEntity < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Headers Ġ= ĠHttp Headers () ĊĠĠĠĠĠĠĠ Ġresponse Headers . contentType Ġ= ĠMediaType . APPLICATION _ JSON ĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity ( item , Ġresponse Headers , ĠHttpStatus . OK ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġdeserialize Ġan Ġobject Ġfrom Ġthe Ġhttp Ġre ponse Ġof Ġtype ĠT ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġ< T > Ġretrieve Resource From Response ( response : ĠHttpResponse , Ġclazz : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson From Response Ġ= ĠEntity Utils . toString ( response . entity ) ĊĠĠĠĠĠĠĠ Ġval Ġmapper Ġ= ĠObjectMapper (). configure ( Deserialization Feature . FAIL _ ON _ UNKNOWN _ PROPERTIES , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġmapper . readValue ( json From Response , Ġclazz ) ĊĠĠĠ Ġ} Ċ Ċ } ĊĊ