--- /dev/null
+/*******************************************************************************\r
+ * Copyright (c) 2016 Association for Decentralized Information Management\r
+ * in Industry THTH ry.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ * THTH ry - initial API and implementation\r
+ *******************************************************************************/\r
+package org.simantics.debug.browser.internal;\r
+\r
+import java.net.MalformedURLException;\r
+import java.net.URL;\r
+\r
+import org.eclipse.core.runtime.IStatus;\r
+import org.eclipse.core.runtime.Platform;\r
+import org.eclipse.core.runtime.Status;\r
+import org.eclipse.jetty.server.Connector;\r
+import org.eclipse.jetty.server.Handler;\r
+import org.eclipse.jetty.server.Server;\r
+import org.eclipse.jetty.server.ServerConnector;\r
+import org.eclipse.jetty.server.handler.HandlerList;\r
+import org.eclipse.jetty.server.handler.ResourceHandler;\r
+import org.eclipse.jetty.servlet.ServletContextHandler;\r
+import org.eclipse.jetty.servlet.ServletHandler;\r
+import org.eclipse.jetty.servlet.ServletHolder;\r
+import org.simantics.debug.browser.servlet.ResourceBrowserServlet;\r
+\r
+/**\r
+ * @author Jani Simomaa / Semantum Oy\r
+ * @since 1.22\r
+ */\r
+public class DebugBrowserServer {\r
+\r
+ private static final String CONTEXT_PATH = "/debug";\r
+ \r
+ private final Server server;\r
+ private final ServerConnector connector;\r
+\r
+ public DebugBrowserServer(String resourcePath) throws Exception {\r
+ server = new Server();\r
+ \r
+ connector = new ServerConnector(server);\r
+ connector.setHost("localhost");\r
+ connector.setPort(0);\r
+ server.setConnectors(new Connector[] { connector } );\r
+ \r
+ ServletHandler handler = new ServletHandler();\r
+ \r
+ ServletHolder holder = new ServletHolder(ResourceBrowserServlet.class);\r
+ handler.addServletWithMapping(holder, "/*");\r
+ ServletContextHandler contextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);\r
+ contextHandler.setContextPath(CONTEXT_PATH);\r
+ contextHandler.setHandler(handler);\r
+ \r
+ ResourceHandler resourceHandler = new ResourceHandler();\r
+ resourceHandler.setResourceBase(resourcePath);\r
+ \r
+ HandlerList handlers = new HandlerList();\r
+ handlers.setHandlers(new Handler[] { resourceHandler, contextHandler });\r
+ server.setHandler(handlers);\r
+ }\r
+ \r
+ public void start() throws Exception {\r
+ server.start();\r
+ }\r
+ \r
+ public void stop() throws Exception {\r
+ server.stop();\r
+ }\r
+ \r
+ public URL getURL() {\r
+ try {\r
+ return new URL("http", connector.getHost(), connector.getLocalPort(), CONTEXT_PATH);\r
+ } catch (MalformedURLException e) {\r
+ Platform.getLog(Activator.getContext().getBundle()).log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, "URL construction failed", e));\r
+ throw new Error(e);\r
+ }\r
+ }\r
+ \r
+}\r