package Ġdb Ċ Ċ import Ġmodel . cloud . VM Ċ import Ġjava . time . Instant Ċ Ċ /** Ċ Ġ* ĠA Ġregistry Ġfor ĠCloud ĠVMs Ġcreated Ġby ĠSte ep Ċ Ġ* Ġ@ author ĠM ic hel ĠK ra em er Ċ Ġ*/ Ċ interface ĠVM Registry Ġ: ĠRegistry Ġ{ ĊĠ Ġ/** ĊĠĠ Ġ* ĠAdd Ġa Ġ[ vm ] Ġto Ġthe Ġregistry ĊĠĠ Ġ*/ ĊĠ Ġsuspend Ġfun Ġadd VM ( vm : ĠVM ) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠGet Ġa Ġlist Ġof Ġall ĠVMs Ġin Ġthe Ġregistry ĊĠĠ Ġ* Ġ@ param Ġstatus Ġan Ġoptional Ġstatus Ġthe ĠVMs Ġshould Ġhave ĊĠĠ Ġ* Ġ@ param Ġsize Ġthe Ġmaximum Ġnumber Ġof ĠVMs Ġto Ġreturn Ġ( may Ġbe Ġnegative ĊĠĠ Ġ* Ġif Ġall ĠVMs Ġshould Ġbe Ġreturned ) ĊĠĠ Ġ* Ġ@ param Ġoffset Ġthe Ġindex Ġof Ġthe Ġfirst ĠVM Ġto Ġreturn ĊĠĠ Ġ* Ġ@ param Ġorder Ġa Ġpositive Ġnumber Ġif Ġthe ĠVMs Ġshould Ġbe Ġreturned Ġin Ġan ĊĠĠ Ġ* Ġascending Ġorder , Ġnegative Ġotherwise ĊĠĠ Ġ* Ġ@ return Ġall ĠVMs ĊĠĠ Ġ*/ ĊĠ Ġsuspend Ġfun Ġfind VM s ( status : ĠVM . Status ? Ġ= Ġnull , Ġsize : ĠInt Ġ= Ġ- 1 , ĊĠĠĠĠĠ Ġoffset : ĠInt Ġ= Ġ 0 , Ġorder : ĠInt Ġ= Ġ 1 ): ĠCollection < VM > ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠGet Ġa Ġsingle ĠVM Ġwith Ġa Ġgiven Ġ[ id ] Ġfrom Ġthe Ġregistry Ġor Ġreturn Ġ` null ` Ġif ĊĠĠ Ġ* Ġthere Ġis Ġno Ġsuch ĠVM ĊĠĠ Ġ*/ ĊĠ Ġsuspend Ġfun Ġfind VM ById ( id : ĠString ): ĠVM ? ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠGet Ġa Ġsingle ĠVM Ġwith Ġa Ġgiven Ġ[ external Id ] Ġfrom Ġthe Ġregistry Ġor Ġreturn ĊĠĠ Ġ* Ġ` null ` Ġif Ġthere Ġis Ġno Ġsuch ĠVM ĊĠĠ Ġ*/ ĊĠ Ġsuspend Ġfun Ġfind VM By External Id ( external Id : ĠString ): ĠVM ? ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠGet Ġa Ġlist Ġof ĠVMs Ġthat Ġare Ġnot Ġterminated Ġ( i . e . Ġthat Ġdon 't Ġhave Ġthe ĊĠĠ Ġ* Ġstatus Ġ[ VM . Status . DESTROY ED ] Ġor Ġ[ VM . Status . ERROR ]) ĊĠĠ Ġ*/ ĊĠ Ġsuspend Ġfun Ġfind Non Terminated VM s (): ĠCollection < VM > ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠGet Ġthe Ġtotal Ġnumber Ġof ĠVMs Ġin Ġthe Ġregistry , Ġoptionally Ġcount Ġonly Ġthose ĊĠĠ Ġ* Ġwith Ġa Ġgiven Ġ[ status ] ĊĠĠ Ġ*/ ĊĠ Ġsuspend Ġfun Ġcount VM s ( status : ĠVM . Status ? Ġ= Ġnull ): ĠLong ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠGet Ġthe Ġnumber Ġof ĠVMs Ġwith Ġa Ġgiven Ġ[ setup Id ] Ġthat Ġare Ġnot Ġterminated Ġ( i . e . ĊĠĠ Ġ* Ġthat Ġdon 't Ġhave Ġthe Ġstatus Ġ[ VM . Status . DESTROY ED ] Ġor Ġ[ VM . Status . ERROR ]) ĊĠĠ Ġ*/ ĊĠ Ġsuspend Ġfun Ġcount Non Terminated VM sBy Setup ( setup Id : ĠString ): ĠLong ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠGet Ġthe Ġnumber Ġof ĠVMs Ġwith Ġa Ġgiven Ġ[ setup Id ] Ġthat Ġare Ġcurrently Ġbeing ĊĠĠ Ġ* Ġstarted Ġ( i . e . Ġthat Ġhave Ġthe Ġstatus Ġ[ VM . Status . CRE ATING ] Ġor Ġ[ VM . Status . PROV ISION ING ]) ĊĠĠ Ġ*/ ĊĠ Ġsuspend Ġfun Ġcount Starting VM sBy Setup ( setup Id : ĠString ): ĠLong ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠSet Ġthe Ġ[ creation Time ] Ġof Ġthe ĠVM Ġwith Ġthe Ġgiven Ġ[ id ] Ġ( i . e . Ġthe Ġtime Ġthe ĊĠĠ Ġ* ĠVM Ġwas Ġcreated ) ĊĠĠ Ġ*/ ĊĠ Ġsuspend Ġfun Ġset VM Creation Time ( id : ĠString , Ġcreation Time : ĠInstant ) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠSet Ġthe Ġ[ agent Join Time ] Ġof Ġthe ĠVM Ġwith Ġthe Ġgiven Ġ[ id ] Ġ( i . e Ġthe Ġtime ĊĠĠ Ġ* Ġwhen Ġthe Ġremote Ġagent Ġon Ġthe ĠVM Ġjoined Ġthe Ġcluster ) ĊĠĠ Ġ*/ ĊĠ Ġsuspend Ġfun Ġset V MA gent Join Time ( id : ĠString , Ġagent Join Time : ĠInstant ) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠSet Ġthe Ġ[ de struction Time ] Ġof Ġthe ĠVM Ġwith Ġthe Ġgiven Ġ[ id ] Ġ( i . e . Ġthe Ġtime ĊĠĠ Ġ* Ġthe ĠVM Ġwas Ġdestroyed ) ĊĠĠ Ġ*/ ĊĠ Ġsuspend Ġfun Ġset VM Dest r uction Time ( id : ĠString , Ġde struction Time : ĠInstant ) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠAtom ically Ġset Ġthe Ġstatus Ġof Ġthe ĠVM Ġwith Ġthe Ġgiven Ġ[ id ] Ġto Ġ[ new Status ] Ġif ĊĠĠ Ġ* Ġand Ġonly Ġif Ġits Ġcurrent Ġstatus Ġis Ġ[ current Status ]. ĊĠĠ Ġ*/ ĊĠ Ġsuspend Ġfun Ġset VM Status ( id : ĠString , Ġcurrent Status : ĠVM . Status , Ġnew Status : ĠVM . Status ) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠSet Ġthe Ġstatus Ġof Ġthe ĠVM Ġwith Ġthe Ġgiven Ġ[ id ] Ġto Ġ[ new Status ] Ġregardless Ġof ĊĠĠ Ġ* Ġthe ĠVM 's Ġcurrent Ġstatus . ĠCA UTION : ĠThis Ġmethod Ġshould Ġonly Ġbe Ġused Ġto , Ġfor ĊĠĠ Ġ* Ġexample , Ġset Ġthe ĠVM 's Ġstatus Ġto Ġ[ VM . Status . DESTROY ING ] Ġor Ġ[ VM . Status . ERROR ] ĊĠĠ Ġ* Ġwhen Ġan Ġerror Ġhas Ġoccurred Ġand Ġthe Ġcurrent Ġstatus Ġcan Ġbe Ġignored . ĠOtherwise , ĊĠĠ Ġ* Ġconsider Ġusing Ġ[ set VM Status ] Ġinstead ! ĊĠĠ Ġ*/ ĊĠ Ġsuspend Ġfun Ġforce Set VM Status ( id : ĠString , Ġnew Status : ĠVM . Status ) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠGet Ġthe Ġstatus Ġof Ġthe ĠVM Ġwith Ġthe Ġgiven Ġ[ id ] ĊĠĠ Ġ*/ ĊĠ Ġsuspend Ġfun Ġget VM Status ( id : ĠString ): ĠVM . Status ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠSet Ġthe Ġ[ external Id ] Ġof Ġthe ĠVM Ġwith Ġthe Ġgiven Ġ[ id ] ĊĠĠ Ġ*/ ĊĠ Ġsuspend Ġfun Ġset VM External ID ( id : ĠString , Ġexternal Id : ĠString ) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠSet Ġthe Ġ[ ipAddress ] Ġof Ġthe ĠVM Ġwith Ġthe Ġgiven Ġ[ id ] ĊĠĠ Ġ*/ ĊĠ Ġsuspend Ġfun Ġset VM IPAddress ( id : ĠString , Ġip Address : ĠString ) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠSet Ġthe Ġ[ reason ] Ġfor Ġthe Ġcurrent Ġstatus Ġof Ġthe ĠVM Ġwith Ġthe Ġgiven Ġ[ id ]. ĠIf ĊĠĠ Ġ* Ġthe Ġ[ reason ] Ġis Ġ` null `, Ġany Ġexisting Ġvalue Ġwill Ġbe Ġremoved Ġfrom Ġthe ĠVM . ĊĠĠ Ġ*/ ĊĠ Ġsuspend Ġfun Ġset VM Reason ( id : ĠString , Ġreason : ĠString ?) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠDelete Ġall ĠVMs Ġthat Ġhave Ġbeen Ġdestroyed Ġbefore Ġthe Ġgiven Ġ[ timestamp ] ĊĠĠ Ġ* Ġ( reg ard less Ġof Ġtheir Ġstatus ) Ġand Ġreturn Ġtheir ĠIDs ĊĠĠ Ġ*/ ĊĠ Ġsuspend Ġfun Ġdelete VM s Destroyed Before ( timestamp : ĠInstant ): ĠCollection < String > Ċ } Ċ