use of org.hl7.fhir.dstu2016may.model.Base in project org.hl7.fhir.core by hapifhir.
the class FHIRPathEngine method processDateConstant.
private Base processDateConstant(Object appInfo, String value) throws PathEngineException {
if (value.startsWith("T"))
return new TimeType(value.substring(1));
String v = value;
if (v.length() > 10) {
int i = v.substring(10).indexOf("-");
if (i == -1)
i = v.substring(10).indexOf("+");
if (i == -1)
i = v.substring(10).indexOf("Z");
v = i == -1 ? value : v.substring(0, 10 + i);
}
if (v.length() > 10)
return new DateTimeType(value);
else
return new DateType(value);
}
use of org.hl7.fhir.dstu2016may.model.Base in project org.hl7.fhir.core by hapifhir.
the class FHIRPathEngine method funcToString.
private List<Base> funcToString(ExecutionContext context, List<Base> focus, ExpressionNode exp) {
List<Base> result = new ArrayList<Base>();
result.add(new StringType(convertToString(focus)));
return result;
}
use of org.hl7.fhir.dstu2016may.model.Base in project org.hl7.fhir.core by hapifhir.
the class FHIRPathEngine method funcAs.
private List<Base> funcAs(ExecutionContext context, List<Base> focus, ExpressionNode exp) {
List<Base> result = new ArrayList<Base>();
String tn = exp.getParameters().get(0).getName();
for (Base b : focus) if (b.hasType(tn))
result.add(b);
return result;
}
use of org.hl7.fhir.dstu2016may.model.Base in project org.hl7.fhir.core by hapifhir.
the class FHIRPathEngine method opDivideBy.
private List<Base> opDivideBy(List<Base> left, List<Base> right) throws PathEngineException {
if (left.size() == 0)
throw new PathEngineException("Error performing /: left operand has no value");
if (left.size() > 1)
throw new PathEngineException("Error performing /: left operand has more than one value");
if (!left.get(0).isPrimitive())
throw new PathEngineException(String.format("Error performing -: left operand has the wrong type (%s)", left.get(0).fhirType()));
if (right.size() == 0)
throw new PathEngineException("Error performing /: right operand has no value");
if (right.size() > 1)
throw new PathEngineException("Error performing /: right operand has more than one value");
if (!right.get(0).isPrimitive())
throw new PathEngineException(String.format("Error performing /: right operand has the wrong type (%s)", right.get(0).fhirType()));
List<Base> result = new ArrayList<Base>();
Base l = left.get(0);
Base r = right.get(0);
if (l.hasType("integer", "decimal") && r.hasType("integer", "decimal")) {
Decimal d1;
try {
d1 = new Decimal(l.primitiveValue());
Decimal d2 = new Decimal(r.primitiveValue());
result.add(new DecimalType(d1.divide(d2).asDecimal()));
} catch (UcumException e) {
throw new PathEngineException(e);
}
} else
throw new PathEngineException(String.format("Error performing /: left and right operand have incompatible or illegal types (%s, %s)", left.get(0).fhirType(), right.get(0).fhirType()));
return result;
}
use of org.hl7.fhir.dstu2016may.model.Base in project org.hl7.fhir.core by hapifhir.
the class FHIRPathEngine method funcLength.
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()));
}
return result;
}
Aggregations