Add required access to resources.

Change-Id: Ibfefebc609b5772be8040131dfcc5c60ba520f6e
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 058fc7f..cade8f6 100644
--- a/src/main/java/de/ids_mannheim/korap/annotation/ResourceParser.java
+++ b/src/main/java/de/ids_mannheim/korap/annotation/ResourceParser.java
@@ -54,6 +54,10 @@
         JsonNode node = mapper.readTree(is);
         for (JsonNode resource : node) {
             String resourceId = resource.at("/id").asText();
+            String requiredAccess = resource.at("/required_access").asText();
+            if (requiredAccess.isEmpty()){
+            	requiredAccess = "free";
+            }
             //            log.debug(resourceId);
             Set<AnnotationLayer> layers = parseLayers(resource.at("/layers"));
             try {
@@ -66,7 +70,8 @@
                             resource.at("/en_description").asText(), 
                             layers,
                             resource.at("/institution").asText(),
-                            resource.at("/corpus_query").asText());
+                            resource.at("/corpus_query").asText(),
+                            requiredAccess);
                 }
                 else {
                 	resourceDao.updateResource(r,
@@ -76,7 +81,8 @@
                             resource.at("/en_description").asText(), 
                             layers,
                             resource.at("/institution").asText(),
-                            resource.at("/corpus_query").asText());
+                            resource.at("/corpus_query").asText(),
+                            requiredAccess);
                 }
             }
             catch (Exception e) {
diff --git a/src/main/java/de/ids_mannheim/korap/dao/ResourceDao.java b/src/main/java/de/ids_mannheim/korap/dao/ResourceDao.java
index 94dd5b2..e859843 100644
--- a/src/main/java/de/ids_mannheim/korap/dao/ResourceDao.java
+++ b/src/main/java/de/ids_mannheim/korap/dao/ResourceDao.java
@@ -70,23 +70,24 @@
     public void createResource (String id, String pid, String germanTitle,
             String englishTitle, String englishDescription,
             Set<AnnotationLayer> layers, String institution, 
-            String corpusQuery) throws KustvaktException {
+            String corpusQuery, String requiredAccess) 
+            		throws KustvaktException {
         ParameterChecker.checkStringValue(id, "id");
         ParameterChecker.checkStringValue(englishTitle, "en_title");
         ParameterChecker.checkStringValue(germanTitle, "de_title");
 
-        Resource r = new Resource(id, pid, germanTitle, englishTitle,
-                englishDescription, layers, institution, corpusQuery);
-        entityManager.persist(r);
-
+		Resource r = new Resource(id, pid, germanTitle, englishTitle,
+				englishDescription, layers, institution, corpusQuery,
+				requiredAccess);
+		entityManager.persist(r);
     }
     
     @Transactional
     public void updateResource (Resource r, String pid, String germanTitle,
-            String englishTitle, String englishDescription,
-            Set<AnnotationLayer> layers, String institution, 
-            String corpusQuery) throws KustvaktException {
-        ParameterChecker.checkObjectValue(layers, "layers");
+			String englishTitle, String englishDescription,
+			Set<AnnotationLayer> layers, String institution, String corpusQuery,
+			String requiredAccess) throws KustvaktException {
+		ParameterChecker.checkObjectValue(layers, "layers");
         ParameterChecker.checkStringValue(englishTitle, "en_title");
         ParameterChecker.checkStringValue(germanTitle, "de_title");
 
@@ -97,8 +98,8 @@
         r.setInstitution(institution);
         r.setLayers(layers);
         r.setPid(pid);
+        r.setRequiredAccess(requiredAccess);
         
         entityManager.merge(r);
-
     }
 }
diff --git a/src/main/java/de/ids_mannheim/korap/dto/ResourceDto.java b/src/main/java/de/ids_mannheim/korap/dto/ResourceDto.java
index 063861e..d555307 100644
--- a/src/main/java/de/ids_mannheim/korap/dto/ResourceDto.java
+++ b/src/main/java/de/ids_mannheim/korap/dto/ResourceDto.java
@@ -16,19 +16,21 @@
 @Getter
 public class ResourceDto {
 
-    private String resourceId;
-    private Map<String, String> titles;
-    private String description;
-    private String[] languages;
-    private Map<Integer, String> layers;
-    private String institution;
-    private String landingPage;
+	private String resourceId;
+	private Map<String, String> titles;
+	private String description;
+	private String[] languages;
+	private Map<Integer, String> layers;
+	private String institution;
+	private String landingPage;
+	private String requiredAccess;
 
-    @Override
-    public String toString () {
-        return "resourceId= " + resourceId + ", description= " + description
-                + ", titles= " + titles + ", languages= " + languages
-                + ", layers= " + layers + ", institution=" + institution
-                + ", landingPage=" + landingPage;
-    }
+	@Override
+	public String toString () {
+		return "resourceId= " + resourceId + ", description= " + description
+				+ ", titles= " + titles + ", languages= " + languages
+				+ ", layers= " + layers + ", institution=" + institution
+				+ ", landingPage=" + landingPage + ",requiredAccess="
+				+ requiredAccess;
+	}
 }
