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> 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> 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 Base resolveConstant(ExecutionContext context, String s, boolean beforeContext) throws PathEngineException { if (s.equals("%sct")) return new StringType("http://snomed.info/sct").noExtensions(); else if (s.equals("%loinc")) return new StringType("http://loinc.org").noExtensions(); else if (s.equals("%ucum")) return new StringType("http://unitsofmeasure.org").noExtensions(); else if (s.equals("%resource")) { if (context.resource == null) throw new PathEngineException("Cannot use %resource in this context"); return context.resource; } else if (s.equals("%context")) { return context.context; } else if (s.equals("%us-zip")) return new StringType("[0-9]{5}(-[0-9]{4}){0,1}").noExtensions(); else if (s.startsWith("%\"vs-")) return new StringType("http://hl7.org/fhir/ValueSet/"+s.substring(5, s.length()-1)+"").noExtensions(); else if (s.startsWith("%\"cs-")) return new StringType("http://hl7.org/fhir/"+s.substring(5, s.length()-1)+"").noExtensions(); else if (s.startsWith("%\"ext-")) return new StringType("http://hl7.org/fhir/StructureDefinition/"+s.substring(6, s.length()-1)).noExtensions(); else if (hostServices == null) throw new PathEngineException("Unknown fixed constant '"+s+"'"); else return hostServices.resolveConstant(context.appInfo, s.substring(1), beforeContext); }
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> funcSubstring(ExecutionContext context, List<Base> focus, ExpressionNode exp) throws FHIRException { List<Base> result = new ArrayList<Base>(); List<Base> n1 = execute(context, focus, exp.getParameters().get(0), true); int i1 = Integer.parseInt(n1.get(0).primitiveValue()); int i2 = -1; if (exp.parameterCount() == 2) { List<Base> n2 = execute(context, focus, exp.getParameters().get(1), true); i2 = Integer.parseInt(n2.get(0).primitiveValue()); } if (focus.size() == 1) { String sw = convertToString(focus.get(0)); String s; if (i1 < 0 || i1 >= sw.length()) return new ArrayList<Base>(); if (exp.parameterCount() == 2) s = sw.substring(i1, Math.min(sw.length(), i1+i2)); else s = sw.substring(i1); if (!Utilities.noString(s)) result.add(new StringType(s).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()); }
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> 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> 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> 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 Base resolveConstant(ExecutionContext context, String s, boolean beforeContext) throws PathEngineException { if (s.equals("%sct")) return new StringType("http://snomed.info/sct").noExtensions(); else if (s.equals("%loinc")) return new StringType("http://loinc.org").noExtensions(); else if (s.equals("%ucum")) return new StringType("http://unitsofmeasure.org").noExtensions(); else if (s.equals("%resource")) { if (context.resource == null) throw new PathEngineException("Cannot use %resource in this context"); return context.resource; } else if (s.equals("%context")) { return context.context; } else if (s.equals("%us-zip")) return new StringType("[0-9]{5}(-[0-9]{4}){0,1}").noExtensions(); else if (s.startsWith("%\"vs-")) return new StringType("http://hl7.org/fhir/ValueSet/"+s.substring(5, s.length()-1)+"").noExtensions(); else if (s.startsWith("%\"cs-")) return new StringType("http://hl7.org/fhir/"+s.substring(5, s.length()-1)+"").noExtensions(); else if (s.startsWith("%\"ext-")) return new StringType("http://hl7.org/fhir/StructureDefinition/"+s.substring(6, s.length()-1)).noExtensions(); else if (hostServices == null) throw new PathEngineException("Unknown fixed constant '"+s+"'"); else return hostServices.resolveConstant(context.appInfo, s.substring(1), beforeContext); }
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> funcSubstring(ExecutionContext context, List<Base> focus, ExpressionNode exp) throws FHIRException { List<Base> result = new ArrayList<Base>(); List<Base> n1 = execute(context, focus, exp.getParameters().get(0), true); int i1 = Integer.parseInt(n1.get(0).primitiveValue()); int i2 = -1; if (exp.parameterCount() == 2) { List<Base> n2 = execute(context, focus, exp.getParameters().get(1), true); i2 = Integer.parseInt(n2.get(0).primitiveValue()); } if (focus.size() == 1) { String sw = convertToString(focus.get(0)); String s; if (i1 < 0 || i1 >= sw.length()) return new ArrayList<Base>(); if (exp.parameterCount() == 2) s = sw.substring(i1, Math.min(sw.length(), i1+i2)); else s = sw.substring(i1); if (!Utilities.noString(s)) result.add(new StringType(s).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()); }