/* Ċ Ġ* Ġ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 . index management . index state management . rest handler Ċ Ċ import Ġcom . amazon . opend ist ro fore lastic search . index management . Index Management Plugin . Companion . POLICY _ BASE _ URI Ċ import Ġcom . amazon . opend ist ro fore lastic search . index management . index state management . model . Policy Ċ import Ġcom . amazon . opend ist ro fore lastic search . index management . index state management . settings . Managed Index Settings . Companion . ALLOW _ LIST Ċ import Ġcom . amazon . opend ist ro fore lastic search . index management . index state management . transport . action . index policy . Index Policy Action Ċ import Ġcom . amazon . opend ist ro fore lastic search . index management . index state management . transport . action . index policy . Index Policy Request Ċ import Ġcom . amazon . opend ist ro fore lastic search . index management . index state management . transport . action . index policy . Index Policy Response Ċ import Ġcom . amazon . opend ist ro fore lastic search . index management . index state management . util . get Dis allowed Actions Ċ import Ġcom . amazon . opend ist ro fore lastic search . index management . util . IF _ PRIMARY _ TERM Ċ import Ġcom . amazon . opend ist ro fore lastic search . index management . util . IF _ SEQ _ NO Ċ import Ġcom . amazon . opend ist ro fore lastic search . index management . 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 . cluster . service . Cluster Service Ċ import Ġorg . elasticsearch . common . settings . Settings Ċ import Ġorg . elasticsearch . common . x content . To X Content Ċ 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 Handler . Route Ċ import Ġorg . elasticsearch . rest . Rest Request Ċ import Ġorg . elasticsearch . rest . Rest Request . Method . PUT Ċ import Ġorg . elasticsearch . rest . Rest Response Ċ import Ġorg . elasticsearch . rest . Rest Status Ċ import Ġorg . elasticsearch . rest . action . Rest Response Listener Ċ import Ġjava . io . IOException Ċ import Ġjava . time . Instant Ċ Ċ private Ġval Ġlog Ġ= ĠLog Manager . getLogger ( Rest Index Policy Action :: class . java ) Ċ Ċ class ĠRest Index Policy Action ( ĊĠĠĠ Ġsettings : ĠSettings , ĊĠĠĠ Ġval Ġcluster Service : ĠCluster Service Ċ ) Ġ: ĠBase Rest Handler () Ġ{ ĊĊĠĠĠ Ġ@ Volatile Ġprivate Ġvar Ġallow List Ġ= ĠALLOW _ LIST . get ( settings ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcluster Service . cluster Settings . add Settings Update Consumer ( ALLOW _ LIST ) Ġ{ Ġallow List Ġ= Ġit Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġroutes (): ĠList < Route > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRoute ( PUT , ĠPOL ICY _ BASE _ URI ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRoute ( PUT , Ġ"$ POLICY _ BASE _ URI /{ policy ID }") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetName (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" index _ policy _ action " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġoverride Ġfun Ġprepare Request ( request : ĠRest Request , Ġclient : ĠNode Client ): ĠRest Channel Consumer Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġrequest . param (" policy ID ", ĠPolicy . NO _ ID ) ĊĠĠĠĠĠĠĠ Ġif Ġ( Policy . NO _ ID Ġ== Ġid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Missing Ġpolicy ĠID ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġx cp Ġ= Ġrequest . content Parser () ĊĠĠĠĠĠĠĠ Ġval Ġpolicy Ġ= ĠPolicy . parse WithType ( x cp Ġ= Ġx cp , Ġid Ġ= Ġid ). copy ( last Updated Time Ġ= ĠInstant . now ()) ĊĠĠĠĠĠĠĠ Ġ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 Ġdis allowed Actions Ġ= Ġpolicy . get Dis allowed Actions ( allow List ) ĊĠĠĠĠĠĠĠ Ġif Ġ( dis allowed Actions . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRest Channel Consumer Ġ{ Ġchannel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . send Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBytes Rest Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRest Status . FOR BID DEN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" You Ġhave Ġactions Ġthat Ġare Ġnot Ġallowed Ġin Ġyour Ġpolicy Ġ$ dis allowed Actions " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġindex Policy Request Ġ= ĠIndex Policy Request ( id , Ġpolicy , Ġseq No , Ġprimary Term , Ġrefresh Policy ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠRest Channel Consumer Ġ{ Ġchannel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . execute ( Index Policy Action . INSTANCE , Ġindex Policy Request , Ġobject Ġ: ĠRest Response Listener < Index Policy Response >( channel ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbuild Response ( response : ĠIndex Policy Response ): ĠRest Response Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrest Response Ġ= ĠBytes Rest Response ( response . status , Ġresponse . to X Content ( channel . newBuilder (), ĠTo X Content . EMPTY _ PARAMS )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . status Ġ== ĠRest Status . CREATED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= Ġ"$ POLICY _ BASE _ URI /${ response . id }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrest Response . add Header (" Location ", Ġlocation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrest Response ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