/* Ċ Ġ* ĠĠ ĠCopyright Ġ 2 0 1 9 ĠAmazon . com , ĠInc . Ġor Ġits Ġaffiliates . ĠAll ĠRights ĠReserved . Ċ Ġ* Ċ Ġ* ĠĠ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "). Ċ Ġ* ĠĠ ĠYou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠĠ ĠA Ġcopy Ġof Ġthe ĠLicense Ġis Ġlocated Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠĠ Ġor Ġin Ġthe Ġ" license " Ġfile Ġaccompanying Ġthis Ġfile . ĠThis Ġfile Ġis Ġdistributed Ċ Ġ* ĠĠ Ġon Ġan Ġ" AS ĠIS " ĠBASIS , ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ċ Ġ* ĠĠ Ġexpress Ġor Ġimplied . ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ċ Ġ* ĠĠ Ġpermissions Ġand Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . amazon . opend ist ro fore lastic search . alert ing . rest handler Ċ Ċ import Ġcom . amazon . opend ist ro fore lastic search . alert ing . Alert ing Plugin Ċ import Ġcom . amazon . opend ist ro fore lastic search . alert ing . action . Index Destination Action Ċ import Ġcom . amazon . opend ist ro fore lastic search . alert ing . action . Index Destination Request Ċ import Ġcom . amazon . opend ist ro fore lastic search . alert ing . action . Index Destination Response Ċ import Ġcom . amazon . opend ist ro fore lastic search . alert ing . model . destination . Destination Ċ import Ġcom . amazon . opend ist ro fore lastic search . alert ing . settings . Alert ing Settings . Companion . INDEX _ TIMEOUT Ċ import Ġcom . amazon . opend ist ro fore lastic search . alert ing . util . IF _ PRIMARY _ TERM Ċ import Ġcom . amazon . opend ist ro fore lastic search . alert ing . util . IF _ SEQ _ NO Ċ import Ġcom . amazon . opend ist ro fore lastic search . alert ing . util . REFRESH Ċ import Ġorg . apache . logging . log 4 j . Log Manager Ċ import Ġorg . elasticsearch . action . support . Write Request Ċ import Ġorg . elasticsearch . client . node . Node Client Ċ import Ġorg . elasticsearch . common . settings . Settings Ċ import Ġorg . elasticsearch . common . x content . To X Content Ċ import Ġorg . elasticsearch . common . x content . X Content Parser Ċ import Ġorg . elasticsearch . common . x content . X Content Parser Utils Ċ import Ġorg . elasticsearch . index . seq no . Sequence Numbers Ċ import Ġorg . elasticsearch . rest . Base Rest Handler Ċ import Ġorg . elasticsearch . rest . Base Rest Handler . Rest Channel Consumer Ċ import Ġorg . elasticsearch . rest . Bytes Rest Response Ċ import Ġorg . elasticsearch . rest . Rest Channel Ċ import Ġorg . elasticsearch . rest . Rest Handler . Route Ċ import Ġorg . elasticsearch . rest . Rest Request Ċ import Ġorg . elasticsearch . rest . Rest Response Ċ import Ġorg . elasticsearch . rest . Rest Status Ċ import Ġorg . elasticsearch . rest . action . Rest Response Listener Ċ import Ġjava . io . IOException Ċ Ċ private Ġval Ġlog Ġ= ĠLog Manager . getLogger ( Rest Index Destination Action :: class . java ) Ċ Ċ /** Ċ Ġ* ĠRest Ġhandlers Ġto Ġcreate Ġand Ġupdate ĠDestination Ċ Ġ*/ Ċ class ĠRest Index Destination Action ( ĊĠĠĠ Ġsettings : ĠSettings Ċ ) Ġ: ĠBase Rest Handler () Ġ{ ĊĠĠĠ Ġ@ Volatile Ġprivate Ġvar Ġindex Timeout Ġ= ĠINDEX _ TIMEOUT . get ( settings ) ĊĊĠĠĠ Ġoverride Ġfun ĠgetName (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" index _ destination _ action " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġroutes (): ĠList < Route > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoute ( Rest Request . Method . POST , ĠAlert ing Plugin . DEST INATION _ BASE _ URI ), Ġ// ĠCreates Ġnew Ġdestination ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoute ( Rest Request . Method . PUT , Ġ"${ Alert ing Plugin . DEST INATION _ BASE _ URI }/{ destination ID }") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġoverride Ġfun Ġprepare Request ( request : ĠRest Request , Ġclient : ĠNode Client ): ĠBase Rest Handler . Rest Channel Consumer Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġrequest . param (" destination ID ", ĠDestination . NO _ ID ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request . method () Ġ== ĠRest Request . Method . PUT Ġ&& ĠDestination . NO _ ID Ġ== Ġid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Missing Ġdestination ĠID ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠValidate Ġrequest Ġby Ġparsing ĠJSON Ġto ĠDestination ĊĠĠĠĠĠĠĠ Ġval Ġx cp Ġ= Ġrequest . content Parser () ĊĠĠĠĠĠĠĠ ĠX Content Parser Utils . ensure Expected Token ( X Content Parser . Token . START _ OBJECT , Ġx cp . nextToken (), Ġx cp :: getToken Location ) ĊĠĠĠĠĠĠĠ Ġval Ġdestination Ġ= ĠDestination . parse ( x cp , Ġid ) ĊĠĠĠĠĠĠĠ Ġval Ġseq No Ġ= Ġrequest . param As Long ( IF _ SEQ _ NO , ĠSequence Numbers . UN ASS IGNED _ SEQ _ NO ) ĊĠĠĠĠĠĠĠ Ġval Ġprimary Term Ġ= Ġrequest . param As Long ( IF _ PRIMARY _ TERM , ĠSequence Numbers . UN ASS IGNED _ PRIMARY _ TERM ) ĊĠĠĠĠĠĠĠ Ġval Ġrefresh Policy Ġ= Ġif Ġ( request . has Param ( REFRESH )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWrite Request . Refresh Policy . parse ( request . param ( REFRESH )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWrite Request . Refresh Policy . IM MEDI ATE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġindex Destination Request Ġ= ĠIndex Destination Request ( id , Ġseq No , Ġprimary Term , Ġrefresh Policy , Ġrequest . method (), Ġdestination ) ĊĠĠĠĠĠĠĠ Ġreturn ĠRest Channel Consumer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchannel Ġ-> Ġclient . execute ( Index Destination Action . INSTANCE , Ġindex Destination Request , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Destination Response ( channel , Ġrequest . method ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġindex Destination Response ( channel : ĠRest Channel , Ġrest Method : ĠRest Request . Method ): ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRest Response Listener < Index Destination Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠRest Response Listener < Index Destination Response >( channel ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbuild Response ( response : ĠIndex Destination Response ): ĠRest Response Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġreturn Status Ġ= ĠRest Status . CREATED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rest Method Ġ== ĠRest Request . Method . PUT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Status Ġ= ĠRest Status . OK ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrest Response Ġ= ĠBytes Rest Response ( return Status , Ġresponse . to X Content ( channel . newBuilder (), ĠTo X Content . EMPTY _ PARAMS )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( return Status Ġ== ĠRest Status . CREATED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= ĠAlert ing Plugin . DEST INATION _ BASE _ URI Ġ+ Ġresponse . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrest Response . add Header (" Location ", Ġlocation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrest Response ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