/**
  * Create a WURFL_UserAgentHandlerChain from the given $context
  * @param WURFL_Context $context
  * @return WURFL_UserAgentHandlerChain
  */
 public static function createFrom(WURFL_Context $context)
 {
     $cached_data = $context->cacheProvider->load('UserAgentHandlerChain');
     if ($cached_data !== null) {
         self::$_userAgentHandlerChain = $cached_data;
         foreach (self::$_userAgentHandlerChain->getHandlers() as $handler) {
             $handler->setupContext($context);
         }
     }
     if (!self::$_userAgentHandlerChain instanceof WURFL_UserAgentHandlerChain) {
         self::init($context);
         $context->cacheProvider->save('UserAgentHandlerChain', self::$_userAgentHandlerChain, 3600);
     }
     return self::$_userAgentHandlerChain;
 }
 /**
  * @return array Array of (string)User Agent Handler prefixes
  * @see WURFL_Handlers_Handler::getPrefix()
  */
 private function deviceClassificationNames()
 {
     $deviceClusterNames = array();
     foreach ($this->userAgentHandlerChain->getHandlers() as $userAgentHandler) {
         $deviceClusterNames[] = $userAgentHandler->getPrefix();
     }
     return $deviceClusterNames;
 }