Github user cestella commented on a diff in the pull request:
https://github.com/apache/metron/pull/742#discussion_r137913487
--- Diff:
metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/functions/StringFunctions.java
---
@@ -321,6 +321,46 @@ public Object apply(List<Object> args) {
}
}
+ @Stellar( name="SUBSTRING"
+ , description = "Returns a substring of a string"
+ , params = {
+ "input - The string to take the substring of",
+ "start - The starting position (0-based and inclusive)",
+ "end? - The ending position (0-based and exclusive)"
+ }
+ , returns = "The substring of the input"
+ )
+ public static class Substring extends BaseStellarFunction {
+
+ @Override
+ public Object apply(List<Object> strings) {
+
+ if(strings == null || strings.size() < 2 ) {
+ throw new IllegalArgumentException("[SUBSTRING] required 2
arguments: the input and the start position (inclusive)");
+ }
+ String var = strings.get(0) == null?null: (String) strings.get(0);
+ Integer start = strings.get(1) == null?null:(Integer)strings.get(1);
+ Integer end = null;
+ if(strings.size() > 2) {
+ end = strings.get(2) == null ? null : (Integer) strings.get(2);
+ }
+ if(var == null || start == null) {
--- End diff --
Well, this is consistent throughout stellar functions, if the value is
null, we pass back null. If it's invalid input structurally (i.e. not the
correct number of arguments), then an exception is returned. We should add a
little blurb that talks about this in the stellar-common README.md
---