
001package org.hl7.fhir.r5.liquid; 002 003import java.util.ArrayList; 004import java.util.List; 005 006import org.hl7.fhir.exceptions.FHIRException; 007import org.hl7.fhir.r5.fhirpath.FHIRPathEngine; 008import org.hl7.fhir.r5.fhirpath.FHIRPathFunctionDefinition; 009import org.hl7.fhir.r5.fhirpath.FHIRPathUtilityClasses.FunctionDetails; 010import org.hl7.fhir.r5.fhirpath.TypeDetails; 011import org.hl7.fhir.r5.fhirpath.ExpressionNode.CollectionStatus; 012import org.hl7.fhir.r5.model.Base; 013import org.hl7.fhir.r5.model.DateTimeType; 014import org.hl7.fhir.r5.model.IntegerType; 015import org.hl7.fhir.r5.model.StringType; 016import org.hl7.fhir.utilities.FhirPublication; 017import org.hl7.fhir.utilities.MarkedToMoveToAdjunctPackage; 018import org.hl7.fhir.utilities.Utilities; 019 020@MarkedToMoveToAdjunctPackage 021public class GlobalObject extends Base { 022 023 private DateTimeType dt; 024 private StringType pathToSpec; 025 026 public GlobalObject(DateTimeType td, StringType pathToSpec) { 027 super(); 028 this.dt = td; 029 this.pathToSpec = pathToSpec; 030 } 031 032 @Override 033 public String fhirType() { 034 return "GlobalObject"; 035 } 036 037 @Override 038 public String getIdBase() { 039 return null; 040 } 041 042 @Override 043 public void setIdBase(String value) { 044 throw new Error("Read only"); 045 } 046 047 @Override 048 public Base copy() { 049 return this; 050 } 051 052 @Override 053 public FhirPublication getFHIRPublicationVersion() { 054 return FhirPublication.R5; 055 } 056 057 public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException { 058 if ("dateTime".equals(name)) { 059 return wrap(dt); 060 } else if ("path".equals(name)) { 061 return wrap(pathToSpec); 062 } else { 063 return super.getProperty(hash, name, checkValid); 064 } 065 } 066 067 private Base[] wrap(Base b) { 068 Base[] l = new Base[1]; 069 l[0] = b; 070 return l; 071 } 072 073 @Override 074 public List<Base> executeFunction(FHIRPathEngine engine, Object appContext, List<Base> focus, String functionName, List<List<Base>> parameters) { 075 return null; 076 } 077 078 public static class GlobalObjectRandomFunction extends FHIRPathFunctionDefinition { 079 080 @Override 081 public String name() { 082 return "random"; 083 } 084 085 @Override 086 public FunctionDetails details() { 087 return new FunctionDetails("Generate a Random Number", 1, 1); 088 } 089 090 @Override 091 public TypeDetails check(FHIRPathEngine engine, Object appContext, TypeDetails focus, List<TypeDetails> parameters) { 092 if (focus.hasType("GlobalObject")) { 093 return new TypeDetails(CollectionStatus.SINGLETON, "integer"); 094 } else { 095 return null; 096 } 097 } 098 099 @Override 100 public List<Base> execute(FHIRPathEngine engine, Object appContext, List<Base> focus, List<List<Base>> parameters) { 101 List<Base> list = new ArrayList<>(); 102 int scale = Utilities.parseInt(parameters.get(0).get(0).primitiveValue(), 100)+ 1; 103 list.add(new IntegerType((int)(Math.random() * scale))); 104 return list; 105 } 106 107 } 108}