/* Ċ Ġ* ĠLicensed Ġto Ġthe ĠApache ĠSoftware ĠFoundation Ġ( ASF ) Ġunder Ġone Ċ Ġ* Ġor Ġmore Ġcontributor Ġlicense Ġagreements . Ġ ĠSee Ġthe ĠNOTICE Ġfile Ċ Ġ* Ġdistributed Ġwith Ġthis Ġwork Ġfor Ġadditional Ġinformation Ċ Ġ* Ġregarding Ġcopyright Ġownership . Ġ ĠThe ĠASF Ġlicenses Ġthis Ġfile Ċ Ġ* Ġto Ġyou Ġ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 Ġorg . apache . t inker pop 4 . gre mlin . js r 2 2 3 Ċ Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ Ċ /** Ċ Ġ* ĠAn Ġimplementation Ġof Ġthe Ġ[ G re mlin Script Engine Manager ] Ġthat Ġcaches Ġthe Ġinstances Ġof Ġthe Ċ Ġ* Ġ[ G re mlin Script Engine ] Ġinstances Ġthat Ġare Ġcreated Ġby Ġit . ĠNote Ġthat Ġthe Ġcache Ġis Ġrelevant Ġto Ġthe Ġinstance Ċ Ġ* Ġof Ġthe Ġ[ Cached G re mlin Script Engine Manager ] Ġand Ġis Ġnot Ġglobal Ġto Ġthe ĠJVM . Ċ Ġ* Ċ Ġ* Ċ Ġ* Ġ{@ inheritDoc } Ċ Ġ*/ Ċ class ĠCached G re mlin Script Engine Manager Ġ: ĠDefault G re mlin Script Engine Manager Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcache : ĠConcurrent HashMap < String , ĠG re mlin Script Engine > Ġ= ĠConcurrent HashMap () ĊĠĠĠ Ġprivate Ġval Ġextension To Name : ĠConcurrent HashMap < String , ĠString > Ġ= ĠConcurrent HashMap () ĊĠĠĠ Ġprivate Ġval Ġmime To Name : ĠConcurrent HashMap < String , ĠString > Ġ= ĠConcurrent HashMap () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ see ĠDefault G re mlin Script Engine Manager . Default G re mlin Script Engine Manager ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor () Ġ: Ġsuper () Ġ{} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ see ĠDefault G re mlin Script Engine Manager . Default G re mlin Script Engine Manager ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( loader : ĠClassLoader ?) Ġ: Ġsuper ( loader ) Ġ{} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġa Ġ[ G re mlin Script Engine ] Ġfrom Ġcache Ġor Ġcreates Ġa Ġnew Ġone Ġfrom Ġthe Ġ[ G re mlin Script Engine Factory ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ{@ inheritDoc } ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Override ĊĠĠĠ Ġfun Ġget Engine ByName ( short Name : ĠString ): ĠG re mlin Script Engine Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġengine : ĠG re mlin Script Engine Ġ= Ġcache . compute If Absent ( short Name , Ġsuper :: get Engine ByName ) ĊĠĠĠĠĠĠĠ Ġregister Look Up Info ( engine , Ġshort Name ) ĊĠĠĠĠĠĠĠ Ġreturn Ġengine ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġa Ġ[ G re mlin Script Engine ] Ġfrom Ġcache Ġor Ġcreates Ġa Ġnew Ġone Ġfrom Ġthe Ġ[ G re mlin Script Engine Factory ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ{@ inheritDoc } ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Override ĊĠĠĠ Ġfun Ġget Engine By Extension ( extension : ĠString ?): ĠG re mlin Script Engine Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! extension To Name . containsKey ( extension )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġengine : ĠG re mlin Script Engine Ġ= Ġsuper . get Engine By Extension ( extension ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister Look Up Info ( engine , Ġengine . get Factory (). get Engine Name ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġengine ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcache . get ( extension To Name . get ( extension )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġa Ġ[ G re mlin Script Engine ] Ġfrom Ġcache Ġor Ġcreates Ġa Ġnew Ġone Ġfrom Ġthe Ġ[ G re mlin Script Engine Factory ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ{@ inheritDoc } ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Override ĊĠĠĠ Ġfun Ġget Engine By MimeType ( mime Type : ĠString ?): ĠG re mlin Script Engine Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! mime To Name . containsKey ( mime Type )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġengine : ĠG re mlin Script Engine Ġ= Ġsuper . get Engine By MimeType ( mime Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister Look Up Info ( engine , Ġengine . get Factory (). get Engine Name ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġengine ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcache . get ( mime To Name . get ( mime Type )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġregister Look Up Info ( engine : ĠG re mlin Script Engine ?, Ġshort Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġengine ) Ġthrow ĠIllegalArgumentException ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠString . format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"% s Ġis Ġnot Ġan Ġavailable ĠG re mlin Script Engine ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshort Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġcache . put If Absent ( short Name , Ġengine ) ĊĠĠĠĠĠĠĠ Ġengine . get Factory (). get Extensions (). forEach Ġ{ Ġext Ġ-> Ġextension To Name . put If Absent ( ext , Ġshort Name ) Ġ} ĊĠĠĠĠĠĠĠ Ġengine . get Factory (). get Mime Types (). forEach Ġ{ Ġmime Ġ-> Ġmime To Name . put If Absent ( mime , Ġshort Name ) Ġ} ĊĠĠĠ Ġ} Ċ }