Determine corpus access dynamically using koralQuery

for resources without predefined required_access.

Change-Id: I10bcd952afd693f49c43f68e6e38be50b61df9f3
diff --git a/src/main/java/de/ids_mannheim/korap/annotation/ResourceParser.java b/src/main/java/de/ids_mannheim/korap/annotation/ResourceParser.java
index cade8f6..e5cc73c 100644
--- a/src/main/java/de/ids_mannheim/korap/annotation/ResourceParser.java
+++ b/src/main/java/de/ids_mannheim/korap/annotation/ResourceParser.java
@@ -20,6 +20,8 @@
 import de.ids_mannheim.korap.entity.AnnotationLayer;
 import de.ids_mannheim.korap.entity.Resource;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
+import de.ids_mannheim.korap.service.QueryService;
+import de.ids_mannheim.korap.user.User.CorpusAccess;
 
 /**
  * Parser for extracting data from resources.json listing virtual corpora 
@@ -36,6 +38,8 @@
     private ResourceDao resourceDao;
     @Autowired
     private AnnotationDao annotationDao;
+    @Autowired
+    private QueryService queryService;
 
     public static String RESOURCE_FILE = "resources.json";
     public static ObjectMapper mapper = new ObjectMapper();
@@ -54,36 +58,38 @@
         JsonNode node = mapper.readTree(is);
         for (JsonNode resource : node) {
             String resourceId = resource.at("/id").asText();
+            String pid = resource.at("/pid").asText();
+            String deTitle = resource.at("/de_title").asText();
+            String enTitle = resource.at("/en_title").asText();
+            String enDescription = resource.at("/en_description").asText(); 
+            String institution = resource.at("/institution").asText();
             String requiredAccess = resource.at("/required_access").asText();
+            String corpusQuery = resource.at("/corpus_query").asText();
+            
             if (requiredAccess.isEmpty()){
-            	requiredAccess = "free";
+				if (!corpusQuery.isEmpty()) {
+					String koralQuery = queryService
+							.serializeCorpusQuery(corpusQuery);
+					// assume all vc are not cached and use the given koralQuery
+					// for cached-vc, the koralQuery should contain referTo
+					CorpusAccess access = queryService.determineRequiredAccess(
+							false, resourceId, koralQuery);
+					requiredAccess = access.name();
+				}
             }
-            //            log.debug(resourceId);
             Set<AnnotationLayer> layers = parseLayers(resource.at("/layers"));
             try {
                 Resource r = resourceDao.retrieveResource(resourceId);
-                if (r == null) {
-                    resourceDao.createResource(resource.at("/id").asText(),
-                    		resource.at("/pid").asText(),
-                            resource.at("/de_title").asText(),
-                            resource.at("/en_title").asText(),
-                            resource.at("/en_description").asText(), 
-                            layers,
-                            resource.at("/institution").asText(),
-                            resource.at("/corpus_query").asText(),
-                            requiredAccess);
-                }
-                else {
-                	resourceDao.updateResource(r,
-                			resource.at("/pid").asText(),
-                            resource.at("/de_title").asText(),
-                            resource.at("/en_title").asText(),
-                            resource.at("/en_description").asText(), 
-                            layers,
-                            resource.at("/institution").asText(),
-                            resource.at("/corpus_query").asText(),
-                            requiredAccess);
-                }
+				if (r == null) {
+					resourceDao.createResource(resourceId, pid, deTitle,
+							enTitle, enDescription, layers, institution,
+							corpusQuery, requiredAccess);
+				}
+				else {
+					resourceDao.updateResource(r, pid, deTitle, enTitle,
+							enDescription, layers, institution, corpusQuery,
+							requiredAccess);
+				}
             }
             catch (Exception e) {
                 log.warn("Failed creating resource: " + e.getMessage());
diff --git a/src/main/java/de/ids_mannheim/korap/service/QueryService.java b/src/main/java/de/ids_mannheim/korap/service/QueryService.java
index 7cfa9cd..cfa16fd 100644
--- a/src/main/java/de/ids_mannheim/korap/service/QueryService.java
+++ b/src/main/java/de/ids_mannheim/korap/service/QueryService.java
@@ -407,7 +407,7 @@
         }
     }
 
-    private String serializeCorpusQuery (String corpusQuery)
+    public String serializeCorpusQuery (String corpusQuery)
             throws KustvaktException {
         QuerySerializer serializer = new QuerySerializer();
         serializer.setCollection(corpusQuery);
diff --git a/src/main/resources/data/resources.json b/src/main/resources/data/resources.json
index 77a5028..cc9942f 100644
--- a/src/main/resources/data/resources.json
+++ b/src/main/resources/data/resources.json
@@ -13,7 +13,7 @@
         "tt/p"
     ],
     "corpus_query":"corpusSigle=WPD17",
-    "required_access" : "free",
+    "required_access" : "FREE",
     "institution" : "IDS Mannheim"
 },
 {
@@ -31,7 +31,7 @@
         "tt/p"
     ],
     "corpus_query":"corpusSigle=WDD17",
-    "required_access" : "free",
+    "required_access" : "FREE",
     "institution" : "IDS Mannheim"
 },
 {