Implemented parsing free resource info from json.
Change-Id: I034a71e0c30f72e864df7288d938e6d74d762801
diff --git a/full/src/main/java/de/ids_mannheim/korap/annotation/AnnotationParser.java b/full/src/main/java/de/ids_mannheim/korap/annotation/AnnotationParser.java
index 865f7cf..ab3cd02 100644
--- a/full/src/main/java/de/ids_mannheim/korap/annotation/AnnotationParser.java
+++ b/full/src/main/java/de/ids_mannheim/korap/annotation/AnnotationParser.java
@@ -123,14 +123,21 @@
Annotation layer = retrieveOrCreateAnnotation(code, annotationType,
null, array.get(0));
try {
- annotationDao.createAnnotationLayer(foundry, layer);
+ AnnotationLayer annotationLayer =
+ annotationDao.retrieveAnnotationLayer(foundry.getCode(),
+ layer.getCode());
+ if (annotationLayer == null) {
+ annotationDao.createAnnotationLayer(foundry, layer);
+ }
}
catch (Exception e) {
log.debug("Duplicate annotation layer: " + foundry.getCode()
+ "/" + layer.getCode());
}
}
- else if (annotationType.equals(AnnotationType.KEY)) {
+ else if (annotationType.equals(AnnotationType.KEY))
+
+ {
if (layer == null) {
computeLayer(annotationCode);
}
diff --git a/full/src/main/java/de/ids_mannheim/korap/annotation/FreeResourceParser.java b/full/src/main/java/de/ids_mannheim/korap/annotation/FreeResourceParser.java
new file mode 100644
index 0000000..1d7bc76
--- /dev/null
+++ b/full/src/main/java/de/ids_mannheim/korap/annotation/FreeResourceParser.java
@@ -0,0 +1,67 @@
+package de.ids_mannheim.korap.annotation;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import de.ids_mannheim.korap.dao.AnnotationDao;
+import de.ids_mannheim.korap.dao.ResourceDao;
+import de.ids_mannheim.korap.entity.AnnotationLayer;
+import de.ids_mannheim.korap.entity.Resource;
+import de.ids_mannheim.korap.exceptions.KustvaktException;
+
+@Component
+public class FreeResourceParser {
+ private Logger log = LogManager.getLogger(FreeResourceParser.class);
+
+ @Autowired
+ private ResourceDao resourceDao;
+ @Autowired
+ private AnnotationDao annotationDao;
+
+ public static String FREE_RESOURCE_FILE = "free-resources.json";
+ public static ObjectMapper mapper = new ObjectMapper();
+
+ public void run () throws IOException, KustvaktException {
+ InputStream is = FreeResourceParser.class.getClassLoader()
+ .getResourceAsStream(FREE_RESOURCE_FILE);
+ JsonNode node = mapper.readTree(is);
+ for (JsonNode resource : node) {
+ String resourceId = resource.at("/id").asText();
+ 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("/de_title").asText(),
+ resource.at("/en_title").asText(),
+ resource.at("/en_description").asText(), layers);
+ }
+ }
+ catch (Exception e) {
+ log.warn("Failed creating resource: " + e.getMessage());
+ }
+ }
+ }
+
+ private Set<AnnotationLayer> parseLayers (JsonNode layers) {
+ Set<AnnotationLayer> layerSet = new HashSet<>(layers.size());
+ for (JsonNode layer : layers) {
+ String[] codes = layer.asText().split("/");
+ AnnotationLayer annotationLayer =
+ annotationDao.retrieveAnnotationLayer(codes[0], codes[1]);
+ layerSet.add(annotationLayer);
+ }
+ return layerSet;
+ }
+}
diff --git a/full/src/main/java/de/ids_mannheim/korap/config/Initializator.java b/full/src/main/java/de/ids_mannheim/korap/config/Initializator.java
index f0cace9..1cccb4f 100644
--- a/full/src/main/java/de/ids_mannheim/korap/config/Initializator.java
+++ b/full/src/main/java/de/ids_mannheim/korap/config/Initializator.java
@@ -6,6 +6,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import de.ids_mannheim.korap.annotation.AnnotationParser;
+import de.ids_mannheim.korap.annotation.FreeResourceParser;
import de.ids_mannheim.korap.exceptions.KustvaktException;
import de.ids_mannheim.korap.oauth2.constant.OAuth2Scope;
import de.ids_mannheim.korap.oauth2.dao.AccessScopeDao;
@@ -26,7 +27,9 @@
private NamedVCLoader loader;
@Autowired
private AnnotationParser annotationParser;
-
+ @Autowired
+ private FreeResourceParser resourceParser;
+
public Initializator () {}
public void init () throws IOException, QueryException, KustvaktException {
@@ -39,6 +42,7 @@
setInitialAccessScope();
loader.loadVCToCache();
annotationParser.run();
+ resourceParser.run();
}
public void initTest () {
diff --git a/full/src/main/java/de/ids_mannheim/korap/dao/ResourceDao.java b/full/src/main/java/de/ids_mannheim/korap/dao/ResourceDao.java
index 0de5c9c..ff3ffd0 100644
--- a/full/src/main/java/de/ids_mannheim/korap/dao/ResourceDao.java
+++ b/full/src/main/java/de/ids_mannheim/korap/dao/ResourceDao.java
@@ -1,6 +1,7 @@
package de.ids_mannheim.korap.dao;
import java.util.List;
+import java.util.Set;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@@ -10,9 +11,13 @@
import javax.persistence.criteria.Root;
import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
+import de.ids_mannheim.korap.entity.AnnotationLayer;
import de.ids_mannheim.korap.entity.Resource;
import de.ids_mannheim.korap.entity.Resource_;
+import de.ids_mannheim.korap.exceptions.KustvaktException;
+import de.ids_mannheim.korap.utils.ParameterChecker;
/**
* ResourceDao manages SQL queries regarding resource info and layers.
@@ -20,14 +25,16 @@
* @author margaretha
*
*/
+@Transactional
@Repository
public class ResourceDao {
@PersistenceContext
private EntityManager entityManager;
- /** Select all from the resource table
- *
+ /**
+ * Select all from the resource table
+ *
* @return a list of resources
*/
@SuppressWarnings("unchecked")
@@ -36,9 +43,34 @@
CriteriaQuery<Resource> query =
criteriaBuilder.createQuery(Resource.class);
Root<Resource> resource = query.from(Resource.class);
- resource.fetch(Resource_.layers);
query.select(resource);
+
Query q = entityManager.createQuery(query);
return q.getResultList();
}
+
+ public Resource retrieveResource (String id) {
+ CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
+ CriteriaQuery<Resource> query =
+ criteriaBuilder.createQuery(Resource.class);
+ Root<Resource> resource = query.from(Resource.class);
+ query.select(resource);
+ query.where(criteriaBuilder.equal(resource.get(Resource_.id), id));
+
+ Query q = entityManager.createQuery(query);
+ return (Resource) q.getSingleResult();
+ }
+
+ public void createResource (String id, String germanTitle,
+ String englishTitle, String englishDescription, Set<AnnotationLayer> layers)
+ throws KustvaktException {
+ ParameterChecker.checkStringValue(id, "id");
+ ParameterChecker.checkStringValue(englishTitle, "en_title");
+ ParameterChecker.checkStringValue(germanTitle, "de_title");
+
+ Resource r = new Resource(id, germanTitle, englishTitle,
+ englishDescription, layers);
+ entityManager.persist(r);
+
+ }
}
diff --git a/full/src/main/java/de/ids_mannheim/korap/entity/Resource.java b/full/src/main/java/de/ids_mannheim/korap/entity/Resource.java
index aa461c2..fbe3f92 100644
--- a/full/src/main/java/de/ids_mannheim/korap/entity/Resource.java
+++ b/full/src/main/java/de/ids_mannheim/korap/entity/Resource.java
@@ -14,9 +14,11 @@
import lombok.Getter;
import lombok.Setter;
-/** Describes resources having free licenses. Primarily for accommodating
- * clients in providing data without login such as KorapSRU.
- *
+/**
+ * Describes resources having free licenses. Primarily for
+ * accommodating
+ * clients in providing data without login such as KorapSRU.
+ *
* @author margaretha
*
*/
@@ -38,7 +40,7 @@
@Column(name = "en_description")
private String englishDescription;
- @ManyToMany(fetch = FetchType.LAZY)
+ @ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "resource_layer",
joinColumns = @JoinColumn(name = "resource_id",
referencedColumnName = "id"),
@@ -46,6 +48,16 @@
referencedColumnName = "id"))
private Set<AnnotationLayer> layers;
+ public Resource () {}
+
+ public Resource (String id, String germanTitle, String englishTitle,
+ String englishDescription, Set<AnnotationLayer> layers) {
+ this.id = id;
+ this.germanTitle = germanTitle;
+ this.englishTitle = englishTitle;
+ this.englishDescription = englishDescription;
+ this.layers = layers;
+ }
@Override
public String toString () {