package uk.ac.imperial.lsds.seepmaster.ui;
import java.net.URL;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.handler.DefaultHandler;
import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.server.handler.ResourceHandler;
import org.eclipse.jetty.servlet.ServletHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import uk.ac.imperial.lsds.seepmaster.infrastructure.master.InfrastructureManager;
import uk.ac.imperial.lsds.seepmaster.query.GenericQueryManager;
import uk.ac.imperial.lsds.seepmaster.ui.web.WebUIHandler;
public class WebUI implements UI{
final private static Logger LOG = LoggerFactory.getLogger(WebUI.class);
private WebUIHandler actionHandler;
private Server server;
public WebUI(GenericQueryManager qm, InfrastructureManager inf){
actionHandler = new WebUIHandler(qm, inf);
silenceJettyLogger();
this.server = new Server(8888);
// Configure resourceHandler
ResourceHandler mainHandler = new ResourceHandler();
mainHandler.setDirectoriesListed(true);
mainHandler.setWelcomeFiles(new String[]{ "index.html" });
String baseDirectory = "webui";
URL url = this.getClass().getClassLoader().getResource(baseDirectory);
String basePath = url.toExternalForm();
//String path = WebUI.class.getResource("/webui").getPath();
//mainHandler.setResourceBase(url.getPath());
mainHandler.setResourceBase(basePath);
LOG.info("Web resource base: {}", mainHandler.getBaseResource());
// Configure servletHandler
ServletHandler sHandler = new ServletHandler();
ServletHolder sh = new ServletHolder(actionHandler);
sHandler.addServletWithMapping(sh, "/action");
// Configure all handlers
HandlerList handlers = new HandlerList();
handlers.setHandlers(new Handler[] { mainHandler, sHandler, new DefaultHandler() });
server.setHandler(handlers);
// Configure connector
ServerConnector http = new ServerConnector(server);
http.setHost("localhost");
http.setPort(8080);
http.setIdleTimeout(30000);
server.addConnector(http);
}
@Override
public void start() {
try {
server.start();
LOG.info("Web UI running at: {}", server.getURI());
server.join();
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void stop() {
// TODO Auto-generated method stub
}
private void silenceJettyLogger(){
final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger("org.eclipse.jetty");
if (!(logger instanceof ch.qos.logback.classic.Logger)) {
return;
}
ch.qos.logback.classic.Logger logbackLogger = (ch.qos.logback.classic.Logger) logger;
logbackLogger.setLevel(ch.qos.logback.classic.Level.INFO);
}
}