package ca.uhn.fhir.narrative.template.nodes;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.hl7.fhir.dstu3.exceptions.FHIRException;
import org.hl7.fhir.dstu3.model.Base;
import org.hl7.fhir.dstu3.model.BooleanType;
import org.hl7.fhir.dstu3.utils.FluentPathEngine;
import org.hl7.fhir.instance.model.api.IBaseBooleanDatatype;
import org.hl7.fhir.instance.model.api.IBaseResource;
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
import ca.uhn.fhir.util.FhirTerser;
class LookupNode implements LNode {
private final String id;
public LookupNode(String id) {
this.id = id;
}
private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(LookupNode.class);
@Override
public Object render(Map<String, Object> context) {
ourLog.info("Processing path: {}", id);
FhirTerser terser = (FhirTerser) context.get("terser");
FluentPathEngine fpEngine = (FluentPathEngine) context.get("fpEngine");
IBaseResource resContext = (IBaseResource) context.get("context");
List<Base> retVal;
try {
retVal = fpEngine.evaluate((Base)resContext, id);
} catch (FHIRException e) {
throw new InternalErrorException(e);
}
// terser.getValues(resContext, id);
ourLog.info("Evaluated to: {}", retVal);
if (retVal.size() == 1) {
if (IBaseBooleanDatatype.class.isAssignableFrom(retVal.get(0).getClass())) {
IBaseBooleanDatatype bool = (IBaseBooleanDatatype) retVal.get(0);
Boolean newRetVal = bool.getValue();
ourLog.info("Returning: {}", newRetVal);
return newRetVal;
}
}
return retVal;
}
interface Indexable {
Object get(Object value, Map<String, Object> context);
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append(id);
return builder.toString();
}
}