in runtime/src/main/java/com/google/cloud/verticals/foundations/dataharmonization/function/whistle/WhistleFunction.java [132:173]
private Target getTarget(RuntimeContext context, FieldMapping mapping) {
switch (mapping.getTargetCase()) {
case CUSTOM_SINK:
return customSink(context, mapping);
case VAR:
return builtinSink(
context,
Constructor.TARGET_NAME,
context.getDataTypeImplementation().primitiveOf(mapping.getVar().getName()),
context.getDataTypeImplementation().primitiveOf(mapping.getVar().getPath()));
case FIELD:
String field = mapping.getField().getPath();
if (field.equals(OUTPUT_VAR)) {
field = "";
}
switch (mapping.getField().getType()) {
case LOCAL:
return builtinSink(
context,
Constructor.TARGET_NAME,
context.getDataTypeImplementation().primitiveOf(OUTPUT_VAR),
context.getDataTypeImplementation().primitiveOf(field));
case SIDE:
return builtinSink(
context,
SideTarget.Constructor.TARGET_NAME,
context.getDataTypeImplementation().primitiveOf(field));
case UNRECOGNIZED:
throw new IllegalArgumentException(
String.format(
"Proto error - invalid field target type: %s", mapping.getField().getType()));
}
// fall through, though this should never happen.
default:
// By default - write to $this.
return builtinSink(
context,
Constructor.TARGET_NAME,
context.getDataTypeImplementation().primitiveOf(OUTPUT_VAR),
context.getDataTypeImplementation().primitiveOf(""));
}
}