All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.cj.qunit.mojo.http.WebServerUtils Maven / Gradle / Ivy

There is a newer version: 3.0.0
Show newest version
package com.cj.qunit.mojo.http;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import org.apache.maven.plugin.logging.Log;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.util.log.Logger;
import org.httpobjects.HttpObject;
import org.httpobjects.jetty.HttpObjectsJettyHandler;
import org.httpobjects.util.ClasspathResourcesObject;
import org.httpobjects.util.FilesystemResourcesObject;

import com.cj.qunit.mojo.jetty.JettyMavenLogger;

public class WebServerUtils {
    
    public static void main(String[] args) {
        launchHttpServer("", Collections.emptyList(), Collections.emptyList(), "", null);
    }
    
    public static class JettyPlusPort {
        public final int port;
        public final Server server;
        private JettyPlusPort(int port, Server server) {
            super();
            this.port = port;
            this.server = server;
        }

    }

    public static JettyPlusPort launchHttpServer(final String webRoot, final List codePaths, final List extraPathsToServe, final String webPathToRequireDotJsConfig, final Logger log) {

        if(log!=null){
            org.eclipse.jetty.util.log.Log.setLog(log);
        }
        
        List pathsToServe = new ArrayList(codePaths);
        pathsToServe.addAll(extraPathsToServe);
        
        List resources = new ArrayList(Arrays.asList(new TestListingResource("/", webRoot, codePaths)));
        
        for(File projectDirectory: pathsToServe){
            resources.add(new FilesystemResourcesObject(webRoot + "/{resource*}", projectDirectory));
        }
        resources.add(new ClasspathResourcesObject("/qunit-mojo/{resource*}", WebServerUtils.class, "/qunit-mojo"));
        resources.add(new AutoGeneratedQunitHtmlWrappers(webRoot, webPathToRequireDotJsConfig));
        
        for(int port: new Integer[]{8098, 8198, 8298, 8398, 8498, 8598, 8695, 8796}){
            try{
                Server jetty = HttpObjectsJettyHandler.launchServer(port, resources.toArray(new HttpObject[]{}));
                return new JettyPlusPort(port, jetty);
            }catch(Exception e){
                System.out.println("Looks like port " + port + " didn't work for me.  I'm assuming it is in use?");
            }
        }

        throw new RuntimeException("Could not find a port to which to bind :(");
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy