Class AbstractVersionedObjectRepository<VR extends org.jooq.UpdatableRecord,DR extends org.jooq.UpdatableRecord,VH extends org.jooq.UpdatableRecord,DH extends org.jooq.UpdatableRecord,O extends com.nedap.archie.rm.archetyped.Locatable>

java.lang.Object
org.ehrbase.repository.AbstractVersionedObjectRepository<VR,DR,VH,DH,O>
Direct Known Subclasses:
CompositionRepository, EhrFolderRepository, EhrRepository

public abstract class AbstractVersionedObjectRepository<VR extends org.jooq.UpdatableRecord,DR extends org.jooq.UpdatableRecord,VH extends org.jooq.UpdatableRecord,DH extends org.jooq.UpdatableRecord,O extends com.nedap.archie.rm.archetyped.Locatable> extends Object
  • Field Details

  • Constructor Details

  • Method Details

    • buildObjectVersionId

      public static com.nedap.archie.rm.support.identification.ObjectVersionId buildObjectVersionId(UUID versionedObjectId, int sysVersion, SystemService systemService)
    • findHead

      protected Optional<O> findHead(org.jooq.Condition condition)
    • findByVersion

      public Optional<O> findByVersion(org.jooq.Condition condition, org.jooq.Condition historyCondition, int version)
    • field

      protected <T> org.jooq.Field<T> field(org.jooq.TableField<? extends AbstractRecordPrototype<?>,T> field)
    • findRootRecordByVersion

      protected Optional<VH> findRootRecordByVersion(org.jooq.Condition condition, org.jooq.Condition historyCondition, int version)
    • findVersionIdsByContribution

      public List<com.nedap.archie.rm.support.identification.ObjectVersionId> findVersionIdsByContribution(UUID ehrId, UUID contributionId)
    • contributionCondition

      protected org.jooq.Condition contributionCondition(UUID ehrId, UUID contributionId, org.jooq.Table<?> table)
    • isDeleted

      protected boolean isDeleted(org.jooq.Condition condition, org.jooq.Condition historyCondition, Integer version)
    • findLatestHistoryRoot

      protected Optional<VH> findLatestHistoryRoot(org.jooq.Condition condition)
    • delete

      protected void delete(UUID ehrId, org.jooq.Condition condition, int version, @Nullable UUID contributionId, @Nullable UUID auditId, String notfoundMessage)
    • getOriginalVersion

      protected Optional<com.nedap.archie.rm.changecontrol.OriginalVersion<O>> getOriginalVersion(org.jooq.Condition condition, org.jooq.Condition historyCondition, int version)
    • hasEhr

      protected boolean hasEhr(UUID ehrId)
    • getLocatableClass

      protected abstract Class<O> getLocatableClass()
    • extractVersion

      public static int extractVersion(com.nedap.archie.rm.support.identification.UIDBasedId uid)
    • extractUid

      public static UUID extractUid(com.nedap.archie.rm.support.identification.UIDBasedId uid)
    • extractSystemId

      public static String extractSystemId(com.nedap.archie.rm.support.identification.UIDBasedId uid)
    • commitHead

      protected void commitHead(UUID ehrId, com.nedap.archie.rm.archetyped.Locatable versionDataObject, @Nullable UUID contributionId, @Nullable UUID auditId, ContributionChangeType changeType, Consumer<VR> addVersionFieldsFunction, BiConsumer<StructureNode,DR> addDataFieldsFunction)
    • toRecords

      protected final VersionDataDbRecord toRecords(UUID ehrId, com.nedap.archie.rm.archetyped.Locatable versionDataObject, UUID contributionId, UUID auditId)
    • update

      public void update(UUID ehrId, O versionedObject, org.jooq.Condition condition, org.jooq.Condition historyCondition, @Nullable UUID contributionId, @Nullable UUID auditId, Consumer<VR> addVersionFieldsFunction, BiConsumer<StructureNode,DR> addDataFieldsFunction, String notFoundErrorMessage)
    • getAdditionalSelectFields

      protected org.jooq.Field<?>[] getAdditionalSelectFields(org.jooq.Table<?> versionTable, org.jooq.Table<?> dataTable, boolean head)
      When reading some types of versioned objects additional data may be needed
      Parameters:
      versionTable -
      dataTable -
      head -
      Returns:
    • buildLocatableDataQuery

      protected org.jooq.SelectQuery<org.jooq.Record> buildLocatableDataQuery(org.jooq.Condition condition, boolean head)
      Parameters:
      condition -
      head -
      Returns:
      SelectQueryinvalid input: '<'Recordinvalid input: '<'UUID, Integer, JSONB, ...>
    • jsonbDataAggregation

      protected org.jooq.Field<org.jooq.JSONB> jsonbDataAggregation(org.jooq.Table<?> dataTable)
    • fromJoinedVersionData

      protected <R extends org.jooq.Record> org.jooq.SelectOnConditionStep<R> fromJoinedVersionData(org.jooq.SelectFromStep<R> select, boolean head)
    • getVersionDataJoinFields

      protected abstract List<org.jooq.TableField<VR,?>> getVersionDataJoinFields()
    • dataRootCondition

      protected org.jooq.Condition dataRootCondition(org.jooq.Table<?> dataTable)
    • findVersionByTime

      protected Optional<com.nedap.archie.rm.support.identification.ObjectVersionId> findVersionByTime(org.jooq.Condition condition, org.jooq.Condition historyCondition, OffsetDateTime time)
    • toLocatable

      protected <L extends com.nedap.archie.rm.archetyped.Locatable> Optional<L> toLocatable(org.jooq.Record jsonbRecord, Class<L> locatableClass)
      Type Parameters:
      L -
      Parameters:
      jsonbRecord - {vo_id, sys_version, jsonData}
      locatableClass -
      Returns:
    • copyHeadToHistory

      protected void copyHeadToHistory(VH versionRecord, OffsetDateTime now)
    • deleteHead

      protected void deleteHead(org.jooq.Condition versionCondition, int oldVersion, Function<String,RuntimeException> exceptionProvider)
    • versionHeadQueryExtended

      protected org.jooq.SelectJoinStep<org.jooq.Record> versionHeadQueryExtended(org.jooq.DSLContext context)
      version head + empty history fields: SYS_PERIOD_UPPER, SYS_DELETED
      Parameters:
      context -
      Returns:
    • findVersionHeadRecords

      protected org.jooq.Result<VH> findVersionHeadRecords(org.jooq.Condition condition)
    • jsonDataField

      protected org.jooq.Field<String> jsonDataField(org.jooq.Table<DR> table, String... path)
    • createCurrentTime

      protected OffsetDateTime createCurrentTime(OffsetDateTime lowerBound)
      Determines the current time.
      Parameters:
      lowerBound - For proper version intervals the value is guaranteed to be at least 1 microsecond after lowerBound
      Returns:
    • checkIsNextHeadVoId

      protected void checkIsNextHeadVoId(UUID headVoid, int headVersion, com.nedap.archie.rm.support.identification.UIDBasedId uid)