From 9b5c1c859a60229beb20aa9bd4480f82786ff717 Mon Sep 17 00:00:00 2001
From: Mikolaj Izdebski <mizdebsk@redhat.com>
Date: Fri, 30 Jan 2015 13:16:40 +0100
Subject: [PATCH 10/17] Port from Simple 4 to Jetty 9

---
 gradle/dependencies.gradle                    |  6 +-
 subprojects/javascript/javascript.gradle      |  2 +-
 .../simple/SimpleHttpFileServerFactory.java   | 38 ++++-----
 .../internal/SimpleFileServerContainer.java   | 82 -------------------
 4 files changed, 23 insertions(+), 105 deletions(-)
 delete mode 100644 subprojects/javascript/src/main/java/org/gradle/plugins/javascript/envjs/http/simple/internal/SimpleFileServerContainer.java

diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle
index 54dc27d7fbe..96ff6f58fee 100755
--- a/gradle/dependencies.gradle
+++ b/gradle/dependencies.gradle
@@ -68,12 +68,12 @@ libraries.logback_classic = dependencies.module('ch.qos.logback:logback-classic:
 }
 
 // Jetty
-libraries.servlet_api = "org.mortbay.jetty:servlet-api:2.5-20081211@jar"
-libraries.jetty_util = dependencies.module("org.mortbay.jetty:jetty-util:6.1.26") {
+libraries.servlet_api = "javax.servlet:javax.servlet-api"
+libraries.jetty_util = dependencies.module("org.eclipse.jetty:jetty-util") {
     dependency libraries.slf4j_api
     dependency libraries.servlet_api
 }
-libraries.jetty = dependencies.module("org.mortbay.jetty:jetty:6.1.26") {
+libraries.jetty = dependencies.module("org.eclipse.jetty:jetty-server") {
     dependency libraries.jetty_util
     dependency libraries.servlet_api
 }
diff --git a/subprojects/javascript/javascript.gradle b/subprojects/javascript/javascript.gradle
index 1e94bd8de68..18970197521 100644
--- a/subprojects/javascript/javascript.gradle
+++ b/subprojects/javascript/javascript.gradle
@@ -19,7 +19,7 @@ dependencies {
 
     compile "org.mozilla:rhino:1.7R3"
     compile libraries.gson // used by JsHint
-    compile "org.simpleframework:simple:4.1.21" // used by http package in envjs
+    compile libraries.jetty // used by http package in envjs
     compile project(':core'), project(":plugins"), project(':workers')
     compile libraries.inject
 
diff --git a/subprojects/javascript/src/main/java/org/gradle/plugins/javascript/envjs/http/simple/SimpleHttpFileServerFactory.java b/subprojects/javascript/src/main/java/org/gradle/plugins/javascript/envjs/http/simple/SimpleHttpFileServerFactory.java
index 8a4f692cf4e..6983db21cb4 100644
--- a/subprojects/javascript/src/main/java/org/gradle/plugins/javascript/envjs/http/simple/SimpleHttpFileServerFactory.java
+++ b/subprojects/javascript/src/main/java/org/gradle/plugins/javascript/envjs/http/simple/SimpleHttpFileServerFactory.java
@@ -16,43 +16,43 @@
 
 package org.gradle.plugins.javascript.envjs.http.simple;
 
+import org.eclipse.jetty.server.Handler;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.handler.DefaultHandler;
+import org.eclipse.jetty.server.handler.HandlerList;
+import org.eclipse.jetty.server.handler.ResourceHandler;
 import org.gradle.api.UncheckedIOException;
 import org.gradle.internal.concurrent.Stoppable;
 import org.gradle.plugins.javascript.envjs.http.HttpFileServer;
 import org.gradle.plugins.javascript.envjs.http.HttpFileServerFactory;
-import org.gradle.plugins.javascript.envjs.http.simple.internal.SimpleFileServerContainer;
-import org.simpleframework.http.core.Container;
-import org.simpleframework.http.core.ContainerServer;
-import org.simpleframework.http.resource.FileContext;
-import org.simpleframework.transport.Server;
-import org.simpleframework.transport.connect.Connection;
-import org.simpleframework.transport.connect.SocketConnection;
 
 import java.io.File;
-import java.io.IOException;
-import java.net.InetSocketAddress;
 
 public class SimpleHttpFileServerFactory implements HttpFileServerFactory {
 
     public HttpFileServer start(File contentRoot, int port) {
-        Container container = new SimpleFileServerContainer(new FileContext(contentRoot));
-
         try {
-            final Server server = new ContainerServer(container);
-            Connection connection = new SocketConnection(server);
-            InetSocketAddress address = new InetSocketAddress(port);
-            InetSocketAddress usedAddress = (InetSocketAddress)connection.connect(address);
+            final Server server = new Server(8080);
+
+            ResourceHandler handler = new ResourceHandler();
+            handler.setResourceBase(contentRoot.getPath());
+
+            HandlerList handlers = new HandlerList();
+            handlers.setHandlers(new Handler[] { handler, new DefaultHandler() });
+            server.setHandler(handlers);
+
+            server.start();
 
-            return new SimpleHttpFileServer(contentRoot, usedAddress.getPort(), new Stoppable() {
+            return new SimpleHttpFileServer(contentRoot, port, new Stoppable() {
                 public void stop() {
                     try {
-                        server.stop();
-                    } catch (IOException e) {
+                        server.join();
+                    } catch (InterruptedException e) {
                         throw new UncheckedIOException(e);
                     }
                 }
             });
-        } catch (IOException e) {
+        } catch (Exception e) {
             throw new UncheckedIOException(e);
         }
     }
diff --git a/subprojects/javascript/src/main/java/org/gradle/plugins/javascript/envjs/http/simple/internal/SimpleFileServerContainer.java b/subprojects/javascript/src/main/java/org/gradle/plugins/javascript/envjs/http/simple/internal/SimpleFileServerContainer.java
deleted file mode 100644
index 5d67baeeae1..00000000000
--- a/subprojects/javascript/src/main/java/org/gradle/plugins/javascript/envjs/http/simple/internal/SimpleFileServerContainer.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright 2012 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.gradle.plugins.javascript.envjs.http.simple.internal;
-
-import org.apache.commons.io.IOUtils;
-import org.gradle.api.UncheckedIOException;
-import org.simpleframework.http.Request;
-import org.simpleframework.http.Response;
-import org.simpleframework.http.core.Container;
-import org.simpleframework.http.resource.Context;
-import org.simpleframework.http.resource.Index;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.Reader;
-import java.nio.charset.Charset;
-
-public class SimpleFileServerContainer implements Container {
-
-    private final Context context;
-
-    public SimpleFileServerContainer(Context context) {
-        this.context = context;
-    }
-
-    public void handle(Request req, Response resp) {
-        Index requestIndex = context.getIndex(req.getTarget());
-        File targetFile = requestIndex.getFile();
-
-        if (!targetFile.exists()) {
-            resp.setCode(404);
-            resp.setText("Not Found");
-            try {
-                resp.getPrintStream().println(String.format("File '%s' does not exist", targetFile.getAbsolutePath()));
-                resp.commit();
-            } catch (IOException e) {
-                throw new UncheckedIOException(e);
-            }
-        }
-
-        String contentType = requestIndex.getContentType();
-        resp.set("Content-Type", contentType);
-
-        OutputStream output = null;
-        try {
-            output = resp.getOutputStream();
-
-            if (contentType.startsWith("text/")) {
-                resp.set("Content-Encoding", Charset.defaultCharset().name());
-                Reader input = new FileReader(requestIndex.getFile());
-                IOUtils.copy(input, output);
-                IOUtils.closeQuietly(input);
-            } else {
-                InputStream input = new FileInputStream(requestIndex.getFile());
-                IOUtils.copy(input, output);
-                IOUtils.closeQuietly(input);
-            }
-        } catch (IOException e) {
-            throw new UncheckedIOException(e);
-        } finally {
-            IOUtils.closeQuietly(output);
-        }
-    }
-}
-- 
2.17.2

