private boolean hasFragments(KnotContext knotContext) { return knotContext.getFragments() != null && !knotContext.getFragments().isEmpty(); }
private boolean hasFragments(KnotContext knotContext) { return knotContext.getFragments() != null && !knotContext.getFragments().isEmpty(); }
private boolean hasFragments(KnotContext knotContext) { return knotContext.getFragments() != null && !knotContext.getFragments().isEmpty(); }
private String getResponseBodyAsString(KnotContext inputContext) { return Optional.ofNullable(inputContext.getFragments()) .map(fragments -> fragments.stream().map(Fragment::content).reduce( StringUtils.EMPTY, String::concat)) .orElse(RESPONSE); } }
private String getResponseBodyAsString(KnotContext inputContext) { return Optional.ofNullable(inputContext.getFragments()) .map(fragments -> fragments.stream().map(Fragment::content).reduce( StringUtils.EMPTY, String::concat)) .orElse(RESPONSE); } }
public static List<FormEntity> create(KnotContext context, ActionKnotOptions options) { List<FormEntity> forms = context.getFragments().stream() .filter(f -> !f.failed() && f.knots().stream().anyMatch(id -> id.startsWith(FRAGMENT_KNOT_PREFIX))) .map(f -> FormEntity.from(f, options)) .collect(Collectors.toList()); if (areUnique(forms)) { LOGGER.error("Form identifiers are not unique [{}]", forms.stream().map(FormEntity::identifier).toArray()); throw new IllegalStateException("Form identifiers are not unique!"); } return forms; }
private Fragment getFallback(Fragment failed, KnotContext knotContext, Map<String, Fragment> fallbackFragmentCache) { String fallbackId = failed.fallback().get(); Fragment result = fallbackFragmentCache.get(fallbackId); if (result == null) { result = knotContext.getFragments().stream() .filter(f -> f.isFallback()) .filter(f -> StringUtils.equals(fallbackId, f.getAttribute(FragmentConstants.FALLBACK_ID))) .findFirst() .orElse(null); if (result == null) { result = getGlobalFallback(failed) .orElseThrow(() -> { LOGGER.error("Fragment {} specifies fallback but no fallback snippet with id '{}' was found", failed, fallbackId); return new IllegalArgumentException(String.format("No fallback snippet with id '%s' was found", fallbackId)); }); } fallbackFragmentCache.put(fallbackId, result); } return result; }
private Fragment getFallback(Fragment failed, KnotContext knotContext, Map<String, Fragment> fallbackFragmentCache) { String fallbackId = failed.fallback().get(); Fragment result = fallbackFragmentCache.get(fallbackId); if (result == null) { result = knotContext.getFragments().stream() .filter(f -> f.isFallback()) .filter(f -> StringUtils.equals(fallbackId, f.getAttribute(FragmentConstants.FALLBACK_ID))) .findFirst() .orElse(null); if (result == null) { result = getGlobalFallback(failed) .orElseThrow(() -> { LOGGER.error("Fragment {} specifies fallback but no fallback snippet with id '{}' was found", failed, fallbackId); return new IllegalArgumentException(String.format("No fallback snippet with id '%s' was found", fallbackId)); }); } fallbackFragmentCache.put(fallbackId, result); } return result; }
@Override protected Single<KnotContext> processRequest(KnotContext knotContext) { return Single.create(observer -> { try { knotContext.setTransition(DEFAULT_TRANSITION); Optional.ofNullable(knotContext.getFragments()).ifPresent(fragments -> fragments.stream() .filter(this::shouldProcess) .forEach(fragment -> fragment.content(evaluateWithFallback(fragment))) ); observer.onSuccess(knotContext); } catch (Exception e) { observer.onError(e); } }); }
public static void toJson(KnotContext obj, JsonObject json) { if (obj.getClientRequest() != null) { json.put("clientRequest", obj.getClientRequest().toJson()); } if (obj.getClientResponse() != null) { json.put("clientResponse", obj.getClientResponse().toJson()); } if (obj.getFragments() != null) { JsonArray array = new JsonArray(); obj.getFragments().forEach(item -> array.add(item.toJson())); json.put("fragments", array); } if (obj.getTransition() != null) { json.put("transition", obj.getTransition()); } } }
private KnotContext createSuccessResponse(KnotContext inputContext) { return new KnotContext() .setClientRequest(inputContext.getClientRequest()) .setClientResponse(inputContext.getClientResponse()) .setFragments( Optional.ofNullable(inputContext.getFragments()).orElse(Collections.emptyList())) .setTransition(DEFAULT_TRANSITION); }
private KnotContext createSuccessResponse(KnotContext inputContext) { return new KnotContext() .setClientRequest(inputContext.getClientRequest()) .setClientResponse(inputContext.getClientResponse()) .setFragments( Optional.ofNullable(inputContext.getFragments()).orElse(Collections.emptyList())) .setTransition(DEFAULT_TRANSITION); }
@Override protected Single<KnotContext> processRequest(KnotContext knotContext) { return Optional.ofNullable(knotContext.getFragments()) .map(fragments -> Observable.fromIterable(fragments) .filter(this::shouldProcess) .doOnNext(this::traceFragment) .map(FragmentContext::from) .flatMapSingle( fragmentContext -> snippetProcessor.processSnippet(fragmentContext, knotContext)) .toList() ).orElse(Single.just(Collections.emptyList())) .map(result -> createSuccessResponse(knotContext)) .onErrorReturn(error -> processError(knotContext, error)); }
@Override protected Single<KnotContext> processRequest(KnotContext knotContext) { return Optional.ofNullable(knotContext.getFragments()) .map(fragments -> Observable.fromIterable(fragments) .filter(this::shouldProcess) .doOnNext(this::traceFragment) .map(FragmentContext::from) .flatMapSingle( fragmentContext -> snippetProcessor.processSnippet(fragmentContext, knotContext)) .toList() ).orElse(Single.just(Collections.emptyList())) .map(result -> createSuccessResponse(knotContext)) .onErrorReturn(error -> processError(knotContext, error)); }
@Override protected Single<KnotContext> processRequest(KnotContext knotContext) { if (hasFragments(knotContext)) { try { Map<String, Fragment> fallbackFragmentCache = Maps.newHashMap(); String joinedFragments = knotContext.getFragments().stream() .filter(f -> !f.isFallback()) .map(f -> processFragment(f, knotContext, fallbackFragmentCache)) .collect(Collectors.joining()); return Single.just(createSuccessResponse(knotContext, joinedFragments)); } catch (Exception ex) { LOGGER.error("Exception happened during Fragment assembly.", ex); return Single.just(processError(knotContext, ex)); } } else { LOGGER.error("Fragments are empty or not exists in KnotContext."); return Single.just(processError(knotContext, null)); } }
@Override protected Single<KnotContext> processRequest(KnotContext knotContext) { if (hasFragments(knotContext)) { try { Map<String, Fragment> fallbackFragmentCache = Maps.newHashMap(); String joinedFragments = knotContext.getFragments().stream() .filter(f -> !f.isFallback()) .map(f -> processFragment(f, knotContext, fallbackFragmentCache)) .collect(Collectors.joining()); return Single.just(createSuccessResponse(knotContext, joinedFragments)); } catch (Exception ex) { LOGGER.error("Exception happened during Fragment assembly.", ex); return Single.just(processError(knotContext, ex)); } } else { LOGGER.error("Fragments are empty or not exists in KnotContext."); return Single.just(processError(knotContext, null)); } }
@Override protected Single<KnotContext> processRequest(KnotContext knotContext) { if (hasFragments(knotContext)) { try { String joinedFragments = knotContext.getFragments().stream() .map(fragment -> configuration.unprocessedFragmentStrategy().get(fragment, patterns)) .collect(Collectors.joining()); return Single.just(createSuccessResponse(knotContext, joinedFragments)); } catch (Exception ex) { LOGGER.error("Exception happened during Fragment assembly.", ex); return Single.just(processError(knotContext, ex)); } } else { LOGGER.error("Fragments are empty or not exists in KnotContext."); return Single.just(processError(knotContext, null)); } }
@Test @KnotxApplyConfiguration("io/knotx/splitter/knotx-fragment-splitter-test.json") public void callSplitterWithManySnippets_expectNineFragments( VertxTestContext context, Vertx vertx) throws Exception { callFragmentSplitterWithAssertions(context, vertx, FileReader.readText("io/knotx/splitter/test-many-fragments.html"), knotContext -> { assertNotNull(knotContext.getFragments()); assertEquals(knotContext.getFragments().size(), 9); }); }
@Test @KnotxApplyConfiguration("io/knotx/splitter/knotx-fragment-splitter-test.json") public void callSplitterWithEmptyBody_expectNotFoundResponse( VertxTestContext context, Vertx vertx) { callFragmentSplitterWithAssertions(context, vertx, "", knotContext -> { assertEquals(knotContext.getClientResponse().getStatusCode(), HttpResponseStatus.NOT_FOUND.code()); assertNull(knotContext.getFragments()); }); }