// ĠCopyright Ġ 2 0 1 7 - 2 0 2 0 ĠFit bit , ĠInc Ċ // ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ċ package Ġcom . fit bit . gold eng ate . bindings . co ap Ċ Ċ import Ġandroidx . annotation . Visible ForTesting Ċ import Ġcom . fit bit . gold eng ate . bindings . node . Node Key Ċ import Ġcom . fit bit . gold eng ate . bindings . stack . Stack Service Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ Ċ /** Ċ Ġ* ĠProvider Ġfor Ġ[ Endpoint ] Ġthat Ġensures Ġonly Ġsingle ĠCo ap Endpoint Ġinstance Ġexist Ġper Ġnode Ċ Ġ*/ Ċ object ĠCo ap Endpoint Provider Ġ{ ĊĊĠĠĠ Ġ@ Visible ForTesting ĊĠĠĠ Ġinternal Ġval Ġendpoint Map Ġ= ĠConcurrent HashMap < Node Key <* >, ĠCo ap Endpoint >() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġthe Ġ[ Endpoint ] Ġfor Ġthe Ġgiven Ġnode ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġkey Ġunique Ġidentifier Ġfor Ġa Ġnode ĊĠĠĠĠ Ġ* Ġ@ return Ġreturn Ġsingle Ġ[ Endpoint ] Ġinstance Ġfor Ġrequested Ġnode ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T > Ġget Endpoint ( key : ĠNode Key < T >): ĠEndpoint Ġ= Ġget Co ap Endpoint Internal ( key ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFor Ġ** internal ** Ġuse Ġonly . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġthe Ġ[ Stack Service ] Ġfor Ġthe Ġgiven Ġnode . ĊĠĠĠĠ Ġ* ĠUsed Ġfrom Ġinternal Ġmodule Ġcode Ġfor Ġatt aching Ġand Ġdet aching Ġstack ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġkey Ġunique Ġidentifier Ġfor Ġa Ġnode ĊĠĠĠĠ Ġ* Ġ@ return Ġreturn Ġsingle Ġ[ Stack Service ] Ġinstance Ġfor Ġrequested Ġnode ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T > Ġget Stack Service ( key : ĠNode Key < T >): ĠStack Service Ġ= Ġget Co ap Endpoint Internal ( key ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFor Ġ** internal ** Ġuse Ġonly . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġthe Ġ[ Co ap Endpoint ] Ġfor Ġthe Ġgiven Ġnode . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġkey Ġunique Ġidentifier Ġfor Ġa Ġnode ĊĠĠĠĠ Ġ* Ġ@ return Ġreturn Ġsingle Ġ[ Co ap Endpoint ] Ġinstance Ġfor Ġrequested Ġnode ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġ< T > Ġget Co ap Endpoint Internal ( key : ĠNode Key < T >): ĠCo ap Endpoint Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġendpoint : ĠCo ap Endpoint ? Ġ= Ġendpoint Map [ key ] ĊĠĠĠĠĠĠĠ Ġif Ġ( endpoint Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġendpoint Ġ= ĠCo ap Endpoint () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġendpoint Map [ key ] Ġ= Ġendpoint ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġendpoint ĊĠĠĠ Ġ} Ċ } Ċ