Introduce prefix cutting in with expandToContext to avoid missing matches in matchinfo view

Change-Id: I997439e3f621470d4d96e108cca25ae3692d6de9
diff --git a/src/main/java/de/ids_mannheim/korap/response/Match.java b/src/main/java/de/ids_mannheim/korap/response/Match.java
index f520865..bf18bb5 100644
--- a/src/main/java/de/ids_mannheim/korap/response/Match.java
+++ b/src/main/java/de/ids_mannheim/korap/response/Match.java
@@ -113,7 +113,8 @@
     public int potentialStartPosChar = -1, potentialEndPosChar = -1;
 
 	@JsonIgnore
-	public boolean cutted = false;
+	public boolean startCutted = false;
+	public boolean endCutted = false;
 
     private String version;
 
@@ -219,7 +220,6 @@
         };
     };
 
-
     /**
      * Private class of highlights.
 	 * TODO: This should probably be renamed, as it not only contains highlights
@@ -345,7 +345,7 @@
                             this.potentialStartPosChar = bb.getInt(1);
                     };
 
-                    if (bb.getInt(4) > this.potentialEndPosChar && !this.cutted)
+                    if (bb.getInt(4) > this.potentialEndPosChar && !this.endCutted)
                         this.potentialEndPosChar = bb.getInt(5);
 
                     if (DEBUG)
@@ -500,6 +500,11 @@
 		this.addHighlight(new Highlight(start, pagenumber));
 	};
 
+    @JsonIgnore
+    public int getMaxMatchTokens () {
+        return MAX_MATCH_TOKENS;
+    }
+    
     /**
      * Get document id.
      */
@@ -568,7 +573,7 @@
         this.startPos = pos;
 		if (this.endPos != -1 && (this.endPos - pos) > MAX_MATCH_TOKENS) {
 			this.endPos = pos + MAX_MATCH_TOKENS;
-			this.cutted = true;
+			this.endCutted = true;
 		};
     };
 
@@ -615,7 +620,7 @@
     public void setEndPos (int pos) {
 		if (this.startPos != -1 && (pos - this.startPos) > MAX_MATCH_TOKENS) {
 			pos = this.startPos + MAX_MATCH_TOKENS;
-			this.cutted = true;
+			this.endCutted = true;
 		};
         this.endPos = pos;
     };
@@ -821,6 +826,10 @@
         return this.context;
     };
 
+    @JsonIgnore
+    public int getLength () {
+        return this.getEndPos() - this.getStartPos();
+    };  
 
 	
 	// Retrieve pagebreaks in a certain area
@@ -1413,6 +1422,11 @@
 
         // Iterate through all remaining elements
         sb.append("<span class=\"match\">");
+
+		if (this.startCutted) {
+			sb.append("<span class=\"cutted\"></span>");
+		};
+        
         for (short i = start; i <= end; i++) {
 
 			elem = this.snippetArray.get(i);
@@ -1427,7 +1441,7 @@
 				sb.append(elemString);
 			}
         };
-		if (this.cutted) {
+		if (this.endCutted) {
 			sb.append("<span class=\"cutted\"></span>");
 		};
         sb.append("</span>");
@@ -1465,6 +1479,10 @@
 
         sb.append("[");
 
+		if (this.startCutted) {
+			sb.append("<!>");
+		};
+        
         // Last element of sorted array
         elem = this.snippetArray.getLast();
         StringBuilder rightContext = new StringBuilder();
@@ -1480,7 +1498,7 @@
             sb.append(this.snippetArray.get(i).toBrackets(this));
         };
 
-		if (this.cutted) {
+		if (this.endCutted) {
 			sb.append("<!>");
 		};
         sb.append("]");