diff --git a/src/main/java/it/inaf/oats/vospace/CollectionsController.java b/src/main/java/it/inaf/oats/vospace/CollectionsController.java index 4e08fd0fed764825d99789bfc873d88b3be87e87..b8710dfdb24f8885858622b4310bede8c40a9cd0 100644 --- a/src/main/java/it/inaf/oats/vospace/CollectionsController.java +++ b/src/main/java/it/inaf/oats/vospace/CollectionsController.java @@ -13,42 +13,61 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; /** * * @author Nicola Fulvio Calabria <nicola.calabria at inaf.it> */ - @RestController public class CollectionsController { - + private static final Logger LOG = LoggerFactory.getLogger(CollectionsController.class); - + @Autowired private CollectionsService collectionsService; - + // list collections owned by user @GetMapping(value = "/collections") public ResponseEntity<NodeCollectionsList> listCollections( HttpServletRequest request, User principal) { - LOG.debug("listCollections called for user {}", principal.getName()); - + LOG.debug("list collections called for user {}", principal.getName()); + NodeCollectionsList ncl = new NodeCollectionsList(); - + ncl.setNodeCollections( - collectionsService.listCollections(principal.getName())); + collectionsService.listCollections(principal.getName())); return ResponseEntity.ok(ncl); } - - + // create a new collection with specified title - - + @PutMapping(value = "/collections") + public ResponseEntity<String> createCollection( + @RequestBody String collectionName, User principal) { + LOG.debug("create collection called with name {} called for user {}", + collectionName, principal.getName()); + + collectionsService.createNewCollection(collectionName, principal.getName()); + + return ResponseEntity.ok("Collection created"); + } + // delete collection by id - - + @DeleteMapping(value = "/collections") + public ResponseEntity<String> deleteCollection( + @RequestBody Long collectionId, User principal) { + LOG.debug("delete collection called with id {} for user {}", + collectionId, principal.getName()); + + collectionsService.deleteCollectionById(collectionId, principal.getName()); + + return ResponseEntity.ok("Collection deleted"); + + } } diff --git a/src/main/java/it/inaf/oats/vospace/CollectionsService.java b/src/main/java/it/inaf/oats/vospace/CollectionsService.java index c7d8218d8dbd093d3189f2428e4925508c4b9bfb..79e89056419bff076556ed3a319c480d272c2846 100644 --- a/src/main/java/it/inaf/oats/vospace/CollectionsService.java +++ b/src/main/java/it/inaf/oats/vospace/CollectionsService.java @@ -7,6 +7,7 @@ package it.inaf.oats.vospace; import it.inaf.oats.vospace.persistence.CollectionsDAO; import it.inaf.oats.vospace.datamodel.collections.NodeCollection; +import it.inaf.oats.vospace.exception.PermissionDeniedException; import java.util.ArrayList; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; @@ -32,12 +33,32 @@ public class CollectionsService { if (isUserAuthenticated(userId)) { result.addAll( collectionsDAO.getUserNodeCollections(userId)); + } else { + throw new PermissionDeniedException("Authentication required"); } return result; } + public void createNewCollection(String collectionTitle, String userId) { + if (isUserAuthenticated(userId)) { + collectionsDAO.createNewCollection(collectionTitle, userId); + } else { + throw new PermissionDeniedException("Authentication required"); + } + } + + public void deleteCollectionById(Long collectionId, String userId) { + if(isUserAuthenticated(userId)) + { + // TODO: Implement delete + throw new UnsupportedOperationException("delete collection"); + } else { + throw new PermissionDeniedException("Authentication required"); + } + } + private boolean isUserAuthenticated(String userId) { return userId != null && !userId.equals("anonymous"); diff --git a/src/main/java/it/inaf/oats/vospace/DeleteNodeController.java b/src/main/java/it/inaf/oats/vospace/DeleteNodeController.java index b714c9481b45cbcb4adb34d671669baaab877745..09cd994ba1a982047f6c64813251ea36f55f1ef4 100644 --- a/src/main/java/it/inaf/oats/vospace/DeleteNodeController.java +++ b/src/main/java/it/inaf/oats/vospace/DeleteNodeController.java @@ -10,7 +10,6 @@ import javax.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; diff --git a/src/main/java/it/inaf/oats/vospace/persistence/CollectionsDAO.java b/src/main/java/it/inaf/oats/vospace/persistence/CollectionsDAO.java index c97d438ae9c4643778411abdb8f5102557c7edbb..d520bfc03eeac165da07d951feb757f1ac121a99 100644 --- a/src/main/java/it/inaf/oats/vospace/persistence/CollectionsDAO.java +++ b/src/main/java/it/inaf/oats/vospace/persistence/CollectionsDAO.java @@ -30,7 +30,7 @@ public class CollectionsDAO { jdbcTemplate = new JdbcTemplate(dataSource); } - void createNewCollection(String title, String ownerId) { + public void createNewCollection(String title, String ownerId) { String sql = "INSERT INTO collections (title, owner_id) VALUES (?,?)";