From 4cee41d8d63db7679802c31c5961c77d62ed20bf Mon Sep 17 00:00:00 2001 From: rob bygrave Date: Fri, 4 Sep 2020 13:21:13 +1200 Subject: [PATCH] #2053 - Refactor tidy StringHelper - replace replaceStringMulti() with removeNewLines() --- src/main/java/io/ebean/util/StringHelper.java | 97 ++----------------- .../server/persist/dml/DmlBeanPersister.java | 3 +- .../server/query/CQueryEngine.java | 3 +- src/test/java/io/ebean/StringHelperTest.java | 6 +- 4 files changed, 13 insertions(+), 96 deletions(-) diff --git a/src/main/java/io/ebean/util/StringHelper.java b/src/main/java/io/ebean/util/StringHelper.java index ae48124a0..a73e755fe 100644 --- a/src/main/java/io/ebean/util/StringHelper.java +++ b/src/main/java/io/ebean/util/StringHelper.java @@ -198,92 +198,11 @@ public class StringHelper { } /** - * A search and replace with multiple matching strings. - *

- * Useful when converting CRNL CR and NL all to a BR tag for example. - *

{@code
-   *
-   * String[] multi = { "\r\n", "\r", "\n" };
-   * content = StringHelper.replaceStringMulti(content, multi, "
"); - * - * }
+ * Return new line and carriage return with space. */ - public static String replaceStringMulti(String source, String[] match, String replace) { - if (source == null) { - return null; - } - return replaceStringMulti(source, match, replace, 30, 0, source.length()); - } - - /** - * Additionally specify an additional size estimate for the buffer plus start - * and end positions. - *

- * The start and end positions can limit the search and replace. Otherwise - * these default to startPos = 0 and endPos = source.length(). - *

- */ - public static String replaceStringMulti(String source, String[] match, String replace, - int additionalSize, int startPos, int endPos) { - if (source == null) { - return null; - } - int shortestMatch = match[0].length(); - - char[] match0 = new char[match.length]; - for (int i = 0; i < match0.length; i++) { - match0[i] = match[i].charAt(0); - if (match[i].length() < shortestMatch) { - shortestMatch = match[i].length(); - } - } - - StringBuilder sb = new StringBuilder(source.length() + additionalSize); - - char sourceChar; - - int len = source.length(); - int lastMatch = endPos - shortestMatch; - - if (startPos > 0) { - sb.append(source.substring(0, startPos)); - } - - int matchCount; - - for (int i = startPos; i < len; i++) { - sourceChar = source.charAt(i); - if (i > lastMatch) { - sb.append(sourceChar); - } else { - matchCount = 0; - for (int k = 0; k < match0.length; k++) { - if (matchCount == 0 && sourceChar == match0[k]) { - if (match[k].length() + i <= len) { - - ++matchCount; - int j = 1; - for (; j < match[k].length(); j++) { - if (source.charAt(i + j) != match[k].charAt(j)) { - --matchCount; - break; - } - } - if (matchCount > 0) { - i = i + j - 1; - sb.append(replace); - break; - } - } - } - } - if (matchCount == 0) { - sb.append(sourceChar); - } - } - } - - return sb.toString(); + public static String removeNewLines(String source) { + source = source.replace('\n', ' '); + return source.replace('\r', ' '); } /** @@ -296,13 +215,13 @@ public class StringHelper { } String[] result = SPLIT_NAMES.split(names); if (result.length == 0) { - return EMPTY_STRING_ARRAY; // don't know if this ever can happen + return EMPTY_STRING_ARRAY; } - if ("".equals(result[0])) { // = input string starts with whitespace - if (result.length == 1) { // = input string contains only whitespace + if ("".equals(result[0])) { // input string starts with whitespace + if (result.length == 1) { // input string contains only whitespace return EMPTY_STRING_ARRAY; } else { - String ret[] = new String[result.length-1]; // remove first entry + String[] ret = new String[result.length-1]; // remove first entry System.arraycopy(result, 1, ret, 0, ret.length); return ret; } diff --git a/src/main/java/io/ebeaninternal/server/persist/dml/DmlBeanPersister.java b/src/main/java/io/ebeaninternal/server/persist/dml/DmlBeanPersister.java index 1b646db55..5c925e8d2 100644 --- a/src/main/java/io/ebeaninternal/server/persist/dml/DmlBeanPersister.java +++ b/src/main/java/io/ebeaninternal/server/persist/dml/DmlBeanPersister.java @@ -75,8 +75,7 @@ public final class DmlBeanPersister implements BeanPersister { } catch (SQLException e) { // log the error to the transaction log - String errMsg = StringHelper.replaceStringMulti(e.getMessage(), new String[]{"\r", "\n"}, " "); - String msg = "Error[" + errMsg + "]"; + String msg = "Error[" + StringHelper.removeNewLines(e.getMessage()) + "]"; if (request.getTransaction().isLogSummary()) { request.getTransaction().logSummary(msg); } diff --git a/src/main/java/io/ebeaninternal/server/query/CQueryEngine.java b/src/main/java/io/ebeaninternal/server/query/CQueryEngine.java index 65e84b0ff..40aafe680 100644 --- a/src/main/java/io/ebeaninternal/server/query/CQueryEngine.java +++ b/src/main/java/io/ebeaninternal/server/query/CQueryEngine.java @@ -136,8 +136,7 @@ public class CQueryEngine { SpiTransaction t = request.getTransaction(); if (t.isLogSummary()) { // log the error to the transaction log - String errMsg = StringHelper.replaceStringMulti(e.getMessage(), new String[]{"\r", "\n"}, "\\n "); - String msg = "ERROR executing query, bindLog[" + bindLog + "] error[" + errMsg + "]"; + String msg = "ERROR executing query, bindLog[" + bindLog + "] error[" + StringHelper.removeNewLines(e.getMessage()) + "]"; t.logSummary(msg); } diff --git a/src/test/java/io/ebean/StringHelperTest.java b/src/test/java/io/ebean/StringHelperTest.java index dac90968b..39d673967 100644 --- a/src/test/java/io/ebean/StringHelperTest.java +++ b/src/test/java/io/ebean/StringHelperTest.java @@ -22,11 +22,11 @@ public class StringHelperTest { } @Test - public void testReplaceStringMulti() { + public void removeNewLines() { String content = "This is\na\rmultiline\r\ntext\n\r"; String[] multi = {"\r\n", "\r", "\n"}; - content = StringHelper.replaceStringMulti(content, multi, "
"); - assertThat(content).isEqualTo("This is
a
multiline
text

"); + content = StringHelper.removeNewLines(content); + assertThat(content).isEqualTo("This is a multiline text "); } @Test