001package org.hl7.fhir.r4.model;
002
003import java.util.HashMap;
004import java.util.Map;
005
006import org.hl7.fhir.r4.utils.FHIRPathEngine;
007
008/**
009 * This class is the base class for Profile classes - whether generated or manual
010 * 
011 * @author Grahame Grieve
012 *
013 */
014public class ProfilingWrapper {
015
016  // some discriminators require on features of external resources
017  // to do slice matching. This provides external services to match 
018  public interface IResourceResolver {
019    Resource resolve(Base context, Base resource, Base reference);
020  }
021
022  // context
023  private Base context; // bundle, if one is present and related; sole use is to pass to IResourceResolver.resolve as context
024  private Base resource; // resource that contains the wrapped object
025  protected Base wrapped; // the actual wrapped object 
026  
027  // FHIRPath engine
028  private Map<String, ExpressionNode> cache; 
029  private FHIRPathEngine engine;
030
031  public ProfilingWrapper(Base context, Base resource, Base wrapped) {
032    super();
033    this.context = context;
034    this.resource = resource;
035    this.wrapped = wrapped;
036  }
037  
038  public ProfilingWrapper(Base context, Base resource) {
039    super();
040    this.context = context;
041    this.resource = resource;
042    this.wrapped = resource;
043  }
044  
045  /**
046   * This is a convenient called for 
047   * @param object
048   * @return
049   */
050  private ProfilingWrapper wrap(Base object) {
051    ProfilingWrapper res = new ProfilingWrapper(context, resource, object);
052    res.cache = cache;
053    res.engine = engine;
054    return res;
055  }
056  
057  
058}