/*
  * (non-Javadoc)
  * @see org.eclipse.orion.internal.server.servlets.hosting.ISiteHostingService#get(org.eclipse.orion.internal.server.servlets.site.SiteConfiguration, org.eclipse.orion.internal.server.servlets.workspace.WebUser)
  */
 @Override
 public IHostedSite get(SiteConfiguration siteConfig, WebUser user) {
   // Note this may overlap with a concurrent start()/stop() call that modifies the map
   String id = siteConfig.getId();
   String userId = user.getId();
   for (IHostedSite site : sites.values()) {
     if (site.getSiteConfigurationId().equals(id) && site.getUserId().equals(userId)) {
       return site;
     }
   }
   return null;
 }
  /*
   * (non-Javadoc)
   * @see org.eclipse.orion.internal.server.servlets.hosting.ISiteHostingService#stop(org.eclipse.orion.internal.server.servlets.site.SiteConfiguration, org.eclipse.orion.internal.server.servlets.workspace.WebUser)
   */
  @Override
  public void stop(SiteConfiguration siteConfig, WebUser user) throws SiteHostingException {
    synchronized (sites) {
      IHostedSite site = get(siteConfig, user);
      if (site == null) {
        return; // Already stopped; nothing to do
      }

      if (!sites.remove(site.getHost(), site)) {
        throw new ConcurrentModificationException("Table was modified concurrently");
      }
    }
  }