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 <[email protected]> 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:",
