+ public static Resource getParent(Resource res) {\r
+ try {\r
+ if (res.getURL().getPath().equals("/"))\r
+ return null;\r
+\r
+ String urlStr = res.getURL().toString();\r
+ if (urlStr.charAt(urlStr.length() - 1) == '/')\r
+ urlStr = urlStr.substring(0, urlStr.length() - 2);\r
+\r
+ String parentUrlStr = urlStr.substring(0, urlStr.lastIndexOf('/')) + '/';\r
+ URI uri = new URI(parentUrlStr).normalize();\r
+ return new DefaultResourceLoader(Thread.currentThread()\r
+ .getContextClassLoader()).getResource(uri.toString());\r
+ } catch (Exception e) {\r
+ throw new SlcException("Cannot get parent for resource " + res, e);\r
+ }\r
+ }\r
+\r
+ public static String extractRelativePath(Resource ancestor, Resource child) {\r
+ try {\r
+\r
+ return ancestor.getURI().relativize(child.getURI()).normalize()\r
+ .toString();\r
+ } catch (IOException e) {\r
+ throw new SlcException("Cannot extract relative path of " + child\r
+ + " based on " + ancestor, e);\r
+ }\r
+ }\r
+\r