summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xsearchlib/src/main/java/com/yahoo/searchlib/rankingexpression/RankingExpression.java3
-rw-r--r--vespajlib/abi-spec.json3
-rw-r--r--vespajlib/src/main/java/com/yahoo/text/Text.java12
-rw-r--r--vespajlib/src/test/java/com/yahoo/text/TextTestCase.java11
4 files changed, 27 insertions, 2 deletions
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/RankingExpression.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/RankingExpression.java
index 18f6c6f2ca2..1f27bc8750e 100755
--- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/RankingExpression.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/RankingExpression.java
@@ -10,6 +10,7 @@ import com.yahoo.searchlib.rankingexpression.rule.ExpressionNode;
import com.yahoo.searchlib.rankingexpression.rule.SerializationContext;
import com.yahoo.tensor.TensorType;
import com.yahoo.tensor.evaluation.TypeContext;
+import com.yahoo.text.Text;
import java.io.File;
import java.io.FileNotFoundException;
@@ -115,7 +116,7 @@ public class RankingExpression implements Serializable {
root = parse(new StringReader(expression));
}
catch (ParseException e) {
- ParseException p = new ParseException("Could not parse '" + expression + "'");
+ ParseException p = new ParseException("Could not parse '" + Text.truncate(expression, 50) + "'");
p.initCause(e);
throw p;
}
diff --git a/vespajlib/abi-spec.json b/vespajlib/abi-spec.json
index b8b6716d879..04f859e2802 100644
--- a/vespajlib/abi-spec.json
+++ b/vespajlib/abi-spec.json
@@ -3022,7 +3022,8 @@
"public static boolean isTextCharacter(int)",
"public static java.util.OptionalInt validateTextString(java.lang.String)",
"public static boolean isDisplayable(int)",
- "public static java.lang.String stripInvalidCharacters(java.lang.String)"
+ "public static java.lang.String stripInvalidCharacters(java.lang.String)",
+ "public static java.lang.String truncate(java.lang.String, int)"
],
"fields": []
},
diff --git a/vespajlib/src/main/java/com/yahoo/text/Text.java b/vespajlib/src/main/java/com/yahoo/text/Text.java
index 706fd1583a3..85b28639d89 100644
--- a/vespajlib/src/main/java/com/yahoo/text/Text.java
+++ b/vespajlib/src/main/java/com/yahoo/text/Text.java
@@ -174,4 +174,16 @@ public final class Text {
return stripped != null ? stripped.toString() : string;
}
+ /**
+ * Returns a string which is never larger than the given number of characters.
+ * If the string is longer than the given length it will be truncated.
+ * If length is 4 or less the string will be truncated to length.
+ * If length is longer than 4, it will be truncated at length-4 with " ..." added at the end.
+ */
+ public static String truncate(String s, int length) {
+ if (s.length() <= length) return s;
+ if (length <= 4) return s.substring(0, length);
+ return s.substring(0, length - 4) + " ...";
+ }
+
}
diff --git a/vespajlib/src/test/java/com/yahoo/text/TextTestCase.java b/vespajlib/src/test/java/com/yahoo/text/TextTestCase.java
index e733b838c39..8bb8b2aaad5 100644
--- a/vespajlib/src/test/java/com/yahoo/text/TextTestCase.java
+++ b/vespajlib/src/test/java/com/yahoo/text/TextTestCase.java
@@ -61,4 +61,15 @@ public class TextTestCase {
assertFalse(Text.isDisplayable(0));
}
+ @Test
+ public void testTruncate() {
+ assertEquals("ab", Text.truncate("ab", 5));
+ assertEquals("ab", Text.truncate("ab", 6));
+ assertEquals("ab", Text.truncate("ab", 2));
+ assertEquals("a", Text.truncate("ab", 1));
+ assertEquals("", Text.truncate("ab", 0));
+ assertEquals("ab c", Text.truncate("ab cde", 4));
+ assertEquals("a ...", Text.truncate("ab cde", 5));
+ }
+
}