Package org.hl7.fhir.r4.profilemodel
Class PEBuilder
- java.lang.Object
-
- org.hl7.fhir.r4.profilemodel.PEBuilder
-
public class PEBuilder extends Object
Factory class for the ProfiledElement sub-system *** NOTE: This sub-system is still under development *** This subsystem takes a profile and creates a view of the profile that stitches all the parts together, and presents it as a seamless tree. There's two views: - definition: A logical view of the contents of the profile - instance: a logical view of a resource that conforms to the profile The tree of elements in the profile model is different to the the base resource: - some elements are removed (max = 0) - extensions are turned into named elements - slices are turned into named elements - element properties - doco, cardinality, binding etc is updated for what the profile says Definition ---------- This presents a single view of the contents of a resource as specified by the profile. It's suitable for use in any kind of tree view. Each node has a unique name amongst it's siblings, but this name may not be the name in the instance, since slicing splits up a single named element into different definitions. Each node has: - name (unique amongst siblings) - schema name (the actual name in the instance) - min cardinality - max cardinality - short documentation (for the tree view) - full documentation (markdown source) - profile definition - the full definition in the profile - base definition - the full definition at the resource level - types() - a list of possible types - children(type) - a list of child nodes for the provided type - expansion - if there's a binding, the codes in the expansion based on the binding Note that the tree may not have leaves; the trees recurse indefinitely because extensions have extensions etc. So you can't do a depth-first search of the tree without some kind of decision to stop at a given point. Instance -------- todo- Author:
- grahamegrieve
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classPEBuilder.PEElementPropertiesPolicy
-
Constructor Summary
Constructors Constructor Description PEBuilder(IWorkerContext context, PEBuilder.PEElementPropertiesPolicy elementProps, boolean fixedPropsDefault)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description PEDefinitionbuildPEDefinition(String url)Given a profile, return a tree of the elements defined in the profile model.PEDefinitionbuildPEDefinition(String url, String version)Given a profile, return a tree of the elements defined in the profile model.PEDefinitionbuildPEDefinition(StructureDefinition profile)Given a profile, return a tree of the elements defined in the profile model.PEInstancebuildPEInstance(String url, String version, Resource resource)Given a resource and a profile, return a tree of instance data as defined by the profile model using the nominated version of the profile The tree is a facade to the underlying resource - all actual data is stored against the resource, and retrieved on the fly from the resource, so that applications can work at either level, as convenient.PEInstancebuildPEInstance(String url, Resource resource)Given a resource and a profile, return a tree of instance data as defined by the profile model using the latest version of the profile The tree is a facade to the underlying resource - all actual data is stored against the resource, and retrieved on the fly from the resource, so that applications can work at either level, as convenient.PEInstancebuildPEInstance(StructureDefinition profile, Resource resource)Given a resource and a profile, return a tree of instance data as defined by the profile model using the provided version of the profile The tree is a facade to the underlying resource - all actual data is stored against the resource, and retrieved on the fly from the resource, so that applications can work at either level, as convenient.ResourcecreateResource(String url, boolean meta)For the current version of a profile, construct a resource and fill out any fixed or required elements Note that fixed values are filled out irrespective of the value of fixedProps when the builder is createdResourcecreateResource(String url, String version, boolean meta)For the current version of a profile, construct a resource and fill out any fixed or required elements Note that fixed values are filled out irrespective of the value of fixedProps when the builder is createdResourcecreateResource(StructureDefinition profile, boolean meta)For the provided version of a profile, construct a resource and fill out any fixed or required elements Note that fixed values are filled out irrespective of the value of fixedProps when the builder is createdList<Base>exec(Resource resource, Base data, String fhirpath)protected List<ElementDefinition>getChildren(StructureDefinition profileStructure, ElementDefinition definition)IWorkerContextgetContext()booleanisResource(String name)protected List<PEDefinition>listChildren(boolean allFixed, PEDefinition parent, StructureDefinition profileStructure, ElementDefinition definition, String url, String... omitList)protected List<PEDefinition>listSlices(StructureDefinition profileStructure, ElementDefinition definition, PEDefinition parent)protected PEDefinitionmakeChild(PEDefinition parent, StructureDefinition profileStructure, ElementDefinition definition)StringmakeSliceExpression(StructureDefinition profile, ElementDefinition.ElementDefinitionSlicingComponent slicing, ElementDefinition definition)protected PETypemakeType(String tn)protected PETypemakeType(String tn, String url)protected PETypemakeType(ElementDefinition.TypeRefComponent t)protected PETypemakeType(ElementDefinition.TypeRefComponent t, CanonicalType u)protected voidpopulateByProfile(Base base, PEDefinition definition)
-
-
-
Constructor Detail
-
PEBuilder
public PEBuilder(IWorkerContext context, PEBuilder.PEElementPropertiesPolicy elementProps, boolean fixedPropsDefault)
- Parameters:
context- - must be loaded with R5 definitionselementProps- - whether to include Element.id and Element.extension in the tree. Recommended choice: Extension
-
-
Method Detail
-
buildPEDefinition
public PEDefinition buildPEDefinition(StructureDefinition profile)
Given a profile, return a tree of the elements defined in the profile model. This builds the profile model for the provided version of the nominated profile The tree of elements in the profile model is different to those defined in the base resource: - some elements are removed (max = 0) - extensions are turned into named elements - slices are turned into named elements - element properties - doco, cardinality, binding etc is updated for what the profile says Warning: profiles and resources are recursive; you can't iterate this tree until it you get to the leaves because there are nodes that don't terminate (extensions have extensions)
-
buildPEDefinition
public PEDefinition buildPEDefinition(String url)
Given a profile, return a tree of the elements defined in the profile model. This builds the profile model for the latest version of the nominated profile The tree of elements in the profile model is different to those defined in the base resource: - some elements are removed (max = 0) - extensions are turned into named elements - slices are turned into named elements - element properties - doco, cardinality, binding etc is updated for what the profile says Warning: profiles and resources are recursive; you can't iterate this tree until it you get to the leaves because there are nodes that don't terminate (extensions have extensions)
-
buildPEDefinition
public PEDefinition buildPEDefinition(String url, String version)
Given a profile, return a tree of the elements defined in the profile model. This builds the profile model for the nominated version of the nominated profile The tree of elements in the profile model is different to the the base resource: - some elements are removed (max = 0) - extensions are turned into named elements - slices are turned into named elements - element properties - doco, cardinality, binding etc is updated for what the profile says Warning: profiles and resources can be recursive; you can't iterate this tree until it you get to the leaves because you will never get to a child that doesn't have children
-
buildPEInstance
public PEInstance buildPEInstance(String url, Resource resource)
Given a resource and a profile, return a tree of instance data as defined by the profile model using the latest version of the profile The tree is a facade to the underlying resource - all actual data is stored against the resource, and retrieved on the fly from the resource, so that applications can work at either level, as convenient. Note that there's a risk that deleting something through the resource while holding a handle to a PEInstance that is a facade on what is deleted leaves an orphan facade that will continue to function, but is making changes to resource content that is no longer part of the resource
-
buildPEInstance
public PEInstance buildPEInstance(StructureDefinition profile, Resource resource)
Given a resource and a profile, return a tree of instance data as defined by the profile model using the provided version of the profile The tree is a facade to the underlying resource - all actual data is stored against the resource, and retrieved on the fly from the resource, so that applications can work at either level, as convenient. Note that there's a risk that deleting something through the resource while holding a handle to a PEInstance that is a facade on what is deleted leaves an orphan facade that will continue to function, but is making changes to resource content that is no longer part of the resource
-
buildPEInstance
public PEInstance buildPEInstance(String url, String version, Resource resource)
Given a resource and a profile, return a tree of instance data as defined by the profile model using the nominated version of the profile The tree is a facade to the underlying resource - all actual data is stored against the resource, and retrieved on the fly from the resource, so that applications can work at either level, as convenient. Note that there's a risk that deleting something through the resource while holding a handle to a PEInstance that is a facade on what is deleted leaves an orphan facade that will continue to function, but is making changes to resource content that is no longer part of the resource
-
createResource
public Resource createResource(String url, String version, boolean meta)
For the current version of a profile, construct a resource and fill out any fixed or required elements Note that fixed values are filled out irrespective of the value of fixedProps when the builder is created- Parameters:
url- identifies the profileversion- identifies the version of the profilemeta- whether to mark the profile in Resource.meta.profile- Returns:
- constructed resource
-
createResource
public Resource createResource(StructureDefinition profile, boolean meta)
For the provided version of a profile, construct a resource and fill out any fixed or required elements Note that fixed values are filled out irrespective of the value of fixedProps when the builder is created- Parameters:
profile- the profilemeta- whether to mark the profile in Resource.meta.profile- Returns:
- constructed resource
-
createResource
public Resource createResource(String url, boolean meta)
For the current version of a profile, construct a resource and fill out any fixed or required elements Note that fixed values are filled out irrespective of the value of fixedProps when the builder is created- Parameters:
url- identifies the profilemeta- whether to mark the profile in Resource.meta.profile- Returns:
- constructed resource
-
listChildren
protected List<PEDefinition> listChildren(boolean allFixed, PEDefinition parent, StructureDefinition profileStructure, ElementDefinition definition, String url, String... omitList)
-
makeChild
protected PEDefinition makeChild(PEDefinition parent, StructureDefinition profileStructure, ElementDefinition definition)
-
listSlices
protected List<PEDefinition> listSlices(StructureDefinition profileStructure, ElementDefinition definition, PEDefinition parent)
-
makeType
protected PEType makeType(ElementDefinition.TypeRefComponent t)
-
makeType
protected PEType makeType(ElementDefinition.TypeRefComponent t, CanonicalType u)
-
getChildren
protected List<ElementDefinition> getChildren(StructureDefinition profileStructure, ElementDefinition definition)
-
getContext
public IWorkerContext getContext()
-
populateByProfile
protected void populateByProfile(Base base, PEDefinition definition)
-
makeSliceExpression
public String makeSliceExpression(StructureDefinition profile, ElementDefinition.ElementDefinitionSlicingComponent slicing, ElementDefinition definition)
-
isResource
public boolean isResource(String name)
-
-