You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by je...@apache.org on 2019/08/28 20:24:29 UTC

[sling-whiteboard] 01/02: Implementing multiple transformation steps

This is an automated email from the ASF dual-hosted git repository.

jeb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git

commit ae12a8cea09920478388c8ad69b5a180f63795f6
Author: JE Bailey <je...@apache.org>
AuthorDate: Fri Aug 23 15:45:38 2019 -0400

    Implementing multiple transformation steps
---
 .../org/apache/sling/transformer/TransformationContext.java   |  5 ++++-
 .../java/org/apache/sling/transformer/TransformationStep.java |  2 +-
 .../org/apache/sling/transformer/impl/LinkTransformer.java    |  4 ++--
 .../sling/transformer/impl/TransformationContextImpl.java     |  7 +++++--
 .../apache/sling/transformer/impl/TransformationFilter.java   | 11 ++++++++---
 .../apache/sling/transformer/impl/TransformationResponse.java |  9 +++++----
 .../sling/transformer/impl/TransformationStepWrapper.java     |  5 +++--
 .../apache/sling/transformer/impl/TransformationWriter.java   |  7 ++++---
 8 files changed, 32 insertions(+), 18 deletions(-)

diff --git a/transformer/src/main/java/org/apache/sling/transformer/TransformationContext.java b/transformer/src/main/java/org/apache/sling/transformer/TransformationContext.java
index 9aa3110..fb355f4 100644
--- a/transformer/src/main/java/org/apache/sling/transformer/TransformationContext.java
+++ b/transformer/src/main/java/org/apache/sling/transformer/TransformationContext.java
@@ -20,6 +20,7 @@ import java.io.IOException;
 import java.io.OutputStream;
 import java.io.PrintWriter;
 import java.util.Map;
+import java.util.stream.Stream;
 
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
@@ -50,7 +51,9 @@ public interface TransformationContext {
      */
     OutputStream getOutputStream() throws IOException;
 
-    Map<String, Object> getContext();
+    Map<String, Object> getStateMap();
 
     void next(HtmlElement... elements);
+
+    Stream<HtmlElement> getElements();
 }
diff --git a/transformer/src/main/java/org/apache/sling/transformer/TransformationStep.java b/transformer/src/main/java/org/apache/sling/transformer/TransformationStep.java
index 3a6e2d3..ed1c134 100644
--- a/transformer/src/main/java/org/apache/sling/transformer/TransformationStep.java
+++ b/transformer/src/main/java/org/apache/sling/transformer/TransformationStep.java
@@ -20,6 +20,6 @@ import org.apache.sling.commons.html.HtmlElement;
 
 public interface TransformationStep {
 
-    public void handle(HtmlElement element, TransformationContext process);
+    public void handle(HtmlElement element, TransformationContext context);
 
 }
