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}