From 676473ac1f365f5b9b2dc5fd03c3536b116fc149 Mon Sep 17 00:00:00 2001
From: Peter Gottinger <peter@pgotinger.de>
Date: Sat, 14 Feb 2015 14:59:03 +0100
Subject: [PATCH] Enable baseDir configuration property to contain a Windows
 path

---
 .../saga/core/util/UriUtil.java               | 21 ++++++++----
 .../saga/core/util/UriUtilTest.java           | 33 +++++++++++--------
 2 files changed, 35 insertions(+), 19 deletions(-)

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<String> getSegment(final URI uri, final int index) {
             return Optional.absent();
         }
 
-        final Iterable<String> parts = Splitter.on('/').
-                omitEmptyStrings().
-                trimResults().
-                split(path);
+        final Iterable<String> 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.<String>absent()));
+        assertThat(getLastSegment(HTTP_URI), equalTo(Optional.<String> absent()));
         assertThat(getLastSegment(HTTP_WITH_PATH_URI), equalTo(Optional.of("here")));
-        assertThat(getLastSegment(HTTPS_URI), equalTo(Optional.<String>absent()));
+        assertThat(getLastSegment(HTTPS_URI), equalTo(Optional.<String> 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"));
+    }
+
 }