diff --git a/saga-core/src/main/java/com/github/timurstrekalov/saga/core/util/UriUtil.java b/saga-core/src/main/java/com/github/timurstrekalov/saga/core/util/UriUtil.java index 103969b..7e98545 100644 --- a/saga-core/src/main/java/com/github/timurstrekalov/saga/core/util/UriUtil.java +++ b/saga-core/src/main/java/com/github/timurstrekalov/saga/core/util/UriUtil.java @@ -5,11 +5,12 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.apache.commons.lang.StringUtils; + import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.base.Splitter; import com.google.common.collect.Iterables; -import org.apache.commons.lang.StringUtils; public final class UriUtil { @@ -20,7 +21,7 @@ private UriUtil() { } public static URI toUri(final String s) { - final URI uri = URI.create(s); + URI uri = createURI(s); if (uri.getScheme() != null) { final Matcher matcher = supportedUriSchemeRe.matcher(uri.getScheme()); @@ -31,6 +32,17 @@ public static URI toUri(final String s) { return new File(s).toURI().normalize(); } + private static URI createURI(final String s) { + URI uri; + if (s.contains("\\")) { + // Windows path + uri = URI.create("file:/" + s.replace("\\", "/")); + } else { + uri = URI.create(s); + } + return uri; + } + public static boolean isFileUri(final URI uri) { return "file".equals(uri.getScheme()); } @@ -46,10 +58,7 @@ private static Optional getSegment(final URI uri, final int index) { return Optional.absent(); } - final Iterable parts = Splitter.on('/'). - omitEmptyStrings(). - trimResults(). - split(path); + final Iterable parts = Splitter.on('/').omitEmptyStrings().trimResults().split(path); final int size = Iterables.size(parts); final int actualIndex = index < 0 ? size + index : index; diff --git a/saga-core/src/test/java/com/github/timurstrekalov/saga/core/util/UriUtilTest.java b/saga-core/src/test/java/com/github/timurstrekalov/saga/core/util/UriUtilTest.java index 669329e..d3a961d 100644 --- a/saga-core/src/test/java/com/github/timurstrekalov/saga/core/util/UriUtilTest.java +++ b/saga-core/src/test/java/com/github/timurstrekalov/saga/core/util/UriUtilTest.java @@ -1,12 +1,5 @@ package com.github.timurstrekalov.saga.core.util; -import java.io.File; -import java.net.URI; - -import com.google.common.base.Joiner; -import com.google.common.base.Optional; -import org.junit.Test; - import static com.github.timurstrekalov.saga.core.util.UriUtil.getLastSegment; import static com.github.timurstrekalov.saga.core.util.UriUtil.getParent; import static com.github.timurstrekalov.saga.core.util.UriUtil.getPath; @@ -17,6 +10,14 @@ import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; +import java.io.File; +import java.net.URI; + +import org.junit.Test; + +import com.google.common.base.Joiner; +import com.google.common.base.Optional; + public class UriUtilTest { private static final String PWD = System.getProperty("user.dir"); @@ -50,8 +51,8 @@ public void test_toUri_https() throws Exception { @Test public void test_toUri_file_absolute() throws Exception { - assertThat(new File(FILE_ABS_URI).getAbsolutePath(), - equalTo(new File(create("file:" + FILE_ABS.replace('\\', '/'))).getAbsolutePath())); + assertThat(new File(FILE_ABS_URI).getAbsolutePath(), + equalTo(new File(create("file:" + FILE_ABS.replace('\\', '/'))).getAbsolutePath())); } @Test @@ -75,9 +76,9 @@ public void test_isFileUri() throws Exception { @Test public void test_getLastSegment() throws Exception { - assertThat(getLastSegment(HTTP_URI), equalTo(Optional.absent())); + assertThat(getLastSegment(HTTP_URI), equalTo(Optional. absent())); assertThat(getLastSegment(HTTP_WITH_PATH_URI), equalTo(Optional.of("here"))); - assertThat(getLastSegment(HTTPS_URI), equalTo(Optional.absent())); + assertThat(getLastSegment(HTTPS_URI), equalTo(Optional. absent())); assertThat(getLastSegment(FILE_ABS_URI), equalTo(Optional.of("asd"))); assertThat(getLastSegment(FILE_REL_URI), equalTo(Optional.of("qweasd"))); @@ -96,8 +97,8 @@ public void test_getParent() throws Exception { assertThat(getParent(create("http://localhost:8080/")), equalTo("/")); assertThat(getParent(HTTP_WITH_PATH_URI), equalTo("/some/file")); - assertThat(new File(getParent(FILE_ABS_URI)).getAbsolutePath(), - equalTo(new File(File.separator + "home" + File.separator + "user").getAbsolutePath())); + assertThat(new File(getParent(FILE_ABS_URI)).getAbsolutePath(), + equalTo(new File(File.separator + "home" + File.separator + "user").getAbsolutePath())); assertThat(new File(getParent(FILE_REL_URI)).getAbsolutePath(), equalTo(new File(PWD_PARENT).getAbsolutePath())); } @@ -112,4 +113,10 @@ public void test_getPath_http_uri_with_query() throws Exception { assertThat(getPath(URI.create("http://localhost/Class.js?123")), equalTo("http://localhost/Class.js?123")); } + @Test + public void test_toUri_with_windows_filepath() throws Exception { + URI uri = UriUtil.toUri("c:\\Users\\timur\\workspace\\saga"); + assertThat(uri.toString(), equalTo("file:/c:/Users/timur/workspace/saga")); + } + }