Skip to content

Commit c8a14c3

Browse files
committed
Remove Fragments from RequestEvent
1 parent f8ea947 commit c8a14c3

File tree

10 files changed

+128
-123
lines changed

10 files changed

+128
-123
lines changed

api/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ plugins {
2727
// Dependencies
2828
// -----------------------------------------------------------------------------
2929
dependencies {
30-
api("io.knotx:knotx-fragment-api:${project.version}")
3130
implementation("io.knotx:knotx-commons:${project.version}")
3231
implementation(group = "io.vertx", name = "vertx-web")
3332
implementation(group = "com.google.guava", name = "guava")

api/docs/asciidoc/dataobjects.adoc

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,6 @@ Final <code>ClientResponse</code> object for this request context.
8787
|[[clientRequest]]`@clientRequest`|`link:dataobjects.html#ClientRequest[ClientRequest]`|+++
8888
Currently processed <code>ClientRequest</code> details.
8989
+++
90-
|[[fragments]]`@fragments`|`Array of link:dataobjects.html#Fragment[Fragment]`|+++
91-
List of <code>io.knotx.fragment.Fragment</code> that are processed in the scope of the current request.
92-
+++
9390
|[[payload]]`@payload`|`Json object`|+++
9491
A <code>JsonObject</code> that contains payload of currently processed request. It may contain any
9592
additional data that is added during processing of the Request.

api/src/main/java/io/knotx/server/api/context/RequestEvent.java

Lines changed: 1 addition & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,8 @@
1515
*/
1616
package io.knotx.server.api.context;
1717

18-
import io.knotx.fragment.Fragment;
1918
import io.vertx.codegen.annotations.DataObject;
20-
import io.vertx.core.json.JsonArray;
2119
import io.vertx.core.json.JsonObject;
22-
import java.util.ArrayList;
23-
import java.util.List;
24-
import java.util.stream.Collectors;
2520

2621
/**
2722
* Contains information about currently processed request event.
@@ -30,31 +25,23 @@
3025
public class RequestEvent {
3126

3227
private static final String CLIENT_REQUEST_KEY = "clientRequest";
33-
private static final String FRAGMENTS_KEY = "fragments";
3428
private static final String PAYLOAD_KEY = "payload";
3529

3630
private final ClientRequest clientRequest;
37-
private final List<Fragment> fragments;
3831
private final JsonObject payload;
3932

40-
public RequestEvent(ClientRequest clientRequest, List<Fragment> fragments, JsonObject payload) {
33+
public RequestEvent(ClientRequest clientRequest, JsonObject payload) {
4134
this.clientRequest = clientRequest;
42-
this.fragments = fragments;
4335
this.payload = payload;
4436
}
4537

4638
public RequestEvent(ClientRequest clientRequest) {
4739
this.clientRequest = clientRequest;
48-
this.fragments = new ArrayList<>();
4940
this.payload = new JsonObject();
5041
}
5142

5243
public RequestEvent(JsonObject json) {
5344
this.clientRequest = new ClientRequest(json.getJsonObject(CLIENT_REQUEST_KEY));
54-
this.fragments = json.getJsonArray(FRAGMENTS_KEY).stream()
55-
.map(JsonObject.class::cast)
56-
.map(Fragment::new)
57-
.collect(Collectors.toList());
5845
this.payload = json.getJsonObject(PAYLOAD_KEY);
5946
}
6047

@@ -66,15 +53,6 @@ public ClientRequest getClientRequest() {
6653
return clientRequest;
6754
}
6855

69-
/**
70-
* List of {@code io.knotx.fragment.Fragment} that are processed in the scope of the current request.
71-
*
72-
* @return list of {@link Fragment} that are processed in the scope of the current request.
73-
*/
74-
public List<Fragment> getFragments() {
75-
return fragments;
76-
}
77-
7856
/**
7957
* A {@code JsonObject} that contains payload of currently processed request. It may contain any
8058
* additional data that is added during processing of the Request.
@@ -91,19 +69,15 @@ public JsonObject appendPayload(String key, Object value) {
9169
}
9270

9371
public JsonObject toJson() {
94-
final JsonArray fragmentsArray = new JsonArray();
95-
fragments.forEach(entry -> fragmentsArray.add(entry.toJson()));
9672
return new JsonObject()
9773
.put(CLIENT_REQUEST_KEY, clientRequest.toJson())
98-
.put(FRAGMENTS_KEY, fragmentsArray)
9974
.put(PAYLOAD_KEY, payload);
10075
}
10176

10277
@Override
10378
public String toString() {
10479
return "RequestEvent{" +
10580
"clientRequest=" + clientRequest +
106-
", fragments=" + fragments +
10781
", payload=" + payload +
10882
'}';
10983
}

assembler/build.gradle.kts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ plugins {
2727
// Dependencies
2828
// -----------------------------------------------------------------------------
2929
dependencies {
30-
implementation(project(":knotx-server-http-api"))
30+
api(project(":knotx-server-http-api"))
31+
api("io.knotx:knotx-fragment-api:${project.version}")
3132

3233
implementation(group = "org.apache.commons", name = "commons-lang3")
3334
testImplementation(group = "org.mockito", name = "mockito-core")

assembler/src/main/java/io/knotx/assembler/FragmentAssemblerHandler.java

Lines changed: 41 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,58 @@
1616
package io.knotx.assembler;
1717

1818
import io.knotx.fragment.Fragment;
19+
import io.knotx.server.api.context.RequestContext;
1920
import io.knotx.server.api.context.RequestEvent;
20-
import io.knotx.server.api.handler.RequestEventHandler;
21+
import io.knotx.server.api.handler.DefaultRequestContextEngine;
22+
import io.knotx.server.api.handler.RequestContextEngine;
2123
import io.knotx.server.api.handler.RequestEventHandlerResult;
2224
import io.netty.handler.codec.http.HttpResponseStatus;
25+
import io.vertx.core.Handler;
2326
import io.vertx.core.buffer.Buffer;
2427
import io.vertx.core.http.HttpHeaders;
28+
import io.vertx.core.logging.Logger;
29+
import io.vertx.core.logging.LoggerFactory;
2530
import io.vertx.reactivex.core.MultiMap;
31+
import io.vertx.reactivex.ext.web.RoutingContext;
32+
import java.util.List;
2633
import java.util.stream.Collectors;
2734
import org.apache.commons.lang3.StringUtils;
2835

29-
class FragmentAssemblerHandler extends RequestEventHandler {
36+
class FragmentAssemblerHandler implements Handler<RoutingContext> {
37+
38+
private static final Logger LOGGER = LoggerFactory.getLogger(FragmentAssemblerHandler.class);
39+
private static final String MISSING_FRAGMENTS_PAYLOAD = "Expected 'fragments' in the routing context are missing!";
40+
41+
private final RequestContextEngine engine;
42+
43+
FragmentAssemblerHandler() {
44+
engine = new DefaultRequestContextEngine(getClass().getSimpleName());
45+
}
3046

3147
@Override
32-
protected RequestEventHandlerResult handle(RequestEvent requestEvent) {
33-
final String responseBody = requestEvent.getFragments().stream()
34-
.map(Fragment::getBody)
35-
.collect(Collectors.joining());
48+
public void handle(RoutingContext context) {
49+
RequestContext requestContext = context.get(RequestContext.KEY);
50+
try {
51+
RequestEventHandlerResult result = joinFragmentsBodies(context, requestContext.getRequestEvent());
52+
engine.processAndSaveResult(result, context, requestContext);
53+
} catch (Exception e) {
54+
engine.handleFatal(context, requestContext, e);
55+
}
56+
}
57+
58+
RequestEventHandlerResult joinFragmentsBodies(RoutingContext context,
59+
RequestEvent requestEvent) {
60+
final List<Fragment> fragments = context.get("fragments");
61+
final String responseBody;
62+
63+
if (fragments != null) {
64+
responseBody = fragments.stream()
65+
.map(Fragment::getBody)
66+
.collect(Collectors.joining());
67+
} else {
68+
responseBody = "";
69+
LOGGER.warn(MISSING_FRAGMENTS_PAYLOAD);
70+
}
3671
return createSuccessResponse(requestEvent, responseBody);
3772
}
3873

assembler/src/test/java/io/knotx/assembler/FragmentAssemblerHandlerTest.java

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import static org.junit.jupiter.api.Assertions.assertEquals;
1919
import static org.junit.jupiter.api.Assertions.assertTrue;
20+
import static org.mockito.Mockito.when;
2021

2122
import io.knotx.fragment.Fragment;
2223
import io.knotx.server.api.context.ClientRequest;
@@ -26,7 +27,10 @@
2627
import io.vertx.core.buffer.Buffer;
2728
import io.vertx.core.http.HttpHeaders;
2829
import io.vertx.core.json.JsonObject;
30+
import io.vertx.reactivex.ext.web.RoutingContext;
2931
import java.util.Collections;
32+
import java.util.List;
33+
import org.junit.jupiter.api.DisplayName;
3034
import org.junit.jupiter.api.Test;
3135
import org.junit.jupiter.api.extension.ExtendWith;
3236
import org.mockito.Mock;
@@ -38,33 +42,39 @@ public class FragmentAssemblerHandlerTest {
3842
@Mock
3943
private ClientRequest clientRequest;
4044

45+
@Mock
46+
private RoutingContext routingContext;
47+
4148
@Test
49+
@DisplayName("Expect NO_CONTENT and empty body when no fragments in the routing context")
4250
public void callAssemblerWithNoFragments_expectNoContentStatus() {
4351
// given
4452
FragmentAssemblerHandler assemblerHandler = new FragmentAssemblerHandler();
4553
RequestEvent requestEvent = new RequestEvent(clientRequest);
4654

4755
// when
48-
final RequestEventHandlerResult result = assemblerHandler.handle(requestEvent);
56+
RequestEventHandlerResult result = assemblerHandler.joinFragmentsBodies(routingContext, requestEvent);
4957

5058
// then
5159
assertTrue(result.getRequestEvent().isPresent());
5260
assertEquals(HttpResponseStatus.NO_CONTENT.code(), result.getStatusCode().intValue());
5361
}
5462

5563
@Test
64+
@DisplayName("Expect OK and fragments body merged to client response body when fragments present in the routing context")
5665
public void callAssemblerWithFragment_expectAssemblerResultWithBodyAndOkStatus() {
5766
// given
58-
String expectedBody = "<h1>Some text</h1>\n"
59-
+ "<p>Some text</p>";
67+
String expectedBody = "<h1>Some text</h1>\n" + "<p>Some text</p>";
6068
FragmentAssemblerHandler assemblerHandler = new FragmentAssemblerHandler();
6169

62-
RequestEvent requestEvent = new RequestEvent(clientRequest,
63-
Collections.singletonList(new Fragment("_STATIC", new JsonObject(), expectedBody)),
64-
new JsonObject());
70+
List<Fragment> fragments = Collections
71+
.singletonList(new Fragment("_STATIC", new JsonObject(), expectedBody));
72+
when(routingContext.get("fragments")).thenReturn(fragments);
73+
74+
RequestEvent requestEvent = new RequestEvent(clientRequest, new JsonObject());
6575

6676
// when
67-
final RequestEventHandlerResult result = assemblerHandler.handle(requestEvent);
77+
RequestEventHandlerResult result = assemblerHandler.joinFragmentsBodies(routingContext, requestEvent);
6878

6979
// then
7080
assertTrue(result.getRequestEvent().isPresent());

splitter-html/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ plugins {
2828
// -----------------------------------------------------------------------------
2929
dependencies {
3030
api(project(":knotx-server-http-api"))
31+
api("io.knotx:knotx-fragment-api:${project.version}")
3132
implementation(group = "org.apache.commons", name = "commons-lang3")
3233

3334
testImplementation(group = "org.mockito", name = "mockito-core")

splitter-html/src/main/java/io/knotx/splitter/html/ClientResponseBodyExtractor.java

Lines changed: 0 additions & 66 deletions
This file was deleted.

0 commit comments

Comments
 (0)