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

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


The following commit(s) were added to refs/heads/master by this push:
     new 80a040a  SLING-9986 fix scripting outputs
80a040a is described below

commit 80a040a926f7b4b404f67b68ae41304cf3ae35c3
Author: Nicolas Peltier <[email protected]>
AuthorDate: Thu Jan 14 19:27:01 2021 +0100

    SLING-9986 fix scripting outputs
    
    - fix ability to set outputs from command line,
    - add simple date formatting for outputs
---
 .../java/org/apache/sling/pipes/OutputWriter.java  | 27 ++++++++++++++++++++++
 .../sling/pipes/internal/CommandExecutorImpl.java  | 21 +++++++++--------
 .../org/apache/sling/pipes/internal/CsvWriter.java |  7 +-----
 .../apache/sling/pipes/internal/JsonWriter.java    | 12 +---------
 .../pipes/internal/CommandExecutorImplTest.java    |  9 ++------
 5 files changed, 43 insertions(+), 33 deletions(-)

diff --git a/src/main/java/org/apache/sling/pipes/OutputWriter.java 
b/src/main/java/org/apache/sling/pipes/OutputWriter.java
index a2c0298..9c020d0 100644
--- a/src/main/java/org/apache/sling/pipes/OutputWriter.java
+++ b/src/main/java/org/apache/sling/pipes/OutputWriter.java
@@ -25,10 +25,19 @@ import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
 import java.io.Writer;
