Bug 577184 - fix URI for windows systems in Target refs

Change-Id: Ic040aeb62e21431480833e86270cb7512a494a5e
Signed-off-by: Christoph Läubrich <laeubi@laeubi-soft.de>
Reviewed-on: https://git.eclipse.org/r/c/pde/eclipse.pde.ui/+/190949
Tested-by: Vikas Chandra <Vikas.Chandra@in.ibm.com>
Reviewed-by: Vikas Chandra <Vikas.Chandra@in.ibm.com>
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/RemoteTargetHandle.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/RemoteTargetHandle.java
index ef04da5..259af09 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/RemoteTargetHandle.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/RemoteTargetHandle.java
@@ -38,6 +38,8 @@
 		UNKNWON, EXISTS, NOT_FOUND, FAILED;
 	}
 
+	private static final String FILE_SCHEMA = "file:"; //$NON-NLS-1$
+
 	private static final Map<URI, RemoteTargetHandle> REMOTE_HANDLES = new ConcurrentHashMap<>();
 	/**
 	 * URI scheme for local targets
@@ -110,7 +112,7 @@
 		Objects.requireNonNull(uri);
 		try {
 			IStringVariableManager manager = VariablesPlugin.getDefault().getStringVariableManager();
-			URI resolvedUri = new URI(manager.performStringSubstitution(uri));
+			URI resolvedUri = new URI(convertRawToUri(manager.performStringSubstitution(uri)));
 			RemoteTargetHandle handle = REMOTE_HANDLES.computeIfAbsent(resolvedUri, RemoteTargetHandle::new);
 			synchronized (handle) {
 				if (handle.state != RemoteState.EXISTS) {
@@ -125,4 +127,15 @@
 		}
 	}
 
+	static String convertRawToUri(String resolvePath) {
+		// We need to convert windows path separators here...
+		resolvePath = resolvePath.replace('\\', '/');
+		String lc = resolvePath.toLowerCase();
+		if (lc.startsWith(FILE_SCHEMA) && lc.charAt(FILE_SCHEMA.length()) != '/') {
+			// according to rfc a file URI must always start with a slash
+			resolvePath = FILE_SCHEMA + '/' + resolvePath.substring(FILE_SCHEMA.length());
+		}
+		return resolvePath;
+	}
+
 }