This is an automated email from the ASF dual-hosted git repository.
doebele pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/empire-db.git
The following commit(s) were added to refs/heads/master by this push:
new 40f61fa5 EMPIREDB-420 StringUtils complete
40f61fa5 is described below
commit 40f61fa5e3d725c8893054a78b1c6c516f2fd949
Author: Rainer Döbele <[email protected]>
AuthorDate: Tue Apr 23 10:59:00 2024 +0200
EMPIREDB-420
StringUtils complete
---
.../org/apache/empire/commons/StringUtils.java | 109 +++++++++++++++------
.../main/java/org/apache/empire/db/DBRowSet.java | 2 +-
.../org/apache/empire/commons/StringUtilsTest.java | 36 +++++--
3 files changed, 107 insertions(+), 40 deletions(-)
diff --git a/empire-db/src/main/java/org/apache/empire/commons/StringUtils.java
b/empire-db/src/main/java/org/apache/empire/commons/StringUtils.java
index d2f1caf7..fe47caa9 100644
--- a/empire-db/src/main/java/org/apache/empire/commons/StringUtils.java
+++ b/empire-db/src/main/java/org/apache/empire/commons/StringUtils.java
@@ -48,38 +48,58 @@ public class StringUtils
public static final String NULL = "null";
/**
- * Default Array Separator
+ * Default Item Separator
*/
- public static String DEFAULT_ARRAY_SEPARATOR = "|";
+ public static String DEFAULT_ITEM_SEPARATOR = "|";
+ /**
+ * Default List Template
+ */
+ public static String LIST_TEMPLATE = "[*|*]";
+ public static char TEMPLATE_SEP_CHAR = '*';
+
/**
* Converts a value to a string.
* If the value is null then the default value is returned.
*
* @param value the value to convert
+ * @param listTemplate the list template or item separator to be used for
arrays and lists
* @param defValue default value which to return if value is null
- * @return returns a String representation of the value or null if value
is null
+ * @return returns a string for the object or the defValue if null
*/
- public static String toString(Object value, String defValue)
+ public static String toString(Object value, String listTemplate, String
defValue)
{
// Special cases
if (value instanceof Enum<?>)
return ((Enum<?>)value).name();
// Collections
if (value instanceof Object[])
- value = arrayToString((Object[])value, DEFAULT_ARRAY_SEPARATOR);
+ value = arrayToString((Object[])value, listTemplate,
(defValue!=null ? defValue : EMPTY));
else if (value instanceof Collection<?>)
- value = listToString((Collection<?>)value,
DEFAULT_ARRAY_SEPARATOR);
+ value = listToString((Collection<?>)value, listTemplate,
(defValue!=null ? defValue : EMPTY));
// default
return ((value!=null) ? value.toString() : defValue);
}
+
+ /**
+ * Converts a value to a string.
+ * If the value is null then the default value is returned.
+ *
+ * @param value the value to convert
+ * @param defValue default value which to return if value is null
+ * @return returns a string for the object or the defValue if null
+ */
+ public static String toString(Object value, String defValue)
+ {
+ return toString(value, DEFAULT_ITEM_SEPARATOR, defValue);
+ }
/**
* Converts a value to a string.
* If the value is null then null will be returned.
*
* @param value the value to convert
- * @return returns a String representation of the value or null if value
is null
+ * @return returns a string for the object or null
*/
public static String toString(Object value)
{
@@ -91,12 +111,25 @@ public class StringUtils
* if the value is null an empty string is returned.
*
* @param value the value to convert
- * @return returns a String representation of the Object or an empty
stringif o is null
+ * @return returns a string for the object or an empty string if null
*/
public static String valueOf(Object value)
{
return toString(value, EMPTY);
}
+
+ /**
+ * Converts a value to a string.
+ * Almost same as toString() but Lists and Arrays are wrapped with the
standard list template (LIST_TEMPLATE)
+ * if the value is null an empty string is returned.
+ *
+ * @param value the value to convert
+ * @return returns a string for the object or an empty string if null
+ */
+ public static String asString(Object value)
+ {
+ return toString(value, LIST_TEMPLATE, EMPTY);
+ }
/**
* Returns the preferred String if it is not empty
@@ -157,27 +190,37 @@ public class StringUtils
* Converts an array of objects to a string.
*
* @param array array of objects
- * @param separator the separator to put between the object strings
- * @param defValue the default item value
- * @return returns a String
+ * @param template the list template or item separator
+ * @param defItemValue the default item value
+ * @return returns a String or null if the array is null or empty
*/
- public static String arrayToString(Object[] array, String separator,
String defValue)
+ public static String arrayToString(Object[] array, String template, String
defItemValue)
{
- if (array == null || array.length < 1)
+ if (array == null)
return null;
- if (array.length > 1)
+ if (array.length < 1)
+ return EMPTY;
+ // check
+ int tbeg = (template!=null ? template.indexOf(TEMPLATE_SEP_CHAR) : -1);
+ if (array.length>1 || tbeg>0)
{ // build the list
+ int tend =(tbeg>=0 ? template.lastIndexOf(TEMPLATE_SEP_CHAR) : -1);
+ String separator = ((tbeg>0) ? (tend>tbeg ?
template.substring(tbeg+1, tend) : DEFAULT_ITEM_SEPARATOR) : template);
StringBuilder buf = new StringBuilder();
+ if (tend>0)
+ buf.append(template.substring(0, tbeg));
for (int i = 0; i < array.length; i++)
- {
+ { // append item
if (i>0 && separator!=null)
buf.append(separator);
- buf.append(toString(array[i], defValue));
+ buf.append(toString(array[i], template, defItemValue));
}
+ if (tend>0)
+ buf.append(template.substring(tend+1));
return buf.toString();
}
// Only one member
- return toString(array[0], defValue);
+ return toString(array[0], template, defItemValue);
}
/**
@@ -196,28 +239,38 @@ public class StringUtils
* Converts a list (Collection) of objects to a string.
*
* @param list the collection of objects
- * @param separator the separator to put between the object strings
- * @param defValue the default item value
- * @return returns a String
+ * @param template the list template or item separator
+ * @param defItemValue the default item value
+ * @return returns a String or null if the list is null
*/
- public static String listToString(Collection<?> list, String separator,
String defValue)
+ public static String listToString(Collection<?> list, String template,
String defItemValue)
{
- if (list == null || list.isEmpty())
+ if (list == null)
return null;
- if (list.size() > 1)
+ if (list.isEmpty())
+ return EMPTY;
+ // check
+ int tbeg = (template!=null ? template.indexOf(TEMPLATE_SEP_CHAR) : -1);
+ if (list.size()>1 || tbeg>0)
{ // build the list
int count=0;
+ int tend =(tbeg>=0 ? template.lastIndexOf(TEMPLATE_SEP_CHAR) : -1);
+ String separator = ((tbeg>0) ? (tend>tbeg ?
template.substring(tbeg+1, tend) : DEFAULT_ITEM_SEPARATOR) : template);
StringBuilder buf = new StringBuilder();
+ if (tend>0)
+ buf.append(template.substring(0, tbeg));
for (Object item : list)
- {
+ { // append item
if (count++>0 && separator!=null)
buf.append(separator);
- buf.append(toString(item, defValue));
+ buf.append(toString(item, template, defItemValue));
}
+ if (tend>0)
+ buf.append(template.substring(tend+1));
return buf.toString();
}
// Only one member
- return toString(list.iterator().next(), defValue);
+ return toString(list.iterator().next(), template, defItemValue);
}
/**
@@ -394,9 +447,7 @@ public class StringUtils
replace="";
// replace and find again
int len = find.length();
- return source.substring(0,index)
- + replace
- + replace(source.substring(index+len), find, replace);
+ return concat(source.substring(0,index), replace,
replace(source.substring(index+len), find, replace));
}
/**
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBRowSet.java
b/empire-db/src/main/java/org/apache/empire/db/DBRowSet.java
index bb0f72bd..af13a444 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBRowSet.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBRowSet.java
@@ -822,7 +822,7 @@ public abstract class DBRowSet extends DBExpr implements
EntityType
i++;
}
}
- log.warn("Record {} not found in {}", StringUtils.toString(key),
getName());
+ log.warn("Record [{}] not found in {}", StringUtils.toString(key),
getName());
// throw RecordNotFoundException
throw new RecordNotFoundException(this, key);
} finally {
diff --git
a/empire-db/src/test/java/org/apache/empire/commons/StringUtilsTest.java
b/empire-db/src/test/java/org/apache/empire/commons/StringUtilsTest.java
index 3cdeffe3..005dfe9b 100644
--- a/empire-db/src/test/java/org/apache/empire/commons/StringUtilsTest.java
+++ b/empire-db/src/test/java/org/apache/empire/commons/StringUtilsTest.java
@@ -48,30 +48,45 @@ public class StringUtilsTest
@Test
public void testToStringObjectArrayString()
{
- assertEquals(null,StringUtils.toString((Object[])null, null));
+ assertEquals(null,StringUtils.toString((Object[])null));
+ assertEquals("",StringUtils.toString(new Number[]{}));
+ assertEquals("",StringUtils.toString(new Number[]{null}));
+ assertEquals("null",StringUtils.toString(new Number[]{null},
StringUtils.NULL));
assertEquals("default",StringUtils.toString((Object[])null,
"default"));
- assertEquals("default",StringUtils.toString(new Number[]{},
"default"));
- assertEquals("null",StringUtils.toString(new Number[]{null},
"default"));
+ assertEquals("",StringUtils.toString(new Number[]{},
"default"));
+ assertEquals("default",StringUtils.toString(new Number[]{null},
"default"));
assertEquals("123",StringUtils.toString(new
Number[]{Integer.valueOf("123")}, "default"));
assertEquals("123|12.3",StringUtils.toString(new
Number[]{Integer.valueOf("123"), Double.valueOf("12.3")}, "default"));
}
+ @Test
+ public void testAsStringObjectArrayString()
+ {
+ assertEquals("",StringUtils.asString((Object[])null));
+ assertEquals("",StringUtils.asString(new Number[]{}));
+ assertEquals("[]",StringUtils.asString(new Number[]{null}));
+ assertEquals("[123]",StringUtils.asString(new
Number[]{Integer.valueOf("123")}));
+ assertEquals("[123|12.3]",StringUtils.asString(new
Number[]{Integer.valueOf("123"), Double.valueOf("12.3")}));
+ assertEquals("[123|[aaa|[bbb|xxx]|yyy]|12.3]",
StringUtils.asString(new Object[]{Integer.valueOf("123"), new Object[]{ "aaa",
new Object[]{ "bbb", "xxx" }, "yyy" }, Double.valueOf("12.3")}));
+ }
+
@Test
public void testToStringCollections()
{
ArrayList<String> array = new ArrayList<String>();
- assertEquals(null, StringUtils.toString(array, null));
+ assertEquals("", StringUtils.toString(array, null));
array.add(null);
- assertEquals("null", StringUtils.toString(array, null));
+ assertEquals("", StringUtils.toString(array, null));
+ assertEquals("null", StringUtils.toString(array, StringUtils.NULL));
assertEquals("{null=empty}|{1=one}|{2=two}", StringUtils.toString(new
Options().add(null, "empty").add("1", "one").add("2", "two")));
array.add("end");
- assertEquals("null|end",StringUtils.toString(array, "default"));
+ assertEquals("default|end",StringUtils.toString(array, "default"));
array.clear();
array.add("one");
assertEquals("one",StringUtils.toString(array, "default"));
array.add(null);
array.add("end");
- assertEquals("one|null|end",StringUtils.toString(array, "default"));
+ assertEquals("one|default|end",StringUtils.toString(array, "default"));
assertEquals("one||end",StringUtils.listToString(array, "|",
StringUtils.EMPTY));
}
@@ -79,7 +94,7 @@ public class StringUtilsTest
public void testToStringObjectArray()
{
assertEquals(null,StringUtils.toString((Object[])null));
- assertEquals(null,StringUtils.toString(new Number[]{}));
+ assertEquals("",StringUtils.toString(new Number[]{}));
assertEquals("123|12.3",StringUtils.toString(new
Number[]{Integer.valueOf("123"), Double.valueOf("12.3")}));
}
@@ -97,7 +112,7 @@ public class StringUtilsTest
{
assertEquals("",StringUtils.valueOf((Object[])null));
assertEquals("",StringUtils.valueOf(new Object[]{}));
- assertEquals("null",StringUtils.valueOf(new Object[]{null}));
+ assertEquals("",StringUtils.valueOf(new Object[]{null}));
assertEquals("123|12.3",StringUtils.valueOf(new
Number[]{Integer.valueOf("123"), Double.valueOf("12.3")}));
}
@@ -125,7 +140,8 @@ public class StringUtilsTest
{
assertEquals(null, StringUtils.arrayToString(null , null));
assertEquals(null, StringUtils.arrayToString(null , "/"));
- assertEquals(null, StringUtils.arrayToString(new String[]{} ,
""));
+ assertEquals("", StringUtils.arrayToString(new String[]{} ,
StringUtils.NULL));
+ assertEquals("null", StringUtils.arrayToString(new String[]{null} ,
StringUtils.NULL));
assertEquals("test", StringUtils.arrayToString(new
String[]{"test"} , "|"));
assertEquals("12312.3", StringUtils.arrayToString(new
Number[]{Integer.valueOf("123"), Double.valueOf("12.3")} , ""));
assertEquals("firstsecondthird", StringUtils.arrayToString(new
String[]{"first", "second", "third"} , null));