DocumentRestEndpoint.java
/*
* The coLAB project
* Copyright (C) 2021-2023 AlbaSim, MEI, HEIG-VD, HES-SO
*
* Licensed under the MIT License
*/
package ch.colabproject.colab.api.rest.document;
import ch.colabproject.colab.api.controller.document.DocumentManager;
import ch.colabproject.colab.api.exceptions.ColabMergeException;
import ch.colabproject.colab.api.model.document.Document;
import ch.colabproject.colab.api.model.link.StickyNoteLink;
import ch.colabproject.colab.api.persistence.jpa.document.DocumentDao;
import ch.colabproject.colab.generator.model.annotations.AuthenticationRequired;
import java.util.List;
import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* REST document controller
*
* @author sandra
*/
@Path("docs")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@AuthenticationRequired
public class DocumentRestEndpoint {
/** logger */
private static final Logger logger = LoggerFactory.getLogger(DocumentRestEndpoint.class);
// *********************************************************************************************
// injections
// *********************************************************************************************
/**
* The document persistence manager
*/
@Inject
private DocumentDao documentDao;
/**
* The document specific logic
*/
@Inject
private DocumentManager documentManager;
// *********************************************************************************************
// CRUD
// *********************************************************************************************
/**
* Get the document identified by the given id
*
* @param id id of the document to fetch
*
* @return the document or null
*/
@GET
@Path("{id: [0-9]+}")
public Document getDocument(@PathParam("id") Long id) {
logger.debug("get document #{}", id);
return documentDao.findDocument(id);
}
/**
* Save changes to database. Only fields which are editable by users will be
* impacted.
*
* @param document document to update
*
* @throws ColabMergeException if the merge is impossible
*/
@PUT
public void updateDocument(Document document) throws ColabMergeException {
logger.debug("update document {}", document);
documentDao.updateDocument(document);
}
// *********************************************************************************************
// change index of a document
// *********************************************************************************************
/**
* Move the given document one floor up
*
* @param docId the id of the document to move
*/
@PUT
@Path("{docId: [0-9]+}/MoveUp")
public void moveDocumentUp(@PathParam("docId") Long docId) {
logger.debug("move document #{} up", docId);
documentManager.moveDocumentUp(docId);
}
/**
* Move the given document one floor down
*
* @param docId the id of the document to move
*/
@PUT
@Path("{docId: [0-9]+}/MoveDown")
public void moveDocumentDown(@PathParam("docId") Long docId) {
logger.debug("move document #{} down", docId);
documentManager.moveDocumentDown(docId);
}
/**
* Move the given document above its futureNextDocId
*
* @param docId the id of the document to move
* @param baseDocId the id of the document which will be below docId
*/
@PUT
@Path("{docId: [0-9]+}/MoveAbove/{baseDocId: [0-9]+}")
public void moveDocumentAbove(@PathParam("docId") Long docId,
@PathParam("baseDocId") Long baseDocId) {
logger.debug("move document #{} above #{}", docId, baseDocId);
documentManager.moveDocumentAbove(docId, baseDocId);
}
/**
* Move the document one floor up
*
* @param docId the id of the document to move
* @param baseDocId the id of the document which will be above docId
*/
@PUT
@Path("{docId: [0-9]+}/MoveBelow/{baseDocId: [0-9]+}")
public void moveDocumentBelow(@PathParam("docId") Long docId,
@PathParam("baseDocId") Long baseDocId) {
logger.debug("move document #{} below #{}", docId, baseDocId);
documentManager.moveDocumentBelow(docId, baseDocId);
}
/**
* Move the document at the top
*
* @param docId the id of the document to move
*/
@PUT
@Path("{docId: [0-9]+}/MoveToTop")
public void moveDocumentToTop(@PathParam("docId") Long docId) {
logger.debug("move document #{} to the top", docId);
documentManager.moveDocumentToTop(docId);
}
/**
* Move the document at the bottom
*
* @param docId the id of the document to move
*/
@PUT
@Path("{docId: [0-9]+}/MoveToBottom")
public void moveDocumentToBottom(@PathParam("docId") Long docId) {
logger.debug("move document #{} to the bottom", docId);
documentManager.moveDocumentToBottom(docId);
}
// *********************************************************************************************
//
// *********************************************************************************************
/**
* Get all sticky note links where the document is the source
*
* @param documentId the id of the document
*
* @return list of links
*/
@GET
@Path("{id: [0-9]+}/StickyNoteLinks")
public List<StickyNoteLink> getStickyNoteLinksAsSrc(@PathParam("id") Long documentId) {
logger.debug("Get sticky note links where document #{} is the source", documentId);
return documentManager.getStickyNoteLinkAsSrc(documentId);
}
}