Handled storing cached VC with VC reference

Change-Id: Ic0ad1384acb6ce593c9f06ee3c9ee22627680790
diff --git a/full/Changes b/full/Changes
index b8d1645..b111732 100644
--- a/full/Changes
+++ b/full/Changes
@@ -3,7 +3,10 @@
    - Integrated lite and full services and controllers in core (margaretha)
 21/11/2018
    - Updated OAuth2 refresh token request to create a new refresh token and 
-     revoke the old one per request (margaretha)   
+     revoke the old one per request (margaretha)
+28/11/2018
+   - Updated NamedVCLoader to delete existing VC in DB (margaretha)
+   - Handled storing cached VC with VC reference (margaretha)
    
 # version 0.61.3
 17/10/2018
diff --git a/full/src/main/java/de/ids_mannheim/korap/config/NamedVCLoader.java b/full/src/main/java/de/ids_mannheim/korap/config/NamedVCLoader.java
index 38f0fc9..2b72e84 100644
--- a/full/src/main/java/de/ids_mannheim/korap/config/NamedVCLoader.java
+++ b/full/src/main/java/de/ids_mannheim/korap/config/NamedVCLoader.java
@@ -16,6 +16,7 @@
 
 import de.ids_mannheim.korap.KrillCollection;
 import de.ids_mannheim.korap.constant.VirtualCorpusType;
+import de.ids_mannheim.korap.entity.VirtualCorpus;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.service.VirtualCorpusService;
 import de.ids_mannheim.korap.util.QueryException;
@@ -49,7 +50,7 @@
 
         String dir = config.getNamedVCPath();
         if (dir.isEmpty()) return;
-        
+
         File d = new File(dir);
         if (!d.isDirectory()) {
             throw new IOException("Directory " + dir + " is not valid");
@@ -66,13 +67,25 @@
             String json = strArr[1];
             if (json != null) {
                 cacheVC(json, filename);
-                vcService.storeVC(filename, VirtualCorpusType.SYSTEM, json, null,
-                        null, null, true, "system");
+                try {
+                    VirtualCorpus vc = vcService.searchVCByName("system",
+                            filename, "system");
+                    if (vc != null) {
+                        jlog.debug("Delete existing vc: " + filename);
+                        vcService.deleteVC("system", vc.getId());
+                    }
+                }
+                catch (KustvaktException e) {
+                    // ignore
+                }
+                vcService.storeVC(filename, VirtualCorpusType.SYSTEM, json,
+                        null, null, null, true, "system");
             }
         }
     }
 
-    private String[] readFile (File file, String filename) throws IOException, KustvaktException {
+    private String[] readFile (File file, String filename)
+            throws IOException, KustvaktException {
         String json = null;
         long start = System.currentTimeMillis();
         if (filename.endsWith(".jsonld")) {
@@ -94,13 +107,13 @@
         }
         long end = System.currentTimeMillis();
         jlog.debug("READ " + filename + " duration: " + (end - start));
-        
-        return new String[]{filename, json};
+
+        return new String[] { filename, json };
     }
 
     private void cacheVC (String json, String filename)
             throws IOException, QueryException {
-        jlog.info("Create KrillCollection: "+filename);
+        jlog.info("Create KrillCollection: " + filename);
         long start, end;
         start = System.currentTimeMillis();
 
@@ -108,8 +121,8 @@
         jlog.debug("Finished creating KrillCollection");
         jlog.debug("Set Index to collection");
         collection.setIndex(searchKrill.getIndex());
-                
-        jlog.debug("StoreInCache "+filename);
+
+        jlog.debug("StoreInCache " + filename);
         if (collection != null) {
             collection.storeInCache(filename);
         }
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 8ed6c09..790e520 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
@@ -257,8 +257,18 @@
                     "Unauthorized operation for user: " + username, username);
         }
 
-        CorpusAccess requiredAccess = determineRequiredAccess(koralQuery);
-        jlog.debug("Storing VC");
+        CorpusAccess requiredAccess;
+        if (isCached){
+            KoralCollectionQueryBuilder koral = new KoralCollectionQueryBuilder();
+            koral.with("referTo "+name);
+            String vcRef = koral.toJSON();
+            jlog.debug("Determine vc access with vc ref: " + vcRef);
+            requiredAccess = determineRequiredAccess(vcRef);
+        }
+        else{
+            requiredAccess = determineRequiredAccess(koralQuery);
+        }
+        jlog.debug("Storing VC "+name);
         int vcId = 0;
         try {
             vcId = vcDao.createVirtualCorpus(name, type, requiredAccess,
diff --git a/full/src/main/resources/default-config.xml b/full/src/main/resources/default-config.xml
index 966eb66..d0c3576 100644
--- a/full/src/main/resources/default-config.xml
+++ b/full/src/main/resources/default-config.xml
@@ -38,7 +38,7 @@
 				<value>file:./jdbc.properties</value>
 				<value>classpath:properties/mail.properties</value>
 				<value>file:./mail.properties</value>
-				<value>classpath:properties/hibernate.properties</value>
+				<value>classpath:hibernate.properties</value>
 
 				<value>classpath:kustvakt.conf</value>
 				<value>file:./kustvakt.conf</value>
diff --git a/full/src/main/resources/properties/hibernate.properties b/full/src/main/resources/hibernate.properties
similarity index 100%
rename from full/src/main/resources/properties/hibernate.properties
rename to full/src/main/resources/hibernate.properties