in runtime/src/main/java/com/google/cloud/verticals/foundations/dataharmonization/function/whistle/VarTarget.java [139:189]
public Target construct(RuntimeContext ctx, Data... args) {
if (args.length > 3
|| args.length == 0
|| stream(args).anyMatch(a -> !a.isPrimitive() || a.asPrimitive().string() == null)) {
throw new IllegalArgumentException(
String.format(
"Must provide one to three string arguments to %s (provided %d) that specifies the"
+ " variable to write to (optional, defaults to %s), the path on it to write,"
+ " and the merge mode to use (optional, defaults to 'replace', if specified,"
+ " var name must be specified too)."
+ " E.x %1$s(\"my_var\",\".field1[0].field2\"):..., or"
+ " %1$s(\".field1[0].field2\"):..., or"
+ " %1$s(\"my_var\",\".field1[0].field2\", \"extend\"):...",
getName(), args.length, WhistleFunction.OUTPUT_VAR));
}
String var = WhistleFunction.OUTPUT_VAR;
Path path = Path.empty();
MergeMode mode = DEFAULT_MERGE_MODE;
if (args.length == 1) {
// Merge with $this
path = Path.parse(args[0].asPrimitive().string());
// TODO(rpolyano): Uncomment when default merge mode depends on options (rather than being
// const)
// if (path.isEmpty()) {
// mode = MergeMode.MERGE;
// }
}
if (args.length >= 2) {
var = args[0].asPrimitive().string();
path = Path.parse(args[1].asPrimitive().string());
if (!var.equals(WhistleFunction.OUTPUT_VAR) && path.isEmpty()) {
mode = MergeMode.REPLACE;
}
}
if (args.length == 3) {
if (!MergeModeExperiment.isEnabled(ctx)) {
throw new UnsupportedOperationException(
String.format(
"Merge modes are an experimental feature and must be enabled by adding option"
+ " \"%s\" to the top of your file.",
new MergeModeExperiment().getName()));
}
mode = MergeMode.valueOf(args[2].asPrimitive().string().toUpperCase(Locale.ROOT));
}
return new VarTarget(var, path, mode);
}