private Document toDocument(final DocumentDescriptor docDesc, final DocumentVersion docVersion) { final boolean isLatest = docDesc.getLastVersionId() == docVersion.getId(); final DocumentImpl documentImpl = new DocumentImpl(docDesc.getName(), docVersion.getAuthor(), new Date( docVersion.getCreationDate()), new Date(docVersion.getLastModificationDate()), isLatest, docVersion.isMajorVersion(), String.valueOf(docVersion.getVersionLabel()), String.valueOf(docVersion .getVersionSeriesId()), docVersion.getContentFileName(), docVersion.getContentMimeType(), docVersion.getContentSize(), docDesc.getProcessDefinitionUUID(), docDesc.getProcessInstanceUUID(), docVersion.getContentStorageId()); documentImpl.setId(String.valueOf(docVersion.getId())); return documentImpl; }
@Override public void deleteDocument(final String documentId, final boolean allVersions) throws DocumentNotFoundException { final DocumentVersion documentVersion = getDbSession().getDocumentVersion(Long.valueOf(documentId)); final DocumentDescriptor documentDescriptor = getDbSession().getDocumentDescriptor( Long.valueOf(documentVersion.getVersionSeriesId())); if (allVersions) { // delete all versions from descriptor deleteDocuments(documentDescriptor); } else { // delete version deleteVersionAndContent(documentVersion); final List<DocumentVersion> documentVersions = getDbSession().getDocumentVersions(documentDescriptor.getId()); if (documentVersions.isEmpty()) { // if it was the last version also delete the descriptor getDbSession().delete(documentDescriptor); } else if (documentDescriptor.getLastVersionId() == documentVersion.getId()) { // if there are other version and the last version was deleted update descriptor documentDescriptor.setLastVersionId(documentVersions.get(0).getId()); } } }
@Override public List<Document> getVersionsOfDocument(final String documentId) throws DocumentNotFoundException { final DocumentVersion currentDocumentVersion = getDbSession().getDocumentVersion(Long.valueOf(documentId)); final DocumentDescriptor documentDescriptor = getDbSession().getDocumentDescriptor( Long.valueOf(currentDocumentVersion.getVersionSeriesId())); final List<DocumentVersion> documentVersions = getDbSession().getDocumentVersions(documentDescriptor.getId()); final List<Document> documents = new ArrayList<Document>(documentVersions.size()); for (final DocumentVersion documentVersion : documentVersions) { documents.add(toDocument(documentDescriptor, documentVersion)); } return documents; }
private void deleteVersionAndContent(final DocumentVersion documentVersion) throws DocumentNotFoundException { documentStorageService.deleteContent(documentVersion.getContentStorageId()); getDbSession().delete(documentVersion); }
@Override public Document getDocument(final String documentId) throws DocumentNotFoundException { final DocumentVersion documentVersion = getDbSession().getDocumentVersion(Long.valueOf(documentId)); if (documentVersion == null) { throw new DocumentNotFoundException(documentId); } final DocumentDescriptor documentDescriptor = getDbSession().getDocumentDescriptor( Long.valueOf(documentVersion.getVersionSeriesId())); return toDocument(documentDescriptor, documentVersion); }
@Override public void attachDocumentTo(final ProcessDefinitionUUID processDefinitionUUID, final ProcessInstanceUUID processInstanceUUID, final String documentId) throws DocumentNotFoundException { final DocumentVersion documentVersion = getDbSession().getDocumentVersion(Long.valueOf(documentId)); final DocumentDescriptorMappingImpl docDescMapping = new DocumentDescriptorMappingImpl( documentVersion.getVersionSeriesId(), processDefinitionUUID, processInstanceUUID); getDbSession().save(docDescMapping); }
@Override public Document createVersion(final String documentId, final boolean isMajorVersion, final String fileName, final String mimeType, final byte[] content, final String author, final Date creationDate, final Date lastModificationDate) throws DocumentationCreationException { final DocumentVersion lastVersion = getDbSession().getDocumentVersion(Long.valueOf(documentId)); final Long documentDescriptorId = Long.valueOf(lastVersion.getVersionSeriesId()); // ensure that exists a lock entry for the given descriptor id ensureHasLockEntry(documentDescriptorId); Document document = null; synchronized (documentsLock.get(documentDescriptorId)) { final DocumentDescriptor documentDescriptor = getDbSession().getDocumentDescriptor(documentDescriptorId); document = createDocumentVersionUsingDescriptor(fileName, mimeType, content, isMajorVersion, author, creationDate, lastModificationDate, documentDescriptor); } // remove the lock entry if it isn't used anymore removeLockEntryIfPossible(documentDescriptorId); return document; }