Added retrieve user VC service.

Change-Id: I6dc6bc4cef43a502545a37dc810283039649b913
diff --git a/full/src/main/java/de/ids_mannheim/korap/constant/VirtualCorpusType.java b/full/src/main/java/de/ids_mannheim/korap/constant/VirtualCorpusType.java
index 43e26af..e51d36c 100644
--- a/full/src/main/java/de/ids_mannheim/korap/constant/VirtualCorpusType.java
+++ b/full/src/main/java/de/ids_mannheim/korap/constant/VirtualCorpusType.java
@@ -3,4 +3,9 @@
 public enum VirtualCorpusType {
 
     PREDEFINED, PROJECT, PRIVATE, PUBLISHED;
+    
+    public String displayName () {
+        return name().toLowerCase();
+
+    }
 }
diff --git a/full/src/main/java/de/ids_mannheim/korap/dto/VirtualCorpusDto.java b/full/src/main/java/de/ids_mannheim/korap/dto/VirtualCorpusDto.java
index 6f44a4c..f75d5d6 100644
--- a/full/src/main/java/de/ids_mannheim/korap/dto/VirtualCorpusDto.java
+++ b/full/src/main/java/de/ids_mannheim/korap/dto/VirtualCorpusDto.java
@@ -1,7 +1,19 @@
 package de.ids_mannheim.korap.dto;
 
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
 public class VirtualCorpusDto {
 
-    int id;
+    private int id;
+    private String name;
+    private String type;
+    private String status;
+    private String description;
+    private String access;
+    private String createdBy;
     
+    private int numberOfDoc;
 }
diff --git a/full/src/main/java/de/ids_mannheim/korap/dto/converter/VirtualCorpusConverter.java b/full/src/main/java/de/ids_mannheim/korap/dto/converter/VirtualCorpusConverter.java
new file mode 100644
index 0000000..c4920e8
--- /dev/null
+++ b/full/src/main/java/de/ids_mannheim/korap/dto/converter/VirtualCorpusConverter.java
@@ -0,0 +1,34 @@
+package de.ids_mannheim.korap.dto.converter;
+
+import org.springframework.stereotype.Service;
+
+import com.fasterxml.jackson.databind.JsonNode;
+
+import de.ids_mannheim.korap.dto.VirtualCorpusDto;
+import de.ids_mannheim.korap.entity.VirtualCorpus;
+import de.ids_mannheim.korap.exceptions.KustvaktException;
+import de.ids_mannheim.korap.utils.JsonUtils;
+
+@Service
+public class VirtualCorpusConverter {
+
+    public VirtualCorpusDto createVirtualCorpusDto (VirtualCorpus vc,
+            String statistics) throws KustvaktException {
+
+        VirtualCorpusDto dto = new VirtualCorpusDto();
+        dto.setId(vc.getId());
+        dto.setName(vc.getName());
+        dto.setCreatedBy(vc.getCreatedBy());
+        dto.setAccess(vc.getRequiredAccess().name());
+        dto.setStatus(vc.getStatus());
+        dto.setDescription(vc.getDescription());
+        dto.setType(vc.getType().displayName());
+
+        JsonNode node = JsonUtils.readTree(statistics);
+        int numberOfDoc = node.at("/documents").asInt();
+        dto.setNumberOfDoc(numberOfDoc);
+
+        return dto;
+
+    }
+}
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 6064f9a..4cf831a 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,5 +1,9 @@
 package de.ids_mannheim.korap.service;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -11,8 +15,12 @@
 import de.ids_mannheim.korap.config.FullConfiguration;
 import de.ids_mannheim.korap.constant.VirtualCorpusType;
 import de.ids_mannheim.korap.dao.VirtualCorpusDao;
+import de.ids_mannheim.korap.dto.VirtualCorpusDto;
+import de.ids_mannheim.korap.dto.converter.VirtualCorpusConverter;
+import de.ids_mannheim.korap.entity.VirtualCorpus;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.exceptions.StatusCodes;
+import de.ids_mannheim.korap.interfaces.AuthenticationManagerIface;
 import de.ids_mannheim.korap.query.serialize.QuerySerializer;
 import de.ids_mannheim.korap.user.User;
 import de.ids_mannheim.korap.user.User.CorpusAccess;
