Fixed share VC & delete VC-access; added sort VC by id & test cases.
Change-Id: I0f958a8ae56bcfdbb779cca9a2daf4ae34d7e4d5
diff --git a/full/src/main/java/de/ids_mannheim/korap/dao/VirtualCorpusAccessDao.java b/full/src/main/java/de/ids_mannheim/korap/dao/VirtualCorpusAccessDao.java
index 1913d09..feba49a 100644
--- a/full/src/main/java/de/ids_mannheim/korap/dao/VirtualCorpusAccessDao.java
+++ b/full/src/main/java/de/ids_mannheim/korap/dao/VirtualCorpusAccessDao.java
@@ -190,6 +190,9 @@
}
public void deleteAccess (VirtualCorpusAccess access) {
+ if (!entityManager.contains(access)){
+ access = entityManager.merge(access);
+ }
entityManager.remove(access);
}
diff --git a/full/src/main/java/de/ids_mannheim/korap/dao/VirtualCorpusDao.java b/full/src/main/java/de/ids_mannheim/korap/dao/VirtualCorpusDao.java
index 1ca79d4..c0fd186 100644
--- a/full/src/main/java/de/ids_mannheim/korap/dao/VirtualCorpusDao.java
+++ b/full/src/main/java/de/ids_mannheim/korap/dao/VirtualCorpusDao.java
@@ -1,5 +1,7 @@
package de.ids_mannheim.korap.dao;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -220,7 +222,7 @@
return q.getResultList();
}
- public Set<VirtualCorpus> retrieveVCByUser (String userId)
+ public List<VirtualCorpus> retrieveVCByUser (String userId)
throws KustvaktException {
ParameterChecker.checkStringValue(userId, "userId");
@@ -246,7 +248,11 @@
Set<VirtualCorpus> vcSet = new HashSet<VirtualCorpus>();
vcSet.addAll(vcList);
vcSet.addAll(groupVC);
- return vcSet;
+
+ List<VirtualCorpus> merger = new ArrayList<VirtualCorpus>(vcSet.size());
+ merger.addAll(vcSet);
+ Collections.sort(merger);
+ return merger;
}
// for admins
diff --git a/full/src/main/java/de/ids_mannheim/korap/entity/VirtualCorpus.java b/full/src/main/java/de/ids_mannheim/korap/entity/VirtualCorpus.java
index f3060ba..78f9fff 100644
--- a/full/src/main/java/de/ids_mannheim/korap/entity/VirtualCorpus.java
+++ b/full/src/main/java/de/ids_mannheim/korap/entity/VirtualCorpus.java
@@ -34,7 +34,7 @@
@Getter
@Entity
@Table(name = "virtual_corpus")
-public class VirtualCorpus {
+public class VirtualCorpus implements Comparable<VirtualCorpus>{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -80,4 +80,15 @@
VirtualCorpus vc = (VirtualCorpus) obj;
return (this.id == vc.getId()) ? true : false;
}
+
+ @Override
+ public int compareTo (VirtualCorpus o) {
+ if (this.getId() > o.getId()) {
+ return 1;
+ }
+ else if (this.getId() < o.getId()) {
+ return -1;
+ }
+ return 0;
+ }
}
diff --git a/full/src/main/java/de/ids_mannheim/korap/service/VirtualCorpusService.java b/full/src/main/java/de/ids_mannheim/korap/service/VirtualCorpusService.java
index e7dd923..434bb47 100644
--- a/full/src/main/java/de/ids_mannheim/korap/service/VirtualCorpusService.java
+++ b/full/src/main/java/de/ids_mannheim/korap/service/VirtualCorpusService.java
@@ -1,10 +1,8 @@
package de.ids_mannheim.korap.service;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.Iterator;
import java.util.List;
-import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -78,12 +76,12 @@
public List<VirtualCorpusDto> listVCByUser (String username)
throws KustvaktException {
- Set<VirtualCorpus> vcSet = vcDao.retrieveVCByUser(username);
- return createVCDtos(vcSet);
+ List<VirtualCorpus> vcList = vcDao.retrieveVCByUser(username);
+ return createVCDtos(vcList);
}
-
+
private ArrayList<VirtualCorpusDto> createVCDtos (
- Collection<VirtualCorpus> vcList) throws KustvaktException {
+ List<VirtualCorpus> vcList) throws KustvaktException {
ArrayList<VirtualCorpusDto> dtos = new ArrayList<>(vcList.size());
VirtualCorpus vc;
Iterator<VirtualCorpus> i = vcList.iterator();
@@ -285,14 +283,14 @@
User user = authManager.getUser(username);
VirtualCorpus vc = vcDao.retrieveVCById(vcId);
- if (!username.equals(vc.getCreatedBy()) || !user.isAdmin()) {
+ if (!username.equals(vc.getCreatedBy()) && !user.isAdmin()) {
throw new KustvaktException(StatusCodes.AUTHORIZATION_FAILED,
"Unauthorized operation for user: " + username, username);
}
UserGroup userGroup = userGroupService.retrieveUserGroupById(groupId);
- if (!user.isAdmin() && !isVCAccessAdmin(userGroup, username)) {
+ if (!isVCAccessAdmin(userGroup, username) && !user.isAdmin()) {
throw new KustvaktException(StatusCodes.AUTHORIZATION_FAILED,
"Unauthorized operation for user: " + username, username);
}
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/controller/VirtualCorpusController.java b/full/src/main/java/de/ids_mannheim/korap/web/controller/VirtualCorpusController.java
index 1304b6f..98a45cd 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/VirtualCorpusController.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/controller/VirtualCorpusController.java
@@ -4,6 +4,7 @@
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
+import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
@@ -191,9 +192,9 @@
* @return HTTP status 200, if successful
*/
@DELETE
- @Path("delete")
+ @Path("delete/{vcId}")
public Response deleteVC (@Context SecurityContext securityContext,
- @QueryParam("vcId") int vcId) {
+ @PathParam("vcId") int vcId) {
TokenContext context =
(TokenContext) securityContext.getUserPrincipal();
try {
@@ -231,8 +232,9 @@
*/
@POST
@Path("access/share")
+ @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response shareVC (@Context SecurityContext securityContext,
- @QueryParam("vcId") int vcId, @QueryParam("groupId") int groupId) {
+ @FormParam("vcId") int vcId, @FormParam("groupId") int groupId) {
TokenContext context =
(TokenContext) securityContext.getUserPrincipal();
try {
@@ -251,9 +253,9 @@
* @return
*/
@DELETE
- @Path("access/delete")
+ @Path("access/delete/{accessId}")
public Response deleteVCAccess (@Context SecurityContext securityContext,
- @QueryParam("accessId") int accessId) {
+ @PathParam("accessId") int accessId) {
TokenContext context =
(TokenContext) securityContext.getUserPrincipal();
try {
diff --git a/full/src/main/resources/db/insert/V3.1__insert_virtual_corpus.sql b/full/src/main/resources/db/insert/V3.1__insert_virtual_corpus.sql
index 62e22ed..c708076 100644
--- a/full/src/main/resources/db/insert/V3.1__insert_virtual_corpus.sql
+++ b/full/src/main/resources/db/insert/V3.1__insert_virtual_corpus.sql
@@ -72,7 +72,14 @@
VALUES ("published VC", "PUBLISHED", "ALL", "marlin", "test vc", "experimental",
'{"collection":{"@type":"koral:doc","value":"GOE","match":"match:eq","key":"corpusSigle"}}');
+INSERT INTO virtual_corpus(name, type, required_access, created_by, description, status, corpus_query)
+ VALUES ("marlin VC", "PRIVATE", "FREE", "marlin", "marlin test share vc", "experimental",
+ '{"collection": { "@type": "koral:docGroup", "operands": [ { "@type": "koral:doc", "key": "corpusSigle", "match": "match:eq", "value": "GOE" }, { "@type": "koral:doc", "key": "creationDate", "match": "match:geq", "type": "type:date", "value": "1820" } ], "operation": "operation:and" }}');
+INSERT INTO virtual_corpus(name, type, required_access, created_by, description, status, corpus_query)
+ VALUES ("nemo VC", "PRIVATE", "ALL", "nemo", "nemo test vc", "experimental",
+ '{"collection":{"@type":"koral:doc","value":"GOE","match":"match:eq","key":"corpusSigle"}}');
+
-- virtual corpus access
INSERT INTO virtual_corpus_access(virtual_corpus_id, user_group_id, status, created_by)
SELECT
diff --git a/full/src/main/resources/db/insert/V3.3__insert_member_roles.sql b/full/src/main/resources/db/insert/V3.3__insert_member_roles.sql
index 611c322..9cb523f 100644
--- a/full/src/main/resources/db/insert/V3.3__insert_member_roles.sql
+++ b/full/src/main/resources/db/insert/V3.3__insert_member_roles.sql
@@ -19,7 +19,7 @@
INSERT INTO group_member_role(group_member_id,role_id)
SELECT
(SELECT id FROM user_group_member WHERE user_id="dory" AND group_id=1),
- (SELECT id FROM role WHERE name = "vc member");
+ (SELECT id FROM role WHERE name = "vc admin");
-- dory group