Package com.logicaldoc.core.document

# Interface DocumentDAO

All Superinterfaces:
  `PersistentObjectDAO<Document>`

All Known Implementing Classes:
  `HibernateDocumentDAO`

public interface DocumentDAO extends PersistentObjectDAO<Document>
This class is a DAO-service for documents.

Version:
  1.0
Author:
  Michael Scholz, Marco Meschieri

## Field Summary

### Fields inherited from interface com.logicaldoc.core.PersistentObjectDAO

`ENTITY`

## Method Summary

Modifier and Type
Method
Description
`void`
`applyParentFolderSecurity(long docId, DocumentHistory transaction)`
Replaces the document's security policies with those from the parent folder
`void`
`archive(long docId, DocumentHistory transaction)`
Archives a document
`void`
`cleanExpiredTransactions()`
Cleans all references to expired transactions.
`void`
`cleanUnexistingUniqueTags()`
Cleans the ld_uniquetag table removing no more used tags, this method is optimized and uses a couple of prepared statements, in case of error it switches to `cleanUnexistingUniqueTagsOneByOne()`
`void`
`cleanUnexistingUniqueTagsOneByOne()`
Cleans the ld_uniquetag table removing no more used tags programmatically one by one.
`long`
`computeTotalSize(Long tenantId, Long publisherId, boolean computeDeleted)`
Obtains the total size of the repository, that is the sum of sizes of all documents and their versions
`long`
`count(Long tenantId, boolean computeDeleted, boolean computeArchived)`
Counts the number of documents
`long`
`countByIndexed(IndexingStatus indexingStatus)`
Counts the number of documents in a given indexation status(@see `AbstractDocument.getIndexed()`
`void`
`delete(long docId, int delCode, DocumentHistory transaction)`
This method deletes the document object and insert a new document history entry.
`void`
`delete(long docId, DocumentHistory transaction)`
Shortcut for delete(docId, 1, transaction)
`void`
`deleteAll(Collection<Document> documents, int delCode, DocumentHistory transaction)`
Deletes all documents form the database and modifies the custom ids of all documents
`void`
`deleteAll(Collection<Document> documents, DocumentHistory transaction)`
Shortcut for deleteAll(documents, 1, transaction)
`void`
`deleteOrphaned(long deleteUserId)`
This method deletes the documents into deleted folders.
`List<Long>`
`findAliasIds(long docId)`
Gets the ids of all aliases associated to the document with the given docId
`List<String>`
`findAllTags(String firstLetter, Long tenantId)`
Searches for all unique tags.
`List<Document>`
`findArchivedByFolder(long folderId)`
Finds archived documents in a folder (direct childeren only)
`Document`
`findByCustomId(String customId, long tenantId)`
This method finds a document by the custom ID.
`List<Document>`
`findByFileNameAndParentFolderId(Long folderId, String fileName, Long excludeId, Long tenantId, Integer max)`
Finds that document that lies under a specific folder (given by the id) an with a given fileName(like operator is used)
`List<Document>`
`findByFolder(long folderId, Integer max)`
Finds all documents direct children of the given folder.
`List<Document>`
`findByIds(Set<Long> ids, Integer max)`
Finds all documents whose id is included in the given pool of ids
`List<Document>`
`findByIndexingStatus(IndexingStatus indexingStatus)`
Finds all documents by the indexing status.
`List<Document>`
`findByLockUserAndStatus(Long userId, DocumentStatus status)`
Finds all document of0 the specified status and locked by the specified user
`Document`
`findByPath(String path, long tenantId)`
Finds a document by it's full path
`List<Long>`
`findByUserId(long userId)`
Finds all documents for a user.
`List<Document>`
`findByUserIdAndTag(long userId, String tag, Integer max)`
Finds authorized documents for a user having a specified tag.
`List<Document>`
`findDeleted(long userId, Integer max)`
Finds all deleted docs of a specific user.
`List<Long>`
`findDeletedDocIds()`
Gets the collection of deleted document ids
`List<Document>`
`findDeletedDocs()`
Finds the list of deleted documents.
`List<Long>`
`findDocIdByFolder(long folderId, Integer max)`
Finds all document ids inside the given folder.
`List<Long>`
`findDocIdByTag(String tag)`
This method finds all Doc Ids by a tag.
`List<Long>`
`findDocIdByUserIdAndTag(long userId, String tag)`
Finds authorized documents ids for a user having a specified tag.
`Document`
`findDocument(long docId)`
This method finds a document by the ID and if it is an alias the referenced document is returned instead.
`List<String>`
`findDuplicatedDigests(Long tenantId, Long folderId)`
Retrieves the list of duplicated checksums
`List<Document>`
`findLastDownloadsByUserId(long userId, int max)`
Finds the last downloaded documents by the given user
`List<Document>`
`findLastModifiedByUserId(long userId, int max)`
Finds a max number of documents last modified by an user.
`List<Document>`
`findLinkedDocuments(long docId, String linkType, Integer direction)`
This method enlists documents linked to the given document.
`Collection<Long>`
`findPublishedIds(Collection<Long> folderIds)`
Finds all document ids inside the specified folders that are published in the current date.
`List<String>`
`findTags(long docId)`
Retrieves the alphabetically ordered list of all the document's tags
`Map<String,Long>`
`findTags(String firstLetter, Long tenantId)`
Selects all tags and counts the occurrences.
`static DocumentDAO`
`get()`
Gets the object available in the application context
`Set<Permission>`
`getAllowedPermissions(long documentId, long userId)`
Finds all permissions of a user enabled on the specified document
`List<TagCloud>`
`getTagCloud(long tenantId, int max)`
Gets the tag cloud for the given tenant
`List<TagCloud>`
`getTagCloud(String sid)`
Gets the tag cloud for the given tenant
`Folder`
`getWorkspace(long docId)`
Retrieves, the workspace where the document(or alias) is stored
`void`
`initialize(Document doc)`
Initializes lazy loaded collections
`void`
`insertNewUniqueTags()`
Puts into ld_uniquetag the new unique tags
`boolean`
`isDownloadAllowed(long documentId, long userId)`
`boolean`
`isMoveAllowed(long documentId, long userId)`
`boolean`
`isPermissionAllowed(Permission permission, long documentId, long userId)`
This method checks if the given permission is enabled for a document and an user.
`boolean`
`isPreviewAllowed(long documentId, long userId)`
`boolean`
`isPrintAllowed(long documentId, long userId)`
`boolean`
`isReadAllowed(long documentId, long userId)`
`boolean`
`isWriteAllowed(long documentId, long userId)`
This method is looking up for writing rights for a document and an user.
`void`
`makeImmutable(long docId, DocumentHistory transaction)`
Marks the document, with the given docId, as immutable.
`void`
`restore(long docId, long folderId, DocumentHistory transaction)`
Restores a previously deleted document
`void`
`saveDocumentHistory(Document doc, DocumentHistory transaction)`
Saves a document's history
`void`
`setPassword(long docId, String password, DocumentHistory transaction)`
Protects the document with a password.
`void`
`store(Document doc, DocumentHistory transaction)`
This method persists the document object and insert a new document history entry
`void`
`unarchive(long docId, DocumentHistory transaction)`
Restores a previously archived document
`void`
`unsetPassword(long docId, DocumentHistory transaction)`
Removes the password protection from the document.
`void`
`updateCountUniqueTags()`
Updates the count of the unique tags
`void`
`updateDigest(Document doc)`
Updates the document's digest (SHA-1)

### Methods inherited from interface com.logicaldoc.core.PersistentObjectDAO

`bulkUpdate, count, count, count, delete, delete, deleteAll, deleteAll, evict, evict, findAll, findAll, findAllIds, findAllIds, findById, findById, findByObjectQuery, findByQuery, findByQuery, findByWhere, findByWhere, findIdsByWhere, findIdsByWhere, getDatabaseMetadata, getDbms, initialize, isMariaDB, isMySQL, isOracle, isPostgreSQL, isSQLServer, jdbcUpdate, jdbcUpdate, query, query, queryForDouble, queryForDouble, queryForInt, queryForInt, queryForList, queryForList, queryForList, queryForLong, queryForLong, queryForObject, queryForObject, queryForResultSet, queryForString, queryForString, store`

## Method Details

### get

static DocumentDAO get()
Gets the object available in the application context

Returns:
  the instance of this object in the application context

### findDocument

Document findDocument(long docId) throws PersistenceException
This method finds a document by the ID and if it is an alias the referenced document is returned instead.

Parameters:
  `docId` - ID of the document(or the alias)
Returns:
  Document with given ID
Throws:
  `PersistenceException` - an error happened in the database

### findByCustomId

Document findByCustomId(String customId, long tenantId) throws PersistenceException
This method finds a document by the custom ID.

Parameters:
  `customId` - custom ID of the document.
  `tenantId` - ID of the contained tenant.
Returns:
  Document with given ID.
Throws:
  `PersistenceException` - error at data layer

### findByUserId

List<Long> findByUserId(long userId) throws PersistenceException
Finds all documents for a user.

Parameters:
  `userId` - ID of the user.
Returns:
  Collection of all documentId required for the specified user.
Throws:
  `PersistenceException` - error at data layer

### findDocIdByFolder

List<Long> findDocIdByFolder(long folderId, Integer max) throws PersistenceException
Finds all document ids inside the given folder.

Parameters:
  `folderId` - Folder identifier
  `max` - Optional, maximum number of returned elements
Returns:
  Collection of all document id in the folder.
Throws:
  `PersistenceException` - error at data layer

### findByFolder

List<Document> findByFolder(long folderId, Integer max) throws PersistenceException
Finds all documents direct children of the given folder.

Parameters:
  `folderId` - Folder identifier
  `max` - Optional, defines the maximum records number
Returns:
  Collection of all documents in the folder
Throws:
  `PersistenceException` - error at data layer

### findByLockUserAndStatus

List<Document> findByLockUserAndStatus(Long userId, DocumentStatus status)
Finds all document of0 the specified status and locked by the specified user

Parameters:
  `userId` - The user id(optional)
  `status` - The status(optional)
Returns:
  Collection of all Documents locked by the specified user and of the specified status.

### findLastModifiedByUserId

List<Document> findLastModifiedByUserId(long userId, int max) throws PersistenceException
Finds a max number of documents last modified by an user.

Parameters:
  `userId` - ID of the user.
  `max` - maximum number of returned elements
Returns:
  Collection of the last documents changed by the specified user.
Throws:
  `PersistenceException` - error at data layer

### findLastDownloadsByUserId

List<Document> findLastDownloadsByUserId(long userId, int max) throws PersistenceException
Finds the last downloaded documents by the given user

Parameters:
  `userId` - id of the user
  `max` - maximum number of returned elements
Returns:
  list of documents
Throws:
  `PersistenceException` - error at data layer

### findByIds

List<Document> findByIds(Set<Long> ids, Integer max)
Finds all documents whose id is included in the given pool of ids

Parameters:
  `ids` - identifiers of the documents
  `max` - Optional, maximum number of returned elements
Returns:
  list of documents

### findDocIdByTag

List<Long> findDocIdByTag(String tag) throws PersistenceException
This method finds all Doc Ids by a tag.

Parameters:
  `tag` - Tag of the document.
Returns:
  Document with specified tag.
Throws:
  `PersistenceException` - error at data layer

### findTags

Map<String,Long> findTags(String firstLetter, Long tenantId) throws PersistenceException
Selects all tags and counts the occurrences.

Parameters:
  `firstLetter` - the first letter
  `tenantId` - identifier of the tenant
Returns:
  the map tag - count
Throws:
  `PersistenceException` - error at data layer

### findAllTags

List<String> findAllTags(String firstLetter, Long tenantId) throws PersistenceException
Searches for all unique tags.

Parameters:
  `firstLetter` - Optional first letter hint
  `tenantId` - ID of the tenant to search in
Returns:
  The list of all unique tags in the system
Throws:
  `PersistenceException` - error at data layer

### findByUserIdAndTag

List<Document> findByUserIdAndTag(long userId, String tag, Integer max) throws PersistenceException
Finds authorized documents for a user having a specified tag.

Parameters:
  `userId` - ID of the user
  `tag` - Tag of the document
  `max` - Optional, defines the maximum records number
Returns:
  Collection of found documents
Throws:
  `PersistenceException` - error at data layer

### findDocIdByUserIdAndTag

List<Long> findDocIdByUserIdAndTag(long userId, String tag) throws PersistenceException
Finds authorized documents ids for a user having a specified tag.

Parameters:
  `userId` - ID of the user.
  `tag` - Tag of the document
Returns:
  Set of found ids.
Throws:
  `PersistenceException` - error at data layer

### findLinkedDocuments

List<Document> findLinkedDocuments(long docId, String linkType, Integer direction) throws PersistenceException
This method enlists documents linked to the given document.

Important: The attribute `direction` defines the search logic as follows:

- 1: docId will be compared to link's document1
- 2: docId will be compared to link's document2
- null: docId will be compared to both document1 and document2

Parameters:
  `docId` - All documents linked to this one will be searched
  `linkType` - Type of the link (optional)
  `direction` - if 1 docId will be compared to link's document1, id 2 docId will be compared to link's document2, if null docId will be compared to both document1 and document2 of the link.
Returns:
  The collection of linked documents
Throws:
  `PersistenceException` - error at data layer

### findByFileNameAndParentFolderId

List<Document> findByFileNameAndParentFolderId(Long folderId, String fileName, Long excludeId, Long tenantId, Integer max) throws PersistenceException
Finds that document that lies under a specific folder (given by the id) an with a given fileName(like operator is used)

Parameters:
  `folderId` - The folder id (it can be null).
  `fileName` - name of the file or a part of it (you can use SQL % jolly chars, eg: contract.pdf, %ontrac%)
  `excludeId` - Optional id of a document that must not be considered
  `tenantId` - Optional id of the tenant
  `max` - Optional maximum number of returned elements
Returns:
  The list of documents with the given fileName. If the folder id is null, the searched document can belong to any folder in the repository
Throws:
  `PersistenceException` - error at data layer

### findByPath

Document findByPath(String path, long tenantId) throws PersistenceException
Finds a document by it's full path

Parameters:
  `path` - The path comprehensive of the file name
  `tenantId` - The tenant
Returns:
  the found document
Throws:
  `PersistenceException` - error at data layer

### initialize

void initialize(Document doc)
Initializes lazy loaded collections

Specified by:
  `initialize` in interface `PersistentObjectDAO<Document>`
Parameters:
  `doc` - The document to be initialized

### computeTotalSize

long computeTotalSize(Long tenantId, Long publisherId, boolean computeDeleted) throws PersistenceException
Obtains the total size of the repository, that is the sum of sizes of all documents and their versions

Parameters:
  `tenantId` - identifier of the tenant(optional)
  `publisherId` - identifier of the publisher user (optional)
  `computeDeleted` - If true, even deleted documents are considered
Returns:
  the total size expressed in bytes
Throws:
  `PersistenceException` - error at data layer

### findDeletedDocIds

List<Long> findDeletedDocIds() throws PersistenceException
Gets the collection of deleted document ids

Returns:
  collection of document identifiers
Throws:
  `PersistenceException` - error at data layer

### findDeletedDocs

List<Document> findDeletedDocs() throws PersistenceException
Finds the list of deleted documents.

Attention: The returned objects are not fully operative and are populated with a minimal set of data.

Returns:
  the list of documents
Throws:
  `PersistenceException` - error at data layer

### count

long count(Long tenantId, boolean computeDeleted, boolean computeArchived) throws PersistenceException
Counts the number of documents

Parameters:
  `tenantId` - The tenant to search in
  `computeDeleted` - If true, even deleted documents are considered
  `computeArchived` - If true, even archived documents are considered
Returns:
  number of documents
Throws:
  `PersistenceException` - error at data layer

### findByIndexingStatus

List<Document> findByIndexingStatus(IndexingStatus indexingStatus) throws PersistenceException
Finds all documents by the indexing status. Order by ascending lastModifed

Parameters:
  `indexingStatus` - the indexing status
Returns:
  Collection of all documents
Throws:
  `PersistenceException` - error at data layer

### countByIndexed

long countByIndexed(IndexingStatus indexingStatus) throws PersistenceException
Counts the number of documents in a given indexation status(@see `AbstractDocument.getIndexed()`

Parameters:
  `indexingStatus` - the indexation status to check
Returns:
  number of documents
Throws:
  `PersistenceException` - error at data layer

### restore

void restore(long docId, long folderId, DocumentHistory transaction) throws PersistenceException
Restores a previously deleted document

Parameters:
  `docId` - Id of the document to be restored
  `folderId` - Id of the folder the document will be restored into
  `transaction` - entry to log the event
Throws:
  `PersistenceException` - error at data layer

### unarchive

void unarchive(long docId, DocumentHistory transaction) throws PersistenceException
Restores a previously archived document

Parameters:
  `docId` - Ids of the document to be restored
  `transaction` - entry to log the event
Throws:
  `PersistenceException` - error at data layer

### makeImmutable

void makeImmutable(long docId, DocumentHistory transaction) throws PersistenceException
Marks the document, with the given docId, as immutable. Unlocks the document if it was locked.

Parameters:
  `docId` - identifier of the document
  `transaction` - entry to log the event
Throws:
  `PersistenceException` - error at data layer

### deleteAll

void deleteAll(Collection<Document> documents, DocumentHistory transaction) throws PersistenceException
Shortcut for deleteAll(documents, 1, transaction)

Parameters:
  `documents` - the documents
  `transaction` - the current session
Throws:
  `PersistenceException` - error at data layer

### deleteAll

void deleteAll(Collection<Document> documents, int delCode, DocumentHistory transaction) throws PersistenceException
Deletes all documents form the database and modifies the custom ids of all documents

Parameters:
  `documents` - The documents to be deleted
  `delCode` - The deletion code
  `transaction` - entry to log the event
Throws:
  `PersistenceException` - error at data layer

### store

void store(Document doc, DocumentHistory transaction) throws PersistenceException
This method persists the document object and insert a new document history entry

Parameters:
  `doc` - the document
  `transaction` - entry to log the event
Throws:
  `PersistenceException` - error at data layer

### delete

void delete(long docId, int delCode, DocumentHistory transaction) throws PersistenceException
This method deletes the document object and insert a new document history entry.

Parameters:
  `docId` - The id of the document to delete
  `delCode` - The deletion code
  `transaction` - entry to log the event
Throws:
  `PersistenceException` - error at data layer

### delete

void delete(long docId, DocumentHistory transaction) throws PersistenceException
Shortcut for delete(docId, 1, transaction)

Parameters:
  `docId` - identifier of the document
  `transaction` - entry to log the event
Throws:
  `PersistenceException` - error at data layer

### archive

void archive(long docId, DocumentHistory transaction) throws PersistenceException
Archives a document

Parameters:
  `docId` - identifier of the document
  `transaction` - entry to log the event
Throws:
  `PersistenceException` - error at data layer

### findArchivedByFolder

List<Document> findArchivedByFolder(long folderId) throws PersistenceException
Finds archived documents in a folder (direct childeren only)

Parameters:
  `folderId` - identifier of the folder
Returns:
  list of documents
Throws:
  `PersistenceException` - error at data layer

### findAliasIds

List<Long> findAliasIds(long docId) throws PersistenceException
Gets the ids of all aliases associated to the document with the given docId

Parameters:
  `docId` - identifier of the document
Returns:
  list of identifiers of aliases
Throws:
  `PersistenceException` - error at data layer

### findDeleted

List<Document> findDeleted(long userId, Integer max) throws PersistenceException
Finds all deleted docs of a specific user.

Parameters:
  `userId` - The user that performed the deletion
  `max` - Optional, defines the max number of returned elements
Returns:
  The documents list
Throws:
  `PersistenceException` - error at data layer

### deleteOrphaned

void deleteOrphaned(long deleteUserId) throws PersistenceException
This method deletes the documents into deleted folders.

Parameters:
  `deleteUserId` - The id of the user that performs the deleting
Throws:
  `PersistenceException` - error at data layer

### findPublishedIds

Collection<Long> findPublishedIds(Collection<Long> folderIds) throws PersistenceException
Finds all document ids inside the specified folders that are published in the current date.

Parameters:
  `folderIds` - Set of folder ids in which the method will search
Returns:
  List of published document ids
Throws:
  `PersistenceException` - error at data layer

### updateDigest

void updateDigest(Document doc) throws PersistenceException
Updates the document's digest (SHA-1)

Parameters:
  `doc` - The document to be processed
Throws:
  `PersistenceException` - error at data layer

### cleanExpiredTransactions

void cleanExpiredTransactions() throws PersistenceException
Cleans all references to expired transactions. If no lock is found for a document referencing a given transaction, the transactionId will be set to null.

Throws:
  `PersistenceException` - error at data layer

### saveDocumentHistory

void saveDocumentHistory(Document doc, DocumentHistory transaction) throws PersistenceException
Saves a document's history

Parameters:
  `doc` - the document
  `transaction` - the current session
Throws:
  `PersistenceException` - error at data layer

### cleanUnexistingUniqueTags

void cleanUnexistingUniqueTags() throws PersistenceException
Cleans the ld_uniquetag table removing no more used tags, this method is optimized and uses a couple of prepared statements, in case of error it switches to `cleanUnexistingUniqueTagsOneByOne()`

Throws:
  `PersistenceException` - error at data layer

### cleanUnexistingUniqueTagsOneByOne

void cleanUnexistingUniqueTagsOneByOne() throws PersistenceException
Cleans the ld_uniquetag table removing no more used tags programmatically one by one. This method is not as optimized as `cleanUnexistingUniqueTags()` and should not be invoked directly

Throws:
  `PersistenceException` - error at data layer

### insertNewUniqueTags

void insertNewUniqueTags() throws PersistenceException
Puts into ld_uniquetag the new unique tags

Throws:
  `PersistenceException` - error at data layer

### updateCountUniqueTags

void updateCountUniqueTags() throws PersistenceException
Updates the count of the unique tags

Throws:
  `PersistenceException` - error at data layer

### getTagCloud

List<TagCloud> getTagCloud(long tenantId, int max) throws PersistenceException
Gets the tag cloud for the given tenant

Parameters:
  `tenantId` - identifier of the tenant
  `max` - maximum number of returned elements
Returns:
  list of tag clouds
Throws:
  `PersistenceException` - error at data layer

### getTagCloud

List<TagCloud> getTagCloud(String sid) throws PersistenceException
Gets the tag cloud for the given tenant

Parameters:
  `sid` - identifier of the session
Returns:
  list of tag clouds
Throws:
  `PersistenceException` - error at data layer

### getWorkspace

Folder getWorkspace(long docId) throws PersistenceException
Retrieves, the workspace where the document(or alias) is stored

Parameters:
  `docId` - identifier of a document
Returns:
  the parent workspace
Throws:
  `PersistenceException` - error at data layer

### setPassword

void setPassword(long docId, String password, DocumentHistory transaction) throws PersistenceException
Protects the document with a password. The same password is replicated to all the versions

Parameters:
  `docId` - ID of the document
  `password` - The new password in clear
  `transaction` - history informations
Throws:
  `PersistenceException` - error at data layer

### unsetPassword

void unsetPassword(long docId, DocumentHistory transaction) throws PersistenceException
Removes the password protection from the document. The same action is replicated to all the versions

Parameters:
  `docId` - ID of the document
  `transaction` - session informations
Throws:
  `PersistenceException` - error at data layer

### findDuplicatedDigests

List<String> findDuplicatedDigests(Long tenantId, Long folderId) throws PersistenceException
Retrieves the list of duplicated checksums

Parameters:
  `tenantId` - identifier of the tenant
  `folderId` - identifier of the folder
Returns:
  list of duplicated digests
Throws:
  `PersistenceException` - error at data layer

### findTags

List<String> findTags(long docId) throws PersistenceException
Retrieves the alphabetically ordered list of all the document's tags

Parameters:
  `docId` - identifier of the document
Returns:
  list of the document's tags
Throws:
  `PersistenceException` - error at data layer

### applyParentFolderSecurity

void applyParentFolderSecurity(long docId, DocumentHistory transaction) throws PersistenceException
Replaces the document's security policies with those from the parent folder

Parameters:
  `docId` - identifier of the document
  `transaction` - the current transaction
Throws:
  `PersistenceException` - error at data layer

### isWriteAllowed

boolean isWriteAllowed(long documentId, long userId) throws PersistenceException
This method is looking up for writing rights for a document and an user.

Parameters:
  `documentId` - ID of the document
  `userId` - ID of the user
Returns:
  if the write permission is granted
Throws:
  `PersistenceException` - error at data layer

### isReadAllowed

boolean isReadAllowed(long documentId, long userId) throws PersistenceException

Throws:
  `PersistenceException`

### isPreviewAllowed

boolean isPreviewAllowed(long documentId, long userId) throws PersistenceException

Throws:
  `PersistenceException`

### isPrintAllowed

boolean isPrintAllowed(long documentId, long userId) throws PersistenceException

Throws:
  `PersistenceException`

### isDownloadAllowed

boolean isDownloadAllowed(long documentId, long userId) throws PersistenceException

Throws:
  `PersistenceException`

### isMoveAllowed

boolean isMoveAllowed(long documentId, long userId) throws PersistenceException

Throws:
  `PersistenceException`

### isPermissionAllowed

boolean isPermissionAllowed(Permission permission, long documentId, long userId) throws PersistenceException
This method checks if the given permission is enabled for a document and an user.

Parameters:
  `permission` - the permission to check
  `documentId` - ID of the folder
  `userId` - ID of the user
Returns:
  if the permission is granted to the user
Throws:
  `PersistenceException` - error at data layer

### getAllowedPermissions

Set<Permission> getAllowedPermissions(long documentId, long userId) throws PersistenceException
Finds all permissions of a user enabled on the specified document

Parameters:
  `documentId` - ID of the document
  `userId` - ID of the user
Returns:
  Collection of enabled permissions
Throws:
  `PersistenceException` - error at data layer