/**
  * Create the federated share provider
  *
  * @return FederatedShareProvider
  */
 protected function federatedShareProvider()
 {
     if ($this->federatedProvider === null) {
         /*
          * Check if the app is enabled
          */
         $appManager = $this->serverContainer->getAppManager();
         if (!$appManager->isEnabledForUser('federatedfilesharing')) {
             return null;
         }
         /*
          * TODO: add factory to federated sharing app
          */
         $l = $this->serverContainer->getL10N('federatedfilessharing');
         $addressHandler = new AddressHandler($this->serverContainer->getURLGenerator(), $l);
         $discoveryManager = new DiscoveryManager($this->serverContainer->getMemCacheFactory(), $this->serverContainer->getHTTPClientService());
         $notifications = new Notifications($addressHandler, $this->serverContainer->getHTTPClientService(), $discoveryManager, $this->serverContainer->getJobList());
         $tokenHandler = new TokenHandler($this->serverContainer->getSecureRandom());
         $this->federatedProvider = new FederatedShareProvider($this->serverContainer->getDatabaseConnection(), $addressHandler, $notifications, $tokenHandler, $l, $this->serverContainer->getLogger(), $this->serverContainer->getLazyRootFolder(), $this->serverContainer->getConfig(), $this->serverContainer->getUserManager());
     }
     return $this->federatedProvider;
 }