package org.apache.tuscany.sca.binding.comet.runtime; import java.util.HashMap; import java.util.Map; import org.apache.tuscany.sca.host.http.ServletHost; import org.apache.tuscany.sca.interfacedef.Operation; import org.apache.tuscany.sca.runtime.RuntimeEndpoint; import org.atmosphere.cpr.AtmosphereServlet; public class ServletFactory { private static final String PACKAGE_KEY = "com.sun.jersey.config.property.packages"; private static final String PACKAGE_VALUE = "org.apache.tuscany.sca.binding.comet.runtime"; public static final String ENDPOINTS_KEY = "org.apache.tuscany.sca.binding.comet.endpoints"; public static final String OPERATIONS_KEY = "org.apache.tuscany.sca.binding.comet.operations"; public static final String PATH = "/tuscany-comet/*"; private static AtmosphereServlet servlet = null; public static synchronized void registerServlet(ServletHost servletHost, RuntimeEndpoint endpoint, Operation operation) { if (servlet == null) { servlet = new AtmosphereServlet(); servlet.addInitParameter(PACKAGE_KEY, PACKAGE_VALUE); servletHost.addServletMapping(PATH, servlet); Map endpoints = new HashMap(); servlet.getServletContext().setAttribute(ENDPOINTS_KEY, endpoints); Map operations = new HashMap(); servlet.getServletContext().setAttribute(OPERATIONS_KEY, operations); } String url = endpoint.getBinding().getURI() + "/" + operation.getName(); System.out.println("Adding endpoint and operation for url: " + url); Map endpoints = (Map)servlet.getServletContext().getAttribute(ENDPOINTS_KEY); endpoints.put(url, endpoint); Map operations = (Map)servlet.getServletContext().getAttribute(OPERATIONS_KEY); operations.put(url, operation); } }