Class IdentifiableRepositoryImpl<I extends de.digitalcollections.model.identifiable.Identifiable>
java.lang.Object
de.digitalcollections.cudami.server.backend.impl.database.AbstractPagingSortingFilteringRepositoryImpl
de.digitalcollections.cudami.server.backend.impl.jdbi.JdbiRepositoryImpl<U>
de.digitalcollections.cudami.server.backend.impl.jdbi.UniqueObjectRepositoryImpl<I>
de.digitalcollections.cudami.server.backend.impl.jdbi.identifiable.IdentifiableRepositoryImpl<I>
- All Implemented Interfaces:
IdentifiableRepository<I>,PagingSortingFilteringRepository<I>,UniqueObjectRepository<I>
- Direct Known Subclasses:
EntityRepositoryImpl,FamilyNameRepositoryImpl,FileResourceMetadataRepositoryImpl,GivenNameRepositoryImpl,WebpageRepositoryImpl
@Repository
public class IdentifiableRepositoryImpl<I extends de.digitalcollections.model.identifiable.Identifiable>
extends UniqueObjectRepositoryImpl<I>
implements IdentifiableRepository<I>
-
Field Summary
FieldsFields inherited from class de.digitalcollections.cudami.server.backend.impl.jdbi.UniqueObjectRepositoryImpl
additionalReduceRowsBiConsumer, basicReduceRowsBiConsumer, fullReduceRowsBiConsumer, uniqueObjectImplClassFields inherited from class de.digitalcollections.cudami.server.backend.impl.jdbi.JdbiRepositoryImpl
dbi, mappingPrefix, tableAlias, tableNameFields inherited from class de.digitalcollections.cudami.server.backend.impl.database.AbstractPagingSortingFilteringRepositoryImpl
offsetForAlternativePaging -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedIdentifiableRepositoryImpl(org.jdbi.v3.core.Jdbi dbi, CudamiConfig cudamiConfig, IdentifierRepository identifierRepository, UrlAliasRepository urlAliasRepository) protectedIdentifiableRepositoryImpl(org.jdbi.v3.core.Jdbi dbi, String tableName, String tableAlias, String mappingPrefix, Class<? extends de.digitalcollections.model.identifiable.Identifiable> identifiableImplClass, int offsetForAlternativePaging, IdentifierRepository identifierRepository, UrlAliasRepository urlAliasRepository) -
Method Summary
Modifier and TypeMethodDescriptionaddCrossTablePagingAndSorting(de.digitalcollections.model.list.paging.PageRequest pageRequest, StringBuilder innerQuery, String crossTableAlias) voidaddRelatedEntity(UUID identifiableUuid, UUID entityUuid) voidaddRelatedFileresource(UUID identifiableUuid, UUID fileResourceUuid) create()protected BiConsumer<Map<UUID,I>, org.jdbi.v3.core.result.RowView> For details select (only used in find one, not lists): if additional objects should be "joined" into instance, set bi function for doing this.protected BiConsumer<Map<UUID,I>, org.jdbi.v3.core.result.RowView> Create basic reduce rows biconsumer for reduced selects (lists, paging)protected BiConsumer<Map<UUID,I>, org.jdbi.v3.core.result.RowView> Create full reduce rows biconsumer for full selects (find one).
For a plain UniqueObject full ad basic are the same (minimal dataset of uuid, lastModified, created).intdeleteByUuids(List<UUID> identifiablesUuids) protected voidextendReducedIdentifiable(I identifiable, org.jdbi.v3.core.result.RowView rowView) Extend the reduced Identifiable by the contents of the provided RowViewprotected de.digitalcollections.model.list.paging.PageResponse<I>find(de.digitalcollections.model.list.paging.PageRequest pageRequest, String commonSql, Map<String, Object> argumentMappings) de.digitalcollections.model.list.paging.PageResponse<I>findByLanguageAndInitial(de.digitalcollections.model.list.paging.PageRequest pageRequest, String language, String initial) Deprecated.de.digitalcollections.model.list.paging.PageResponse<de.digitalcollections.model.identifiable.entity.Entity>findRelatedEntities(UUID identifiableUuid, de.digitalcollections.model.list.paging.PageRequest pageRequest) de.digitalcollections.model.list.paging.PageResponse<de.digitalcollections.model.identifiable.resource.FileResource>findRelatedFileResources(UUID identifiableUuid, de.digitalcollections.model.list.paging.PageRequest pageRequest) getByIdentifier(String namespace, String identifierId) getColumnName(String modelProperty) getRandom(int count) protected Stringprotected StringDo not change order! Must match order in getSqlInsertFields!!!getSqlSelectAllFields(String tableAlias, String mappingPrefix) SQL-snippet for fields to be returned for complete field request.
If already all fields are returned with reduced fields request: just return reduced field set here, otherwise add additional fields to reduced set to get all fields.getSqlSelectReducedFields(String tableAlias, String mappingPrefix) protected Stringprotected booleanhasSplitColumn(String propertyName) Override this method for check of split fields that exist in the repository's contextretrieveList(String fieldsSql, StringBuilder innerQuery, Map<String, Object> argumentMappings, String orderBy) retrieveList(String fieldsSql, String fieldsSqlAdditionalJoins, StringBuilder innerQuery, Map<String, Object> argumentMappings, String orderBy) retrieveOne(String fieldsSql, de.digitalcollections.model.list.filtering.Filtering filtering, String sqlAdditionalJoins, Map<String, Object> argumentMappings, String innerSelect) voidsave(I identifiable, Map<String, Object> bindings, BiFunction<String, Map<String, Object>, String> sqlModifier) List<de.digitalcollections.model.identifiable.entity.Entity>setRelatedEntities(UUID identifiableUuid, List<de.digitalcollections.model.identifiable.entity.Entity> entities) List<de.digitalcollections.model.identifiable.resource.FileResource>setRelatedFileResources(UUID identifiableUuid, List<de.digitalcollections.model.identifiable.resource.FileResource> fileResources) protected booleansupportsCaseSensitivityForProperty(String modelProperty) Returns whether the passed property can be sorted case sensitive (in general).voidupdate(I identifiable, Map<String, Object> bindings, BiFunction<String, Map<String, Object>, String> sqlModifier) Methods inherited from class de.digitalcollections.cudami.server.backend.impl.jdbi.UniqueObjectRepositoryImpl
deleteByUuid, execSelectForList, extractUuids, find, find, find, getByUuidAndFiltering, getIndex, getIndex, getReturnedFieldsOnInsertUpdate, getSqlSelectAllFields, getSqlSelectAllFieldsJoins, getSqlSelectReducedFields, getSqlSelectReducedFieldsJoins, getUniqueField, insertUpdateCallback, retrieveCount, retrieveOne, retrieveOne, save, sqlSelectReducedFields, updateMethods inherited from class de.digitalcollections.cudami.server.backend.impl.jdbi.JdbiRepositoryImpl
addFiltering, addFiltering, count, count, escapeTermForJsonpath, execUpdateWithList, execUpdateWithMap, filterByLocalizedTextFields, filterBySplitField, getMappingPrefix, getTableAlias, getTableName, getTargetExpression, getWhereClause, getWhereClauses, mapFilterExpressionsToOtherTableColumnNames, retrieveNextSortIndexForParentChildren, splitToArray, splitToArrayMethods inherited from class de.digitalcollections.cudami.server.backend.impl.database.AbstractPagingSortingFilteringRepositoryImpl
addOrderBy, addPagingAndSorting, getOrderByMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface de.digitalcollections.cudami.server.backend.api.repository.identifiable.IdentifiableRepository
addRelatedEntity, addRelatedFileresource, findRelatedEntities, findRelatedFileResources, getByIdentifiable, getByIdentifier, setRelatedEntities, setRelatedFileResourcesMethods inherited from interface de.digitalcollections.cudami.server.backend.api.repository.PagingSortingFilteringRepository
findMethods inherited from interface de.digitalcollections.cudami.server.backend.api.repository.UniqueObjectRepository
count, delete, delete, deleteByUuid, getByExample, getByExampleAndFiltering, getByUuid, getByUuidAndFiltering, save, save, saveOrUpdate, update, update
-
Field Details
-
MAPPING_PREFIX
- See Also:
-
TABLE_ALIAS
- See Also:
-
TABLE_NAME
- See Also:
-
-
Constructor Details
-
IdentifiableRepositoryImpl
@Autowired protected IdentifiableRepositoryImpl(org.jdbi.v3.core.Jdbi dbi, CudamiConfig cudamiConfig, IdentifierRepository identifierRepository, UrlAliasRepository urlAliasRepository) -
IdentifiableRepositoryImpl
protected IdentifiableRepositoryImpl(org.jdbi.v3.core.Jdbi dbi, String tableName, String tableAlias, String mappingPrefix, Class<? extends de.digitalcollections.model.identifiable.Identifiable> identifiableImplClass, int offsetForAlternativePaging, IdentifierRepository identifierRepository, UrlAliasRepository urlAliasRepository)
-
-
Method Details
-
addCrossTablePagingAndSorting
public String addCrossTablePagingAndSorting(de.digitalcollections.model.list.paging.PageRequest pageRequest, StringBuilder innerQuery, String crossTableAlias) -
addRelatedEntity
- Specified by:
addRelatedEntityin interfaceIdentifiableRepository<I extends de.digitalcollections.model.identifiable.Identifiable>- Throws:
RepositoryException
-
addRelatedFileresource
public void addRelatedFileresource(UUID identifiableUuid, UUID fileResourceUuid) throws RepositoryException - Specified by:
addRelatedFileresourcein interfaceIdentifiableRepository<I extends de.digitalcollections.model.identifiable.Identifiable>- Throws:
RepositoryException
-
create
- Specified by:
createin interfaceUniqueObjectRepository<I extends de.digitalcollections.model.identifiable.Identifiable>- Throws:
RepositoryException
-
createAdditionalReduceRowsBiConsumer
protected BiConsumer<Map<UUID,I>, createAdditionalReduceRowsBiConsumer()org.jdbi.v3.core.result.RowView> Description copied from class:UniqueObjectRepositoryImplFor details select (only used in find one, not lists): if additional objects should be "joined" into instance, set bi function for doing this.- Overrides:
createAdditionalReduceRowsBiConsumerin classUniqueObjectRepositoryImpl<I extends de.digitalcollections.model.identifiable.Identifiable>- Returns:
- BiConsumer function
-
createBasicReduceRowsBiConsumer
Description copied from class:UniqueObjectRepositoryImplCreate basic reduce rows biconsumer for reduced selects (lists, paging)- Overrides:
createBasicReduceRowsBiConsumerin classUniqueObjectRepositoryImpl<I extends de.digitalcollections.model.identifiable.Identifiable>- Returns:
- BiConsumer function
-
createFullReduceRowsBiConcumer
Description copied from class:UniqueObjectRepositoryImplCreate full reduce rows biconsumer for full selects (find one).
For a plain UniqueObject full ad basic are the same (minimal dataset of uuid, lastModified, created).- Overrides:
createFullReduceRowsBiConcumerin classUniqueObjectRepositoryImpl<I extends de.digitalcollections.model.identifiable.Identifiable>- Returns:
- BiConsumer function
-
deleteByUuids
- Specified by:
deleteByUuidsin interfaceUniqueObjectRepository<I extends de.digitalcollections.model.identifiable.Identifiable>- Overrides:
deleteByUuidsin classUniqueObjectRepositoryImpl<I extends de.digitalcollections.model.identifiable.Identifiable>- Throws:
RepositoryException
-
extendReducedIdentifiable
Extend the reduced Identifiable by the contents of the provided RowView- Parameters:
identifiable- the reduced IdentifiablerowView- the rowView
-
find
protected de.digitalcollections.model.list.paging.PageResponse<I> find(de.digitalcollections.model.list.paging.PageRequest pageRequest, String commonSql, Map<String, Object> argumentMappings) throws RepositoryException- Overrides:
findin classUniqueObjectRepositoryImpl<I extends de.digitalcollections.model.identifiable.Identifiable>- Throws:
RepositoryException
-
findByLanguageAndInitial
@Deprecated public de.digitalcollections.model.list.paging.PageResponse<I> findByLanguageAndInitial(de.digitalcollections.model.list.paging.PageRequest pageRequest, String language, String initial) throws RepositoryException Deprecated.- Specified by:
findByLanguageAndInitialin interfaceIdentifiableRepository<I extends de.digitalcollections.model.identifiable.Identifiable>- Throws:
RepositoryException
-
findRelatedEntities
public de.digitalcollections.model.list.paging.PageResponse<de.digitalcollections.model.identifiable.entity.Entity> findRelatedEntities(UUID identifiableUuid, de.digitalcollections.model.list.paging.PageRequest pageRequest) throws RepositoryException - Specified by:
findRelatedEntitiesin interfaceIdentifiableRepository<I extends de.digitalcollections.model.identifiable.Identifiable>- Throws:
RepositoryException
-
findRelatedFileResources
public de.digitalcollections.model.list.paging.PageResponse<de.digitalcollections.model.identifiable.resource.FileResource> findRelatedFileResources(UUID identifiableUuid, de.digitalcollections.model.list.paging.PageRequest pageRequest) throws RepositoryException - Specified by:
findRelatedFileResourcesin interfaceIdentifiableRepository<I extends de.digitalcollections.model.identifiable.Identifiable>- Throws:
RepositoryException
-
getAllowedOrderByFields
- Overrides:
getAllowedOrderByFieldsin classUniqueObjectRepositoryImpl<I extends de.digitalcollections.model.identifiable.Identifiable>- Returns:
- model properties names that are applicable for sorting, will be mapped to database column names using @see #getColumnName
-
getByIdentifier
- Specified by:
getByIdentifierin interfaceIdentifiableRepository<I extends de.digitalcollections.model.identifiable.Identifiable>- Throws:
RepositoryException
-
getColumnName
- Overrides:
getColumnNamein classUniqueObjectRepositoryImpl<I extends de.digitalcollections.model.identifiable.Identifiable>- Parameters:
modelProperty- name of model property passed as String, e.g. "lastModified"- Returns:
- full qualified column name as used in sql queries ("last_modified" or e.g. "w.last_modified" if prefix used in queries)
-
getJsonbFields
- Overrides:
getJsonbFieldsin classJdbiRepositoryImpl<I extends de.digitalcollections.model.identifiable.Identifiable>- Returns:
- map containing name of jsonb field and function to get the field value
-
getLanguages
- Specified by:
getLanguagesin interfaceIdentifiableRepository<I extends de.digitalcollections.model.identifiable.Identifiable>- Throws:
RepositoryException
-
getRandom
- Specified by:
getRandomin interfaceUniqueObjectRepository<I extends de.digitalcollections.model.identifiable.Identifiable>- Throws:
RepositoryException
-
getSqlInsertFields
- Overrides:
getSqlInsertFieldsin classUniqueObjectRepositoryImpl<I extends de.digitalcollections.model.identifiable.Identifiable>- Returns:
- SQL for field names for insert statement of
UniqueObject
-
getSqlInsertValues
Description copied from class:UniqueObjectRepositoryImplDo not change order! Must match order in getSqlInsertFields!!!- Overrides:
getSqlInsertValuesin classUniqueObjectRepositoryImpl<I extends de.digitalcollections.model.identifiable.Identifiable>- Returns:
- SQL for value mapping for field names for insert statement of
UniqueObject
-
getSqlSelectAllFields
SQL-snippet for fields to be returned for complete field request.
If already all fields are returned with reduced fields request: just return reduced field set here, otherwise add additional fields to reduced set to get all fields.- Overrides:
getSqlSelectAllFieldsin classUniqueObjectRepositoryImpl<I extends de.digitalcollections.model.identifiable.Identifiable>- Returns:
- SQL snippet
-
getSqlSelectReducedFields
- Overrides:
getSqlSelectReducedFieldsin classUniqueObjectRepositoryImpl<I extends de.digitalcollections.model.identifiable.Identifiable>- Returns:
- SQL for fields of reduced field set of
UniqueObject
-
getSqlUpdateFieldValues
- Overrides:
getSqlUpdateFieldValuesin classUniqueObjectRepositoryImpl<I extends de.digitalcollections.model.identifiable.Identifiable>
-
hasSplitColumn
Description copied from class:JdbiRepositoryImplOverride this method for check of split fields that exist in the repository's context- Overrides:
hasSplitColumnin classJdbiRepositoryImpl<I extends de.digitalcollections.model.identifiable.Identifiable>- Parameters:
propertyName- java property name- Returns:
- corresponding split-column for property exists
-
retrieveList
protected List<I> retrieveList(String fieldsSql, String fieldsSqlAdditionalJoins, StringBuilder innerQuery, Map<String, Object> argumentMappings, String orderBy) throws RepositoryException- Overrides:
retrieveListin classUniqueObjectRepositoryImpl<I extends de.digitalcollections.model.identifiable.Identifiable>- Throws:
RepositoryException
-
retrieveList
public List<I> retrieveList(String fieldsSql, StringBuilder innerQuery, Map<String, Object> argumentMappings, String orderBy) throws RepositoryException- Overrides:
retrieveListin classUniqueObjectRepositoryImpl<I extends de.digitalcollections.model.identifiable.Identifiable>- Throws:
RepositoryException
-
retrieveOne
public I retrieveOne(String fieldsSql, de.digitalcollections.model.list.filtering.Filtering filtering, String sqlAdditionalJoins, Map<String, Object> argumentMappings, String innerSelect) throws RepositoryException- Overrides:
retrieveOnein classUniqueObjectRepositoryImpl<I extends de.digitalcollections.model.identifiable.Identifiable>- Throws:
RepositoryException
-
save
public void save(I identifiable, Map<String, Object> bindings, BiFunction<String, throws RepositoryExceptionMap<String, Object>, String> sqlModifier) - Overrides:
savein classUniqueObjectRepositoryImpl<I extends de.digitalcollections.model.identifiable.Identifiable>- Throws:
RepositoryException
-
setRelatedEntities
public List<de.digitalcollections.model.identifiable.entity.Entity> setRelatedEntities(UUID identifiableUuid, List<de.digitalcollections.model.identifiable.entity.Entity> entities) throws RepositoryException - Specified by:
setRelatedEntitiesin interfaceIdentifiableRepository<I extends de.digitalcollections.model.identifiable.Identifiable>- Throws:
RepositoryException
-
setRelatedFileResources
public List<de.digitalcollections.model.identifiable.resource.FileResource> setRelatedFileResources(UUID identifiableUuid, List<de.digitalcollections.model.identifiable.resource.FileResource> fileResources) throws RepositoryException - Specified by:
setRelatedFileResourcesin interfaceIdentifiableRepository<I extends de.digitalcollections.model.identifiable.Identifiable>- Throws:
RepositoryException
-
supportsCaseSensitivityForProperty
Description copied from class:AbstractPagingSortingFilteringRepositoryImplReturns whether the passed property can be sorted case sensitive (in general). This method should be kept in sync withAbstractPagingSortingFilteringRepositoryImpl.getAllowedOrderByFields().- Specified by:
supportsCaseSensitivityForPropertyin classAbstractPagingSortingFilteringRepositoryImpl- Parameters:
modelProperty- the property name (similar toAbstractPagingSortingFilteringRepositoryImpl.getColumnName(java.lang.String))- Returns:
trueonly if case (in)sensitive sorting is possible
-
update
public void update(I identifiable, Map<String, Object> bindings, BiFunction<String, throws RepositoryExceptionMap<String, Object>, String> sqlModifier) - Overrides:
updatein classUniqueObjectRepositoryImpl<I extends de.digitalcollections.model.identifiable.Identifiable>- Throws:
RepositoryException
-