Skip to content

Commit c7692dd

Browse files
committed
find platform resources for file URI
1 parent ae9c994 commit c7692dd

File tree

1 file changed

+35
-3
lines changed

1 file changed

+35
-3
lines changed

org.eclipse.emf.util/src/org/eclipse/emf/util/ResourceUtils.java

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package org.eclipse.emf.util;
22

3+
import java.io.File;
4+
import java.util.ArrayList;
5+
import java.util.List;
6+
37
import org.eclipse.core.resources.IResource;
48
import org.eclipse.core.resources.ResourcesPlugin;
59
import org.eclipse.emf.common.util.URI;
@@ -23,9 +27,37 @@ public static IResource convertEResourceToPlatformResource(Resource eResource) {
2327
public static IResource findPlatformResource(URI uri) {
2428
if (uri.isPlatformResource()) {
2529
return ResourcesPlugin.getWorkspace().getRoot().findMember(uri.toPlatformString(true));
26-
} else {
27-
return null;
30+
} else if (uri.isFile()){
31+
java.net.URI fileURI = java.net.URI.create(uri.toString());
32+
List<IResource> candidates = findPlatformResource(fileURI);
33+
if(!candidates.isEmpty()) {
34+
return candidates.get(0);
35+
}
2836
}
37+
return null;
2938
}
3039

31-
}
40+
/**
41+
* returns a list of platform resource for the given file uri
42+
*
43+
* returns an empty list if no such resource exists or if the given URI is not a file uri
44+
* */
45+
public static List<IResource> findPlatformResource(java.net.URI fileURI) {
46+
List<IResource> result=new ArrayList<>();
47+
File file = new File(fileURI.getRawPath());//remove potential fragment
48+
if(file.exists()) {
49+
IResource[] candidates=null;
50+
if(file.isDirectory()) {
51+
candidates = ResourcesPlugin.getWorkspace().getRoot().findContainersForLocationURI(fileURI);
52+
}else if(file.isFile()) {
53+
candidates = ResourcesPlugin.getWorkspace().getRoot().findFilesForLocationURI(fileURI);
54+
}
55+
for (IResource candidate : candidates) {
56+
if(candidate.exists()) {
57+
result.add(candidate);
58+
}
59+
}
60+
}
61+
return result;
62+
}
63+
}

0 commit comments

Comments
 (0)