package io.monokkel.mockserver; import org.simpleframework.http.Query; import org.simpleframework.http.Request; import org.simpleframework.http.Response; import org.simpleframework.http.core.Container; import org.simpleframework.http.core.ContainerServer; import org.simpleframework.transport.Server; import org.simpleframework.transport.connect.Connection; import org.simpleframework.transport.connect.SocketConnection; import org.slf4j.LoggerFactory; import java.io.IOException; import java.io.PrintStream; import java.net.InetSocketAddress; import java.net.SocketAddress; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * Created by tarjei on 13/06/14. */ public class WebServer implements Container, Runnable { private org.slf4j.Logger log = LoggerFactory.getLogger(WebServer.class); private final Integer port; private final Map<String, String> requestAndResponse; public WebServer(Integer port,Map<String,String> requestAndResponse) { this.port = port; this.requestAndResponse = requestAndResponse; } public void handle(Request request, Response response) { try { log.info("Request received {}",request); PrintStream body = response.getPrintStream(); long time = System.currentTimeMillis(); response.setValue("Content-Type", "text/plain"); response.setValue("Server", "AkkaCrawler Server 1.0"); response.setDate("Date", time); response.setDate("Last-Modified", time); final Query query = request.getQuery(); final String responseAttribute = (String) query.get("request"); if(responseAttribute != null){ final String writeBackResponseBody = requestAndResponse.get(responseAttribute); body.print(writeBackResponseBody); log.info("Response sent back {} ",writeBackResponseBody); } body.close(); } catch (Exception e) { e.printStackTrace(); } } public static void serveHtml(final Integer port,final Map<String, String> requestAndResponse) { final ExecutorService executorService = Executors.newCachedThreadPool(); executorService.execute(new WebServer(port,requestAndResponse)); } @Override public void run() { try { Server server = new ContainerServer(this); Connection connection = new SocketConnection(server); SocketAddress address = new InetSocketAddress(port); connection.connect(address); } catch (IOException e) { e.printStackTrace(); } } }