Skip to content

Commit

Permalink
Moved HTTP implementation components to the appropriate package.
Browse files Browse the repository at this point in the history
  • Loading branch information
nmihajlovski committed Apr 24, 2016
1 parent db175a6 commit 5fe2ede
Show file tree
Hide file tree
Showing 45 changed files with 165 additions and 110 deletions.
Expand Up @@ -11,7 +11,7 @@
import org.rapidoid.data.Ranges;
import org.rapidoid.http.customize.Customization;
import org.rapidoid.http.handler.HttpHandler;
import org.rapidoid.http.impl.HandlerMatch;
import org.rapidoid.http.impl.*;
import org.rapidoid.http.processor.AbstractHttpProcessor;
import org.rapidoid.io.Upload;
import org.rapidoid.log.Log;
Expand Down Expand Up @@ -216,7 +216,7 @@ private static String validateRequest(Buf input, Range verb, Range uri) {
}

private HttpStatus tryGenericHandlers(Channel channel, boolean isKeepAlive, Req req) {
for (HttpHandler handler : routes.genericHandlers) {
for (HttpHandler handler : routes.genericHandlers()) {

HttpStatus status = handler.handle(channel, isKeepAlive, req, null);

Expand All @@ -234,7 +234,7 @@ public synchronized void resetConfig() {
}

public void notFound(Channel ctx, boolean isKeepAlive, HttpHandler fromHandler, Req req) {
List<HttpHandler> genericHandlers = routes.genericHandlers;
List<HttpHandler> genericHandlers = routes.genericHandlers();
int count = genericHandlers.size();

HttpStatus status = HttpStatus.NOT_FOUND;
Expand Down
Expand Up @@ -6,6 +6,7 @@
import org.rapidoid.buffer.Buf;
import org.rapidoid.data.Range;
import org.rapidoid.data.Ranges;
import org.rapidoid.http.impl.HttpParser;
import org.rapidoid.http.processor.HttpProcessor;
import org.rapidoid.net.Protocol;
import org.rapidoid.net.abstracts.Channel;
Expand Down
Expand Up @@ -10,6 +10,7 @@
import org.rapidoid.crypto.Crypto;
import org.rapidoid.http.customize.Customization;
import org.rapidoid.http.customize.JsonResponseRenderer;
import org.rapidoid.http.impl.PathPattern;
import org.rapidoid.io.Res;
import org.rapidoid.lambda.Mapper;
import org.rapidoid.serialize.Serialize;
Expand Down
Expand Up @@ -4,6 +4,7 @@
import org.rapidoid.annotation.Since;
import org.rapidoid.annotation.TransactionMode;
import org.rapidoid.commons.MediaType;
import org.rapidoid.http.impl.RouteOptions;

import java.util.Set;

Expand Down
Expand Up @@ -5,6 +5,8 @@
import org.rapidoid.annotation.TransactionMode;
import org.rapidoid.ctx.With;
import org.rapidoid.http.*;
import org.rapidoid.http.impl.HttpIO;
import org.rapidoid.http.impl.RouteOptions;
import org.rapidoid.jpa.JPA;
import org.rapidoid.lambda.Mapper;
import org.rapidoid.net.abstracts.Channel;
Expand Down
Expand Up @@ -5,7 +5,7 @@
import org.rapidoid.annotation.Since;
import org.rapidoid.commons.MediaType;
import org.rapidoid.http.HttpWrapper;
import org.rapidoid.http.RouteOptions;
import org.rapidoid.http.impl.RouteOptions;
import org.rapidoid.u.U;

import java.util.Map;
Expand Down
Expand Up @@ -25,7 +25,7 @@
import org.rapidoid.commons.MediaType;
import org.rapidoid.http.HttpStatus;
import org.rapidoid.http.Req;
import org.rapidoid.http.RouteOptions;
import org.rapidoid.http.impl.RouteOptions;
import org.rapidoid.http.impl.HandlerMatch;
import org.rapidoid.net.abstracts.Channel;

Expand Down
Expand Up @@ -25,7 +25,7 @@
import org.rapidoid.http.FastHttp;
import org.rapidoid.http.Req;
import org.rapidoid.http.ReqHandler;
import org.rapidoid.http.RouteOptions;
import org.rapidoid.http.impl.RouteOptions;
import org.rapidoid.net.abstracts.Channel;

@Authors("Nikolche Mihajlovski")
Expand Down
Expand Up @@ -24,7 +24,7 @@
import org.rapidoid.annotation.Since;
import org.rapidoid.http.FastHttp;
import org.rapidoid.http.Req;
import org.rapidoid.http.RouteOptions;
import org.rapidoid.http.impl.RouteOptions;
import org.rapidoid.net.abstracts.Channel;

@Authors("Nikolche Mihajlovski")
Expand Down
Expand Up @@ -22,10 +22,10 @@

import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Since;
import org.rapidoid.http.HttpIO;
import org.rapidoid.http.impl.HttpIO;
import org.rapidoid.http.HttpStatus;
import org.rapidoid.http.Req;
import org.rapidoid.http.RouteOptions;
import org.rapidoid.http.impl.RouteOptions;
import org.rapidoid.io.Res;
import org.rapidoid.net.abstracts.Channel;
import org.rapidoid.u.U;
Expand Down
Expand Up @@ -22,10 +22,10 @@

import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Since;
import org.rapidoid.http.HttpIO;
import org.rapidoid.http.impl.HttpIO;
import org.rapidoid.http.HttpStatus;
import org.rapidoid.http.Req;
import org.rapidoid.http.RouteOptions;
import org.rapidoid.http.impl.RouteOptions;
import org.rapidoid.net.abstracts.Channel;
import org.rapidoid.u.U;

Expand Down
Expand Up @@ -25,6 +25,8 @@
import org.rapidoid.commons.MediaType;
import org.rapidoid.http.*;
import org.rapidoid.http.customize.Customization;
import org.rapidoid.http.impl.HttpIO;
import org.rapidoid.http.impl.RouteOptions;
import org.rapidoid.io.Res;
import org.rapidoid.net.abstracts.Channel;
import org.rapidoid.u.U;
Expand Down
@@ -1,4 +1,4 @@
package org.rapidoid.http;
package org.rapidoid.http.impl;

import org.rapidoid.RapidoidThing;
import org.rapidoid.annotation.Authors;
Expand All @@ -8,6 +8,10 @@
import org.rapidoid.commons.MediaType;
import org.rapidoid.data.JSON;
import org.rapidoid.data.Range;
import org.rapidoid.http.HttpResponseCodes;
import org.rapidoid.http.HttpUtils;
import org.rapidoid.http.Req;
import org.rapidoid.http.Resp;
import org.rapidoid.http.customize.ErrorHandler;
import org.rapidoid.log.Log;
import org.rapidoid.net.abstracts.Channel;
Expand Down Expand Up @@ -171,6 +175,10 @@ public static void writeAsJson(Channel ctx, int code, boolean isKeepAlive, Objec
out.putNumAsText(posConLen, contentLength, false);
}

public static void writeContentLengthUnknown(Channel channel) {
channel.write(HttpIO.CONTENT_LENGTH_UNKNOWN);
}

public static void done(Channel ctx, boolean isKeepAlive) {
ctx.done();
ctx.closeIf(!isKeepAlive);
Expand Down
@@ -1,4 +1,4 @@
package org.rapidoid.http;
package org.rapidoid.http.impl;

import org.rapidoid.RapidoidThing;
import org.rapidoid.annotation.Authors;
Expand All @@ -12,6 +12,7 @@
import org.rapidoid.data.KeyValueRanges;
import org.rapidoid.data.Range;
import org.rapidoid.data.Ranges;
import org.rapidoid.http.HttpContentType;
import org.rapidoid.io.Upload;
import org.rapidoid.log.Log;
import org.rapidoid.net.impl.RapidoidHelper;
Expand Down
@@ -1,4 +1,4 @@
package org.rapidoid.http;
package org.rapidoid.http.impl;

import org.rapidoid.RapidoidThing;
import org.rapidoid.annotation.Authors;
Expand All @@ -12,13 +12,11 @@
import org.rapidoid.commons.Err;
import org.rapidoid.commons.Str;
import org.rapidoid.data.Range;
import org.rapidoid.http.*;
import org.rapidoid.http.customize.Customization;
import org.rapidoid.http.handler.HttpHandler;
import org.rapidoid.http.handler.ParamsAwareReqHandler;
import org.rapidoid.http.handler.StaticResourcesHandler;
import org.rapidoid.http.impl.HandlerMatch;
import org.rapidoid.http.impl.HandlerMatchWithParams;
import org.rapidoid.http.impl.RouteImpl;
import org.rapidoid.log.Log;
import org.rapidoid.u.U;
import org.rapidoid.util.Constants;
Expand Down Expand Up @@ -287,7 +285,7 @@ public synchronized void removeGenericHandler(HttpHandler handler) {
genericHandlers.remove(handler);
}

HandlerMatch findHandler(Buf buf, boolean isGet, Range verb, Range path) {
public HandlerMatch findHandler(Buf buf, boolean isGet, Range verb, Range path) {
Bytes bytes = buf.bytes();

if (isGet) {
Expand Down Expand Up @@ -508,4 +506,7 @@ public Customization custom() {
return customization;
}

public List<HttpHandler> genericHandlers() {
return genericHandlers;
}
}
@@ -1,4 +1,4 @@
package org.rapidoid.http;
package org.rapidoid.http.impl;

import org.rapidoid.RapidoidThing;
import org.rapidoid.annotation.Authors;
Expand Down
@@ -1,4 +1,4 @@
package org.rapidoid.http;
package org.rapidoid.http.impl;

import org.rapidoid.RapidoidThing;
import org.rapidoid.annotation.Authors;
Expand All @@ -7,6 +7,7 @@
import org.rapidoid.cls.Cls;
import org.rapidoid.commons.MediaType;
import org.rapidoid.commons.Str;
import org.rapidoid.http.*;
import org.rapidoid.http.customize.Customization;
import org.rapidoid.io.Upload;
import org.rapidoid.log.Log;
Expand Down Expand Up @@ -384,7 +385,7 @@ public synchronized Resp response() {
return response;
}

void startRendering(int code, boolean unknownContentLength) {
public void startRendering(int code, boolean unknownContentLength) {
if (!isRendering()) {
synchronized (this) {
if (!isRendering()) {
Expand Down Expand Up @@ -418,7 +419,7 @@ private void renderResponseHeaders(int code, MediaType contentType, boolean unkn

if (unknownContentLength) {
Buf out = channel.output();
channel.write(HttpIO.CONTENT_LENGTH_UNKNOWN);
HttpIO.writeContentLengthUnknown(channel);

posConLen = out.size();
channel.write(CR_LF);
Expand Down Expand Up @@ -694,11 +695,11 @@ public String toString() {
return verb() + " " + uri();
}

Channel channel() {
public Channel channel() {
return channel;
}

FastHttp http() {
public FastHttp http() {
return http;
}

Expand Down
@@ -1,24 +1,29 @@
package org.rapidoid.http;
package org.rapidoid.http.impl;

import org.rapidoid.RapidoidThing;
import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Since;
import org.rapidoid.cls.Cls;
import org.rapidoid.commons.MediaType;
import org.rapidoid.ctx.Ctxs;
import org.rapidoid.ctx.UserInfo;
import org.rapidoid.http.HttpUtils;
import org.rapidoid.http.Req;
import org.rapidoid.http.Resp;
import org.rapidoid.http.Screen;
import org.rapidoid.http.customize.LoginProvider;
import org.rapidoid.http.customize.PageRenderer;
import org.rapidoid.http.customize.RolesProvider;
import org.rapidoid.http.customize.ViewRenderer;
import org.rapidoid.http.impl.ReqImpl;
import org.rapidoid.http.impl.ResponseRenderer;
import org.rapidoid.u.U;
import org.rapidoid.util.Msc;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.OutputStream;
import java.nio.ByteBuffer;
import java.util.*;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/*
* #%L
Expand Down Expand Up @@ -330,7 +335,7 @@ public String toString() {

public byte[] renderToBytes() {
if (mvc()) {
return render();
return ResponseRenderer.render(req, this);

} else if (content() != null) {
return serializeResponseContent();
Expand All @@ -347,66 +352,6 @@ private byte[] serializeResponseContent() {
return HttpUtils.responseToBytes(content(), contentType(), req.http().custom().jsonResponseRenderer());
}

private byte[] render() {
Object guiContent = null;

if (content != null) {
content = wrapGuiContent(content);
model.put("content", content);
}

ViewRenderer viewRenderer = req.http().custom().viewRenderer();
U.must(viewRenderer != null, "A view renderer wasn't configured!");

PageRenderer pageRenderer = req.http().custom().pageRenderer();
U.must(pageRenderer != null, "A page renderer wasn't configured!");

boolean rendered;
String viewName = view();
ByteArrayOutputStream out = new ByteArrayOutputStream();
Object[] renderModel = content != null ? new Object[]{model, content} : new Object[]{model};

try {
rendered = viewRenderer.render(viewName, renderModel, out);
} catch (Throwable e) {
throw U.rte("Error while rendering view: " + viewName, e);
}

String renderResult = rendered ? new String(out.toByteArray()) : null;

if (renderResult == null) {
Object cnt = U.or(content(), "");
renderResult = new String(HttpUtils.responseToBytes(cnt, MediaType.HTML_UTF_8, null));
}

try {
Object result = U.or(pageRenderer.renderPage(req, this, renderResult), "");
return HttpUtils.responseToBytes(result, MediaType.HTML_UTF_8, null);

} catch (Exception e) {
throw U.rte("Error while rendering page!", e);
}
}

private Object wrapGuiContent(Object content) {
if (Msc.hasRapidoidGUI()) {
Object[] items = null;

if (content instanceof Collection<?>) {
items = U.array((Collection<?>) content);

} else if (content instanceof Object[]) {
items = (Object[]) content;
}

if (items != null) {
return Cls.newInstance(Cls.get("org.rapidoid.html.ElementGroup"), new Object[]{items});
}
}

return content;
}

@Override
public Screen title(String title) {
model().put("title", title);
Expand Down

0 comments on commit 5fe2ede

Please sign in to comment.