// ĠCopyright Ġ 2 0 2 0 ĠAmazon . com , ĠInc . Ġor Ġits Ġaffiliates . ĠAll ĠRights ĠReserved . Ċ // ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ċ package Ġsoftware . aws . tool k its . jetbrains . core . credentials Ċ Ċ import Ġcom . intellij . openapi . Disposable Ċ import Ġcom . intellij . openapi . action System . Action Manager Ċ import Ġcom . intellij . openapi . action System . An Action Ċ import Ġcom . intellij . openapi . application . Application Manager Ċ import Ġcom . intellij . openapi . components . Service Manager Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . util . Simple Modification Tracker Ċ import Ġcom . intellij . util . Exception Util Ċ import Ġcom . intellij . util . messages . Topic Ċ import Ġkotlinx . coroutines . Cancellation Exception Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . future . await Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġsoftware . aws . tool k its . core . credentials . Credential Identifier Ċ import Ġsoftware . aws . tool k its . core . credentials . Credential Provider NotFoundException Ċ import Ġsoftware . aws . tool k its . core . credentials . Toolkit Credentials ChangeListener Ċ import Ġsoftware . aws . tool k its . core . credentials . Toolkit Credentials Provider Ċ import Ġsoftware . aws . tool k its . core . region . Aws Region Ċ import Ġsoftware . aws . tool k its . core . utils . getLogger Ċ import Ġsoftware . aws . tool k its . core . utils . warn Ċ import Ġsoftware . aws . tool k its . jetbrains . core . Aws Resource Cache Ċ import Ġsoftware . aws . tool k its . jetbrains . core . region . Aws Region Provider Ċ import Ġsoftware . aws . tool k its . jetbrains . services . sts . St s Resources Ċ import Ġsoftware . aws . tool k its . jetbrains . utils . MR U List Ċ import Ġsoftware . aws . tool k its . resources . message Ċ import Ġsoftware . aws . tool k its . telemetry . Aws Telemetry Ċ Ċ abstract Ġclass ĠAws ConnectionManager ( private Ġval Ġproject : ĠProject ) Ġ: ĠSimple Modification Tracker (), ĠDis posable Ġ{ ĊĠĠĠ Ġprivate Ġval Ġresource Cache Ġ= ĠAws Resource Cache . getInstance ( project ) ĊĠĠĠ Ġprivate Ġval Ġregion Provider Ġ= ĠAws Region Provider . getInstance () ĊĠĠĠ Ġprivate Ġval Ġcredentials Region Handler Ġ= ĠCredentials Region Handler . getInstance ( project ) ĊĊĠĠĠ Ġ@ Volatile ĊĠĠĠ Ġprivate Ġvar Ġvalidation Job : ĠJob ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Volatile ĊĠĠĠ Ġvar Ġconnection State : ĠConnection State Ġ= ĠConnection State . Initializing Toolkit ĊĠĠĠĠĠĠĠ Ġinternal Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! project . is Disposed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . message Bus . sync Publisher ( CONNECTION _ SETTINGS _ STATE _ CHANGED ). settings StateChanged ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġval Ġrecently Used Profiles Ġ= ĠM RU List < String >( MAX _ HISTORY ) ĊĠĠĠ Ġprotected Ġval Ġrecently Used Regions Ġ= ĠM RU List < String >( MAX _ HISTORY ) ĊĊĠĠĠ Ġ// ĠInternal Ġstate Ġis Ġvisible Ġfor ĠAws Settings Panel Ġand ĠChange Account Settings Action Group ĊĠĠĠ Ġinternal Ġvar Ġselected Credential Identifier : ĠCredential Identifier ? Ġ= Ġnull ĊĠĠĠ Ġinternal Ġvar Ġselected Region : ĠAws Region ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġselected Credentials Provider : ĠToolkit Credentials Provider ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" Le aking This ") ĊĠĠĠĠĠĠĠ ĠApplication Manager . getApplication (). message Bus . connect ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( Credential Manager . CRED ENTIAL S _ CHANGED , Ġobject Ġ: ĠToolkit Credentials ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġprovider Removed ( identifier : ĠCredential Identifier ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selected Credential Identifier Ġ== Ġidentifier ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange Connection Settings ( null , Ġselected Region ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġprovider Modified ( identifier : ĠCredential Identifier ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selected Credential Identifier Ġ== Ġidentifier ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Connection State () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠisValid Connection Settings (): ĠBoolean Ġ= Ġconnection State Ġis ĠConnection State . Valid Connection ĊĊĠĠĠ Ġfun Ġconnection Settings (): ĠConnection Settings ? Ġ= Ġwhen Ġ( val Ġstate Ġ= Ġconnection State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠConnection State . Valid Connection Ġ-> ĠConnection Settings ( state . credentials , Ġstate . region ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRe - trigger Ġvalidation Ġof Ġthe Ġcurrent Ġconnection ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrefresh Connection State () Ġ{ ĊĠĠĠĠĠĠĠ Ġchange Fields And Notify Ġ{ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInternal Ġsetter Ġthat Ġallows Ġfor Ġnull Ġvalues Ġand Ġis Ġintended Ġto Ġset Ġthe Ġinternal Ġstate Ġand Ġstill Ġnotify ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġchange Connection Settings ( identifier : ĠCredential Identifier ?, Ġregion : ĠAws Region ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġchange Fields And Notify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidentifier ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecently Used Profiles . add ( it . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġregion ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecently Used Regions . add ( it . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Credential Identifier Ġ= Ġidentifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Region Ġ= Ġregion ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠChanges Ġthe Ġcredentials Ġand Ġthen Ġvalidates Ġthem . ĠNot ifies Ġlisteners Ġof Ġresults ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġchange Credential Provider ( identifier : ĠCredential Identifier ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchange Fields And Notify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecently Used Profiles . add ( identifier . id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Credential Identifier Ġ= Ġidentifier ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Region Ġ= Ġcredentials Region Handler . determine Selected Region ( identifier , Ġselected Region ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠChanges Ġthe Ġregion Ġand Ġthen Ġvalidates Ġthem . ĠNot ifies Ġlisteners Ġof Ġresults ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġchange Region ( region : ĠAws Region ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchange Fields And Notify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecently Used Regions . add ( region . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Region Ġ= Ġregion ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġprivate Ġfun Ġchange Fields And Notify ( field Update Block : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinc Modification Count () ĊĊĠĠĠĠĠĠĠ Ġvalidation Job ?. cancel ( Cancellation Exception (" New er Ġconnection Ġsettings Ġchosen ")) ĊĠĠĠĠĠĠĠ Ġval Ġis Initial Ġ= Ġconnection State Ġis ĠConnection State . Initializing Toolkit ĊĠĠĠĠĠĠĠ Ġconnection State Ġ= ĠConnection State . Valid ating Connection ĊĊĠĠĠĠĠĠĠ Ġfield Update Block () ĊĊĠĠĠĠĠĠĠ Ġvalidation Job Ġ= ĠGlobal Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcredentials Identifier Ġ= Ġselected Credential Identifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġregion Ġ= Ġselected Region ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( credentials Identifier Ġ== Ġnull Ġ|| Ġregion Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection State Ġ= ĠConnection State . Incomplete Configuration ( credentials Identifier , Ġregion ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinc Modification Count () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ launch ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Initial Ġ&& Ġcredentials Identifier Ġis ĠInteractive Credential Ġ&& Ġcredentials Identifier . user Action Required ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection State Ġ= ĠConnection State . Requires User Action ( credentials Identifier ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinc Modification Count () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ launch ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcredentials Provider Ġ= ĠCredential Manager . getInstance (). get Aws Credential Provider ( credentials Identifier , Ġregion ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate ( credentials Provider , Ġregion ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Credentials Provider Ġ= Ġcredentials Provider ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection State Ġ= ĠConnection State . Valid Connection ( credentials Provider , Ġregion ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection State Ġ= ĠConnection State . Invalid Connection ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . warn ( e ) Ġ{ Ġmessage (" credentials . profile . validation _ error ", Ġcredentials Identifier . displayName ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinc Modification Count () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAws Telemetry . validate Credentials ( project , Ġsuccess Ġ= ĠisValid Connection Settings ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalidation Job Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLegacy Ġmethod , Ġshould Ġbe Ġconsidered Ġdeprecated Ġand Ġa vo ided Ġsince Ġit Ġloads Ġdefaults Ġout Ġof Ġband ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġactive Region : ĠAws Region ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġselected Region Ġ?: ĠAws Region Provider . getInstance (). default Region (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . warn ( IllegalStateException ()) Ġ{ Ġ" Using Ġactive Region Ġwhen Ġregion Ġis Ġnull , Ġcalling Ġcode Ġneeds Ġto Ġbe Ġmigrated Ġto Ġhandle Ġnull " Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLegacy Ġmethod , Ġshould Ġbe Ġconsidered Ġdeprecated Ġand Ġa vo ided Ġsince Ġit Ġloads Ġdefaults Ġout Ġof Ġband ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġactive Credential Provider : ĠToolkit Credentials Provider ĊĠĠĠĠĠĠĠ Ġ@ Throws ( Credential Provider NotFoundException :: class ) ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġselected Credentials Provider Ġ?: Ġthrow ĠCredential Provider NotFoundException ( message (" credentials . profile . not _ configured ")). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . warn ( IllegalStateException ()) Ġ{ Ġ" Using Ġactive Credential Provider Ġwhen Ġcredentials Ġis Ġnull , Ġcalling Ġcode Ġneeds Ġto Ġbe Ġmigrated Ġto Ġhandle Ġnull " Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġlist Ġof Ġrecently Ġused Ġ[ Aws Region ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrecently Used Regions (): ĠList < Aws Region > Ġ= Ġrecently Used Regions . elements (). map NotNull Ġ{ Ġregion Provider . all Regions ()[ it ] Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġlist Ġof Ġrecently Ġused Ġ[ Credential Identifier ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrecently Used Credentials (): ĠList < Credential Identifier > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcredential Manager Ġ= ĠCredential Manager . getInstance () ĊĠĠĠĠĠĠĠ Ġreturn Ġrecently Used Profiles . elements (). map NotNull Ġ{ Ġcredential Manager . getC redential Identifier ById ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInternal Ġmethod Ġthat Ġexecutes Ġthe Ġactual Ġvalidation Ġof Ġcredentials ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġopen Ġsuspend Ġfun Ġvalidate ( credentials Provider : ĠToolkit Credentials Provider , Ġregion : ĠAws Region ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠConvert Ġthe Ġcache Ġover Ġto Ġsuspend Ġmethods ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresource Cache . getResource ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSt s Resources . ACCOUNT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregion Ġ= Ġregion , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcredential Provider Ġ= Ġcredentials Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuse St ale Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġforce Fetch Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). await () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** * ĊĠĠĠĠĠĠĠĠ Ġ* ĠMessage Bus Ġtopic Ġfor Ġwhen Ġthe Ġactive Ġcredential Ġprofile Ġor Ġregion Ġis Ġchanged ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval ĠCONNECTION _ SETTINGS _ STATE _ CHANGED : ĠTopic < Connection Settings StateChange Notifier > Ġ= ĠTopic . create ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" AWS ĠAccount Ġsetting Ġchanged ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConnection Settings StateChange Notifier :: class . java ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance ( project : ĠProject ): ĠAws ConnectionManager Ġ= ĠService Manager . getService ( project , ĠAws ConnectionManager :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOGGER Ġ= Ġget Logger < Aws ConnectionManager >() ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ HISTORY Ġ= Ġ 5 ĊĠĠĠĠĠĠĠ Ġinternal Ġval ĠAws ConnectionManager . selected Partition Ġget () Ġ= Ġselected Region ?. let Ġ{ ĠAws Region Provider . getInstance (). partitions ()[ it . partition Id ] Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġstate Ġmachine Ġaround Ġthe Ġconnection Ġvalidation Ġsteps Ġthe Ġtoolkit Ġgoes Ġthrough . ĠAt tempts Ġto Ġencaps ulate Ġboth Ġstate , Ġdata Ġavailable Ġat Ġeach Ġstate Ġand Ċ Ġ* Ġa Ġconsistent Ġplace Ġto Ġdetermine Ġhow Ġto Ġdisplay Ġstate Ġinformation Ġ( e . g . Ġ[ display Message ]). ĠEx poses Ġan Ġ[ is Terminal ] Ġproperty Ġthat Ġindicates Ġif Ġthis Ċ Ġ* Ġstate Ġis Ġtemporary Ġin Ġthe Ġ' connection Ġvalidation ' Ġworkflow Ġor Ġif Ġthis Ġis Ġa Ġterminal Ġstate . Ċ Ġ*/ Ċ sealed Ġclass ĠConnection State ( val Ġdisplay Message : ĠString , Ġval Ġis Terminal : ĠBoolean ) Ġ{ ĊĠĠĠ Ġprotected Ġval Ġedit Cred s Action : ĠAn Action Ġ= ĠAction Manager . getInstance (). getAction (" aws . settings . upsert Credentials ") ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAn Ġoptional Ġshort Ġmessage Ġto Ġdisplay Ġin Ġplaces Ġwhere Ġspace Ġis Ġat Ġa Ġprem ium ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġval Ġshort Message : ĠString Ġ= Ġdisplay Message ĊĊĠĠĠ Ġopen Ġval Ġactions : ĠList < An Action > Ġ= Ġempty List () ĊĊĠĠĠ Ġobject ĠInitial izing Toolkit Ġ: ĠConnection State ( message (" settings . states . initial izing "), Ġis Terminal Ġ= Ġfalse ) ĊĊĠĠĠ Ġobject ĠValid ating Connection Ġ: ĠConnection State ( message (" settings . states . valid ating "), Ġis Terminal Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġshort Message : ĠString Ġ= Ġmessage (" settings . states . valid ating . short ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠValid Connection ( internal Ġval Ġcredentials : ĠToolkit Credentials Provider , Ġinternal Ġval Ġregion : ĠAws Region ) Ġ: ĊĠĠĠĠĠĠĠ ĠConnection State ("${ credentials . displayName }@ ${ region . displayName }", Ġis Terminal Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġshort Message : ĠString Ġ= Ġ"${ credentials . short Name }@ ${ region . id }" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠIn complete Configuration ( credentials : ĠCredential Identifier ?, Ġregion : ĠAws Region ?) Ġ: ĠConnection State ( ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregion Ġ== Ġnull Ġ&& Ġcredentials Ġ== Ġnull Ġ-> Ġmessage (" settings . none _ selected ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregion Ġ== Ġnull Ġ-> Ġmessage (" settings . regions . none _ selected ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcredentials Ġ== Ġnull Ġ-> Ġmessage (" settings . credentials . none _ selected ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" At Ġleast Ġone Ġof Ġregion Id Ġ($ region ) Ġor Ġtoolkit Credentials Identifier Ġ($ credentials ) Ġmust Ġbe Ġnull ") ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġis Terminal Ġ= Ġtrue ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġactions : ĠList < An Action > Ġ= ĠlistOf ( edit Cred s Action ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠInvalid Connection ( private Ġval Ġcause : ĠException ) Ġ: ĊĠĠĠĠĠĠĠ ĠConnection State ( message (" settings . states . invalid ", ĠException Util . getMessage ( cause ) Ġ?: ĠException Util . get Throwable Text ( cause )), Ġis Terminal Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġshort Message Ġ= Ġmessage (" settings . states . invalid . short ") ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġactions : ĠList < An Action > Ġ= ĠlistOf ( Refresh Connection Action ( message (" settings . retry ")), Ġedit Cred s Action ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠRequires User Action ( interactive Credentials : ĠInteractive Credential ) Ġ: ĊĠĠĠĠĠĠĠ ĠConnection State ( interactive Credentials . user Action Display Message , Ġis Terminal Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġshort Message Ġ= Ġinteractive Credentials . user Action Short Display Message ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġactions Ġ= ĠlistOf ( interactive Credentials . user Action ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠConnection Settings StateChange Notifier Ġ{ ĊĠĠĠ Ġfun Ġsettings StateChanged ( newState : ĠConnection State ) Ċ } Ċ Ċ /** Ċ Ġ* ĠLegacy Ġmethod , Ġshould Ġbe Ġconsidered Ġdeprecated Ġand Ġa vo ided Ġsince Ġit Ġloads Ġdefaults Ġout Ġof Ġband Ċ Ġ*/ Ċ fun ĠProject . active Region (): ĠAws Region Ġ= ĠAws ConnectionManager . getInstance ( this ). active Region Ċ Ċ /** Ċ Ġ* ĠLegacy Ġmethod , Ġshould Ġbe Ġconsidered Ġdeprecated Ġand Ġa vo ided Ġsince Ġit Ġloads Ġdefaults Ġout Ġof Ġband Ċ Ġ*/ Ċ fun ĠProject . active Credential Provider (): ĠToolkit Credentials Provider Ġ= ĠAws ConnectionManager . getInstance ( this ). active Credential Provider Ċ