package examples.files;

import com.vtence.molecule.WebServer;
import com.vtence.molecule.middlewares.ApacheCommonLogger;
import com.vtence.molecule.middlewares.FileServer;
import com.vtence.molecule.middlewares.StaticAssets;

import java.io.IOException;
import java.util.logging.Logger;

import static com.vtence.molecule.testing.ResourceLocator.locateOnClasspath;

/**
 * <p>
 * In this example we setup the server to run a single application that serves static files.
 * </p>
 * <p>
 * We want to serve the files located in the <code>src/test/resources/examples/fox</code> directory.
 * We'd like a request to the root of the server to serve the <code>index.html</code> file under that directory.
 * </p>
 * <p>
 * To see the server's activity, we use the apache common logger middleware to log all requests and status to the
 * standard output.
 * </p>
 */
public class StaticFilesExample {

    private final Logger logger;

    public StaticFilesExample(Logger logger) {
        this.logger = logger;
    }

    public void run(WebServer server) throws IOException {
        // Setup the file server and tell it to serve files located under the examples/fox directory.
        FileServer files = new FileServer(locateOnClasspath("examples/fox"));
        // Serve static assets (e.g. js files, images, css files, etc) for any request starting at the root path.
        // This will in effect serve every request with static assets.
        // Typically you would specify more specific paths to serve, such as /css, /js, /images, etc.
        StaticAssets assets = new StaticAssets(files).serve("/");
        // If a request targets a directory - the request path ends with "/" -
        // serve the index.html file located in that directory (the default behavior).
        assets.index("index.html");

        // The optional warmup block is executed once at startup as a boot sequence
        server.warmup(app -> logger.info("Ready to serve files"))
              // The apache common logger logs all accesses to the server in apache common log format,
              // so we can see what we're serving.
              .add(new ApacheCommonLogger(logger))
              .start(assets);
    }

    public static void main(String[] args) throws IOException {
        // We choose to log all server accesses to the console
        StaticFilesExample example = new StaticFilesExample(Logging.toConsole());
        WebServer webServer = WebServer.create();
        example.run(webServer);
        System.out.println("Access at " + webServer.uri());
    }
}

@@ -373,16 +373,20 @@
 * %3Cp%3E%0A *
+    
  In this
@@ -485,16 +485,20 @@
 * %3Cp%3E%0A *
+    
  We want
@@ -590,16 +590,20 @@
 tory.%0A *
+    
  We'd li
@@ -722,16 +722,20 @@
 * %3Cp%3E%0A *
+    
  To see 
@@ -840,16 +840,20 @@
 o the%0A *
+    
  standar

Reformat javadoc