
Class IdHelperService
- All Implemented Interfaces:
ca.uhn.fhir.jpa.api.svc.IIdHelperService
- Direct Known Subclasses:
JpaIdHelperService
HFJ_RESOURCE
table), and the
public ID that a resource has.
These IDs are sometimes one and the same (by default, a resource that the server assigns the ID of
Patient/1
will simply use a PID of 1 and and ID of 1. However, they may also be different
in cases where a forced ID is used (an arbitrary client-assigned ID).
This service is highly optimized in order to minimize the number of DB calls as much as possible,
since ID resolution is fundamental to many basic operations. This service returns either
IResourceLookup
or ResourcePersistentId
depending on the method being called.
The former involves an extra database join that the latter does not require, so selecting the
right method here is important.
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final javax.persistence.criteria.Predicate[]
protected IForcedIdDao
protected IResourceTableDao
static final String
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid
addResolvedPidToForcedId
(ca.uhn.fhir.rest.api.server.storage.ResourcePersistentId theResourcePersistentId, ca.uhn.fhir.interceptor.model.RequestPartitionId theRequestPartitionId, String theResourceType, String theForcedId, Date theDeletedAt) Pre-cache a PID-to-Resource-ID mapping for later retrieval bytranslatePidsToForcedIds(Set)
and related methodsboolean
idRequiresForcedId
(String theId) Returns true if the given resource ID should be stored in a forced ID.static boolean
isValidPid
(String theIdPart) static boolean
isValidPid
(org.hl7.fhir.instance.model.api.IIdType theId) resolveResourceIdentity
(ca.uhn.fhir.interceptor.model.RequestPartitionId theRequestPartitionId, String theResourceType, String theResourceId) Given a forced ID, convert it to its Long value.ca.uhn.fhir.rest.api.server.storage.ResourcePersistentId
resolveResourcePersistentIds
(ca.uhn.fhir.interceptor.model.RequestPartitionId theRequestPartitionId, String theResourceType, String theId) Given a resource type and ID, determines the internal persistent ID for the resource.resolveResourcePersistentIds
(ca.uhn.fhir.interceptor.model.RequestPartitionId theRequestPartitionId, String theResourceType, List<String> theIds) Returns a mapping of Id -> ResourcePersistentId.List<ca.uhn.fhir.rest.api.server.storage.ResourcePersistentId>
resolveResourcePersistentIdsWithCache
(ca.uhn.fhir.interceptor.model.RequestPartitionId theRequestPartitionId, List<org.hl7.fhir.instance.model.api.IIdType> theIds) Given a collection of resource IDs (resource type + id), resolves the internal persistent IDs.List<ca.uhn.fhir.rest.api.server.storage.ResourcePersistentId>
resolveResourcePersistentIdsWithCache
(ca.uhn.fhir.interceptor.model.RequestPartitionId theRequestPartitionId, List<org.hl7.fhir.instance.model.api.IIdType> theIds, boolean theOnlyForcedIds) Given a collection of resource IDs (resource type + id), resolves the internal persistent IDs.org.hl7.fhir.instance.model.api.IIdType
translatePidIdToForcedId
(ca.uhn.fhir.context.FhirContext theCtx, String theResourceType, ca.uhn.fhir.rest.api.server.storage.ResourcePersistentId theId) Given a persistent ID, returns the associated resource IDtranslatePidIdToForcedIdWithCache
(ca.uhn.fhir.rest.api.server.storage.ResourcePersistentId theId) translatePidsToForcedIds
(Set<Long> thePids)
-
Field Details
-
EMPTY_PREDICATE_ARRAY
-
RESOURCE_PID
- See Also:
-
myForcedIdDao
-
myResourceTableDao
-
-
Constructor Details
-
IdHelperService
public IdHelperService()
-
-
Method Details
-
resolveResourceIdentity
@Nonnull public IResourceLookup resolveResourceIdentity(@Nonnull ca.uhn.fhir.interceptor.model.RequestPartitionId theRequestPartitionId, String theResourceType, String theResourceId) throws ca.uhn.fhir.rest.server.exceptions.ResourceNotFoundException Given a forced ID, convert it to its Long value. Since you are allowed to use string IDs for resources, we need to convert those to the underlying Long values that are stored, for lookup and comparison purposes.- Specified by:
resolveResourceIdentity
in interfaceca.uhn.fhir.jpa.api.svc.IIdHelperService
- Throws:
ca.uhn.fhir.rest.server.exceptions.ResourceNotFoundException
- If the ID can not be found
-
resolveResourcePersistentIds
@Nonnull public Map<String,ca.uhn.fhir.rest.api.server.storage.ResourcePersistentId> resolveResourcePersistentIds(@Nonnull ca.uhn.fhir.interceptor.model.RequestPartitionId theRequestPartitionId, String theResourceType, List<String> theIds) Returns a mapping of Id -> ResourcePersistentId. If any resource is not found, it will throw ResourceNotFound exception (and no map will be returned)- Specified by:
resolveResourcePersistentIds
in interfaceca.uhn.fhir.jpa.api.svc.IIdHelperService
-
resolveResourcePersistentIds
@Nonnull public ca.uhn.fhir.rest.api.server.storage.ResourcePersistentId resolveResourcePersistentIds(@Nonnull ca.uhn.fhir.interceptor.model.RequestPartitionId theRequestPartitionId, String theResourceType, String theId) Given a resource type and ID, determines the internal persistent ID for the resource.- Specified by:
resolveResourcePersistentIds
in interfaceca.uhn.fhir.jpa.api.svc.IIdHelperService
- Throws:
ca.uhn.fhir.rest.server.exceptions.ResourceNotFoundException
- If the ID can not be found
-
idRequiresForcedId
Returns true if the given resource ID should be stored in a forced ID. Under default config (meaning client ID strategy isDaoConfig.ClientIdStrategyEnum.ALPHANUMERIC
) this will return true if the ID has any non-digit characters.In
DaoConfig.ClientIdStrategyEnum.ANY
mode it will always return true.- Specified by:
idRequiresForcedId
in interfaceca.uhn.fhir.jpa.api.svc.IIdHelperService
-
resolveResourcePersistentIdsWithCache
@Nonnull public List<ca.uhn.fhir.rest.api.server.storage.ResourcePersistentId> resolveResourcePersistentIdsWithCache(ca.uhn.fhir.interceptor.model.RequestPartitionId theRequestPartitionId, List<org.hl7.fhir.instance.model.api.IIdType> theIds) Given a collection of resource IDs (resource type + id), resolves the internal persistent IDs.This implementation will always try to use a cache for performance, meaning that it can resolve resources that are deleted (but note that forced IDs can't change, so the cache can't return incorrect results)
- Specified by:
resolveResourcePersistentIdsWithCache
in interfaceca.uhn.fhir.jpa.api.svc.IIdHelperService
-
resolveResourcePersistentIdsWithCache
@Nonnull public List<ca.uhn.fhir.rest.api.server.storage.ResourcePersistentId> resolveResourcePersistentIdsWithCache(ca.uhn.fhir.interceptor.model.RequestPartitionId theRequestPartitionId, List<org.hl7.fhir.instance.model.api.IIdType> theIds, boolean theOnlyForcedIds) Given a collection of resource IDs (resource type + id), resolves the internal persistent IDs.This implementation will always try to use a cache for performance, meaning that it can resolve resources that are deleted (but note that forced IDs can't change, so the cache can't return incorrect results)
- Specified by:
resolveResourcePersistentIdsWithCache
in interfaceca.uhn.fhir.jpa.api.svc.IIdHelperService
- Parameters:
theOnlyForcedIds
- Iftrue
, resources which are not existing forced IDs will not be resolved
-
translatePidIdToForcedId
@Nonnull public org.hl7.fhir.instance.model.api.IIdType translatePidIdToForcedId(ca.uhn.fhir.context.FhirContext theCtx, String theResourceType, ca.uhn.fhir.rest.api.server.storage.ResourcePersistentId theId) Given a persistent ID, returns the associated resource ID- Specified by:
translatePidIdToForcedId
in interfaceca.uhn.fhir.jpa.api.svc.IIdHelperService
-
translatePidIdToForcedIdWithCache
public Optional<String> translatePidIdToForcedIdWithCache(ca.uhn.fhir.rest.api.server.storage.ResourcePersistentId theId) - Specified by:
translatePidIdToForcedIdWithCache
in interfaceca.uhn.fhir.jpa.api.svc.IIdHelperService
-
translatePidsToForcedIds
- Specified by:
translatePidsToForcedIds
in interfaceca.uhn.fhir.jpa.api.svc.IIdHelperService
-
addResolvedPidToForcedId
public void addResolvedPidToForcedId(ca.uhn.fhir.rest.api.server.storage.ResourcePersistentId theResourcePersistentId, @Nonnull ca.uhn.fhir.interceptor.model.RequestPartitionId theRequestPartitionId, String theResourceType, @Nullable String theForcedId, @Nullable Date theDeletedAt) Pre-cache a PID-to-Resource-ID mapping for later retrieval bytranslatePidsToForcedIds(Set)
and related methods- Specified by:
addResolvedPidToForcedId
in interfaceca.uhn.fhir.jpa.api.svc.IIdHelperService
-
isValidPid
-
isValidPid
-