You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by zr...@apache.org on 2018/10/06 11:01:01 UTC

[camel] 02/03: Additional URISupport methods

This is an automated email from the ASF dual-hosted git repository.

zregvart pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit a4a79f912406c626793fe415dd710f58177eb977
Author: Zoran Regvart <zr...@apache.org>
AuthorDate: Sat Oct 6 12:58:56 2018 +0200

    Additional URISupport methods
    
    This adds `stripSuffix` and `joinPaths` methods to URISupport, seemingly
    also a common pattern of utility methods that we can take advantage of
    doing only once.
    
    Also refactors `stripPrefix` for additional `null` safety in case
    `prefix` is `null`.
---
 .../java/org/apache/camel/util/URISupport.java     | 60 +++++++++++++++++++++-
 .../java/org/apache/camel/util/URISupportTest.java | 45 ++++++++++++++++
 2 files changed, 104 insertions(+), 1 deletion(-)

diff --git a/camel-core/src/main/java/org/apache/camel/util/URISupport.java b/camel-core/src/main/java/org/apache/camel/util/URISupport.java
index 3d4bd42..96f2cfa 100644
--- a/camel-core/src/main/java/org/apache/camel/util/URISupport.java
+++ b/camel-core/src/main/java/org/apache/camel/util/URISupport.java
@@ -408,9 +408,35 @@ public final class URISupport {
      * @return the value without the prefix
      */
     public static String stripPrefix(String value, String prefix) {
-        if (value != null && value.startsWith(prefix)) {
+        if (value == null || prefix == null) {
+            return value;
+        }
+
+        if (value.startsWith(prefix)) {
             return value.substring(prefix.length());
         }
+
+        return value;
+    }
+
+    /**
+     * Strips the suffix from the value.
+     * <p/>
+     * Returns the value as-is if not ending with the prefix.
+     *
+     * @param value the value
+     * @param suffix the suffix to remove from value
+     * @return the value without the suffix
+     */
+    public static String stripSuffix(final String value, final String suffix) {
+        if (value == null || suffix == null) {
+            return value;
+        }
+
+        if (value.endsWith(suffix)) {
+            return value.substring(0, value.length() - suffix.length());
+        }
+
         return value;
     }
 
@@ -632,4 +658,36 @@ public final class URISupport {
 
         return pathAndQuery;
     }
+
+    public static String joinPaths(final String... paths) {
+        if (paths == null || paths.length == 0) {
+            return "";
+        }
+
+        final StringBuilder joined = new StringBuilder();
+
+        boolean addedLast = false;
+        for (int i = paths.length -1 ; i >= 0 ; i--) {
+            String path = paths[i];
+            if (ObjectHelper.isNotEmpty(path)) {
+                if (addedLast) {
+                    path = stripSuffix(path, "/");
+                }
+
+                addedLast = true;
+
+                if (path.charAt(0) == '/') {
+                    joined.insert(0, path);
+                } else {
+                    if (i > 0) {
+                        joined.insert(0, '/').insert(1, path);
+                    } else {
+                        joined.insert(0, path);
+                    }
+                }
+            }
+        }
+
+        return joined.toString();
+    }
 }
diff --git a/camel-core/src/test/java/org/apache/camel/util/URISupportTest.java b/camel-core/src/test/java/org/apache/camel/util/URISupportTest.java
index f9a642a..11bf67f 100644
--- a/camel-core/src/test/java/org/apache/camel/util/URISupportTest.java
+++ b/camel-core/src/test/java/org/apache/camel/util/URISupportTest.java
@@ -23,6 +23,7 @@ import java.util.LinkedHashMap;
 import java.util.Map;
 
 import org.apache.camel.ContextTestSupport;
+import org.assertj.core.api.Assertions;
 import org.junit.Test;
 
 /**
@@ -376,4 +377,48 @@ public class URISupportTest extends ContextTestSupport {
         assertEquals("/path/", URISupport.pathAndQueryOf(URI.create("http://localhost:80/path/")));
         assertEquals("/path?query=value", URISupport.pathAndQueryOf(URI.create("http://localhost:80/path?query=value")));
     }
+
+    @Test
+    public void shouldStripPrefixes() {
+        Assertions.assertThat(URISupport.stripPrefix(null, null)).isNull();
+        Assertions.assertThat(URISupport.stripPrefix("", null)).isEmpty();
+        Assertions.assertThat(URISupport.stripPrefix(null, "")).isNull();
+        Assertions.assertThat(URISupport.stripPrefix("", "")).isEmpty();
+        Assertions.assertThat(URISupport.stripPrefix("a", "b")).isEqualTo("a");
+        Assertions.assertThat(URISupport.stripPrefix("a", "a")).isEmpty();
+        Assertions.assertThat(URISupport.stripPrefix("ab", "b")).isEqualTo("ab");
+        Assertions.assertThat(URISupport.stripPrefix("a", "ab")).isEqualTo("a");
+    }
+
+    @Test
+    public void shouldStripSuffixes() {
+        Assertions.assertThat(URISupport.stripSuffix(null, null)).isNull();
+        Assertions.assertThat(URISupport.stripSuffix("", null)).isEmpty();
+        Assertions.assertThat(URISupport.stripSuffix(null, "")).isNull();
+        Assertions.assertThat(URISupport.stripSuffix("", "")).isEmpty();
+        Assertions.assertThat(URISupport.stripSuffix("a", "b")).isEqualTo("a");
+        Assertions.assertThat(URISupport.stripSuffix("a", "a")).isEmpty();
+        Assertions.assertThat(URISupport.stripSuffix("ab", "b")).isEqualTo("a");
+        Assertions.assertThat(URISupport.stripSuffix("a", "ab")).isEqualTo("a");
+    }
+
+    @Test
+    public void shouldJoinPaths() {
+        Assertions.assertThat(URISupport.joinPaths(null, null)).isEmpty();
+        Assertions.assertThat(URISupport.joinPaths("", null)).isEmpty();
+        Assertions.assertThat(URISupport.joinPaths(null, "")).isEmpty();
+        Assertions.assertThat(URISupport.joinPaths("", "")).isEmpty();
+        Assertions.assertThat(URISupport.joinPaths("a", "")).isEqualTo("a");
+        Assertions.assertThat(URISupport.joinPaths("a", "b")).isEqualTo("a/b");
+        Assertions.assertThat(URISupport.joinPaths("/a", "b")).isEqualTo("/a/b");
+        Assertions.assertThat(URISupport.joinPaths("/a", "b/")).isEqualTo("/a/b/");
+        Assertions.assertThat(URISupport.joinPaths("/a/", "b/")).isEqualTo("/a/b/");
+        Assertions.assertThat(URISupport.joinPaths("/a/", "/b/")).isEqualTo("/a/b/");
+        Assertions.assertThat(URISupport.joinPaths("a", "b", "c")).isEqualTo("a/b/c");
+        Assertions.assertThat(URISupport.joinPaths("a", null, "c")).isEqualTo("a/c");
+        Assertions.assertThat(URISupport.joinPaths("/a/", "/b", "c/", "/d/")).isEqualTo("/a/b/c/d/");
+        Assertions.assertThat(URISupport.joinPaths("/a/", "/b", "c/", null)).isEqualTo("/a/b/c/");
+        Assertions.assertThat(URISupport.joinPaths("/a/", null, null, null)).isEqualTo("/a/");
+        Assertions.assertThat(URISupport.joinPaths("a/", "/b", null, null)).isEqualTo("a/b");
+    }
 }
\ No newline at end of file