private List<Base> makeBoolean(boolean b) { List<Base> res = new ArrayList<Base>(); res.add(new BooleanType(b).noExtensions()); return res; }
private List<Base> funcIsString(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 TimeType)) result.add(new BooleanType(true).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> funcIsInteger(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 IntegerType) result.add(new BooleanType(true).noExtensions()); else if (focus.get(0) instanceof BooleanType) result.add(new BooleanType(true).noExtensions()); else if (focus.get(0) instanceof StringType) result.add(new BooleanType(Utilities.isInteger(convertToString(focus.get(0)))).noExtensions()); else result.add(new BooleanType(false).noExtensions()); return result; }
private List<Base> funcIsDecimal(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 IntegerType) result.add(new BooleanType(true).noExtensions()); else if (focus.get(0) instanceof BooleanType) result.add(new BooleanType(true).noExtensions()); else if (focus.get(0) instanceof DecimalType) result.add(new BooleanType(true).noExtensions()); else if (focus.get(0) instanceof StringType) result.add(new BooleanType(Utilities.isDecimal(convertToString(focus.get(0)))).noExtensions()); else result.add(new BooleanType(false).noExtensions()); return result; }
private List<Base> funcIsBoolean(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 IntegerType && ((IntegerType) focus.get(0)).getValue() >= 0) result.add(new BooleanType(true).noExtensions()); else if (focus.get(0) instanceof BooleanType) result.add(new BooleanType(true).noExtensions()); else if (focus.get(0) instanceof StringType) result.add(new BooleanType(Utilities.existsInList(convertToString(focus.get(0)), "true", "false")).noExtensions()); else result.add(new BooleanType(false).noExtensions()); return result; }
private List<Base> funcExists(ExecutionContext context, List<Base> focus, ExpressionNode exp) { List<Base> result = new ArrayList<Base>(); boolean empty = true; for (Base f : focus) if (!f.isEmpty()) empty = false; result.add(new BooleanType(!empty).noExtensions()); return result; }
private List<Base> funcIsQuantity(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 IntegerType) result.add(new BooleanType(true).noExtensions()); else if (focus.get(0) instanceof DecimalType) result.add(new BooleanType(true).noExtensions()); else if (focus.get(0) instanceof Quantity) result.add(new BooleanType(true).noExtensions()); else if (focus.get(0) instanceof StringType) { Quantity q = parseQuantityString(focus.get(0).primitiveValue()); result.add(new BooleanType(q != null).noExtensions()); } else result.add(new BooleanType(false).noExtensions()); return result; }
private List<Base> funcEmpty(ExecutionContext context, List<Base> focus, ExpressionNode exp) { List<Base> result = new ArrayList<Base>(); result.add(new BooleanType(ElementUtil.isEmpty(focus)).noExtensions()); return result; }
private List<Base> funcToBoolean(ExecutionContext context, List<Base> focus, ExpressionNode exp) { List<Base> result = new ArrayList<Base>(); if (focus.size() == 1) { if (focus.get(0) instanceof BooleanType) result.add(focus.get(0)); else if (focus.get(0) instanceof IntegerType) result.add(new BooleanType(!focus.get(0).primitiveValue().equals("0")).noExtensions()); else if (focus.get(0) instanceof StringType) { if ("true".equals(focus.get(0).primitiveValue())) result.add(new BooleanType(true).noExtensions()); else if ("false".equals(focus.get(0).primitiveValue())) result.add(new BooleanType(false).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> opIs(List<Base> left, List<Base> right) { List<Base> result = new ArrayList<Base>(); if (left.size() != 1 || right.size() != 1) result.add(new BooleanType(false).noExtensions()); else { String tn = convertToString(right); if (left.get(0) instanceof org.hl7.fhir.r4.elementmodel.Element) result.add(new BooleanType(left.get(0).hasType(tn)).noExtensions()); else if ((left.get(0) instanceof Element) && ((Element) left.get(0)).isDisallowExtensions()) result.add(new BooleanType(Utilities.capitalize(left.get(0).fhirType()).equals(tn)).noExtensions()); else result.add(new BooleanType(left.get(0).hasType(tn)).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> funcStartsWith(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 s = convertToString(focus.get(0)); if (s == null) result.add(new BooleanType(false).noExtensions()); else result.add(new BooleanType(s.startsWith(sw)).noExtensions()); } else result.add(new BooleanType(false).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; }
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> funcSupersetOf(ExecutionContext context, List<Base> focus, ExpressionNode exp) throws FHIRException { List<Base> target = execute(context, focus, exp.getParameters().get(0), true); boolean valid = true; for (Base item : target) { boolean found = false; for (Base t : focus) { if (Base.compareDeep(item, t, false)) { found = true; break; } } if (!found) { valid = false; break; } } List<Base> result = new ArrayList<Base>(); result.add(new BooleanType(valid).noExtensions()); return result; }
private Base processConstant(FHIRLexer lexer) throws FHIRLexerException { if (lexer.isStringConstant()) { return new StringType(processConstantString(lexer.take(), lexer)).noExtensions(); } else if (Utilities.isInteger(lexer.getCurrent())) { return new IntegerType(lexer.take()).noExtensions(); } else if (Utilities.isDecimal(lexer.getCurrent())) { return new DecimalType(lexer.take()).noExtensions(); } else if (Utilities.existsInList(lexer.getCurrent(), "true", "false")) { return new BooleanType(lexer.take()).noExtensions(); } else if (lexer.getCurrent().equals("{}")) { lexer.take(); return null; } else if (lexer.getCurrent().startsWith("%") || lexer.getCurrent().startsWith("@")) { return new FHIRConstant(lexer.take()); } else throw lexer.error("Invalid Constant "+lexer.getCurrent()); }