Repository: incubator-brooklyn
Updated Branches:
  refs/heads/master c9445a286 -> cfa0aa3cd


Adds BrooklynClassLoadingContext.getResources(String)

As ClassLoader.getResources but returning an Iterable<URL> rather than
an Enumeration<URL>.


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/7a3a1f8c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/7a3a1f8c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/7a3a1f8c

Branch: refs/heads/master
Commit: 7a3a1f8cd225b2aaf995d9f501185de28d5a39dd
Parents: 9595ddc
Author: Sam Corbett <[email protected]>
Authored: Tue May 5 17:12:56 2015 +0100
Committer: Sam Corbett <[email protected]>
Committed: Mon Jun 1 10:39:55 2015 +0100

----------------------------------------------------------------------
 .../BrooklynClassLoadingContext.java            | 14 +++++++----
 .../BrooklynClassLoadingContextSequential.java  | 15 +++++++++++-
 .../JavaBrooklynClassLoadingContext.java        | 15 +++++++++++-
 .../OsgiBrooklynClassLoadingContext.java        | 14 ++++++++++-
 .../brooklyn/management/ha/OsgiManager.java     | 25 ++++++++++++++++++++
 5 files changed, 76 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/7a3a1f8c/api/src/main/java/brooklyn/management/classloading/BrooklynClassLoadingContext.java
----------------------------------------------------------------------
diff --git 
a/api/src/main/java/brooklyn/management/classloading/BrooklynClassLoadingContext.java
 
