mirror of
https://github.com/sismics/docs.git
synced 2025-12-13 17:56:20 +00:00
DAO/event refactoring
This commit is contained in:
@@ -95,16 +95,11 @@ public class DocumentResource extends BaseResource {
|
||||
|
||||
DocumentDao documentDao = new DocumentDao();
|
||||
AclDao aclDao = new AclDao();
|
||||
DocumentDto documentDto = documentDao.getDocument(documentId);
|
||||
DocumentDto documentDto = documentDao.getDocument(documentId, PermType.READ, shareId == null ? principal.getId() : shareId);
|
||||
if (documentDto == null) {
|
||||
return Response.status(Status.NOT_FOUND).build();
|
||||
}
|
||||
|
||||
// Check document visibility
|
||||
if (!aclDao.checkPermission(documentId, PermType.READ, shareId == null ? principal.getId() : shareId)) {
|
||||
throw new ForbiddenClientException();
|
||||
}
|
||||
|
||||
JsonObjectBuilder document = Json.createObjectBuilder()
|
||||
.add("id", documentDto.getId())
|
||||
.add("title", documentDto.getTitle())
|
||||
@@ -200,8 +195,8 @@ public class DocumentResource extends BaseResource {
|
||||
public Response getPdf(
|
||||
@PathParam("id") String documentId,
|
||||
@QueryParam("share") String shareId,
|
||||
@QueryParam("metadata") Boolean metadata,
|
||||
@QueryParam("comments") Boolean comments,
|
||||
final @QueryParam("metadata") Boolean metadata,
|
||||
final @QueryParam("comments") Boolean comments,
|
||||
final @QueryParam("fitimagetopage") Boolean fitImageToPage,
|
||||
@QueryParam("margin") String marginStr) {
|
||||
authenticate();
|
||||
@@ -211,8 +206,8 @@ public class DocumentResource extends BaseResource {
|
||||
|
||||
// Get document and check read permission
|
||||
DocumentDao documentDao = new DocumentDao();
|
||||
Document document = documentDao.getDocument(documentId, PermType.READ, shareId == null ? principal.getId() : shareId);
|
||||
if (document == null) {
|
||||
DocumentDto documentDto = documentDao.getDocument(documentId, PermType.READ, shareId == null ? principal.getId() : shareId);
|
||||
if (documentDto == null) {
|
||||
return Response.status(Status.NOT_FOUND).build();
|
||||
}
|
||||
|
||||
@@ -231,7 +226,7 @@ public class DocumentResource extends BaseResource {
|
||||
StreamingOutput stream = new StreamingOutput() {
|
||||
@Override
|
||||
public void write(OutputStream outputStream) throws IOException, WebApplicationException {
|
||||
try (InputStream inputStream = PdfUtil.convertToPdf(fileList, fitImageToPage, margin)) {
|
||||
try (InputStream inputStream = PdfUtil.convertToPdf(fileList, fitImageToPage, metadata, comments, margin)) {
|
||||
ByteStreams.copy(inputStream, outputStream);
|
||||
} catch (Exception e) {
|
||||
throw new IOException(e);
|
||||
@@ -243,7 +238,7 @@ public class DocumentResource extends BaseResource {
|
||||
|
||||
return Response.ok(stream)
|
||||
.header("Content-Type", MimeType.APPLICATION_PDF)
|
||||
.header("Content-Disposition", "inline; filename=\"" + document.getTitle() + ".pdf\"")
|
||||
.header("Content-Disposition", "inline; filename=\"" + documentDto.getTitle() + ".pdf\"")
|
||||
.build();
|
||||
}
|
||||
|
||||
@@ -568,10 +563,15 @@ public class DocumentResource extends BaseResource {
|
||||
throw new ClientException("ValidationError", MessageFormat.format("{0} is not a supported language", language));
|
||||
}
|
||||
|
||||
// Check write permission
|
||||
AclDao aclDao = new AclDao();
|
||||
if (!aclDao.checkPermission(id, PermType.WRITE, principal.getId())) {
|
||||
throw new ForbiddenClientException();
|
||||
}
|
||||
|
||||
// Get the document
|
||||
DocumentDao documentDao = new DocumentDao();
|
||||
Document document;
|
||||
document = documentDao.getDocument(id, PermType.WRITE, principal.getId());
|
||||
Document document = documentDao.getById(id);
|
||||
if (document == null) {
|
||||
return Response.status(Status.NOT_FOUND).build();
|
||||
}
|
||||
@@ -622,10 +622,10 @@ public class DocumentResource extends BaseResource {
|
||||
// Update relations
|
||||
updateRelationList(id, relationList);
|
||||
|
||||
// Raise a document updated event
|
||||
// Raise a document updated event (with the document to update Lucene)
|
||||
DocumentUpdatedAsyncEvent documentUpdatedAsyncEvent = new DocumentUpdatedAsyncEvent();
|
||||
documentUpdatedAsyncEvent.setUserId(principal.getId());
|
||||
documentUpdatedAsyncEvent.setDocument(document);
|
||||
documentUpdatedAsyncEvent.setDocumentId(id);
|
||||
AppContext.getInstance().getAsyncEventBus().post(documentUpdatedAsyncEvent);
|
||||
|
||||
JsonObjectBuilder response = Json.createObjectBuilder()
|
||||
@@ -697,14 +697,14 @@ public class DocumentResource extends BaseResource {
|
||||
// Get the document
|
||||
DocumentDao documentDao = new DocumentDao();
|
||||
FileDao fileDao = new FileDao();
|
||||
Document document = documentDao.getDocument(id, PermType.WRITE, principal.getId());
|
||||
List<File> fileList = fileDao.getByDocumentId(principal.getId(), id);
|
||||
if (document == null) {
|
||||
DocumentDto documentDto = documentDao.getDocument(id, PermType.WRITE, principal.getId());
|
||||
if (documentDto == null) {
|
||||
return Response.status(Status.NOT_FOUND).build();
|
||||
}
|
||||
List<File> fileList = fileDao.getByDocumentId(principal.getId(), id);
|
||||
|
||||
// Delete the document
|
||||
documentDao.delete(document.getId(), principal.getId());
|
||||
documentDao.delete(documentDto.getId(), principal.getId());
|
||||
|
||||
// Raise file deleted events (don't bother sending document updated event)
|
||||
for (File file : fileList) {
|
||||
@@ -717,7 +717,7 @@ public class DocumentResource extends BaseResource {
|
||||
// Raise a document deleted event
|
||||
DocumentDeletedAsyncEvent documentDeletedAsyncEvent = new DocumentDeletedAsyncEvent();
|
||||
documentDeletedAsyncEvent.setUserId(principal.getId());
|
||||
documentDeletedAsyncEvent.setDocument(document);
|
||||
documentDeletedAsyncEvent.setDocumentId(documentDto.getId());
|
||||
AppContext.getInstance().getAsyncEventBus().post(documentDeletedAsyncEvent);
|
||||
|
||||
// Always return OK
|
||||
|
||||
@@ -48,7 +48,6 @@ import com.sismics.docs.core.event.DocumentUpdatedAsyncEvent;
|
||||
import com.sismics.docs.core.event.FileCreatedAsyncEvent;
|
||||
import com.sismics.docs.core.event.FileDeletedAsyncEvent;
|
||||
import com.sismics.docs.core.model.context.AppContext;
|
||||
import com.sismics.docs.core.model.jpa.Document;
|
||||
import com.sismics.docs.core.model.jpa.File;
|
||||
import com.sismics.docs.core.model.jpa.User;
|
||||
import com.sismics.docs.core.util.DirectoryUtil;
|
||||
@@ -94,13 +93,13 @@ public class FileResource extends BaseResource {
|
||||
User user = userDao.getById(principal.getId());
|
||||
|
||||
// Get the document
|
||||
Document document = null;
|
||||
DocumentDto documentDto = null;
|
||||
if (Strings.isNullOrEmpty(documentId)) {
|
||||
documentId = null;
|
||||
} else {
|
||||
DocumentDao documentDao = new DocumentDao();
|
||||
document = documentDao.getDocument(documentId, PermType.WRITE, principal.getId());
|
||||
if (document == null) {
|
||||
documentDto = documentDao.getDocument(documentId, PermType.WRITE, principal.getId());
|
||||
if (documentDto == null) {
|
||||
return Response.status(Status.NOT_FOUND).build();
|
||||
}
|
||||
}
|
||||
@@ -165,7 +164,7 @@ public class FileResource extends BaseResource {
|
||||
if (documentId != null) {
|
||||
FileCreatedAsyncEvent fileCreatedAsyncEvent = new FileCreatedAsyncEvent();
|
||||
fileCreatedAsyncEvent.setUserId(principal.getId());
|
||||
fileCreatedAsyncEvent.setDocument(document);
|
||||
fileCreatedAsyncEvent.setLanguage(documentDto.getLanguage());
|
||||
fileCreatedAsyncEvent.setFile(file);
|
||||
fileCreatedAsyncEvent.setInputStream(fileInputStream);
|
||||
fileCreatedAsyncEvent.setPdfInputStream(pdfIntputStream);
|
||||
@@ -173,7 +172,7 @@ public class FileResource extends BaseResource {
|
||||
|
||||
DocumentUpdatedAsyncEvent documentUpdatedAsyncEvent = new DocumentUpdatedAsyncEvent();
|
||||
documentUpdatedAsyncEvent.setUserId(principal.getId());
|
||||
documentUpdatedAsyncEvent.setDocument(document);
|
||||
documentUpdatedAsyncEvent.setDocumentId(documentId);
|
||||
AppContext.getInstance().getAsyncEventBus().post(documentUpdatedAsyncEvent);
|
||||
}
|
||||
|
||||
@@ -214,8 +213,8 @@ public class FileResource extends BaseResource {
|
||||
DocumentDao documentDao = new DocumentDao();
|
||||
FileDao fileDao = new FileDao();
|
||||
File file = fileDao.getFile(id, principal.getId());
|
||||
Document document = documentDao.getDocument(documentId, PermType.WRITE, principal.getId());
|
||||
if (file == null || document == null) {
|
||||
DocumentDto documentDto = documentDao.getDocument(documentId, PermType.WRITE, principal.getId());
|
||||
if (file == null || documentDto == null) {
|
||||
return Response.status(Status.NOT_FOUND).build();
|
||||
}
|
||||
|
||||
@@ -236,14 +235,14 @@ public class FileResource extends BaseResource {
|
||||
final InputStream responseInputStream = EncryptionUtil.decryptInputStream(fileInputStream, user.getPrivateKey());
|
||||
FileCreatedAsyncEvent fileCreatedAsyncEvent = new FileCreatedAsyncEvent();
|
||||
fileCreatedAsyncEvent.setUserId(principal.getId());
|
||||
fileCreatedAsyncEvent.setDocument(document);
|
||||
fileCreatedAsyncEvent.setLanguage(documentDto.getLanguage());
|
||||
fileCreatedAsyncEvent.setFile(file);
|
||||
fileCreatedAsyncEvent.setInputStream(responseInputStream);
|
||||
AppContext.getInstance().getAsyncEventBus().post(fileCreatedAsyncEvent);
|
||||
|
||||
DocumentUpdatedAsyncEvent documentUpdatedAsyncEvent = new DocumentUpdatedAsyncEvent();
|
||||
documentUpdatedAsyncEvent.setUserId(principal.getId());
|
||||
documentUpdatedAsyncEvent.setDocument(document);
|
||||
documentUpdatedAsyncEvent.setDocumentId(documentId);
|
||||
AppContext.getInstance().getAsyncEventBus().post(documentUpdatedAsyncEvent);
|
||||
} catch (Exception e) {
|
||||
throw new ClientException("AttachError", "Error attaching file to document", e);
|
||||
@@ -364,14 +363,14 @@ public class FileResource extends BaseResource {
|
||||
return Response.status(Status.NOT_FOUND).build();
|
||||
}
|
||||
|
||||
Document document = null;
|
||||
DocumentDto documentDto = null;
|
||||
if (file.getDocumentId() == null) {
|
||||
// It's an orphan file
|
||||
if (!file.getUserId().equals(principal.getId())) {
|
||||
// But not ours
|
||||
throw new ForbiddenClientException();
|
||||
}
|
||||
} else if ((document = documentDao.getDocument(file.getDocumentId(), PermType.WRITE, principal.getId())) == null) {
|
||||
} else if ((documentDto = documentDao.getDocument(file.getDocumentId(), PermType.WRITE, principal.getId())) == null) {
|
||||
return Response.status(Status.NOT_FOUND).build();
|
||||
}
|
||||
|
||||
@@ -395,11 +394,11 @@ public class FileResource extends BaseResource {
|
||||
fileDeletedAsyncEvent.setFile(file);
|
||||
AppContext.getInstance().getAsyncEventBus().post(fileDeletedAsyncEvent);
|
||||
|
||||
if (document != null) {
|
||||
if (documentDto != null) {
|
||||
// Raise a new document updated
|
||||
DocumentUpdatedAsyncEvent documentUpdatedAsyncEvent = new DocumentUpdatedAsyncEvent();
|
||||
documentUpdatedAsyncEvent.setUserId(principal.getId());
|
||||
documentUpdatedAsyncEvent.setDocument(document);
|
||||
documentUpdatedAsyncEvent.setDocumentId(documentDto.getId());
|
||||
AppContext.getInstance().getAsyncEventBus().post(documentUpdatedAsyncEvent);
|
||||
}
|
||||
|
||||
@@ -520,17 +519,11 @@ public class FileResource extends BaseResource {
|
||||
|
||||
// Get the document
|
||||
DocumentDao documentDao = new DocumentDao();
|
||||
DocumentDto documentDto = documentDao.getDocument(documentId);
|
||||
DocumentDto documentDto = documentDao.getDocument(documentId, PermType.READ, shareId == null ? principal.getId() : shareId);
|
||||
if (documentDto == null) {
|
||||
return Response.status(Status.NOT_FOUND).build();
|
||||
}
|
||||
|
||||
// Check document visibility
|
||||
AclDao aclDao = new AclDao();
|
||||
if (!aclDao.checkPermission(documentId, PermType.READ, shareId == null ? principal.getId() : shareId)) {
|
||||
throw new ForbiddenClientException();
|
||||
}
|
||||
|
||||
// Get files and user associated with this document
|
||||
FileDao fileDao = new FileDao();
|
||||
final UserDao userDao = new UserDao();
|
||||
|
||||
@@ -362,7 +362,7 @@ public class UserResource extends BaseResource {
|
||||
for (Document document : documentList) {
|
||||
DocumentDeletedAsyncEvent documentDeletedAsyncEvent = new DocumentDeletedAsyncEvent();
|
||||
documentDeletedAsyncEvent.setUserId(principal.getId());
|
||||
documentDeletedAsyncEvent.setDocument(document);
|
||||
documentDeletedAsyncEvent.setDocumentId(document.getId());
|
||||
AppContext.getInstance().getAsyncEventBus().post(documentDeletedAsyncEvent);
|
||||
}
|
||||
|
||||
@@ -421,7 +421,7 @@ public class UserResource extends BaseResource {
|
||||
for (Document document : documentList) {
|
||||
DocumentDeletedAsyncEvent documentDeletedAsyncEvent = new DocumentDeletedAsyncEvent();
|
||||
documentDeletedAsyncEvent.setUserId(principal.getId());
|
||||
documentDeletedAsyncEvent.setDocument(document);
|
||||
documentDeletedAsyncEvent.setDocumentId(document.getId());
|
||||
AppContext.getInstance().getAsyncEventBus().post(documentDeletedAsyncEvent);
|
||||
}
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@ public class TestAclResource extends BaseJerseyTest {
|
||||
Response response = target().path("/document/" + document1Id).request()
|
||||
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, acl2Token)
|
||||
.get();
|
||||
Assert.assertEquals(Status.FORBIDDEN, Status.fromStatusCode(response.getStatus()));
|
||||
Assert.assertEquals(Status.NOT_FOUND, Status.fromStatusCode(response.getStatus()));
|
||||
|
||||
// Add an ACL READ for acl2 with acl1
|
||||
json = target().path("/acl").request()
|
||||
@@ -144,7 +144,7 @@ public class TestAclResource extends BaseJerseyTest {
|
||||
response = target().path("/document/" + document1Id).request()
|
||||
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, acl2Token)
|
||||
.get();
|
||||
Assert.assertEquals(Status.FORBIDDEN, Status.fromStatusCode(response.getStatus()));
|
||||
Assert.assertEquals(Status.NOT_FOUND, Status.fromStatusCode(response.getStatus()));
|
||||
|
||||
// Delete the ACL READ for acl1 with acl1
|
||||
response = target().path("/acl/" + document1Id + "/READ/" + acl1Id).request()
|
||||
|
||||
@@ -299,7 +299,7 @@ public class TestDocumentResource extends BaseJerseyTest {
|
||||
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, document1Token)
|
||||
.get(JsonObject.class);
|
||||
documents = json.getJsonArray("documents");
|
||||
Assert.assertTrue(documents.size() == 1);
|
||||
Assert.assertEquals(1, documents.size());
|
||||
|
||||
// Get document 1
|
||||
json = target().path("/document/" + document1Id).request()
|
||||
|
||||
Reference in New Issue
Block a user