/******************************************************************************* * Copyright (c) 2012 by committers of lunifera.org * * 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: * Florian Pirchner - initial API and implementation * *******************************************************************************/ package org.semanticsoft.vaaclipse.app.servlet; import java.lang.reflect.Field; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.semanticsoft.vaaclipse.api.VaadinExecutorService; import com.vaadin.server.DeploymentConfiguration; import com.vaadin.server.RequestHandler; import com.vaadin.server.ServiceException; import com.vaadin.server.VaadinRequest; import com.vaadin.server.VaadinServlet; import com.vaadin.server.VaadinServletService; import com.vaadin.server.VaadinSession; import com.vaadin.server.communication.UidlRequestHandler; @SuppressWarnings("serial") public class OSGiServletService extends VaadinServletService { private final IVaadinSessionFactory factory; private VaaclipseServerRpcHandler vaaclipseServerRpcHandler; public VaaclipseServerRpcHandler getVaaclipseServerRpcHandler() { return vaaclipseServerRpcHandler; } public VaadinExecutorService getExecutorService() { return vaaclipseServerRpcHandler.getExecutorService(); } public OSGiServletService(VaadinServlet servlet, DeploymentConfiguration deploymentConfiguration, IVaadinSessionFactory factory) throws ServiceException { super(servlet, deploymentConfiguration); this.factory = factory; } @Override public String getConfiguredWidgetset(VaadinRequest request) { return super.getConfiguredWidgetset(request); } @Override protected VaadinSession createVaadinSession(VaadinRequest request) throws ServiceException { return factory.createSession(request, getCurrentServletRequest()); } @Override protected List<RequestHandler> createRequestHandlers() throws ServiceException { List<RequestHandler> handlers = super.createRequestHandlers(); for (RequestHandler h : handlers) { if (h instanceof UidlRequestHandler) { Field rpcField = null; try { rpcField = h.getClass().getDeclaredField("rpcHandler"); rpcField.setAccessible(true); vaaclipseServerRpcHandler = new VaaclipseServerRpcHandler(); rpcField.set(h, vaaclipseServerRpcHandler); } catch (Exception e) { e.printStackTrace(); } finally { if (rpcField != null) rpcField.setAccessible(false); } break; } } return handlers; } /** * Creates new instances of vaadin sessions. */ public interface IVaadinSessionFactory { /** * Returns a new instance of a vaadin session. * * @param request * @param httpServletRequest * * @return */ VaadinSession createSession(VaadinRequest request, HttpServletRequest httpServletRequest); } }