/*
* Copyright 2012-2014 eBay Software Foundation and selendroid committers.
*
* 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 io.selendroid.testapp.server;
import java.io.File;
import java.util.Properties;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* Represent a simple client server browser app where the user can tell his name and then the server
* is saying hello.
*
* @author ddary
*
*/
public class HttpServer extends NanoHTTPD {
private boolean running = true;
private final Lock lock = new ReentrantLock();
private final Condition shutdownCondition = lock.newCondition();
private static HttpServer instance = null;
public synchronized static HttpServer getInstance() {
if (instance == null) {
instance = new HttpServer();
}
return instance;
}
private HttpServer() {
super(4450, new File("/"));
System.out.println("HTTP Server started on port 4450");
}
public Response serve(String uri, String method, Properties header, Properties parms,
Properties files) {
Logger.log("URI: " + uri);
if (uri.endsWith("/sayhello")) {
System.out.println("header: " + header);
System.out.println("parms: " + parms);
System.out.println("method: " + method);
StringBuffer html = new StringBuffer();
String name = parms.getProperty("name");
String car = parms.getProperty("car");
html.append("<html><head><title>Hello: " + name + "</title></head>");
html.append("<body>");
html.append("<h1>This is my way of saying hello</h1>");
html.append("<h2>Hello !</h2>");
html.append("<h3>Your name is:</h3>");
html.append(""" + name + """);
html.append("<h3>Your prefered car is:</h3>");
html.append(""" + car + """);
html.append("<br><hr>to start again click <a href='http://localhost:4450/'>here</a>");
html.append("</body></html>");
return new NanoHTTPD.Response(HTTP_OK, MIME_HTML, html.toString());
} else {
StringBuffer html = new StringBuffer();
html.append("<html><head><title>Say Hello Demo</title></head>");
html.append("<body>");
html.append("Hello, can you please tell me your name?");
html.append("<form name='myform' action='http://localhost:4450/sayhello' method='get'>");
html.append("<div align='center'><br><br>");
html.append("<input type='text' id='name_input' name='name' size='25' value='Enter your name here!'><br>");
html.append("<p>Prefered Car:<br>");
html.append("<select name='car'><option value=\"volvo\">Volvo</option>");
html.append("<option value=\"mercedes\">Mercedes</option>");
html.append("<option value=\"audi\">Audi</option></select></p>");
html.append("<br><input type='submit' value='Send me your name!'><br>");
html.append("</div></form>");
html.append("</body></html>");
return new NanoHTTPD.Response(HTTP_OK, MIME_HTML, html.toString());
}
}
public void waitUntilShutdown() throws InterruptedException {
lock.lock();
try {
while (running) {
shutdownCondition.await();
}
} finally {
lock.unlock();
}
}
}