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