You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2021/04/15 10:13:17 UTC

[brooklyn-server] 02/03: add convenience for ResourceUtils using a registered type, and add api, and make sure it's used for api

This is an automated email from the ASF dual-hosted git repository.

heneveld pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git

commit 956ad1552407295cbf4985327567b844fe4d5fe0
Author: Alex Heneveld <al...@cloudsoftcorp.com>
AuthorDate: Thu Apr 15 11:02:05 2021 +0100

    add convenience for ResourceUtils using a registered type, and add api, and make sure it's used for api
---
 .../brooklyn/core/mgmt/internal/AbstractManagementContext.java | 10 +++++++---
 .../main/java/org/apache/brooklyn/util/core/ResourceUtils.java |  6 ++++++
 .../java/org/apache/brooklyn/rest/resources/TypeResource.java  |  2 +-
 .../brooklyn/rest/resources/BundleAndTypeResourcesTest.java    | 10 +++++++++-
 4 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/AbstractManagementContext.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/AbstractManagementContext.java
index 8de2dce..be1f97c 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/AbstractManagementContext.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/AbstractManagementContext.java
@@ -19,6 +19,7 @@
 package org.apache.brooklyn.core.mgmt.internal;
 
 import static com.google.common.base.Preconditions.checkNotNull;
+import org.apache.brooklyn.api.typereg.OsgiBundleWithUrl;
 import static org.apache.brooklyn.core.catalog.internal.CatalogUtils.newClassLoadingContextForCatalogItems;
 
 import java.lang.reflect.InvocationTargetException;
@@ -126,10 +127,13 @@ public abstract class AbstractManagementContext implements ManagementContextInte
                     return apply(internal.getManagementSupport());
                 }
                 
-                if (input instanceof EntityManagementSupport)
-                    return apply(((EntityManagementSupport)input).getManagementContext());
-                if (input instanceof ManagementContext)
+                if (input instanceof EntityManagementSupport) {
+                    return apply(((EntityManagementSupport) input).getManagementContext());
+                }
+
+                if (input instanceof ManagementContext) {
                     return JavaBrooklynClassLoadingContext.create((ManagementContext) input);
+                }
                 return null;
             }
         });
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/ResourceUtils.java b/core/src/main/java/org/apache/brooklyn/util/core/ResourceUtils.java
index 4d76cc4..cea3ba8 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/ResourceUtils.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/ResourceUtils.java
@@ -38,10 +38,12 @@ import javax.annotation.Nullable;
 
 import org.apache.brooklyn.api.mgmt.ManagementContext;
 import org.apache.brooklyn.api.mgmt.classloading.BrooklynClassLoadingContext;
+import org.apache.brooklyn.api.typereg.RegisteredType;
 import org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog.BrooklynLoaderTracker;
 import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
 import org.apache.brooklyn.core.internal.BrooklynInitialization;
 import org.apache.brooklyn.core.mgmt.classloading.JavaBrooklynClassLoadingContext;
+import org.apache.brooklyn.core.mgmt.classloading.OsgiBrooklynClassLoadingContext;
 import org.apache.brooklyn.location.ssh.SshMachineLocation;
 import org.apache.brooklyn.util.collections.MutableMap;
 import org.apache.brooklyn.util.core.text.DataUriSchemeParser;
@@ -135,6 +137,10 @@ public class ResourceUtils {
         return new ResourceUtils(contextObject);
     }
 
+    public static final ResourceUtils create(RegisteredType type, ManagementContext mgmt) {
+        return create(new OsgiBrooklynClassLoadingContext(mgmt, type.getId(), type.getLibraries()));
+    }
+
     /**
      * Creates a {@link ResourceUtils} object with itself as the context.
      *
diff --git a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/TypeResource.java b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/TypeResource.java
index 5a3ce2f..fbd717b 100644
--- a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/TypeResource.java
+++ b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/TypeResource.java
@@ -181,7 +181,7 @@ public class TypeResource extends AbstractBrooklynRestResource implements TypeAp
             
             MediaType mime = WebResourceUtils.getImageMediaTypeFromExtension(Files.getFileExtension(url));
             try {
-                Object content = ResourceUtils.create(CatalogUtils.newClassLoadingContext(mgmt, result)).getResourceFromUrl(url);
+                Object content = ResourceUtils.create(result, mgmt).getResourceFromUrl(url);
                 return Response.ok(content, mime).build();
             } catch (Exception e) {
                 Exceptions.propagateIfFatal(e);
diff --git a/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/resources/BundleAndTypeResourcesTest.java b/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/resources/BundleAndTypeResourcesTest.java
index de93001..c093579 100644
--- a/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/resources/BundleAndTypeResourcesTest.java
+++ b/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/resources/BundleAndTypeResourcesTest.java
@@ -19,6 +19,8 @@
 package org.apache.brooklyn.rest.resources;
 
 import static com.google.common.base.Preconditions.checkNotNull;
+import static groovy.ui.Console.ICON_PATH;
+import static org.apache.brooklyn.util.osgi.OsgiTestResources.BROOKLYN_TEST_OSGI_ENTITIES_COM_EXAMPLE_ICON_PATH;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertTrue;
 
@@ -762,7 +764,7 @@ public class BundleAndTypeResourcesTest extends BrooklynRestResourceTest {
         final String version = OsgiTestResources.BROOKLYN_TEST_OSGI_ENTITIES_COM_EXAMPLE_VERSION;
         final String bundleUrl = OsgiTestResources.BROOKLYN_TEST_OSGI_ENTITIES_COM_EXAMPLE_URL;
         final String entityType = OsgiTestResources.BROOKLYN_TEST_OSGI_ENTITIES_COM_EXAMPLE_ENTITY;
-        final String iconPath = OsgiTestResources.BROOKLYN_TEST_OSGI_ENTITIES_COM_EXAMPLE_ICON_PATH;
+        final String iconPath = BROOKLYN_TEST_OSGI_ENTITIES_COM_EXAMPLE_ICON_PATH;
         BundleMaker bm = new BundleMaker(manager);
         File f = Os.newTempFile("osgi", "jar");
         Files.copyFile(ResourceUtils.create(this).getResourceFromUrl(bundleUrl), f);
@@ -805,6 +807,9 @@ public class BundleAndTypeResourcesTest extends BrooklynRestResourceTest {
         OsgiBundleWithUrl lib = Iterables.getOnlyElement(libs);
         Assert.assertNull(lib.getUrl());
 
+        // check we can find it with ResourceUtils
+        ResourceUtils.create(item, getManagementContext()).checkUrlExists("classpath://"+BROOKLYN_TEST_OSGI_ENTITIES_COM_EXAMPLE_ICON_PATH);
+
         assertEquals(lib.getSymbolicName(), symbolicName);
         assertEquals(lib.getSuppliedVersionString(), version);
 
@@ -826,6 +831,9 @@ public class BundleAndTypeResourcesTest extends BrooklynRestResourceTest {
         byte[] iconData = client().path("/catalog/types/" + symbolicName + "/" + version + "/icon").get(byte[].class);
         assertEquals(iconData.length, 43);
 
+        iconData = client().path("/catalog/bundles/"+symbolicName+"/"+version + "/types/"+symbolicName+"/"+version + "/icon").get(byte[].class);
+        assertEquals(iconData.length, 43);
+
         // Check that the catalog item is useable (i.e. can deploy the entity)
         String appYaml = Joiner.on("\n").join(
                 "services:",