Add resource reference in the search result.

Change-Id: I14745764b0e2127fd4415ea26bd3b45a23410fbb
diff --git a/ChangeLog b/ChangeLog
index 28f9955..0255f82 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -6,6 +6,7 @@
 - Implemented search for protected resources by using public metadata search 
   web-service and adding Diagnostics. (#64)
 - Added support for match-id with signatures. 
+- 
 
 1.0.7-SNAPSHOT
 
diff --git a/src/main/java/de/ids_mannheim/korap/sru/KorapClient.java b/src/main/java/de/ids_mannheim/korap/sru/KorapClient.java
index 25fe426..5f42f03 100644
--- a/src/main/java/de/ids_mannheim/korap/sru/KorapClient.java
+++ b/src/main/java/de/ids_mannheim/korap/sru/KorapClient.java
@@ -189,14 +189,20 @@
         }
 
         boolean freeAccess = true;
-        
+        String ref = "";
         HttpUriRequest httpRequest = null;
         try {
         	String corpusQuery = obtainCorpusQuery(corpora);
+        	ref = KorapSRU.korapWebUri + "?q="+query+"&ql="+queryLanguage;
+        	if (!corpusQuery.isEmpty()) {
+        		ref = ref +"&cq="+corpusQuery;
+        		corpusQuery = URLDecoder.decode(corpusQuery, "utf-8");
+        	}
             freeAccess = isAccessFree(corpora);
             httpRequest = createSearchRequest(query, queryLanguage, version,
                     startRecord - 1, maximumRecords, corpusQuery,
                     freeAccess);
+            
         }
         catch (URISyntaxException e) {
             throw new IOException("Failed creating http request.");
@@ -212,6 +218,7 @@
                     new BufferedInputStream(response.getEntity().getContent());
             try {
                 result = objectMapper.readValue(jsonStream, KorapResult.class);
+                result.setResourceReference(ref);
             }
             finally {
                 jsonStream.close();
@@ -227,7 +234,6 @@
         if (!freeAccess) {
         	result.getMatches().clear();
         }
-        	
         return result;
     }
 
@@ -249,7 +255,7 @@
 										+ " is not found.");
 					}
 				}
-            	cq = URLDecoder.decode(cq, "utf-8");
+            	//cq = URLDecoder.decode(cq, "utf-8");
         		if (i == 0) {
         			corpusQuery = cq;
         		}
@@ -377,7 +383,7 @@
 		maximumRecords, corpusQuery, freeAccess);
         
 //        logger.info("Query URI: " + uri.toString());
-//        System.out.println(uri.toString());
+        System.out.println(uri.toString());
         HttpGet request = new HttpGet(uri);
         return request;
     }
diff --git a/src/main/java/de/ids_mannheim/korap/sru/KorapResult.java b/src/main/java/de/ids_mannheim/korap/sru/KorapResult.java
index 0991c6e..f4bc4fa 100644
--- a/src/main/java/de/ids_mannheim/korap/sru/KorapResult.java
+++ b/src/main/java/de/ids_mannheim/korap/sru/KorapResult.java
@@ -11,6 +11,7 @@
     private List<KorapMatch> matches;
     private List<List<Object>> errors;
     private KorapMeta metadata;
+    private String resourceReference;
 
     public KorapResult () {
         matches = new ArrayList<KorapMatch>();
@@ -55,4 +56,12 @@
     public void setMetadata (KorapMeta metadata) {
         this.metadata = metadata;
     }
+
+	public String getResourceReference () {
+		return resourceReference;
+	}
+
+	public void setResourceReference (String resourceReference) {
+		this.resourceReference = resourceReference;
+	}
 }
diff --git a/src/main/java/de/ids_mannheim/korap/sru/KorapSRU.java b/src/main/java/de/ids_mannheim/korap/sru/KorapSRU.java
index 75906be..ecff789 100644
--- a/src/main/java/de/ids_mannheim/korap/sru/KorapSRU.java
+++ b/src/main/java/de/ids_mannheim/korap/sru/KorapSRU.java
@@ -107,7 +107,8 @@
                 isRewitesAllowed(request), diagnostics);
 //        logger.info("Number of records: "+korapResult.getTotalResults());
 
-        return new KorapSRUSearchResultSet(korapClient, diagnostics, korapResult, dataviews,
+        return new KorapSRUSearchResultSet(korapClient, diagnostics, 
+        		korapResult, dataviews,
                 korapEndpointDescription.getTextLayer(),
                 korapEndpointDescription.getAnnotationLayers());
     }
diff --git a/src/main/java/de/ids_mannheim/korap/sru/KorapSRUSearchResultSet.java b/src/main/java/de/ids_mannheim/korap/sru/KorapSRUSearchResultSet.java
index 657c35c..b950aa4 100644
--- a/src/main/java/de/ids_mannheim/korap/sru/KorapSRUSearchResultSet.java
+++ b/src/main/java/de/ids_mannheim/korap/sru/KorapSRUSearchResultSet.java
@@ -46,6 +46,7 @@
     private Layer textLayer;
     private AnnotationHandler annotationHandler;
     private KorapClient korapClient;
+    private String reference;
 
     /**
      * Constructs a KorapSRUSearchResultSet for the given KorapResult.
@@ -80,6 +81,7 @@
         this.korapResult = korapResult;
         this.dataviews = dataviews;
         this.textLayer = textlayer;
+        this.reference = korapResult.getResourceReference();
         annotationHandler = new AnnotationHandler(annotationLayers);
     }
 
@@ -114,7 +116,7 @@
         KorapMatch match = korapResult.getMatch(i);
         match.parseMatchId();
         XMLStreamWriterHelper.writeStartResource(writer, match.getMatchId(),
-                null);
+                reference);
         XMLStreamWriterHelper.writeStartResourceFragment(writer, null, null);
 
         List<AnnotationLayer> annotationLayers;