11package org .eclipse .emf .util ;
22
3+ import java .io .File ;
4+ import java .util .ArrayList ;
5+ import java .util .List ;
6+
37import org .eclipse .core .resources .IResource ;
48import org .eclipse .core .resources .ResourcesPlugin ;
59import org .eclipse .emf .common .util .URI ;
@@ -23,9 +27,38 @@ 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 = findPlatformResources (fileURI );
33+ if (!candidates .isEmpty ()) {
34+ return candidates .get (0 );
35+ }
2836 }
37+ return null ;
2938 }
3039
31- }
40+ /**
41+ * returns a list of (existing) 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
44+ * file uri
45+ */
46+ public static List <IResource > findPlatformResources (java .net .URI fileURI ) {
47+ List <IResource > result = new ArrayList <>();
48+ File file = new File (fileURI .getRawPath ());// remove potential fragment
49+ if (file .exists ()) {
50+ IResource [] candidates = null ;
51+ if (file .isDirectory ()) {
52+ candidates = ResourcesPlugin .getWorkspace ().getRoot ().findContainersForLocationURI (fileURI );
53+ } else if (file .isFile ()) {
54+ candidates = ResourcesPlugin .getWorkspace ().getRoot ().findFilesForLocationURI (fileURI );
55+ }
56+ for (IResource candidate : candidates ) {
57+ if (candidate .exists ()) {
58+ result .add (candidate );
59+ }
60+ }
61+ }
62+ return result ;
63+ }
64+ }
0 commit comments