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,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