+import java.text.SimpleDateFormat;
+import java.time.Instant;
+import java.time.ZoneId;
+import java.time.ZoneOffset;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+
+import static org.apache.commons.lang3.StringUtils.EMPTY;
 import static org.apache.sling.pipes.internal.CommandUtil.stringToMap;
 
 /**
@@ -194,6 +203,24 @@ public abstract class OutputWriter {
         }
     }
 
+    protected String computeValue(String key) {
+        String value = EMPTY;
+        try {
+            Object o = pipe.getBindings().instantiateObject((String) 
customOutputs.get(key));
+            if (o != null) {
+                if (o instanceof Calendar) {
+                    Instant i = ((Calendar)o).toInstant();
+                    value = 
DateTimeFormatter.ISO_LOCAL_DATE_TIME.withZone(ZoneId.from(ZoneOffset.UTC)).format(i);
+                } else {
+                    value = o.toString();
+                }
+            }
+        } catch (RuntimeException e) {
+            LOG.debug("unable to write entry {}, will write empty value", key, 
e);
+        }
+        return value;
+    }
+
     @Override
     public String toString() {
         return writer.toString();
diff --git 
a/src/main/java/org/apache/sling/pipes/internal/CommandExecutorImpl.java 
b/src/main/java/org/apache/sling/pipes/internal/CommandExecutorImpl.java
index b1858bf..231ca60 100644
--- a/src/main/java/org/apache/sling/pipes/internal/CommandExecutorImpl.java
+++ b/src/main/java/org/apache/sling/pipes/internal/CommandExecutorImpl.java
@@ -64,6 +64,7 @@ import static org.apache.commons.lang3.StringUtils.EMPTY;
 import static org.apache.sling.pipes.internal.CommandUtil.keyValuesToArray;
 import static org.apache.sling.pipes.internal.CommandUtil.writeToMap;
 
+import javax.json.Json;
 import javax.json.JsonException;
 import javax.servlet.Servlet;
 
@@ -219,8 +220,11 @@ public class CommandExecutorImpl extends 
AbstractPlumberServlet implements Comma
             writeToMap(bMap, true, options.with);
         }
         OutputWriter writer = new NopWriter();
-        if (options.writer != null){
-            writer = options.writer;
+        if (options.outputs != null){
+            writer = new JsonWriter();
+            Map<String, Object> outputs = new HashMap<>();
+            CommandUtil.writeToMap(outputs, true, options.outputs);
+            writer.setCustomOutputs(outputs);
         }
         writer.starts();
         return plumber.execute(resolver, path, bMap, writer, true);
@@ -275,7 +279,7 @@ public class CommandExecutorImpl extends 
AbstractPlumberServlet implements Comma
         String expr;
         String[] with;
         String[] bindings;
-        OutputWriter writer;
+        String[] outputs;
 
         @Override
         public String toString() {
@@ -285,16 +289,12 @@ public class CommandExecutorImpl extends 
AbstractPlumberServlet implements Comma
                 ", expr='" + expr + '\'' +
                 ", with=" + Arrays.toString(with) +
                 ", bindings=" + Arrays.toString(bindings) +
-                ", writer=" + writer +
+                ", outputs=" + Arrays.toString(outputs) +
                 '}';
         }
 
         void setOutputs(List<String> values) {
-            this.writer = new JsonWriter();
-            String[] list = keyValuesToArray(values);
-            Map<String, Object> outputs = new HashMap<>();
-            CommandUtil.writeToMap(outputs, true, list);
-            this.writer.setCustomOutputs(outputs);
+            this.outputs = keyValuesToArray(values);
         }
 
         /**
@@ -378,6 +378,9 @@ public class CommandExecutorImpl extends 
AbstractPlumberServlet implements Comma
             if (bindings != null){
                 builder.bindings(bindings);
             }
+            if (outputs != null) {
+                builder.outputs(outputs);
+            }
         }
     }
 
diff --git a/src/main/java/org/apache/sling/pipes/internal/CsvWriter.java 
b/src/main/java/org/apache/sling/pipes/internal/CsvWriter.java
index 1178626..6cc243d 100644
--- a/src/main/java/org/apache/sling/pipes/internal/CsvWriter.java
+++ b/src/main/java/org/apache/sling/pipes/internal/CsvWriter.java
@@ -60,12 +60,7 @@ public class CsvWriter extends OutputWriter {
         if (key.equals(PATH_KEY)){
             elts.add(resource.getPath());
         } else if (customOutputs != null) {
-            try {
-                
elts.add(pipe.getBindings().instantiateExpression((String)customOutputs.get(key)));
-            } catch (RuntimeException e){
-                LOGGER.error("unable to evaluate {}, will write empty value", 
customOutputs.get(key), e);
-                elts.add(StringUtils.EMPTY);
-            }
+            elts.add(computeValue(key));
         }
     }
 
diff --git a/src/main/java/org/apache/sling/pipes/internal/JsonWriter.java 
b/src/main/java/org/apache/sling/pipes/internal/JsonWriter.java
index 37d7f11..f4451ca 100644
--- a/src/main/java/org/apache/sling/pipes/internal/JsonWriter.java
+++ b/src/main/java/org/apache/sling/pipes/internal/JsonWriter.java
@@ -71,17 +71,7 @@ public class JsonWriter extends OutputWriter {
             jsonGenerator.writeStartObject();
             jsonGenerator.write(PATH_KEY, resource.getPath());
             for (Map.Entry<String, Object> entry : customOutputs.entrySet()) {
-                try {
-                    Object o = pipe.getBindings().instantiateObject((String) 
entry.getValue());
-                    if (o instanceof JsonValue) {
-                        jsonGenerator.write(entry.getKey(), (JsonValue) o);
-                    } else {
-                        jsonGenerator.write(entry.getKey(), o.toString());
-                    }
-                } catch (RuntimeException e) {
-                    LOGGER.error("unable to write entry {}, will write empty 
value", entry, e);
-                    jsonGenerator.write(entry.getKey(), StringUtils.EMPTY);
-                }
+                jsonGenerator.write(entry.getKey(), 
computeValue(entry.getKey()));
             }
             jsonGenerator.writeEnd();
         }
diff --git 
a/src/test/java/org/apache/sling/pipes/internal/CommandExecutorImplTest.java 
b/src/test/java/org/apache/sling/pipes/internal/CommandExecutorImplTest.java
index 85e44c9..b25fb74 100644
--- a/src/test/java/org/apache/sling/pipes/internal/CommandExecutorImplTest.java
+++ b/src/test/java/org/apache/sling/pipes/internal/CommandExecutorImplTest.java
@@ -127,10 +127,7 @@ public class CommandExecutorImplTest extends 
AbstractPipeTest {
         CommandUtil.writeToMap(bindings, true, options.with);
         assertEquals("check with first", expected, bindings.get("one"));
         assertEquals("check with second", expected, bindings.get("two"));
-        assertNotNull("a writer should have been created", options.writer);
-        Map outputs = options.writer.getCustomOutputs();
-        assertEquals("check writer first", expected, outputs.get("one"));
-        assertEquals("check writer second", expected, outputs.get("two"));
+        assertNotNull("a writer should have been created", options.outputs);
     }
 
     @Test
@@ -141,9 +138,7 @@ public class CommandExecutorImplTest extends 
AbstractPipeTest {
         Map bindings = new HashMap();
         CommandUtil.writeToMap(bindings, true, options.with);
         assertEquals("check with first", expected, bindings.get("one"));
-        assertNotNull("a writer should have been created", options.writer);
-        Map outputs = options.writer.getCustomOutputs();
-        assertEquals("check writer first", expected, outputs.get("one"));
+        assertNotNull("a writer should have been created", options.outputs);
     }
 
     @Test

Reply via email to