All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.hl7.fhir.r5.liquid.GlobalObject Maven / Gradle / Ivy

package org.hl7.fhir.r5.liquid;

import java.util.ArrayList;
import java.util.List;

import org.hl7.fhir.exceptions.FHIRException;
import org.hl7.fhir.r5.fhirpath.FHIRPathEngine;
import org.hl7.fhir.r5.fhirpath.FHIRPathEngine.IEvaluationContext.FunctionDefinition;
import org.hl7.fhir.r5.fhirpath.FHIRPathUtilityClasses.FunctionDetails;
import org.hl7.fhir.r5.fhirpath.TypeDetails;
import org.hl7.fhir.r5.fhirpath.ExpressionNode.CollectionStatus;
import org.hl7.fhir.r5.model.Base;
import org.hl7.fhir.r5.model.DateTimeType;
import org.hl7.fhir.r5.model.IntegerType;
import org.hl7.fhir.r5.model.StringType;
import org.hl7.fhir.utilities.FhirPublication;
import org.hl7.fhir.utilities.MarkedToMoveToAdjunctPackage;
import org.hl7.fhir.utilities.Utilities;

import com.microsoft.schemas.office.visio.x2012.main.impl.FunctionDefTypeImpl;

@MarkedToMoveToAdjunctPackage
public class GlobalObject extends Base {

  private DateTimeType dt;
  private StringType pathToSpec;
  
  public GlobalObject(DateTimeType td, StringType pathToSpec) {
    super();
    this.dt = td;
    this.pathToSpec = pathToSpec;
  }

  @Override
  public String fhirType() {
    return "GlobalObject";
  }

  @Override
  public String getIdBase() {
    return null;
  }

  @Override
  public void setIdBase(String value) {
    throw new Error("Read only"); 
  }

  @Override
  public Base copy() {
    return this;
  }

  @Override
  public FhirPublication getFHIRPublicationVersion() {
    return FhirPublication.R5;
  }

  public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
    if ("dateTime".equals(name)) {
      return wrap(dt);
    } else if ("path".equals(name)) {
      return wrap(pathToSpec);
    } else {
      return super.getProperty(hash, name, checkValid);
    }
  }

  private Base[] wrap(Base b) {
    Base[] l = new Base[1];
    l[0] = b;
    return l;
  }
  
  @Override
  public List executeFunction(FHIRPathEngine engine, Object appContext, List focus, String functionName, List> parameters) {
    return null;
  }

  public static class GlobalObjectRandomFunction extends FunctionDefinition {

    @Override
    public String name() {
      return "random";
    }

    @Override
    public FunctionDetails details() {
      return new FunctionDetails("Generate a Random Number", 1, 1);
    }

    @Override
    public TypeDetails check(FHIRPathEngine engine, Object appContext, TypeDetails focus, List parameters) {
      if (focus.hasType("GlobalObject")) {
        return new TypeDetails(CollectionStatus.SINGLETON, "integer");
      } else {
        return null;
      }
    }

    @Override
    public List execute(FHIRPathEngine engine, Object appContext, List focus, List> parameters) {
      List list = new ArrayList<>();
      int scale = Utilities.parseInt(parameters.get(0).get(0).primitiveValue(), 100)+ 1;
      list.add(new IntegerType((int)(Math.random() * scale)));
      return list;
    }
    
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy