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));

Reply via email to