diff options
Diffstat (limited to 'vespajlib/src/main/java/com/yahoo/text/SnippetGenerator.java')
-rw-r--r-- | vespajlib/src/main/java/com/yahoo/text/SnippetGenerator.java | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/text/SnippetGenerator.java b/vespajlib/src/main/java/com/yahoo/text/SnippetGenerator.java new file mode 100644 index 00000000000..756fe9b48e4 --- /dev/null +++ b/vespajlib/src/main/java/com/yahoo/text/SnippetGenerator.java @@ -0,0 +1,34 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.text; + +/** + * Truncate text to a snippet suitable for logging. + * + * @author hakon + */ +public class SnippetGenerator { + + private static final String OMIT_PREFIX = "[..."; + private static final String OMIT_SUFFIX = " chars omitted]"; + private static final int ASSUMED_OMIT_TEXT_LENGTH = OMIT_PREFIX.length() + 4 + OMIT_SUFFIX.length(); + + /** Returns a snippet of approximate size. */ + public String makeSnippet(String text, int sizeHint) { + if (text.length() <= Math.max(sizeHint, ASSUMED_OMIT_TEXT_LENGTH)) return text; + + int maxSuffixLength = Math.max(0, (sizeHint - ASSUMED_OMIT_TEXT_LENGTH) / 2); + int maxPrefixLength = Math.max(0, sizeHint - ASSUMED_OMIT_TEXT_LENGTH - maxSuffixLength); + String sizeString = Integer.toString(text.length() - maxPrefixLength - maxSuffixLength); + + // It would be silly to return a snippet when the full text is barely longer. + // Note: Say ASSUMED_OMIT_TEXT_LENGTH=23: text will be returned whenever sizeHint<23 and text.length()<28. + int snippetLength = maxPrefixLength + OMIT_PREFIX.length() + sizeString.length() + OMIT_SUFFIX.length() + maxSuffixLength; + if (text.length() <= 1.05 * snippetLength + 5) return text; + + return text.substring(0, maxPrefixLength) + + OMIT_PREFIX + + sizeString + + OMIT_SUFFIX + + text.substring(text.length() - maxSuffixLength); + } +} |