diff --git a/transformer/src/main/java/org/apache/sling/transformer/impl/LinkTransformer.java b/transformer/src/main/java/org/apache/sling/transformer/impl/LinkTransformer.java
index 6755e99..d193d62 100644
--- a/transformer/src/main/java/org/apache/sling/transformer/impl/LinkTransformer.java
+++ b/transformer/src/main/java/org/apache/sling/transformer/impl/LinkTransformer.java
@@ -37,7 +37,7 @@ public class LinkTransformer implements TransformationStep {
 
     public void handle(HtmlElement element, TransformationContext process) {
 
-        Map<String, Object> context = process.getContext();
+        Map<String, Object> context = process.getStateMap();
         State current = (State) context.getOrDefault("currentState", State.OUT);
 
         MessageDigest d = (MessageDigest) context.computeIfAbsent("hash", (value) -> {
@@ -74,7 +74,7 @@ public class LinkTransformer implements TransformationStep {
             case END_TAG:
                 if (element.getValue().equalsIgnoreCase("body")) {
                     String headerValue = Base64.getEncoder().encodeToString(d.digest());
-                    process.getResponse().setHeader("X-Sucks", headerValue);
+                    process.getResponse().setHeader("Sucks", headerValue);
                     HtmlElement br = ElementFactory.create(HtmlElementType.START_TAG, "br");
                     br.setAttribute("data-hash",headerValue );
                     process.next(br);
diff --git a/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationContextImpl.java b/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationContextImpl.java
index 116aa43..b62d343 100644
--- a/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationContextImpl.java
+++ b/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationContextImpl.java
@@ -28,6 +28,7 @@ import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.commons.html.Html;
 import org.apache.sling.commons.html.HtmlElement;
 import org.apache.sling.transformer.TransformationContext;
+import org.apache.sling.transformer.TransformationStep;
 import org.osgi.annotation.versioning.ProviderType;
 
 /**
@@ -47,10 +48,12 @@ public class TransformationContextImpl implements TransformationContext {
     private SlingHttpServletRequest request;
     private SlingHttpServletResponse response;
     private boolean reset;
+    private List<TransformationStep> steps;
 
-    public TransformationContextImpl(SlingHttpServletRequest request, SlingHttpServletResponse response) {
+    public TransformationContextImpl(SlingHttpServletRequest request, SlingHttpServletResponse response, List<TransformationStep> steps) {
         this.request = request;
         this.response = response;
+        this.steps = steps;
     }
 
     /**
@@ -79,7 +82,7 @@ public class TransformationContextImpl implements TransformationContext {
         return list.stream();
     }
 
-    public Map<String, Object> getContext() {
+    public Map<String, Object> getStateMap() {
         return context;
     }
 
diff --git a/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationFilter.java b/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationFilter.java
index 15c31b8..1787500 100644
--- a/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationFilter.java
+++ b/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationFilter.java
@@ -17,6 +17,7 @@
 package org.apache.sling.transformer.impl;
 
 import java.io.IOException;
+import java.util.List;
 
 import javax.servlet.Filter;
 import javax.servlet.FilterChain;
@@ -27,6 +28,8 @@ import javax.servlet.ServletResponse;
 
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
+import org.apache.sling.transformer.TransformationContext;
+import org.apache.sling.transformer.TransformationManager;
 import org.apache.sling.transformer.TransformationStep;
 import org.osgi.framework.Constants;
 import org.osgi.service.component.annotations.Component;
@@ -41,7 +44,7 @@ import org.osgi.service.component.annotations.Reference;
 public class TransformationFilter implements Filter {
 
     @Reference
-    private TransformationStep pipelineManager;
+    private TransformationManager manager;
 
     /**
      * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
@@ -73,9 +76,11 @@ public class TransformationFilter implements Filter {
         final SlingHttpServletRequest slingRequest = (SlingHttpServletRequest) request;
         final SlingHttpServletResponse slingResponse = (SlingHttpServletResponse) response;
         
+        List<TransformationStep> steps = manager.getSteps(slingRequest);
+        
         if (slingRequest.getRequestURI().endsWith(".html")){
-            TransformationContextImpl stepProcess = new TransformationContextImpl(slingRequest, slingResponse);
-            response = new TransformationResponse(stepProcess);
+            TransformationContext context = new TransformationContextImpl(slingRequest, slingResponse, steps);
+            response = new TransformationResponse(context);
         }
 
         chain.doFilter(request, response);
diff --git a/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationResponse.java b/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationResponse.java
index 6e779ef..62b70d5 100644
--- a/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationResponse.java
+++ b/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationResponse.java
@@ -20,6 +20,7 @@ import java.io.IOException;
 import java.io.PrintWriter;
 
 import org.apache.sling.api.wrappers.SlingHttpServletResponseWrapper;
+import org.apache.sling.transformer.TransformationContext;
 
 class TransformationResponse
     extends SlingHttpServletResponseWrapper {
@@ -28,12 +29,12 @@ class TransformationResponse
     private PrintWriter writer;
 
 
-    private TransformationContextImpl process;
+    private TransformationContext process;
 
 
-    public TransformationResponse(TransformationContextImpl process) {
-        super(process.getResponse());
-        this.process = process;
+    public TransformationResponse(TransformationContext context) {
+        super(context.getResponse());
+        this.process = context;
     }
 
     /**
diff --git a/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationStepWrapper.java b/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationStepWrapper.java
index 3fe406d..c22bb93 100644
--- a/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationStepWrapper.java
+++ b/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationStepWrapper.java
@@ -20,6 +20,7 @@ import java.util.function.Function;
 import java.util.stream.Stream;
 
 import org.apache.sling.commons.html.HtmlElement;
+import org.apache.sling.transformer.TransformationContext;
 import org.apache.sling.transformer.TransformationStep;
 
 /**
@@ -30,9 +31,9 @@ import org.apache.sling.transformer.TransformationStep;
 public class TransformationStepWrapper implements Function<HtmlElement, Stream<HtmlElement>> {
 
     private TransformationStep tStep;
-    private TransformationContextImpl transformationContext;
+    private TransformationContext transformationContext;
 
-    public TransformationStepWrapper(TransformationStep step,TransformationContextImpl context) {
+    public TransformationStepWrapper(TransformationStep step,TransformationContext context) {
         this.tStep = step;
         this.transformationContext = context;
     }
diff --git a/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationWriter.java b/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationWriter.java
index e84b8a4..5510b64 100644
--- a/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationWriter.java
+++ b/transformer/src/main/java/org/apache/sling/transformer/impl/TransformationWriter.java
@@ -22,6 +22,7 @@ import java.util.stream.Collectors;
 
 import org.apache.sling.commons.html.Html;
 import org.apache.sling.commons.html.util.HtmlElements;
+import org.apache.sling.transformer.TransformationContext;
 
 public class TransformationWriter extends Writer {
 
@@ -29,9 +30,9 @@ public class TransformationWriter extends Writer {
 
     private TransformationStepWrapper wrapper;
 
-    public TransformationWriter(TransformationContextImpl process) throws IOException {
-        this.originalWriter = process.getWriter();
-        this.wrapper = new TransformationStepWrapper(new LinkTransformer(), process);
+    public TransformationWriter(TransformationContext context) throws IOException {
+        this.originalWriter = context.getWriter();
+        this.wrapper = new TransformationStepWrapper(new LinkTransformer(), context);
     }
 
     @Override