@@ -29,16 +37,19 @@
 
     @Autowired
     private VirtualCorpusDao dao;
-
     @Autowired
     private SearchKrill krill;
-
     @Autowired
     private FullConfiguration config;
+    @Autowired
+    private AuthenticationManagerIface authManager;
+    @Autowired
+    private VirtualCorpusConverter converter;
 
-    public void storeVC (VirtualCorpusFromJson vc, User user)
+    public void storeVC (VirtualCorpusFromJson vc, String username)
             throws KustvaktException {
 
+        User user = authManager.getUser(username);
         // EM: how about VirtualCorpusType.PUBLISHED?
         if (vc.getType().equals(VirtualCorpusType.PREDEFINED)
                 && !user.isAdmin()) {
@@ -100,4 +111,19 @@
         jlog.debug("License: " + license + ", number of docs: " + numberOfDoc);
         return (numberOfDoc > 0) ? true : false;
     }
+
+    public List<VirtualCorpusDto> retrieveUserVC (String username)
+            throws KustvaktException {
+
+        Set<VirtualCorpus> vcs = dao.retrieveVCByUser(username);
+        ArrayList<VirtualCorpusDto> dtos = new ArrayList<>(vcs.size());
+        
+        for (VirtualCorpus vc : vcs) {
+            String json = vc.getCollectionQuery();
+            String statistics = krill.getStatistics(json);
+            VirtualCorpusDto vcDto = converter.createVirtualCorpusDto(vc, statistics);
+            dtos.add(vcDto);
+        }
+        return dtos;
+    }
 }
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 18fc518..81f293b 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
@@ -1,8 +1,12 @@
 package de.ids_mannheim.korap.web.controller;
 
+import java.util.List;
+
+import javax.ws.rs.GET;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
@@ -15,12 +19,11 @@
 
 import com.sun.jersey.spi.container.ResourceFilters;
 
+import de.ids_mannheim.korap.dto.VirtualCorpusDto;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.exceptions.StatusCodes;
-import de.ids_mannheim.korap.interfaces.AuthenticationManagerIface;
 import de.ids_mannheim.korap.service.VirtualCorpusService;
 import de.ids_mannheim.korap.user.TokenContext;
-import de.ids_mannheim.korap.user.User;
 import de.ids_mannheim.korap.utils.JsonUtils;
 import de.ids_mannheim.korap.utils.ParameterChecker;
 import de.ids_mannheim.korap.web.FullResponseHandler;
@@ -32,15 +35,14 @@
 @Controller
 @Path("vc")
 @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
-@ResourceFilters({ AuthenticationFilter.class, DemoUserFilter.class, PiwikFilter.class })
+@ResourceFilters({ AuthenticationFilter.class, DemoUserFilter.class,
+        PiwikFilter.class })
 public class VirtualCorpusController {
 
     private static Logger jlog =
             LoggerFactory.getLogger(VirtualCorpusController.class);
 
     @Autowired
-    private AuthenticationManagerIface authManager;
-    @Autowired
     private FullResponseHandler responseHandler;
     @Autowired
     private VirtualCorpusService service;
@@ -67,8 +69,7 @@
                         context.getUsername());
             }
 
-            User user = authManager.getUser(context.getUsername());
-            service.storeVC(vc, user);
+            service.storeVC(vc, context.getUsername());
         }
         catch (KustvaktException e) {
             throw responseHandler.throwit(e);
@@ -76,4 +77,29 @@
         return Response.ok().build();
     }
 
+    @GET
+    @Path("user")
+    public Response getUserVC (@Context SecurityContext securityContext,
+            @QueryParam("userId") String userId) throws KustvaktException {
+
+        TokenContext context =
+                (TokenContext) securityContext.getUserPrincipal();
+        if (context.isDemo()) {
+            throw new KustvaktException(StatusCodes.AUTHORIZATION_FAILED,
+                    "Operation is not permitted for user: "
+                            + context.getUsername(),
+                    context.getUsername());
+        }
+
+        List<VirtualCorpusDto> dtos = service.retrieveUserVC(context.getUsername());
+        String result;
+        try {
+            result = JsonUtils.toJSON(dtos);
+        }
+        catch (KustvaktException e) {
+            throw responseHandler.throwit(e);
+        }
+        return Response.ok(result).build();
+    }
+
 }