From 515bf60309ec9ccc6f0ed13780f6ed7d68be2645 Mon Sep 17 00:00:00 2001 From: Ziver Koc Date: Thu, 10 Dec 2015 21:45:14 +0100 Subject: [PATCH] Added join method to StringUtil --- Zutil.jar | Bin 1183630 -> 1183893 bytes src/zutil/StringUtil.java | 19 +++++++++++++++++++ src/zutil/db/DBUpgradeHandler.java | 6 +++--- test/zutil/test/StringUtilTest.java | 11 +++++++++++ 4 files changed, 33 insertions(+), 3 deletions(-) mode change 100644 => 100755 test/zutil/test/StringUtilTest.java diff --git a/Zutil.jar b/Zutil.jar index 7457c19d13d59b9712d6fa246505a7f185c9c878..b96f3b8d7120b4e4b6cff9ee7df0abd45cff28fa 100755 GIT binary patch delta 21950 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 list, String delimiter){ + StringBuilder str = new StringBuilder(); + Iterator it = list.iterator(); + if(it.hasNext()) { + str.append(it.next()); + while (it.hasNext()) { + str.append(delimiter).append(it.next()); + } + } + return str.toString(); + } + /** * Trims the given char and whitespace at the beginning and the end * diff --git a/src/zutil/db/DBUpgradeHandler.java b/src/zutil/db/DBUpgradeHandler.java index 1c398b4..5e7c5c9 100755 --- a/src/zutil/db/DBUpgradeHandler.java +++ b/src/zutil/db/DBUpgradeHandler.java @@ -1,6 +1,6 @@ package zutil.db; -import com.sun.deploy.util.StringUtils; +import zutil.StringUtil; import zutil.db.handler.ListSQLResult; import zutil.db.handler.SimpleSQLResult; import zutil.log.LogUtil; @@ -18,7 +18,7 @@ import java.util.logging.Logger; /** * This class will take a reference DB and alter * the source DB to have the same structure. - * NOTE: only works with sqllite + * NOTE: only works with SQLite * * Created by Ziver */ @@ -162,7 +162,7 @@ public class DBUpgradeHandler { // Restoring data logger.fine("Forced Upgrade: Restoring data for table: "+table); - String cols = StringUtils.join(refStruct, ","); + String cols = StringUtil.join(refStruct, ","); target.exec(String.format( "INSERT INTO %s (%s) SELECT %s FROM %s", table, cols, cols, backupTable)); diff --git a/test/zutil/test/StringUtilTest.java b/test/zutil/test/StringUtilTest.java old mode 100644 new mode 100755 index ed42d8e..2db4506 --- a/test/zutil/test/StringUtilTest.java +++ b/test/zutil/test/StringUtilTest.java @@ -26,6 +26,9 @@ package zutil.test; import org.junit.Test; import zutil.StringUtil; +import java.util.Arrays; +import java.util.Collection; + import static org.junit.Assert.assertEquals; public class StringUtilTest { @@ -90,4 +93,12 @@ public class StringUtilTest { "024 00 00 00 00 00 00 00 00 '........'", StringUtil.formatBytesToString(data3)); } + + @Test + public void joinTest(){ + assertEquals("", StringUtil.join(Arrays.asList(), ",")); + assertEquals("1,2,3,4,5", StringUtil.join(Arrays.asList(1,2,3,4,5), ",")); + assertEquals("animal,monkey,dog", StringUtil.join(Arrays.asList("animal", "monkey", "dog"), ",")); + assertEquals("12345", StringUtil.join(Arrays.asList(1,2,3,4,5), "")); + } }