execute method
The iterable, nested function that evaluates the entire FHIRPath expression one object at a time
Implementation
@override
List execute(List results, Map<String, dynamic> passed) {
final executedBefore = before.execute(results.toList(), passed);
final executedAfter = after.execute(results.toList(), passed);
if (executedBefore.length > 1 || executedAfter.length > 1) {
throw FhirPathEvaluationException(
'String concatenation operates on 2 single items. '
'The "&" operator was passed the following:\n'
'Operand 1: $executedBefore\n'
'Operand 2: $executedAfter',
operation: '&',
collection: results);
}
if (executedBefore.isEmpty && executedAfter.isEmpty) {
return [''];
} else if (executedBefore.isNotEmpty &&
executedBefore.first is String &&
executedAfter.isEmpty) {
return [(executedBefore.first as String)];
} else if (executedBefore.isEmpty &&
executedAfter.isNotEmpty &&
executedAfter.first is String) {
return [(executedAfter.first as String)];
} else if (executedBefore.first is String &&
executedAfter.first is String) {
return [
(executedBefore.first as String) + (executedAfter.first as String)
];
} else {
throw FhirPathEvaluationException(
'The "&" operator only accepts Strings, but was passed '
'the following:\n'
'Operand 1: ${executedBefore.first} (${executedBefore.first.runtimeType})\n'
'Operand 2: ${executedAfter.first} (${executedAfter.first.runtimeType})',
operation: '&',
collection: results);
}
}