b/api/src/main/java/brooklyn/management/classloading/BrooklynClassLoadingContext.java
index 2e79f57..cf4c320 100644
--- 
a/api/src/main/java/brooklyn/management/classloading/BrooklynClassLoadingContext.java
+++ 
b/api/src/main/java/brooklyn/management/classloading/BrooklynClassLoadingContext.java
@@ -34,11 +34,17 @@ public interface BrooklynClassLoadingContext {
     public ManagementContext getManagementContext();
     public Class<?> loadClass(String className);
     public <T> Class<? extends T> loadClass(String className, @Nullable 
Class<T> supertype);
-    
+
     public Maybe<Class<?>> tryLoadClass(String className);
     public <T> Maybe<Class<? extends T>> tryLoadClass(String className, 
@Nullable Class<T> supertype);
-    
-    /** as {@link ClassLoader#getResource(String)} */
+
+    /** As {@link ClassLoader#getResource(String)} */
     public URL getResource(String name);
-    
+
+    /**
+     * As {@link ClassLoader#getResources(String)} but returning an {@link 
Iterable} rather than
+     * an {@link java.util.Enumeration}.
+     */
+    public Iterable<URL> getResources(String name);
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/7a3a1f8c/core/src/main/java/brooklyn/management/classloading/BrooklynClassLoadingContextSequential.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/brooklyn/management/classloading/BrooklynClassLoadingContextSequential.java
 
b/core/src/main/java/brooklyn/management/classloading/BrooklynClassLoadingContextSequential.java
index 551168b..e1b43b6 100644
--- 
a/core/src/main/java/brooklyn/management/classloading/BrooklynClassLoadingContextSequential.java
+++ 
b/core/src/main/java/brooklyn/management/classloading/BrooklynClassLoadingContextSequential.java
@@ -32,6 +32,8 @@ import brooklyn.util.exceptions.Exceptions;
 import brooklyn.util.guava.Maybe;
 
 import com.google.common.base.Objects;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
 
 public final class BrooklynClassLoadingContextSequential extends 
AbstractBrooklynClassLoadingContext {
 
@@ -86,7 +88,6 @@ public final class BrooklynClassLoadingContextSequential 
extends AbstractBrookly
         return Maybe.absent(Exceptions.create("Unable to load "+className+" 
from "+primaries, errors));
     }
 
-
     @Override
     public URL getResource(String resourceInThatDir) {
         for (BrooklynClassLoadingContext target: primaries) {
@@ -101,6 +102,18 @@ public final class BrooklynClassLoadingContextSequential 
extends AbstractBrookly
     }
 
     @Override
+    public Iterable<URL> getResources(String name) {
+        List<Iterable<URL>> resources = Lists.newArrayList();
+        for (BrooklynClassLoadingContext target : primaries) {
+            resources.add(target.getResources(name));
+        }
+        for (BrooklynClassLoadingContext target : secondaries) {
+            resources.add(target.getResources(name));
+        }
+        return Iterables.concat(resources);
+    }
+
+    @Override
     public String toString() {
         return "classload:"+primaries+";"+secondaries;
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/7a3a1f8c/core/src/main/java/brooklyn/management/classloading/JavaBrooklynClassLoadingContext.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/brooklyn/management/classloading/JavaBrooklynClassLoadingContext.java
 
b/core/src/main/java/brooklyn/management/classloading/JavaBrooklynClassLoadingContext.java
index ebc2329..7365596 100644
--- 
a/core/src/main/java/brooklyn/management/classloading/JavaBrooklynClassLoadingContext.java
+++ 
b/core/src/main/java/brooklyn/management/classloading/JavaBrooklynClassLoadingContext.java
@@ -21,7 +21,10 @@ package brooklyn.management.classloading;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkState;
 
+import java.io.IOException;
 import java.net.URL;
+import java.util.Collections;
+import java.util.Enumeration;
 
 import brooklyn.management.ManagementContext;
 import brooklyn.util.exceptions.Exceptions;
@@ -105,5 +108,15 @@ public class JavaBrooklynClassLoadingContext extends 
AbstractBrooklynClassLoadin
     public URL getResource(String name) {
         return getClassLoader().getResource(name);
     }
-    
+
+    @Override
+    public Iterable<URL> getResources(String name) {
+        Enumeration<URL> resources;
+        try {
+            resources = getClassLoader().getResources(name);
+        } catch (IOException e) {
+            throw Exceptions.propagate(e);
+        }
+        return Collections.list(resources);
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/7a3a1f8c/core/src/main/java/brooklyn/management/classloading/OsgiBrooklynClassLoadingContext.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/brooklyn/management/classloading/OsgiBrooklynClassLoadingContext.java
 
b/core/src/main/java/brooklyn/management/classloading/OsgiBrooklynClassLoadingContext.java
index 12c1a54..91e692f 100644
--- 
a/core/src/main/java/brooklyn/management/classloading/OsgiBrooklynClassLoadingContext.java
+++ 
b/core/src/main/java/brooklyn/management/classloading/OsgiBrooklynClassLoadingContext.java
@@ -20,6 +20,7 @@ package brooklyn.management.classloading;
 
 import java.net.URL;
 import java.util.Collection;
+import java.util.Collections;
 
 import brooklyn.catalog.CatalogItem;
 import brooklyn.catalog.CatalogItem.CatalogBundle;
@@ -114,7 +115,18 @@ public class OsgiBrooklynClassLoadingContext extends 
AbstractBrooklynClassLoadin
         }
         return null;
     }
-    
+
+    @Override
+    public Iterable<URL> getResources(String name) {
+        if (mgmt != null) {
+            Maybe<OsgiManager> osgi = ((ManagementContextInternal) 
mgmt).getOsgiManager();
+            if (osgi.isPresent() && hasBundles) {
+                return osgi.get().getResources(name, getBundles());
+            }
+        }
+        return Collections.emptyList();
+    }
+
     public String getCatalogItemId() {
         return catalogItemId;
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/7a3a1f8c/core/src/main/java/brooklyn/management/ha/OsgiManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/management/ha/OsgiManager.java 
b/core/src/main/java/brooklyn/management/ha/OsgiManager.java
index 6444439..f3c050c 100644
--- a/core/src/main/java/brooklyn/management/ha/OsgiManager.java
+++ b/core/src/main/java/brooklyn/management/ha/OsgiManager.java
@@ -21,6 +21,8 @@ package brooklyn.management.ha;
 import java.io.File;
 import java.net.URL;
 import java.util.Arrays;
+import java.util.Collections;
+import java.util.Enumeration;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -53,6 +55,7 @@ import brooklyn.util.time.Duration;
 
 import com.google.common.base.Throwables;
 import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
 
 public class OsgiManager {
 
@@ -263,6 +266,9 @@ public class OsgiManager {
         return bundleFinder.find();
     }
 
+    /**
+     * Iterates through catalogBundles until one contains a resource with the 
given name.
+     */
     public URL getResource(String name, Iterable<CatalogBundle> 
catalogBundles) {
         for (CatalogBundle catalogBundle: catalogBundles) {
             try {
@@ -278,6 +284,25 @@ public class OsgiManager {
         return null;
     }
 
+    /**
+     * @return An iterable of all resources matching name in catalogBundles.
+     */
+    public Iterable<URL> getResources(String name, Iterable<CatalogBundle> 
catalogBundles) {
+        List<URL> resources = Lists.newArrayList();
+        for (CatalogBundle catalogBundle : catalogBundles) {
+            try {
+                Maybe<Bundle> bundle = findBundle(catalogBundle);
+                if (bundle.isPresent()) {
+                    Enumeration<URL> result = bundle.get().getResources(name);
+                    resources.addAll(Collections.list(result));
+                }
+            } catch (Exception e) {
+                Exceptions.propagateIfFatal(e);
+            }
+        }
+        return resources;
+    }
+
     public Framework getFramework() {
         return framework;
     }

Reply via email to