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"
},
{
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/ResourceControllerTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/ResourceControllerTest.java
index 6322ede..23c8bd7 100644
--- a/src/test/java/de/ids_mannheim/korap/web/controller/ResourceControllerTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/ResourceControllerTest.java
@@ -22,18 +22,32 @@
JsonNode n = JsonUtils.readTree(entity);
assertEquals(3, n.size());
- n = n.get(0);
+ JsonNode n0 = n.get(0);
assertEquals("http://hdl.handle.net/10932/00-03B6-558F-4E10-6201-1",
- n.at("/resourceId").asText());
- assertEquals(n.at("/titles/de").asText(),
+ n0.at("/resourceId").asText());
+ assertEquals(n0.at("/titles/de").asText(),
"Deutsche Wikipedia Artikel 2017");
- assertEquals(n.at("/titles/en").asText(),
+ assertEquals(n0.at("/titles/en").asText(),
"German Wikipedia Articles 2017");
- assertEquals(1, n.at("/languages").size());
- assertEquals(6, n.at("/layers").size());
- assertEquals("IDS Mannheim", n.at("/institution").asText());
+ assertEquals(1, n0.at("/languages").size());
+ assertEquals(6, n0.at("/layers").size());
+ assertEquals("IDS Mannheim", n0.at("/institution").asText());
assertEquals("https://korap.ids-mannheim.de?cq=corpusSigle=WPD17",
- n.at("/landingPage").asText());
- assertEquals("free", n.at("/requiredAccess").asText());
+ n0.at("/landingPage").asText());
+ assertEquals("FREE", n0.at("/requiredAccess").asText());
+
+ JsonNode n1 = n.get(1);
+ assertEquals("http://hdl.handle.net/10932/00-03B6-558F-5EA0-6301-B",
+ n1.at("/resourceId").asText());
+ assertEquals(n1.at("/titles/de").asText(),
+ "Deutsche Wikipedia-Diskussionskorpus 2017");
+ assertEquals(n1.at("/titles/en").asText(),
+ "German Wikipedia talk corpus 2017");
+ assertEquals(1, n1.at("/languages").size());
+ assertEquals(6, n1.at("/layers").size());
+ assertEquals("IDS Mannheim", n1.at("/institution").asText());
+ assertEquals("https://korap.ids-mannheim.de?cq=corpusSigle=WDD17",
+ n1.at("/landingPage").asText());
+ assertEquals("FREE", n1.at("/requiredAccess").asText());
}
}