package Ġcom . ne va . jav are l . resource . impl Ċ Ċ import Ġcom . google . common . collect . Maps Ċ import Ġcom . ne va . jav are l . resource . api . Resource Ċ import Ġcom . ne va . jav are l . resource . api . Resource Descriptor Ċ import Ġcom . ne va . jav are l . resource . api . Resource Provider Ċ import Ġcom . ne va . jav are l . resource . api . Resource Resolver Ċ import Ġorg . apache . fel ix . scr . annotations . Activate Ċ import Ġorg . apache . fel ix . scr . annotations . Component Ċ import Ġorg . apache . fel ix . scr . annotations . Service Ċ import Ġorg . osgi . framework . Bundle Ċ import Ġorg . osgi . framework . Bundle Context Ċ Ċ @ Component ( immediate Ġ= Ġtrue ) Ċ @ Service Ċ class ĠBundle Resource Provider Ġ: ĠResource Provider Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠPROTO COL Ġ= Ġ" bundle " ĊĠĠĠĠĠĠĠ Ġval ĠNAMES PACE _ HEADER _ NAME Ġ= Ġ" Resource - Namespace " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġbundles Per Namespace Ġ= ĠMaps . new Concurrent Map < String , ĠBundle >() ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcontext : ĠBundle Context ĊĊĠĠĠ Ġ@ Activate ĊĠĠĠ Ġprotected Ġfun Ġstart ( context : ĠBundle Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . context Ġ= Ġcontext ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandles ( descriptor : ĠResource Descriptor ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdescriptor . protocol Ġ== ĠPROTO COL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprovide ( resolver : ĠResource Resolver , Ġdescriptor : ĠResource Descriptor ): ĠResource ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= Ġfind Bundle ( descriptor ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġresource Path Ġ= ĠgetResource Path ( descriptor ) ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġbundle . getEntry ("/ " Ġ+ Ġresource Path ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġresource : ĠResource ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( url Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresource Ġ= ĠBundle Resource ( resolver , Ġdescriptor , Ġurl ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresource ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Bundle ( descriptor : ĠResource Descriptor ): ĠBundle ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnamespace Ġ= ĠgetResource Namespace ( descriptor ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbundles Per Namespace . get Or Put ( namespace , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . bundles . find Ġ{ Ġbundle Ġ-> Ġnamespace Ġ== Ġbundle . headers . get ( NAMESPACE _ HEADER _ NAME ) Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetResource Path ( descriptor : ĠResource Descriptor ) Ġ= Ġdescriptor . parts . sub List ( 1 , Ġdescriptor . parts . size ). join ToString ("/") ĊĊĠĠĠ Ġprivate Ġfun ĠgetResource Namespace ( descriptor : ĠResource Descriptor ) Ġ= Ġdescriptor . parts [ 0 ] Ċ } Ċ