diff --git a/src/main/java/de/ids_mannheim/korap/dto/converter/ResourceConverter.java b/src/main/java/de/ids_mannheim/korap/dto/converter/ResourceConverter.java
index efbc619..735a0fd 100644
--- a/src/main/java/de/ids_mannheim/korap/dto/converter/ResourceConverter.java
+++ b/src/main/java/de/ids_mannheim/korap/dto/converter/ResourceConverter.java
@@ -58,6 +58,7 @@
             dto.setLandingPage("https://korap.ids-mannheim.de?cq=" +
             		r.getCorpusQuery());
             dto.setInstitution(r.getInstitution());
+            dto.setRequiredAccess(r.getRequiredAccess());
 
             resourceDtoList.add(dto);
         }
diff --git a/src/main/java/de/ids_mannheim/korap/entity/Resource.java b/src/main/java/de/ids_mannheim/korap/entity/Resource.java
index 98c7fa5..c83aa50 100644
--- a/src/main/java/de/ids_mannheim/korap/entity/Resource.java
+++ b/src/main/java/de/ids_mannheim/korap/entity/Resource.java
@@ -47,6 +47,10 @@
     @Column(name = "corpus_query")
     private String corpusQuery;
     
+    // default free
+    @Column(name = "required_access")
+    private String requiredAccess;
+    
     private String institution;
     
     // required
@@ -59,7 +63,7 @@
 	public Resource (String id, String pid, String germanTitle,
 					 String englishTitle, String englishDescription,
 					 Set<AnnotationLayer> layers, String institution,
-					 String corpusQuery) {
+					 String corpusQuery, String requiredAccess) {
         this.id = id;
         this.pid = pid;
         this.germanTitle = germanTitle;
@@ -67,6 +71,7 @@
         this.englishDescription = englishDescription;
         this.layers = layers;
         this.corpusQuery = corpusQuery;
+        this.requiredAccess = requiredAccess;
         this.institution=institution;
     }
 
@@ -75,7 +80,8 @@
 		return "id=" + id + "pid=" + pid + ", germanTitle=" + germanTitle
 				+ ", englishTitle=" + englishTitle + ", description="
 				+ englishDescription + ", layers= " + layers + ", institution="
-				+ institution + ", corpusQuery=" + corpusQuery;
+				+ institution + ", corpusQuery=" + corpusQuery 
+				+", requiredAccess="+ requiredAccess;
 	}
 
 }
diff --git a/src/main/resources/data/resources.json b/src/main/resources/data/resources.json
index 10320f2..77a5028 100644
--- a/src/main/resources/data/resources.json
+++ b/src/main/resources/data/resources.json
@@ -13,6 +13,7 @@
         "tt/p"
     ],
     "corpus_query":"corpusSigle=WPD17",
+    "required_access" : "free",
     "institution" : "IDS Mannheim"
 },
 {
@@ -30,6 +31,7 @@
         "tt/p"
     ],
     "corpus_query":"corpusSigle=WDD17",
+    "required_access" : "free",
     "institution" : "IDS Mannheim"
 },
 {
diff --git a/src/main/resources/db/sqlite/V4.3__resource_access.sql b/src/main/resources/db/sqlite/V4.3__resource_access.sql
new file mode 100644
index 0000000..9a8898d
--- /dev/null
+++ b/src/main/resources/db/sqlite/V4.3__resource_access.sql
@@ -0,0 +1,2 @@
+ALTER TABLE resource 
+ADD COLUMN required_access VARCHAR(25) DEFAULT FREE;
\ No newline at end of file
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/FreeResourceControllerTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/ResourceControllerTest.java
similarity index 91%
rename from src/test/java/de/ids_mannheim/korap/web/controller/FreeResourceControllerTest.java
rename to src/test/java/de/ids_mannheim/korap/web/controller/ResourceControllerTest.java
index 719a96c..6322ede 100644
--- a/src/test/java/de/ids_mannheim/korap/web/controller/FreeResourceControllerTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/ResourceControllerTest.java
@@ -12,7 +12,7 @@
 import de.ids_mannheim.korap.utils.JsonUtils;
 
 @ContextConfiguration("classpath:test-resource-config.xml")
-public class FreeResourceControllerTest extends SpringJerseyTest {
+public class ResourceControllerTest extends SpringJerseyTest {
 
 	@Test
 	public void testResource () throws KustvaktException {
@@ -34,5 +34,6 @@
 		assertEquals("IDS Mannheim", n.at("/institution").asText());
 		assertEquals("https://korap.ids-mannheim.de?cq=corpusSigle=WPD17",
 				n.at("/landingPage").asText());
+		assertEquals("free", n.at("/requiredAccess").asText());
 	}
 }