private List<Base> opConcatenate(List<Base> left, List<Base> right) { List<Base> result = new ArrayList<Base>(); result.add(new StringType(convertToString(left) + convertToString((right)))); return result; }
private List<Base> opAs(List<Base> left, List<Base> right) { List<Base> result = new ArrayList<Base>(); if (right.size() != 1) return result; else { String tn = convertToString(right); for (Base nextLeft : left) { if (tn.equals(nextLeft.fhirType())) result.add(nextLeft); } } return result; }
/** * evaluate a path and a string containing the outcome (for display) * * @param base - the object against which the path is being evaluated * @param path - the FHIR Path statement to use * @return * @throws FHIRException * @ */ public String evaluateToString(Base base, String path) throws FHIRException { return convertToString(evaluate(base, path)); }
public String evaluateToString(Object appInfo, Base resource, Base base, ExpressionNode node) throws FHIRException { return convertToString(evaluate(appInfo, resource, base, node)); }
private List<Base> funcToChars(ExecutionContext context, List<Base> focus, ExpressionNode exp) throws FHIRException { List<Base> result = new ArrayList<Base>(); if (focus.size() == 1) { String s = convertToString(focus.get(0)); for (char c : s.toCharArray()) result.add(new StringType(String.valueOf(c)).noExtensions()); } return result; }
private List<Base> funcLength(ExecutionContext context, List<Base> focus, ExpressionNode exp) { List<Base> result = new ArrayList<Base>(); if (focus.size() == 1) { String s = convertToString(focus.get(0)); result.add(new IntegerType(s.length()).noExtensions()); } return result; }
private List<Base> funcItem(ExecutionContext context, List<Base> focus, ExpressionNode exp) throws FHIRException { List<Base> result = new ArrayList<Base>(); String s = convertToString(execute(context, focus, exp.getParameters().get(0), true)); if (Utilities.isInteger(s) && Integer.parseInt(s) < focus.size()) result.add(focus.get(Integer.parseInt(s))); return result; }
private List<Base> funcToString(ExecutionContext context, List<Base> focus, ExpressionNode exp) { List<Base> result = new ArrayList<Base>(); result.add(new StringType(convertToString(focus)).noExtensions()); return result; }
private List<Base> funcReplaceMatches(ExecutionContext context, List<Base> focus, ExpressionNode exp) throws FHIRException { List<Base> result = new ArrayList<Base>(); String regex = convertToString(execute(context, focus, exp.getParameters().get(0), true)); String repl = convertToString(execute(context, focus, exp.getParameters().get(1), true)); if (focus.size() == 1 && !Utilities.noString(regex)) result.add(new StringType(convertToString(focus.get(0)).replaceAll(regex, repl)).noExtensions()); else result.add(new StringType(convertToString(focus.get(0))).noExtensions()); return result; }
private List<Base> funcLower(ExecutionContext context, List<Base> focus, ExpressionNode exp) throws FHIRException { List<Base> result = new ArrayList<Base>(); if (focus.size() == 1) { String s = convertToString(focus.get(0)); if (!Utilities.noString(s)) result.add(new StringType(s.toLowerCase()).noExtensions()); } return result; }
private List<Base> funcUpper(ExecutionContext context, List<Base> focus, ExpressionNode exp) throws FHIRException { List<Base> result = new ArrayList<Base>(); if (focus.size() == 1) { String s = convertToString(focus.get(0)); if (!Utilities.noString(s)) result.add(new StringType(s.toUpperCase()).noExtensions()); } return result; }
private List<Base> funcHasValue(ExecutionContext context, List<Base> focus, ExpressionNode exp) { List<Base> result = new ArrayList<Base>(); if (focus.size() == 1) { String s = convertToString(focus.get(0)); result.add(new BooleanType(!Utilities.noString(s)).noExtensions()); } return result; }
private List<Base> funcEndsWith(ExecutionContext context, List<Base> focus, ExpressionNode exp) throws FHIRException { List<Base> result = new ArrayList<Base>(); String sw = convertToString(execute(context, focus, exp.getParameters().get(0), true)); if (focus.size() == 1 && !Utilities.noString(sw)) result.add(new BooleanType(convertToString(focus.get(0)).endsWith(sw)).noExtensions()); else result.add(new BooleanType(false).noExtensions()); return result; }
private List<Base> funcIsDateTime(ExecutionContext context, List<Base> focus, ExpressionNode exp) { List<Base> result = new ArrayList<Base>(); if (focus.size() != 1) result.add(new BooleanType(false).noExtensions()); else if (focus.get(0) instanceof DateTimeType || focus.get(0) instanceof DateType) result.add(new BooleanType(true).noExtensions()); else if (focus.get(0) instanceof StringType) result.add(new BooleanType((convertToString(focus.get(0)).matches ("([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))?)?)?)?"))).noExtensions()); else result.add(new BooleanType(false).noExtensions()); return result; }
private List<Base> funcIsTime(ExecutionContext context, List<Base> focus, ExpressionNode exp) { List<Base> result = new ArrayList<Base>(); if (focus.size() != 1) result.add(new BooleanType(false).noExtensions()); else if (focus.get(0) instanceof TimeType) result.add(new BooleanType(true).noExtensions()); else if (focus.get(0) instanceof StringType) result.add(new BooleanType((convertToString(focus.get(0)).matches ("T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))?"))).noExtensions()); else result.add(new BooleanType(false).noExtensions()); return result; }
private List<Base> funcToInteger(ExecutionContext context, List<Base> focus, ExpressionNode exp) { String s = convertToString(focus); List<Base> result = new ArrayList<Base>(); if (Utilities.isInteger(s)) result.add(new IntegerType(s).noExtensions()); else if ("true".equals(s)) result.add(new IntegerType(1).noExtensions()); else if ("false".equals(s)) result.add(new IntegerType(0).noExtensions()); return result; }
private List<Base> funcContains(ExecutionContext context, List<Base> focus, ExpressionNode exp) throws FHIRException { List<Base> result = new ArrayList<Base>(); String sw = convertToString(execute(context, focus, exp.getParameters().get(0), true)); if (focus.size() == 1 && !Utilities.noString(sw)) { String st = convertToString(focus.get(0)); if (Utilities.noString(st)) result.add(new BooleanType(false).noExtensions()); else result.add(new BooleanType(st.contains(sw)).noExtensions()); } else result.add(new BooleanType(false).noExtensions()); return result; }
private List<Base> funcMatches(ExecutionContext context, List<Base> focus, ExpressionNode exp) throws FHIRException { List<Base> result = new ArrayList<Base>(); String sw = convertToString(execute(context, focus, exp.getParameters().get(0), true)); if (focus.size() == 1 && !Utilities.noString(sw)) { String st = convertToString(focus.get(0)); if (Utilities.noString(st)) result.add(new BooleanType(false).noExtensions()); else result.add(new BooleanType(st.matches(sw)).noExtensions()); } else result.add(new BooleanType(false).noExtensions()); return result; }
private List<Base> funcToDecimal(ExecutionContext context, List<Base> focus, ExpressionNode exp) { String s = convertToString(focus); List<Base> result = new ArrayList<Base>(); if (Utilities.isDecimal(s)) result.add(new DecimalType(s).noExtensions()); if ("true".equals(s)) result.add(new DecimalType(1).noExtensions()); if ("false".equals(s)) result.add(new DecimalType(0).noExtensions()); return result; }
private List<Base> funcConformsTo(ExecutionContext context, List<Base> focus, ExpressionNode exp) throws FHIRException { if (hostServices == null) throw new FHIRException("Unable to check conformsTo - no hostservices provided"); List<Base> result = new ArrayList<Base>(); if (focus.size() != 1) result.add(new BooleanType(false).noExtensions()); else { String url = convertToString(execute(context, focus, exp.getParameters().get(0), true)); result.add(new BooleanType(hostServices.conformsToProfile(context.appInfo, focus.get(0), url)).noExtensions()); } return result; }