package org.argeo.slc.spring;\r
\r
import java.io.IOException;\r
+import java.net.URI;\r
import java.util.Map;\r
\r
import org.apache.commons.logging.Log;\r
import org.apache.commons.logging.LogFactory;\r
import org.argeo.slc.core.SlcException;\r
+import org.springframework.beans.factory.BeanFactoryUtils;\r
import org.springframework.beans.factory.ListableBeanFactory;\r
import org.springframework.core.io.DefaultResourceLoader;\r
import org.springframework.core.io.Resource;\r
\r
public static <T> T loadSingleFromContext(ListableBeanFactory context,\r
Class<T> clss) {\r
- Map<String, T> beans = context.getBeansOfType(clss);\r
+ // Map<String, T> beans = context.getBeansOfType(clss);\r
+ Map<String, T> beans = BeanFactoryUtils.beansOfTypeIncludingAncestors(\r
+ context, clss, false, false);\r
if (beans.size() == 1) {\r
return beans.values().iterator().next();\r
+ } else if (beans.size() > 1) {\r
+ if (log.isDebugEnabled()) {\r
+ log\r
+ .debug(("Found more that on bean for type " + clss\r
+ + ": " + beans.keySet()));\r
+ }\r
+ return null;\r
} else {\r
return null;\r
}\r
try {\r
if (res.getURL().getPath().equals("/"))\r
return null;\r
- \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
+ String parentUrlStr = urlStr.substring(0, urlStr.lastIndexOf('/')) + '/';\r
+ URI uri = new URI(parentUrlStr).normalize();\r
return new DefaultResourceLoader(Thread.currentThread()\r
- .getContextClassLoader()).getResource(parentUrlStr + '/');\r
- } catch (IOException e) {\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()).toString();\r
- } catch (IOException e) {\r
+\r
+ return ancestor.getURL().toURI().relativize(child.getURL().toURI())\r
+ .normalize().toString();\r
+ } catch (Exception e) {\r
throw new SlcException("Cannot extract relative path of " + child\r
+ " based on " + ancestor, e);\r
}\r