
foo.bar.TestRuntime Maven / Gradle / Ivy
package foo.bar;
import bz.gsn.djinn.core.build.BuildEnvironment;
import bz.gsn.djinn.core.module.Runtime;
import bz.gsn.djinn.core.resource.ResourceRegistry;
import foo.bar.annotations.RequestHandler;
import io.undertow.Undertow;
import io.undertow.server.handlers.CanonicalPathHandler;
import io.undertow.util.Headers;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.invoke.MethodHandle;
import java.nio.charset.StandardCharsets;
import java.util.Map;
public class TestRuntime extends Runtime {
private static final Logger log = LoggerFactory.getLogger(TestRuntime.class);
private final Map handles;
private final Map contentTypes;
private Undertow undertow;
public TestRuntime(RequestHandler.Detector detector) {
this.handles = detector.getMethodHandles();
this.contentTypes = detector.getContentTypes();
}
@Override
public void run(ResourceRegistry resourceRegistry) {
log.info("I'm from the TestRuntime.");
System.out.println("Build variables are " + BuildEnvironment.getBuildEnvironment().getProperties());
log.info("Running Undertow on port 8080");
this.undertow = Undertow.builder()
.addHttpListener(8080, "localhost")
.setHandler(new CanonicalPathHandler(
exchange -> {
var log = LoggerFactory.getLogger("path-handler");
var path = exchange.getRelativePath();
if(!path.endsWith("/")) path += "/";
log.info("Requested for {}", path);
try {
if(handles.containsKey(path)) {
exchange.setStatusCode(200);
log.info("Invoking path handler for {}", path);
exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, contentTypes.get(path));
exchange.getResponseSender().send(handles.get(path).invoke().toString()); // static method
} else {
exchange.setStatusCode(404);
exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
exchange.getResponseSender().send("404!", StandardCharsets.UTF_8);
}
} catch(Throwable e) {
throw new RuntimeException(e);
}
}
))
.build();
this.undertow.start();
}
@Override
public void stop(ResourceRegistry ignore) {
this.undertow.stop();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy