content: /**
   *  Copyright (c) 2013-2014 Angelo ZERR.
   *  All rights reserved. This program and the accompanying materials
   *  are made available under the terms of the Eclipse Public License v1.0
   *  which accompanies this distribution, and is available at
   *  http://www.eclipse.org/legal/epl-v10.html
   *
   *  Contributors:
   *  Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation
   */
  package tern.server;
  
  import java.util.ServiceLoader;
  
  import javax.websocket.ContainerProvider;
  import javax.websocket.WebSocketContainer;
  
  /**
   * Custom WebSocket container to uses JSR-356 WebSocket in an OSGi context.
   * since <code>ContainerProvider.getWebSocketContainer()</code> uses
   * {@link ServiceLoader#load(Class)} to retrieve {@link ContainerProvider} which
   * doesn't work well with OSGi context.
   */
  public abstract class WebSocketContainerProvider {
  
  	private static WebSocketContainerProvider provider;
  
  	public static void setProvider(WebSocketContainerProvider provider) {
  		WebSocketContainerProvider.provider = provider;
  	}
  
  	public static WebSocketContainer getWebSocketContainer() {
  		if (provider == null) {
  			// provider is not setted (no OSGi context), uses JSR-356 container
  			// provider.
  			return ContainerProvider.getWebSocketContainer();
  		}
  		// provider is setted by tern.eclipse.ide.websocket OSGi plugin.
  		return provider.getContainer();
  	}
  
  	protected abstract WebSocketContainer getContainer();
  }
  