/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 - 2 0 2 2 ĠT omas z ĠB abi uk Ċ Ġ* Ċ Ġ* Ġ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġ ĠYou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* Ġ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġ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 Ġeu . autom ate everything . domain . hardware Ċ Ċ import Ġeu . autom ate everything . data . hardware . Adapter State Ċ import Ġeu . autom ate everything . domain . events . EventBus Ċ import Ġeu . autom ate everything . domain . events . Port Update Type Ċ import Ġjava . util .* Ċ Ċ abstract Ġclass ĠHardware Adapter Base < T Ġ: ĠPort < *> >( ĊĠĠĠ Ġprotected Ġval Ġow ning Plugin Id : ĠString , ĊĠĠĠ Ġoverride Ġval Ġid : ĠString , ĊĠĠĠ Ġprotected Ġval Ġevent Bus : ĠEvent Bus Ċ ) Ġ: ĠHardware Adapter < T > Ġ{ ĊĊĠĠĠ Ġoverride Ġvar Ġstate Ġ= ĠAdapter State . Initialized ĊĠĠĠ Ġoverride Ġvar Ġlast Discovery Time Ġ= Ġ 0 L ĊĠĠĠ Ġoverride Ġvar Ġlast Error : ĠThrowable ? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġval Ġports : ĠLinkedHashMap < String , ĠT > Ġ= ĠLinkedHashMap () ĊĠĠĠ Ġprivate Ġvar Ġhas New Ports : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġclear New Ports Flag () Ġ{ ĊĠĠĠĠĠĠĠ Ġhas New Ports Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhas New Ports (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġhas New Ports ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġsuspend Ġfun Ġinternal Discovery ( mode : ĠDiscovery Mode ) ĊĊĠĠĠ Ġprotected Ġfun Ġlog Discovery ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġevent Bus . broadcast Discovery Event ( own ing Plugin Id , Ġmessage ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġbroadcast Port Update ( type : ĠPort Update Type , Ġport : ĠPort <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġevent Bus . broadcast Port Update Event ( own ing Plugin Id , Ġid , Ġtype , Ġport ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġdiscover ( mode : ĠDiscovery Mode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlast Discovery Time Ġ= ĠCalendar . getInstance (). time In Millis ĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠAdapter State . Discovery ĊĊĠĠĠĠĠĠĠ Ġinternal Discovery ( mode ) ĊĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠAdapter State . Operating ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġadd Potential New Ports ( new Ports : ĠList < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġnew Ports . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! ports . containsKey ( it . id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġports [ it . id ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbroadcast Port Update ( Port Update Type . Value Change , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas New Ports Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }