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 2015/11/02 17:42:58 UTC
[1/9] incubator-brooklyn git commit: introduce BrooklynTypeRegistry
and start migrating Catalog to it
Repository: incubator-brooklyn
Updated Branches:
refs/heads/master c0021ca1b -> 48e4fe3ca
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
index e9d22f1..b1044ee 100644
--- a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
+++ b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
@@ -29,11 +29,11 @@ import java.util.concurrent.atomic.AtomicBoolean;
import javax.annotation.Nullable;
-import org.apache.brooklyn.api.catalog.CatalogItem;
import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.entity.EntitySpec;
import org.apache.brooklyn.api.location.Location;
import org.apache.brooklyn.api.mgmt.ManagementContext;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.camp.brooklyn.BrooklynCampConstants;
import org.apache.brooklyn.camp.brooklyn.BrooklynCampReservedKeys;
import org.apache.brooklyn.camp.brooklyn.spi.creation.service.CampServiceSpecResolver;
@@ -145,20 +145,20 @@ public class BrooklynComponentTemplateResolver {
return serviceSpecResolver.accepts(type, loader);
}
- public <T extends Entity> EntitySpec<T> resolveSpec(Set<String> encounteredCatalogTypes) {
+ public <T extends Entity> EntitySpec<T> resolveSpec(Set<String> encounteredRegisteredTypeIds) {
if (alreadyBuilt.getAndSet(true))
throw new IllegalStateException("Spec can only be used once: "+this);
- EntitySpec<?> spec = serviceSpecResolver.resolve(type, loader, encounteredCatalogTypes);
+ EntitySpec<?> spec = serviceSpecResolver.resolve(type, loader, encounteredRegisteredTypeIds);
if (spec == null) {
// Try to provide some troubleshooting details
final String msgDetails;
- CatalogItem<?, ?> item = CatalogUtils.getCatalogItemOptionalVersion(mgmt, Strings.removeFromStart(type, "catalog:"));
+ RegisteredType item = mgmt.getTypeRegistry().get(Strings.removeFromStart(type, "catalog:"), null, null);
String proto = Urls.getProtocol(type);
- if (item != null && encounteredCatalogTypes.contains(item.getSymbolicName())) {
+ if (item != null && encounteredRegisteredTypeIds.contains(item.getSymbolicName())) {
msgDetails = "Cycle between catalog items detected, starting from " + type +
- ". Other catalog items being resolved up the stack are " + encounteredCatalogTypes +
+ ". Other catalog items being resolved up the stack are " + encounteredRegisteredTypeIds +
". Tried loading it as a Java class instead but failed.";
} else if (proto != null) {
msgDetails = "The reference " + type + " looks like a URL (running the CAMP Brooklyn assembly-template instantiator) but the protocol " +
@@ -170,7 +170,7 @@ public class BrooklynComponentTemplateResolver {
throw new IllegalStateException("Unable to create spec for type " + type + ". " + msgDetails);
}
- populateSpec(spec, encounteredCatalogTypes);
+ populateSpec(spec, encounteredRegisteredTypeIds);
@SuppressWarnings("unchecked")
EntitySpec<T> typedSpec = (EntitySpec<T>) spec;
@@ -187,7 +187,7 @@ public class BrooklynComponentTemplateResolver {
}
@SuppressWarnings("unchecked")
- private <T extends Entity> void populateSpec(EntitySpec<T> spec, Set<String> encounteredCatalogTypes) {
+ private <T extends Entity> void populateSpec(EntitySpec<T> spec, Set<String> encounteredRegisteredTypeIds) {
String name, source=null, templateId=null, planId=null;
if (template.isPresent()) {
name = template.get().getName();
@@ -205,9 +205,9 @@ public class BrooklynComponentTemplateResolver {
Iterable<Map<String,?>> children = (Iterable<Map<String,?>>)childrenObj;
for (Map<String,?> childAttrs : children) {
BrooklynComponentTemplateResolver entityResolver = BrooklynComponentTemplateResolver.Factory.newInstance(loader, childAttrs);
- // encounteredCatalogTypes must contain the items currently being loaded (the dependency chain),
- // but not parent items in this catalog item already resolved.
- EntitySpec<? extends Entity> childSpec = entityResolver.resolveSpec(encounteredCatalogTypes);
+ // encounteredRegisteredTypeIds must contain the items currently being loaded (the dependency chain),
+ // but not parent items in this type already resolved.
+ EntitySpec<? extends Entity> childSpec = entityResolver.resolveSpec(encounteredRegisteredTypeIds);
spec.child(childSpec);
}
}
@@ -307,7 +307,7 @@ public class BrooklynComponentTemplateResolver {
/* TODO find a way to make do without loader here?
* it is not very nice having to serialize it; but serialization of BLCL is now relatively clean.
*
- * it is only used to instantiate classes, and now most things should be registered with catalog;
+ * it is only used to instantiate classes, and now most types should be registered;
* the notable exception is when one entity in a bundle is creating another in the same bundle,
* it wants to use his bundle CLC to do that. but we can set up some unique reference to the entity
* which can be used to find it from mgmt, rather than pass the loader.
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynEntityDecorationResolver.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynEntityDecorationResolver.java b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynEntityDecorationResolver.java
index a7a7530..181265d 100644
--- a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynEntityDecorationResolver.java
+++ b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynEntityDecorationResolver.java
@@ -21,8 +21,6 @@ package org.apache.brooklyn.camp.brooklyn.spi.creation;
import java.util.List;
import java.util.Map;
-import org.apache.brooklyn.api.catalog.BrooklynCatalog;
-import org.apache.brooklyn.api.catalog.CatalogItem;
import org.apache.brooklyn.api.entity.EntityInitializer;
import org.apache.brooklyn.api.entity.EntitySpec;
import org.apache.brooklyn.api.mgmt.ManagementContext;
@@ -30,9 +28,10 @@ import org.apache.brooklyn.api.policy.Policy;
import org.apache.brooklyn.api.policy.PolicySpec;
import org.apache.brooklyn.api.sensor.Enricher;
import org.apache.brooklyn.api.sensor.EnricherSpec;
+import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.camp.brooklyn.BrooklynCampReservedKeys;
import org.apache.brooklyn.camp.brooklyn.spi.creation.BrooklynYamlTypeInstantiator.InstantiatorFromKey;
-import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
import org.apache.brooklyn.util.collections.MutableList;
import org.apache.brooklyn.util.core.config.ConfigBag;
@@ -108,29 +107,14 @@ public abstract class BrooklynEntityDecorationResolver<DT> {
String policyType = decoLoader.getTypeName().get();
ManagementContext mgmt = instantiator.loader.getManagementContext();
- BrooklynCatalog catalog = mgmt.getCatalog();
- CatalogItem<Policy, PolicySpec<?>> item = getPolicyCatalogItem(catalog, policyType);
+
+ RegisteredType item = mgmt.getTypeRegistry().get(policyType, BrooklynTypeRegistry.RegisteredTypeKind.SPEC, Policy.class);
PolicySpec<? extends Policy> spec;
- if (item != null) {
- spec = (PolicySpec) catalog.createSpec((CatalogItem) item);
- spec.configure(decoLoader.getConfigMap());
- } else {
- // this pattern of creating a spec could be simplified with a "Configurable" superinterface on *Spec
- spec = PolicySpec.create(decoLoader.getType(Policy.class))
- .configure( decoLoader.getConfigMap() );
- }
+ if (item!=null) spec = mgmt.getTypeRegistry().createSpec(item, PolicySpec.class);
+ else spec = PolicySpec.create(decoLoader.getType(Policy.class));
+ spec.configure( decoLoader.getConfigMap() );
decorations.add(spec);
}
- @SuppressWarnings({ "unchecked", "rawtypes" })
- private CatalogItem<Policy, PolicySpec<?>> getPolicyCatalogItem(BrooklynCatalog catalog, String policyType) {
- if (CatalogUtils.looksLikeVersionedId(policyType)) {
- String id = CatalogUtils.getIdFromVersionedId(policyType);
- String version = CatalogUtils.getVersionFromVersionedId(policyType);
- return (CatalogItem) catalog.getCatalogItem(id, version);
- } else {
- return (CatalogItem) catalog.getCatalogItem(policyType, BrooklynCatalog.DEFAULT_VERSION);
- }
- }
}
public static class EnricherSpecResolver extends BrooklynEntityDecorationResolver<EnricherSpec<?>> {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampToSpecTransformer.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampToSpecTransformer.java b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampToSpecTransformer.java
index ae995e4..cacd201 100644
--- a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampToSpecTransformer.java
+++ b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampToSpecTransformer.java
@@ -18,7 +18,6 @@
*/
package org.apache.brooklyn.camp.brooklyn.spi.creation;
-import java.io.StringReader;
import java.util.Set;
import org.apache.brooklyn.api.catalog.CatalogItem;
@@ -27,6 +26,7 @@ import org.apache.brooklyn.api.entity.EntitySpec;
import org.apache.brooklyn.api.internal.AbstractBrooklynObjectSpec;
import org.apache.brooklyn.api.mgmt.ManagementContext;
import org.apache.brooklyn.camp.CampPlatform;
+import org.apache.brooklyn.camp.brooklyn.BrooklynCampReservedKeys;
import org.apache.brooklyn.camp.brooklyn.api.AssemblyTemplateSpecInstantiator;
import org.apache.brooklyn.camp.spi.AssemblyTemplate;
import org.apache.brooklyn.camp.spi.instantiate.AssemblyTemplateInstantiator;
@@ -59,7 +59,7 @@ public class CampToSpecTransformer implements PlanToSpecTransformer {
@Override
public EntitySpec<? extends Application> createApplicationSpec(String plan) {
try {
- CampPlatform camp = CampCatalogUtils.getCampPlatform(mgmt);
+ CampPlatform camp = CampUtils.getCampPlatform(mgmt);
BrooklynClassLoadingContext loader = JavaBrooklynClassLoadingContext.create(mgmt);
AssemblyTemplate at = CampUtils.registerDeploymentPlan(plan, loader, camp);
AssemblyTemplateInstantiator instantiator = CampUtils.getInstantiator(at);
@@ -69,7 +69,7 @@ public class CampToSpecTransformer implements PlanToSpecTransformer {
// The unknown instantiator can create the app (Assembly), but not a spec.
// Currently, all brooklyn plans should produce the above.
if (at.getPlatformComponentTemplates()==null || at.getPlatformComponentTemplates().isEmpty()) {
- if (at.getCustomAttributes().containsKey("brooklyn.catalog"))
+ if (at.getCustomAttributes().containsKey(BrooklynCampReservedKeys.BROOKLYN_CATALOG))
throw new IllegalArgumentException("Unrecognized application blueprint format: expected an application, not a brooklyn.catalog");
throw new PlanNotRecognizedException("Unrecognized application blueprint format: no services defined");
}
@@ -99,6 +99,17 @@ public class CampToSpecTransformer implements PlanToSpecTransformer {
return (SpecT) CampCatalogUtils.createSpec(mgmt, (CatalogItem)item, encounteredTypes);
}
+ // TODO
+// @SuppressWarnings({ "unchecked", "rawtypes" })
+// public <T, SpecT extends AbstractBrooklynObjectSpec<? extends T, SpecT>> SpecT createCatalogSpec(RegisteredType type, Set<String> encounteredTypes) {
+// if (encounteredTypes.contains(type.getSymbolicName())) {
+// throw new IllegalStateException("Already encountered types " + encounteredTypes + " must not contain catalog item being resolver " + type.getSymbolicName());
+// }
+//
+// // Not really clear what should happen to the top-level attributes, ignored until a good use case appears.
+// return (SpecT) CampCatalogUtils.createSpec(mgmt, type, encounteredTypes);
+// }
+
@Override
public void injectManagementContext(ManagementContext mgmt) {
this.mgmt = mgmt;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlCombiTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlCombiTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlCombiTest.java
index 29c015a..8e10c20 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlCombiTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlCombiTest.java
@@ -18,13 +18,9 @@
*/
package org.apache.brooklyn.camp.brooklyn.catalog;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-import org.apache.brooklyn.api.catalog.CatalogItem;
import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.policy.Policy;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.camp.brooklyn.AbstractYamlTest;
import org.apache.brooklyn.core.config.ConfigKeys;
import org.apache.brooklyn.core.entity.Entities;
@@ -32,6 +28,10 @@ import org.apache.brooklyn.entity.stock.BasicEntity;
import org.apache.brooklyn.entity.stock.BasicStartable;
import org.apache.brooklyn.policy.ha.ServiceRestarter;
import org.apache.brooklyn.util.exceptions.Exceptions;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.Assert;
+import org.testng.annotations.Test;
import com.google.common.collect.Iterables;
@@ -60,7 +60,7 @@ public class CatalogYamlCombiTest extends AbstractYamlTest {
" type: A",
" brooklyn.config: { b: 1 }");
- CatalogItem<?, ?> item = mgmt().getCatalog().getCatalogItem("B", TEST_VERSION);
+ RegisteredType item = mgmt().getTypeRegistry().get("B", TEST_VERSION, null, null);
Assert.assertNotNull(item);
Entity a = launchEntity("A");
@@ -113,7 +113,7 @@ public class CatalogYamlCombiTest extends AbstractYamlTest {
" brooklyn.policies:",
" - type: A");
- CatalogItem<?, ?> item = mgmt().getCatalog().getCatalogItem("A", TEST_VERSION);
+ RegisteredType item = mgmt().getTypeRegistry().get("A", TEST_VERSION, null, null);
Assert.assertNotNull(item);
Entity b = launchEntity("B", false);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java
index 20d0a1d..882332b 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java
@@ -27,19 +27,23 @@ import java.util.Collection;
import java.util.List;
import org.apache.brooklyn.api.catalog.BrooklynCatalog;
-import org.apache.brooklyn.api.catalog.CatalogItem;
import org.apache.brooklyn.api.entity.Entity;
+import org.apache.brooklyn.api.entity.EntitySpec;
+import org.apache.brooklyn.api.internal.AbstractBrooklynObjectSpec;
+import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.camp.brooklyn.AbstractYamlTest;
import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
import org.apache.brooklyn.core.mgmt.osgi.OsgiStandaloneTest;
-import org.apache.brooklyn.util.osgi.OsgiTestResources;
import org.apache.brooklyn.core.test.entity.TestEntity;
import org.apache.brooklyn.core.test.entity.TestEntityImpl;
+import org.apache.brooklyn.core.typereg.RegisteredTypes;
import org.apache.brooklyn.entity.stock.BasicEntity;
import org.apache.brooklyn.test.support.TestResourceUnavailableException;
import org.apache.brooklyn.util.collections.MutableList;
import org.apache.brooklyn.util.core.ResourceUtils;
import org.apache.brooklyn.util.exceptions.Exceptions;
+import org.apache.brooklyn.util.osgi.OsgiTestResources;
import org.testng.Assert;
import org.testng.annotations.Test;
@@ -60,8 +64,9 @@ public class CatalogYamlEntityTest extends AbstractYamlTest {
" item:",
" type: "+ BasicEntity.class.getName());
- CatalogItem<?, ?> item = mgmt().getCatalog().getCatalogItem(symbolicName, TEST_VERSION);
- assertTrue(item.getPlanYaml().indexOf("services:")>=0, "expected 'services:' block: "+item+"\n"+item.getPlanYaml());
+ RegisteredType item = mgmt().getTypeRegistry().get(symbolicName, TEST_VERSION);
+ String planYaml = RegisteredTypes.getImplementationDataStringForSpec(item);
+ assertTrue(planYaml.indexOf("services:")>=0, "expected 'services:' block: "+item+"\n"+planYaml);
deleteCatalogEntity(symbolicName);
}
@@ -71,7 +76,7 @@ public class CatalogYamlEntityTest extends AbstractYamlTest {
String symbolicName = "my.catalog.app.id.load";
addCatalogOSGiEntity(symbolicName);
- CatalogItem<?, ?> item = mgmt().getCatalog().getCatalogItem(symbolicName, TEST_VERSION);
+ RegisteredType item = mgmt().getTypeRegistry().get(symbolicName, TEST_VERSION);
assertEquals(item.getSymbolicName(), symbolicName);
deleteCatalogEntity(symbolicName);
@@ -93,7 +98,7 @@ public class CatalogYamlEntityTest extends AbstractYamlTest {
" - url: " + OsgiStandaloneTest.BROOKLYN_TEST_OSGI_ENTITIES_URL,
" item: " + SIMPLE_ENTITY_TYPE);
- CatalogItem<?, ?> item = mgmt().getCatalog().getCatalogItem(symbolicName, TEST_VERSION);
+ RegisteredType item = mgmt().getTypeRegistry().get(symbolicName, TEST_VERSION);
assertEquals(item.getSymbolicName(), symbolicName);
deleteCatalogEntity(symbolicName);
@@ -116,7 +121,7 @@ public class CatalogYamlEntityTest extends AbstractYamlTest {
" - url: " + OsgiStandaloneTest.BROOKLYN_TEST_OSGI_ENTITIES_URL,
" item: " + SIMPLE_ENTITY_TYPE);
- CatalogItem<?, ?> item = mgmt().getCatalog().getCatalogItem(symbolicName, TEST_VERSION);
+ RegisteredType item = mgmt().getTypeRegistry().get(symbolicName, TEST_VERSION);
assertEquals(item.getSymbolicName(), symbolicName);
deleteCatalogEntity(symbolicName);
@@ -140,7 +145,7 @@ public class CatalogYamlEntityTest extends AbstractYamlTest {
"services:",
"- type: " + SIMPLE_ENTITY_TYPE);
- CatalogItem<?, ?> item = mgmt().getCatalog().getCatalogItem(symbolicName, TEST_VERSION);
+ RegisteredType item = mgmt().getTypeRegistry().get(symbolicName, TEST_VERSION);
assertEquals(item.getSymbolicName(), symbolicName);
deleteCatalogEntity(symbolicName);
@@ -158,7 +163,7 @@ public class CatalogYamlEntityTest extends AbstractYamlTest {
" - " + OsgiStandaloneTest.BROOKLYN_TEST_OSGI_ENTITIES_URL,
" item:",
" type: "+ SIMPLE_ENTITY_TYPE);
- CatalogItem<?, ?> catalogItem = mgmt().getCatalog().getCatalogItem(id, BrooklynCatalog.DEFAULT_VERSION);
+ RegisteredType catalogItem = mgmt().getTypeRegistry().get(id, BrooklynCatalog.DEFAULT_VERSION);
assertEquals(catalogItem.getVersion(), "0.0.0.SNAPSHOT");
mgmt().getCatalog().deleteCatalogItem(id, "0.0.0.SNAPSHOT");
}
@@ -175,7 +180,7 @@ public class CatalogYamlEntityTest extends AbstractYamlTest {
" - " + OsgiStandaloneTest.BROOKLYN_TEST_OSGI_ENTITIES_URL,
"services:",
"- type: " + SIMPLE_ENTITY_TYPE);
- CatalogItem<?, ?> catalogItem = mgmt().getCatalog().getCatalogItem(id, TEST_VERSION);
+ RegisteredType catalogItem = mgmt().getTypeRegistry().get(id, TEST_VERSION);
assertEquals(catalogItem.getVersion(), TEST_VERSION);
mgmt().getCatalog().deleteCatalogItem(id, TEST_VERSION);
}
@@ -213,8 +218,9 @@ public class CatalogYamlEntityTest extends AbstractYamlTest {
String referrerSymbolicName = "my.catalog.app.id.referring";
addCatalogOSGiEntities(referencedSymbolicName, SIMPLE_ENTITY_TYPE, referrerSymbolicName, ver(referencedSymbolicName));
- CatalogItem<?, ?> referrer = mgmt().getCatalog().getCatalogItem(referrerSymbolicName, TEST_VERSION);
- Assert.assertTrue(referrer.getPlanYaml().indexOf("services")>=0, "expected services in: "+referrer.getPlanYaml());
+ RegisteredType referrer = mgmt().getTypeRegistry().get(referrerSymbolicName, TEST_VERSION);
+ String planYaml = RegisteredTypes.getImplementationDataStringForSpec(referrer);
+ Assert.assertTrue(planYaml.indexOf("services")>=0, "expected services in: "+planYaml);
String yaml = "name: simple-app-yaml\n" +
"location: localhost\n" +
@@ -523,11 +529,12 @@ public class CatalogYamlEntityTest extends AbstractYamlTest {
String id = "my.catalog.app.id.create_spec";
addCatalogOSGiEntity(id);
- BrooklynCatalog catalog = mgmt().getCatalog();
- CatalogItem<?, ?> item = catalog.getCatalogItem(id, TEST_VERSION);
- @SuppressWarnings({ "unchecked", "rawtypes" })
- Object spec = catalog.createSpec((CatalogItem) item);
+ BrooklynTypeRegistry catalog = mgmt().getTypeRegistry();
+ RegisteredType item = catalog.get(id, TEST_VERSION);
+ EntitySpec<?> spec = catalog.createSpec(item, EntitySpec.class);
Assert.assertNotNull(spec);
+ AbstractBrooklynObjectSpec<?,?> spec2 = catalog.createSpec(item, AbstractBrooklynObjectSpec.class);
+ Assert.assertNotNull(spec2);
}
@Test
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlLocationTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlLocationTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlLocationTest.java
index e5a8457..eebaea5 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlLocationTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlLocationTest.java
@@ -24,21 +24,22 @@ import static org.testng.Assert.assertNull;
import java.util.Collection;
import java.util.List;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.Test;
-import org.apache.brooklyn.api.catalog.CatalogItem;
-import org.apache.brooklyn.api.catalog.CatalogItem.CatalogBundle;
import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.location.Location;
import org.apache.brooklyn.api.location.LocationDefinition;
import org.apache.brooklyn.api.location.LocationSpec;
+import org.apache.brooklyn.api.typereg.OsgiBundleWithUrl;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.camp.brooklyn.AbstractYamlTest;
-import org.apache.brooklyn.core.catalog.CatalogPredicates;
import org.apache.brooklyn.core.config.BasicConfigKey;
import org.apache.brooklyn.core.mgmt.osgi.OsgiStandaloneTest;
+import org.apache.brooklyn.core.typereg.RegisteredTypePredicates;
import org.apache.brooklyn.location.localhost.LocalhostMachineProvisioningLocation;
import org.apache.brooklyn.test.support.TestResourceUnavailableException;
import org.apache.brooklyn.util.text.StringFunctions;
+import org.testng.Assert;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.Test;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
@@ -51,7 +52,7 @@ public class CatalogYamlLocationTest extends AbstractYamlTest {
@AfterMethod
public void tearDown() {
- for (CatalogItem<Location, LocationSpec<?>> ci : mgmt().getCatalog().getCatalogItems(CatalogPredicates.IS_LOCATION)) {
+ for (RegisteredType ci : mgmt().getTypeRegistry().getAll(RegisteredTypePredicates.IS_LOCATION)) {
mgmt().getCatalog().deleteCatalogItem(ci.getSymbolicName(), ci.getVersion());
}
}
@@ -99,16 +100,17 @@ public class CatalogYamlLocationTest extends AbstractYamlTest {
}
private void assertOsgi(String symbolicName) {
- CatalogItem<?, ?> item = mgmt().getCatalog().getCatalogItem(symbolicName, TEST_VERSION);
- Collection<CatalogBundle> libs = item.getLibraries();
+ RegisteredType item = mgmt().getTypeRegistry().get(symbolicName, TEST_VERSION);
+ Collection<OsgiBundleWithUrl> libs = item.getLibraries();
assertEquals(libs.size(), 1);
assertEquals(Iterables.getOnlyElement(libs).getUrl(), Iterables.getOnlyElement(getOsgiLibraries()));
}
- @SuppressWarnings({ "rawtypes", "unchecked" })
+ @SuppressWarnings({ "rawtypes" })
private void assertAdded(String symbolicName, String expectedJavaType) {
- CatalogItem item = mgmt().getCatalog().getCatalogItem(symbolicName, TEST_VERSION);
+ RegisteredType item = mgmt().getTypeRegistry().get(symbolicName, TEST_VERSION);
assertEquals(item.getSymbolicName(), symbolicName);
+ Assert.assertTrue(Location.class.isAssignableFrom(item.getJavaType()), "Expected Location, not "+item.getJavaType());
assertEquals(countCatalogLocations(), 1);
// Item added to catalog should automatically be available in location registry
@@ -116,7 +118,7 @@ public class CatalogYamlLocationTest extends AbstractYamlTest {
assertEquals(def.getId(), symbolicName);
assertEquals(def.getName(), symbolicName);
- LocationSpec spec = (LocationSpec) mgmt().getCatalog().createSpec(item);
+ LocationSpec spec = (LocationSpec) mgmt().getTypeRegistry().createSpec(item, LocationSpec.class);
assertEquals(spec.getType().getName(), expectedJavaType);
}
@@ -243,6 +245,7 @@ public class CatalogYamlLocationTest extends AbstractYamlTest {
}
private int countCatalogLocations() {
- return Iterables.size(mgmt().getCatalog().getCatalogItems(CatalogPredicates.IS_LOCATION));
+ return Iterables.size(mgmt().getTypeRegistry().getAll(RegisteredTypePredicates.IS_LOCATION));
}
+
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/test/lite/CampYamlLiteTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/test/lite/CampYamlLiteTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/test/lite/CampYamlLiteTest.java
index b325c62..9f2a377 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/test/lite/CampYamlLiteTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/test/lite/CampYamlLiteTest.java
@@ -33,6 +33,9 @@ import org.apache.brooklyn.api.catalog.CatalogItem.CatalogBundle;
import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.entity.EntitySpec;
import org.apache.brooklyn.api.mgmt.Task;
+import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry;
+import org.apache.brooklyn.api.typereg.OsgiBundleWithUrl;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.camp.spi.Assembly;
import org.apache.brooklyn.camp.spi.AssemblyTemplate;
import org.apache.brooklyn.camp.spi.pdp.PdpYamlTest;
@@ -45,12 +48,12 @@ import org.apache.brooklyn.core.config.ConfigKeys;
import org.apache.brooklyn.core.effector.AddChildrenEffector;
import org.apache.brooklyn.core.effector.Effectors;
import org.apache.brooklyn.core.entity.Entities;
-import org.apache.brooklyn.core.entity.factory.ApplicationBuilder;
import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext;
import org.apache.brooklyn.core.mgmt.osgi.OsgiStandaloneTest;
import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
import org.apache.brooklyn.core.test.entity.TestApplication;
import org.apache.brooklyn.core.test.entity.TestEntity;
+import org.apache.brooklyn.core.typereg.RegisteredTypes;
import org.apache.brooklyn.test.support.TestResourceUnavailableException;
import org.apache.brooklyn.util.collections.MutableMap;
import org.apache.brooklyn.util.core.ResourceUtils;
@@ -127,7 +130,7 @@ public class CampYamlLiteTest {
.configure(AddChildrenEffector.BLUEPRINT_YAML, childYaml)
.configure(AddChildrenEffector.EFFECTOR_PARAMETER_DEFS, MutableMap.of("war", (Object)MutableMap.of(
"defaultValue", "foo.war"))) ) ;
- TestApplication app = ApplicationBuilder.newManagedApp(EntitySpec.create(TestApplication.class).addInitializer(newEff), mgmt);
+ TestApplication app = mgmt.getEntityManager().createEntity(EntitySpec.create(TestApplication.class).addInitializer(newEff));
// test adding, with a parameter
Task<List> task = app.invoke(Effectors.effector(List.class, "add_tomcat").buildAbstract(), MutableMap.of("war", "foo.bar"));
@@ -227,19 +230,20 @@ public class CampYamlLiteTest {
}
private void assertMgmtHasSampleMyCatalogApp(String symbolicName, String bundleUrl) {
- CatalogItem<?, ?> item = mgmt.getCatalog().getCatalogItem(symbolicName, TEST_VERSION);
+ RegisteredType item = mgmt.getTypeRegistry().get(symbolicName, BrooklynTypeRegistry.RegisteredTypeKind.SPEC, null);
assertNotNull(item, "failed to load item with id=" + symbolicName + " from catalog. Entries were: " +
- Joiner.on(",").join(mgmt.getCatalog().getCatalogItems()));
+ Joiner.on(",").join(mgmt.getTypeRegistry().getAll()));
assertEquals(item.getSymbolicName(), symbolicName);
// stored as yaml, not java
- assertNotNull(item.getPlanYaml());
- Assert.assertTrue(item.getPlanYaml().contains("io.camp.mock:AppServer"));
+ String planYaml = RegisteredTypes.getImplementationDataStringForSpec(item);
+ assertNotNull(planYaml);
+ Assert.assertTrue(planYaml.contains("io.camp.mock:AppServer"));
// and let's check we have libraries
- Collection<CatalogBundle> libs = item.getLibraries();
+ Collection<OsgiBundleWithUrl> libs = item.getLibraries();
assertEquals(libs.size(), 1);
- CatalogBundle bundle = Iterables.getOnlyElement(libs);
+ OsgiBundleWithUrl bundle = Iterables.getOnlyElement(libs);
assertEquals(bundle.getUrl(), bundleUrl);
// now let's check other things on the item
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/test/lite/TestAppAssemblyInstantiator.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/test/lite/TestAppAssemblyInstantiator.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/test/lite/TestAppAssemblyInstantiator.java
index 422998b..6c0a09a 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/test/lite/TestAppAssemblyInstantiator.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/test/lite/TestAppAssemblyInstantiator.java
@@ -56,7 +56,6 @@ public class TestAppAssemblyInstantiator extends BasicAssemblyTemplateInstantiat
ManagementContext mgmt = ((HasBrooklynManagementContext)platform).getBrooklynManagementContext();
TestApplication app = (TestApplication) mgmt.getEntityManager().createEntity( createApplicationSpec(template, platform, null) );
- mgmt.getEntityManager().manage(app);
return new TestAppAssembly(app);
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/usage/rest-server/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java
index 157ba67..f30c7ec 100644
--- a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java
+++ b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java
@@ -18,13 +18,10 @@
*/
package org.apache.brooklyn.rest.util;
-import static org.apache.brooklyn.rest.util.WebResourceUtils.notFound;
import static com.google.common.collect.Iterables.transform;
-import groovy.lang.GroovyClassLoader;
+import static org.apache.brooklyn.rest.util.WebResourceUtils.notFound;
-import java.io.Serializable;
import java.lang.reflect.Constructor;
-import java.net.URI;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
@@ -34,12 +31,7 @@ import java.util.Set;
import java.util.concurrent.Future;
import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import org.apache.brooklyn.core.mgmt.BrooklynTaskTags;
-import org.apache.brooklyn.util.collections.MutableSet;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.apache.brooklyn.api.catalog.BrooklynCatalog;
import org.apache.brooklyn.api.catalog.CatalogItem;
import org.apache.brooklyn.api.entity.Application;
@@ -55,26 +47,28 @@ import org.apache.brooklyn.camp.brooklyn.spi.dsl.methods.DslComponent;
import org.apache.brooklyn.camp.brooklyn.spi.dsl.methods.DslComponent.Scope;
import org.apache.brooklyn.config.ConfigKey;
import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
-import org.apache.brooklyn.core.entity.AbstractEntity;
import org.apache.brooklyn.core.entity.Attributes;
import org.apache.brooklyn.core.entity.Entities;
import org.apache.brooklyn.core.entity.EntityInternal;
import org.apache.brooklyn.core.entity.factory.ApplicationBuilder;
import org.apache.brooklyn.core.entity.trait.Startable;
+import org.apache.brooklyn.core.mgmt.BrooklynTaskTags;
import org.apache.brooklyn.core.mgmt.entitlement.Entitlements;
import org.apache.brooklyn.core.mgmt.entitlement.Entitlements.StringAndArgument;
import org.apache.brooklyn.core.objs.BrooklynTypes;
-import org.apache.brooklyn.core.policy.AbstractPolicy;
import org.apache.brooklyn.enricher.stock.Enrichers;
import org.apache.brooklyn.entity.stock.BasicApplication;
import org.apache.brooklyn.rest.domain.ApplicationSpec;
import org.apache.brooklyn.rest.domain.EntitySpec;
import org.apache.brooklyn.util.collections.MutableMap;
+import org.apache.brooklyn.util.collections.MutableSet;
import org.apache.brooklyn.util.core.flags.TypeCoercions;
import org.apache.brooklyn.util.exceptions.Exceptions;
import org.apache.brooklyn.util.javalang.Reflections;
import org.apache.brooklyn.util.net.Urls;
import org.apache.brooklyn.util.text.Strings;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.common.base.Function;
import com.google.common.base.Preconditions;
@@ -210,7 +204,52 @@ public class BrooklynRestResourceUtils {
return null;
}
- @SuppressWarnings({ "unchecked", "deprecation" })
+ private class FindItemAndClass {
+ String catalogItemId;
+ Class<? extends Entity> clazz;
+
+ @SuppressWarnings("unchecked")
+ private FindItemAndClass inferFrom(String type) {
+ BrooklynCatalog catalog = getCatalog();
+ CatalogItem<?, ?> item = CatalogUtils.getCatalogItemOptionalVersion(mgmt, type);
+ if (item==null) {
+ // although the method was deprecated in 0.7.0, its use here was not warned until 0.9.0;
+ // therefore this behaviour should not be changed until after 0.9.0
+ item = catalog.getCatalogItemForType(type);
+ if (item!=null) {
+ log.warn("Creating application for requested type `"+type+" using item "+item+"; "
+ + "the registered type name ("+item.getSymbolicName()+") should be used from the spec instead, "
+ + "or the type registered under its own name. "
+ + "Future versions will likely change semantics to attempt a POJO load of the type instead.");
+ }
+ }
+
+ if (item != null) {
+ return setAs(
+ catalog.createSpec((CatalogItem<Entity,org.apache.brooklyn.api.entity.EntitySpec<Entity>>)item).getType(),
+ item.getId());
+ } else {
+ try {
+ setAs(
+ (Class<? extends Entity>) catalog.getRootClassLoader().loadClass(type),
+ null);
+ log.info("Catalog does not contain item for type {}; loaded class directly instead", type);
+ return this;
+ } catch (ClassNotFoundException e2) {
+ log.warn("No catalog item for type {}, and could not load class directly; rethrowing", type);
+ throw new NoSuchElementException("Unable to find catalog item for type "+type);
+ }
+ }
+ }
+
+ private FindItemAndClass setAs(Class<? extends Entity> clazz, String catalogItemId) {
+ this.clazz = clazz;
+ this.catalogItemId = catalogItemId;
+ return this;
+ }
+ }
+
+ @SuppressWarnings({ "deprecation" })
public Application create(ApplicationSpec spec) {
log.warn("Using deprecated functionality (as of 0.9.0), ApplicationSpec style (pre CAMP plans). " +
"Transition to actively supported spec plans.");
@@ -229,88 +268,73 @@ public class BrooklynRestResourceUtils {
final Application instance;
// Load the class; first try to use the appropriate catalog item; but then allow anything that is on the classpath
- final Class<? extends Entity> clazz;
- final String catalogItemId;
+ FindItemAndClass itemAndClass;
if (Strings.isEmpty(type)) {
- clazz = BasicApplication.class;
- catalogItemId = null;
+ itemAndClass = new FindItemAndClass().setAs(BasicApplication.class, null);
} else {
- Class<? extends Entity> tempclazz;
- BrooklynCatalog catalog = getCatalog();
- CatalogItem<?, ?> item = catalog.getCatalogItemForType(type);
- if (item != null) {
- catalogItemId = item.getId();
- tempclazz = (Class<? extends Entity>) catalog.loadClass(item);
- } else {
- catalogItemId = null;
- try {
- tempclazz = (Class<? extends Entity>) catalog.getRootClassLoader().loadClass(type);
- log.info("Catalog does not contain item for type {}; loaded class directly instead", type);
- } catch (ClassNotFoundException e2) {
- log.warn("No catalog item for type {}, and could not load class directly; rethrowing", type);
- throw new NoSuchElementException("Unable to find catalog item for type "+type);
- }
- }
- clazz = tempclazz;
+ itemAndClass = new FindItemAndClass().inferFrom(type);
}
- if (Entitlements.isEntitled(mgmt.getEntitlementManager(), Entitlements.INVOKE_EFFECTOR, null)) {
-
- try {
- if (ApplicationBuilder.class.isAssignableFrom(clazz)) {
- Constructor<?> constructor = clazz.getConstructor();
- ApplicationBuilder appBuilder = (ApplicationBuilder) constructor.newInstance();
- if (!Strings.isEmpty(name)) appBuilder.appDisplayName(name);
- if (entities.size() > 0)
- log.warn("Cannot supply additional entities when using an ApplicationBuilder; ignoring in spec {}", spec);
-
- log.info("REST placing '{}' under management", spec.getName());
- appBuilder.configure(convertFlagsToKeys(appBuilder.getType(), configO));
- configureRenderingMetadata(spec, appBuilder);
- instance = appBuilder.manage(mgmt);
-
- } else if (Application.class.isAssignableFrom(clazz)) {
- org.apache.brooklyn.api.entity.EntitySpec<?> coreSpec = toCoreEntitySpec(clazz, name, configO, catalogItemId);
- configureRenderingMetadata(spec, coreSpec);
- for (EntitySpec entitySpec : entities) {
- log.info("REST creating instance for entity {}", entitySpec.getType());
- coreSpec.child(toCoreEntitySpec(entitySpec));
- }
-
- log.info("REST placing '{}' under management", spec.getName() != null ? spec.getName() : spec);
- instance = (Application) mgmt.getEntityManager().createEntity(coreSpec);
-
- } else if (Entity.class.isAssignableFrom(clazz)) {
- if (entities.size() > 0)
- log.warn("Cannot supply additional entities when using a non-application entity; ignoring in spec {}", spec);
-
- org.apache.brooklyn.api.entity.EntitySpec<?> coreSpec = toCoreEntitySpec(BasicApplication.class, name, configO, catalogItemId);
- configureRenderingMetadata(spec, coreSpec);
-
- coreSpec.child(toCoreEntitySpec(clazz, name, configO, catalogItemId)
- .configure(BrooklynCampConstants.PLAN_ID, "soleChildId"));
- coreSpec.enricher(Enrichers.builder()
- .propagatingAllBut(Attributes.SERVICE_UP, Attributes.SERVICE_NOT_UP_INDICATORS,
- Attributes.SERVICE_STATE_ACTUAL, Attributes.SERVICE_STATE_EXPECTED,
- Attributes.SERVICE_PROBLEMS)
- .from(new DslComponent(Scope.CHILD, "soleChildId").newTask())
- .build());
-
- log.info("REST placing '{}' under management", spec.getName());
- instance = (Application) mgmt.getEntityManager().createEntity(coreSpec);
-
- } else {
- throw new IllegalArgumentException("Class " + clazz + " must extend one of ApplicationBuilder, Application or Entity");
+
+ if (!Entitlements.isEntitled(mgmt.getEntitlementManager(), Entitlements.INVOKE_EFFECTOR, null)) {
+ throw WebResourceUtils.unauthorized("User '%s' is not authorized to create application from applicationSpec %s",
+ Entitlements.getEntitlementContext().user(), spec);
+ }
+
+ try {
+ if (ApplicationBuilder.class.isAssignableFrom(itemAndClass.clazz)) {
+ // warning only added in 0.9.0
+ log.warn("Using deprecated ApplicationBuilder "+itemAndClass.clazz+"; callers must migrate to use of Application");
+ Constructor<?> constructor = itemAndClass.clazz.getConstructor();
+ ApplicationBuilder appBuilder = (ApplicationBuilder) constructor.newInstance();
+ if (!Strings.isEmpty(name)) appBuilder.appDisplayName(name);
+ if (entities.size() > 0)
+ log.warn("Cannot supply additional entities when using an ApplicationBuilder; ignoring in spec {}", spec);
+
+ log.info("REST placing '{}' under management", spec.getName());
+ appBuilder.configure(convertFlagsToKeys(appBuilder.getType(), configO));
+ configureRenderingMetadata(spec, appBuilder);
+ instance = appBuilder.manage(mgmt);
+
+ } else if (Application.class.isAssignableFrom(itemAndClass.clazz)) {
+ org.apache.brooklyn.api.entity.EntitySpec<?> coreSpec = toCoreEntitySpec(itemAndClass.clazz, name, configO, itemAndClass.catalogItemId);
+ configureRenderingMetadata(spec, coreSpec);
+ for (EntitySpec entitySpec : entities) {
+ log.info("REST creating instance for entity {}", entitySpec.getType());
+ coreSpec.child(toCoreEntitySpec(entitySpec));
}
- return instance;
+ log.info("REST placing '{}' under management", spec.getName() != null ? spec.getName() : spec);
+ instance = (Application) mgmt.getEntityManager().createEntity(coreSpec);
+
+ } else if (Entity.class.isAssignableFrom(itemAndClass.clazz)) {
+ if (entities.size() > 0)
+ log.warn("Cannot supply additional entities when using a non-application entity; ignoring in spec {}", spec);
+
+ org.apache.brooklyn.api.entity.EntitySpec<?> coreSpec = toCoreEntitySpec(BasicApplication.class, name, configO, itemAndClass.catalogItemId);
+ configureRenderingMetadata(spec, coreSpec);
+
+ coreSpec.child(toCoreEntitySpec(itemAndClass.clazz, name, configO, itemAndClass.catalogItemId)
+ .configure(BrooklynCampConstants.PLAN_ID, "soleChildId"));
+ coreSpec.enricher(Enrichers.builder()
+ .propagatingAllBut(Attributes.SERVICE_UP, Attributes.SERVICE_NOT_UP_INDICATORS,
+ Attributes.SERVICE_STATE_ACTUAL, Attributes.SERVICE_STATE_EXPECTED,
+ Attributes.SERVICE_PROBLEMS)
+ .from(new DslComponent(Scope.CHILD, "soleChildId").newTask())
+ .build());
+
+ log.info("REST placing '{}' under management", spec.getName());
+ instance = (Application) mgmt.getEntityManager().createEntity(coreSpec);
- } catch (Exception e) {
- log.error("REST failed to create application: " + e, e);
- throw Exceptions.propagate(e);
+ } else {
+ throw new IllegalArgumentException("Class " + itemAndClass.clazz + " must extend one of ApplicationBuilder, Application or Entity");
}
+
+ return instance;
+
+ } catch (Exception e) {
+ log.error("REST failed to create application: " + e, e);
+ throw Exceptions.propagate(e);
}
- throw WebResourceUtils.unauthorized("User '%s' is not authorized to create application from applicationSpec %s",
- Entitlements.getEntitlementContext().user(), spec);
}
public Task<?> start(Application app, ApplicationSpec spec) {
@@ -336,37 +360,21 @@ public class BrooklynRestResourceUtils {
return locations;
}
- @SuppressWarnings({ "unchecked", "deprecation" })
private org.apache.brooklyn.api.entity.EntitySpec<? extends Entity> toCoreEntitySpec(org.apache.brooklyn.rest.domain.EntitySpec spec) {
String type = spec.getType();
String name = spec.getName();
Map<String, String> config = (spec.getConfig() == null) ? Maps.<String,String>newLinkedHashMap() : Maps.newLinkedHashMap(spec.getConfig());
- BrooklynCatalog catalog = getCatalog();
- CatalogItem<?, ?> item = catalog.getCatalogItemForType(type);
- Class<? extends Entity> tempclazz;
- final String catalogItemId;
- if (item != null) {
- tempclazz = (Class<? extends Entity>) catalog.loadClass(item);
- catalogItemId = item.getId();
- } else {
- catalogItemId = null;
- try {
- tempclazz = (Class<? extends Entity>) catalog.getRootClassLoader().loadClass(type);
- log.info("Catalog does not contain item for type {}; loaded class directly instead", type);
- } catch (ClassNotFoundException e2) {
- log.warn("No catalog item for type {}, and could not load class directly; rethrowing", type);
- throw new NoSuchElementException("Unable to find catalog item for type "+type);
- }
- }
- final Class<? extends Entity> clazz = tempclazz;
+ FindItemAndClass itemAndClass = new FindItemAndClass().inferFrom(type);
+
+ final Class<? extends Entity> clazz = itemAndClass.clazz;
org.apache.brooklyn.api.entity.EntitySpec<? extends Entity> result;
if (clazz.isInterface()) {
result = org.apache.brooklyn.api.entity.EntitySpec.create(clazz);
} else {
result = org.apache.brooklyn.api.entity.EntitySpec.create(Entity.class).impl(clazz).additionalInterfaces(Reflections.getAllInterfaces(clazz));
}
- result.catalogItemId(catalogItemId);
+ result.catalogItemId(itemAndClass.catalogItemId);
if (!Strings.isEmpty(name)) result.displayName(name);
result.configure( convertFlagsToKeys(result.getType(), config) );
configureRenderingMetadata(spec, result);
@@ -469,30 +477,6 @@ public class BrooklynRestResourceUtils {
Entitlements.getEntitlementContext().user(), entity);
}
-
- @Deprecated
- @SuppressWarnings({ "rawtypes" })
- public Response createCatalogEntryFromGroovyCode(String groovyCode) {
- ClassLoader parent = getCatalog().getRootClassLoader();
- @SuppressWarnings("resource")
- GroovyClassLoader loader = new GroovyClassLoader(parent);
-
- Class clazz = loader.parseClass(groovyCode);
-
- if (AbstractEntity.class.isAssignableFrom(clazz)) {
- CatalogItem<?,?> item = getCatalog().addItem(clazz);
- log.info("REST created "+item);
- return Response.created(URI.create("entities/" + clazz.getName())).build();
-
- } else if (AbstractPolicy.class.isAssignableFrom(clazz)) {
- CatalogItem<?,?> item = getCatalog().addItem(clazz);
- log.info("REST created "+item);
- return Response.created(URI.create("policies/" + clazz.getName())).build();
- }
-
- throw WebResourceUtils.preconditionFailed("Unsupported type superclass "+clazz.getSuperclass()+"; expects Entity or Policy");
- }
-
@Deprecated
public static String fixLocation(String locationId) {
if (locationId.startsWith("/v1/locations/")) {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/usage/rest-server/src/main/java/org/apache/brooklyn/rest/util/WebResourceUtils.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/util/WebResourceUtils.java b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/util/WebResourceUtils.java
index e8f2505..1a74a33 100644
--- a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/util/WebResourceUtils.java
+++ b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/util/WebResourceUtils.java
@@ -141,7 +141,7 @@ public class WebResourceUtils {
public static String getPathFromVersionedId(String versionedId) {
if (CatalogUtils.looksLikeVersionedId(versionedId)) {
- String symbolicName = CatalogUtils.getIdFromVersionedId(versionedId);
+ String symbolicName = CatalogUtils.getSymbolicNameFromVersionedId(versionedId);
String version = CatalogUtils.getVersionFromVersionedId(versionedId);
return Urls.encode(symbolicName) + "/" + Urls.encode(version);
} else {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/ApplicationResourceTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/ApplicationResourceTest.java b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/ApplicationResourceTest.java
index 2d264f3..020fe19 100644
--- a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/ApplicationResourceTest.java
+++ b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/ApplicationResourceTest.java
@@ -36,7 +36,6 @@ import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;
import org.apache.brooklyn.api.entity.Application;
-import org.apache.brooklyn.api.entity.EntityLocal;
import org.apache.brooklyn.core.entity.Attributes;
import org.apache.brooklyn.core.entity.Entities;
import org.apache.brooklyn.core.entity.EntityFunctions;
@@ -244,12 +243,12 @@ public class ApplicationResourceTest extends BrooklynRestResourceTest {
assertEquals(client().resource(appUri).get(ApplicationSummary.class).getSpec().getName(), "simple-app-yaml");
}
- @SuppressWarnings("deprecation")
@Test
public void testReferenceCatalogEntity() throws Exception {
- getManagementContext().getCatalog().addItem(BasicEntity.class);
+ getManagementContext().getCatalog().addItems("{ name: "+BasicEntity.class.getName()+", "
+ + "services: [ { type: "+BasicEntity.class.getName()+" } ] }");
- String yaml = "{ name: simple-app-yaml, location: localhost, services: [ { serviceType: " + BasicEntity.class.getName() + " } ] }";
+ String yaml = "{ name: simple-app-yaml, location: localhost, services: [ { type: " + BasicEntity.class.getName() + " } ] }";
ClientResponse response = client().resource("/v1/applications")
.entity(yaml, "application/x-yaml")
@@ -335,7 +334,7 @@ public class ApplicationResourceTest extends BrooklynRestResourceTest {
.get(ApplicationSummary.class);
assertEquals(summary.getStatus(), Status.RUNNING);
- ((EntityLocal)app).sensors().set(Attributes.SERVICE_STATE_ACTUAL, Lifecycle.ON_FIRE);
+ app.sensors().set(Attributes.SERVICE_STATE_ACTUAL, Lifecycle.ON_FIRE);
try {
ApplicationSummary summary2 = client().resource("/v1/applications/"+app.getId())
.get(ApplicationSummary.class);
@@ -343,7 +342,7 @@ public class ApplicationResourceTest extends BrooklynRestResourceTest {
assertEquals(summary2.getStatus(), Status.ERROR);
} finally {
- ((EntityLocal)app).sensors().set(Attributes.SERVICE_STATE_ACTUAL, origState);
+ app.sensors().set(Attributes.SERVICE_STATE_ACTUAL, origState);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/DescendantsTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/DescendantsTest.java b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/DescendantsTest.java
index 43e7166..a8748a7 100644
--- a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/DescendantsTest.java
+++ b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/DescendantsTest.java
@@ -27,14 +27,8 @@ import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeoutException;
-import org.codehaus.jackson.JsonGenerationException;
-import org.codehaus.jackson.map.JsonMappingException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.annotations.Test;
import org.apache.brooklyn.api.entity.Application;
import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.entity.EntityLocal;
import org.apache.brooklyn.core.sensor.Sensors;
import org.apache.brooklyn.rest.domain.ApplicationSpec;
import org.apache.brooklyn.rest.domain.EntitySpec;
@@ -43,6 +37,11 @@ import org.apache.brooklyn.rest.testing.BrooklynRestResourceTest;
import org.apache.brooklyn.rest.testing.mocks.RestMockSimpleEntity;
import org.apache.brooklyn.util.collections.MutableList;
import org.apache.brooklyn.util.text.StringEscapes;
+import org.codehaus.jackson.JsonGenerationException;
+import org.codehaus.jackson.map.JsonMappingException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.annotations.Test;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
@@ -101,9 +100,9 @@ public class DescendantsTest extends BrooklynRestResourceTest {
assertEquals(sensors.size(), 0);
long v = 0;
- ((EntityLocal)application).sensors().set(Sensors.newLongSensor("foo"), v);
+ application.sensors().set(Sensors.newLongSensor("foo"), v);
for (Entity e: entities)
- ((EntityLocal)e).sensors().set(Sensors.newLongSensor("foo"), v+=123);
+ e.sensors().set(Sensors.newLongSensor("foo"), v+=123);
sensors = client().resource("/v1/applications/"+application.getApplicationId()+"/descendants/sensor/foo")
.get(new GenericType<Map<String,Object>>() {});
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/ScriptResourceTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/ScriptResourceTest.java b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/ScriptResourceTest.java
index ddb4fe1..23a3e5a 100644
--- a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/ScriptResourceTest.java
+++ b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/ScriptResourceTest.java
@@ -20,21 +20,23 @@ package org.apache.brooklyn.rest.resources;
import java.util.Collections;
-import org.testng.Assert;
-import org.testng.annotations.Test;
+import org.apache.brooklyn.api.entity.Application;
+import org.apache.brooklyn.api.entity.EntitySpec;
import org.apache.brooklyn.api.location.Location;
import org.apache.brooklyn.api.mgmt.ManagementContext;
import org.apache.brooklyn.core.entity.Entities;
+import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
import org.apache.brooklyn.rest.domain.ScriptExecutionSummary;
import org.apache.brooklyn.rest.testing.mocks.RestMockApp;
+import org.testng.Assert;
+import org.testng.annotations.Test;
public class ScriptResourceTest {
@Test
public void testGroovy() {
- RestMockApp app = new RestMockApp();
- Entities.startManagement(app);
- ManagementContext mgmt = app.getManagementContext();
+ ManagementContext mgmt = LocalManagementContextForTests.newInstance();
+ Application app = mgmt.getEntityManager().createEntity( EntitySpec.create(Application.class, RestMockApp.class) );
try {
Entities.start(app, Collections.<Location>emptyList());
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/UsageResourceTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/UsageResourceTest.java b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/UsageResourceTest.java
index 97793a3..697ae10 100644
--- a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/UsageResourceTest.java
+++ b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/UsageResourceTest.java
@@ -35,10 +35,10 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
+import org.apache.brooklyn.api.entity.EntitySpec;
import org.apache.brooklyn.api.location.Location;
import org.apache.brooklyn.api.location.LocationSpec;
import org.apache.brooklyn.api.location.NoMachinesAvailableException;
-import org.apache.brooklyn.core.entity.factory.ApplicationBuilder;
import org.apache.brooklyn.core.mgmt.internal.LocalUsageManager;
import org.apache.brooklyn.core.mgmt.internal.ManagementContextInternal;
import org.apache.brooklyn.core.test.entity.TestApplication;
@@ -46,7 +46,6 @@ import org.apache.brooklyn.entity.software.base.SoftwareProcessEntityTest;
import org.apache.brooklyn.location.localhost.LocalhostMachineProvisioningLocation;
import org.apache.brooklyn.location.ssh.SshMachineLocation;
import org.apache.brooklyn.rest.domain.ApplicationSpec;
-import org.apache.brooklyn.rest.domain.EntitySpec;
import org.apache.brooklyn.rest.domain.Status;
import org.apache.brooklyn.rest.domain.TaskSummary;
import org.apache.brooklyn.rest.domain.UsageStatistic;
@@ -72,7 +71,7 @@ public class UsageResourceTest extends BrooklynRestResourceTest {
private Calendar testStartTime;
private final ApplicationSpec simpleSpec = ApplicationSpec.builder().name("simple-app").
- entities(ImmutableSet.of(new EntitySpec("simple-ent", RestMockSimpleEntity.class.getName()))).
+ entities(ImmutableSet.of(new org.apache.brooklyn.rest.domain.EntitySpec("simple-ent", RestMockSimpleEntity.class.getName()))).
locations(ImmutableSet.of("localhost")).
build();
@@ -238,7 +237,7 @@ public class UsageResourceTest extends BrooklynRestResourceTest {
@Test
public void testListAndGetMachineUsage() throws Exception {
Location location = getManagementContext().getLocationManager().createLocation(LocationSpec.create(DynamicLocalhostMachineProvisioningLocation.class));
- TestApplication app = ApplicationBuilder.newManagedApp(TestApplication.class, getManagementContext());
+ TestApplication app = getManagementContext().getEntityManager().createEntity(EntitySpec.create(TestApplication.class));
SoftwareProcessEntityTest.MyService entity = app.createAndManageChild(org.apache.brooklyn.api.entity.EntitySpec.create(SoftwareProcessEntityTest.MyService.class));
Calendar preStart = new GregorianCalendar();
@@ -264,7 +263,7 @@ public class UsageResourceTest extends BrooklynRestResourceTest {
@Test
public void testListMachinesUsageForApp() throws Exception {
Location location = getManagementContext().getLocationManager().createLocation(LocationSpec.create(DynamicLocalhostMachineProvisioningLocation.class));
- TestApplication app = ApplicationBuilder.newManagedApp(TestApplication.class, getManagementContext());
+ TestApplication app = getManagementContext().getEntityManager().createEntity(EntitySpec.create(TestApplication.class));
SoftwareProcessEntityTest.MyService entity = app.createAndManageChild(org.apache.brooklyn.api.entity.EntitySpec.create(SoftwareProcessEntityTest.MyService.class));
String appId = app.getId();
[5/9] incubator-brooklyn git commit: more converting CatalogItem
access to RegisteredType
Posted by he...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/PoliciesYamlTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/PoliciesYamlTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/PoliciesYamlTest.java
index 9648c51..6bcf49f 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/PoliciesYamlTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/PoliciesYamlTest.java
@@ -53,7 +53,7 @@ public class PoliciesYamlTest extends AbstractYamlTest {
log.info("App started:");
Entities.dumpInfo(app);
- Assert.assertEquals(app.getPolicies().size(), 1);
+ Assert.assertEquals(app.policies().size(), 1);
Policy policy = app.policies().iterator().next();
Assert.assertTrue(policy instanceof TestPolicy);
Assert.assertEquals(policy.getConfig(TestPolicy.CONF_NAME), "Name from YAML");
@@ -73,10 +73,10 @@ public class PoliciesYamlTest extends AbstractYamlTest {
log.info("App started:");
Entities.dumpInfo(app);
- Assert.assertEquals(app.getPolicies().size(), 0);
+ Assert.assertEquals(app.policies().size(), 0);
Assert.assertEquals(app.getChildren().size(), 1);
Entity child = app.getChildren().iterator().next();
- Assert.assertEquals(child.getPolicies().size(), 1);
+ Assert.assertEquals(child.policies().size(), 1);
Policy policy = child.policies().iterator().next();
Assert.assertNotNull(policy);
Assert.assertTrue(policy instanceof TestPolicy, "policy=" + policy + "; type=" + policy.getClass());
@@ -108,13 +108,13 @@ public class PoliciesYamlTest extends AbstractYamlTest {
final Entity child = firstEntity.getChildren().iterator().next();
Assert.assertEquals(child.getChildren().size(), 0);
- Assert.assertEquals(app.getPolicies().size(), 0);
- Assert.assertEquals(firstEntity.getPolicies().size(), 0);
+ Assert.assertEquals(app.policies().size(), 0);
+ Assert.assertEquals(firstEntity.policies().size(), 0);
Asserts.eventually(new Supplier<Integer>() {
@Override
public Integer get() {
- return child.getPolicies().size();
+ return child.policies().size();
}
}, Predicates.<Integer> equalTo(1));
@@ -200,7 +200,7 @@ public class PoliciesYamlTest extends AbstractYamlTest {
}
private Policy getPolicy(Entity entity) {
- Assert.assertEquals(entity.getPolicies().size(), 1);
+ Assert.assertEquals(entity.policies().size(), 1);
Policy policy = entity.policies().iterator().next();
Assert.assertTrue(policy instanceof TestReferencingPolicy);
return policy;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestEntityWithInitConfig.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestEntityWithInitConfig.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestEntityWithInitConfig.java
index 98892c4..e5fb2f3 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestEntityWithInitConfig.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestEntityWithInitConfig.java
@@ -19,7 +19,6 @@
package org.apache.brooklyn.camp.brooklyn;
import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.entity.EntityLocal;
import org.apache.brooklyn.api.entity.ImplementedBy;
import org.apache.brooklyn.config.ConfigKey;
import org.apache.brooklyn.core.config.BasicConfigKey;
@@ -27,7 +26,7 @@ import org.apache.brooklyn.core.entity.EntityInternal;
import org.apache.brooklyn.core.entity.trait.Startable;
@ImplementedBy(TestEntityWithInitConfigImpl.class)
-public interface TestEntityWithInitConfig extends Entity, Startable, EntityLocal, EntityInternal {
+public interface TestEntityWithInitConfig extends Entity, Startable, EntityInternal {
public static final ConfigKey<Entity> TEST_ENTITY = BasicConfigKey.builder(Entity.class)
.name("test.entity")
.build();
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestSensorAndEffectorInitializer.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestSensorAndEffectorInitializer.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestSensorAndEffectorInitializer.java
index a73dd8d..91c18ed 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestSensorAndEffectorInitializer.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/TestSensorAndEffectorInitializer.java
@@ -42,7 +42,6 @@ public class TestSensorAndEffectorInitializer implements EntityInitializer {
protected String helloWord() { return "Hello"; }
- @Override
public void apply(EntityLocal entity) {
Effector<String> eff = Effectors.effector(String.class, EFFECTOR_SAY_HELLO).parameter(String.class, "name").impl(
new EffectorBody<String>() {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/WindowsYamlLiveTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/WindowsYamlLiveTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/WindowsYamlLiveTest.java
index 15626db..a149f18 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/WindowsYamlLiveTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/WindowsYamlLiveTest.java
@@ -332,7 +332,7 @@ public class WindowsYamlLiveTest extends AbstractYamlTest {
String taskNameRegex = entry.getKey();
List<String> expectedOuts = entry.getValue();
- Task<?> subTask = findTaskOrSubTask(tasks, TaskPredicates.displayNameMatches(StringPredicates.matchesRegex(taskNameRegex))).get();
+ Task<?> subTask = findTaskOrSubTask(tasks, TaskPredicates.displayNameSatisfies(StringPredicates.matchesRegex(taskNameRegex))).get();
String stdin = getStreamOrFail(subTask, BrooklynTaskTags.STREAM_STDIN);
String stdout = getStreamOrFail(subTask, BrooklynTaskTags.STREAM_STDOUT);
@@ -352,7 +352,7 @@ public class WindowsYamlLiveTest extends AbstractYamlTest {
for (Map.Entry<String, Predicate<CharSequence>> entry : taskErrs.entrySet()) {
String taskNameRegex = entry.getKey();
Predicate<? super String> errChecker = entry.getValue();
- Task<?> subTask = findTaskOrSubTask(tasks, TaskPredicates.displayNameMatches(StringPredicates.matchesRegex(taskNameRegex))).get();
+ Task<?> subTask = findTaskOrSubTask(tasks, TaskPredicates.displayNameSatisfies(StringPredicates.matchesRegex(taskNameRegex))).get();
String msg = "regex="+taskNameRegex+"; task="+subTask;
assertNotNull(subTask, msg);
assertTrue(subTask.isDone(), msg);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogOsgiVersionMoreEntityTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogOsgiVersionMoreEntityTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogOsgiVersionMoreEntityTest.java
index 2d7a117..c426897 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogOsgiVersionMoreEntityTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogOsgiVersionMoreEntityTest.java
@@ -20,26 +20,26 @@ package org.apache.brooklyn.camp.brooklyn.catalog;
import static org.testng.Assert.assertTrue;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-import org.apache.brooklyn.api.catalog.BrooklynCatalog;
-import org.apache.brooklyn.api.catalog.CatalogItem;
-import org.apache.brooklyn.api.catalog.CatalogItem.CatalogItemType;
import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.entity.EntitySpec;
+import org.apache.brooklyn.api.location.Location;
import org.apache.brooklyn.api.location.LocationSpec;
import org.apache.brooklyn.api.policy.Policy;
import org.apache.brooklyn.api.policy.PolicySpec;
+import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.camp.brooklyn.AbstractYamlTest;
import org.apache.brooklyn.camp.brooklyn.spi.creation.BrooklynEntityMatcher;
-import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
import org.apache.brooklyn.core.mgmt.osgi.OsgiVersionMoreEntityTest;
import org.apache.brooklyn.core.objs.BrooklynTypes;
+import org.apache.brooklyn.core.typereg.RegisteredTypePredicates;
import org.apache.brooklyn.test.support.TestResourceUnavailableException;
import org.apache.brooklyn.util.core.ResourceUtils;
import org.apache.brooklyn.util.text.Strings;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.Assert;
+import org.testng.annotations.Test;
import com.google.common.collect.Iterables;
@@ -58,10 +58,10 @@ public class CatalogOsgiVersionMoreEntityTest extends AbstractYamlTest {
TestResourceUnavailableException.throwIfResourceUnavailable(getClass(), "/brooklyn/osgi/brooklyn-test-osgi-more-entities_0.1.0.jar");
addCatalogItems(getLocalResource("more-entity-v1-osgi-catalog.yaml"));
- CatalogItem<?, ?> item = CatalogUtils.getCatalogItemOptionalVersion(mgmt(), "more-entity");
+ RegisteredType item = mgmt().getTypeRegistry().get("more-entity");
Assert.assertNotNull(item);
Assert.assertEquals(item.getVersion(), "1.0");
- Assert.assertEquals(item.getCatalogItemType(), CatalogItemType.ENTITY);
+ Assert.assertTrue(RegisteredTypePredicates.IS_ENTITY.apply(item));
Assert.assertEquals(item.getLibraries().size(), 1);
Entity app = createAndStartApplication("services: [ { type: 'more-entity:1.0' } ]");
@@ -86,7 +86,7 @@ public class CatalogOsgiVersionMoreEntityTest extends AbstractYamlTest {
Assert.assertEquals(moreEntity.getCatalogItemId(), "more-entity:1.0");
- Assert.assertEquals(moreEntity.getPolicies().size(), 1, "wrong policies: "+moreEntity.getPolicies());
+ Assert.assertEquals(moreEntity.policies().size(), 1, "wrong policies: "+moreEntity.policies());
Policy policy = Iterables.getOnlyElement(moreEntity.policies());
// it was loaded by yaml w ref to catalog, so should have the simple-policy catalog-id
Assert.assertEquals(policy.getCatalogItemId(), "simple-policy:1.0");
@@ -105,7 +105,7 @@ public class CatalogOsgiVersionMoreEntityTest extends AbstractYamlTest {
OsgiVersionMoreEntityTest.assertV2EffectorCall(moreEntity);
OsgiVersionMoreEntityTest.assertV2MethodCall(moreEntity);
- Assert.assertEquals(moreEntity.getPolicies().size(), 1, "wrong policies: "+moreEntity.getPolicies());
+ Assert.assertEquals(moreEntity.policies().size(), 1, "wrong policies: "+moreEntity.policies());
Policy policy = Iterables.getOnlyElement(moreEntity.policies());
// it was loaded from the java so should have the base more-entity catalog id
Assert.assertEquals(policy.getCatalogItemId(), "more-entity:1.0");
@@ -177,13 +177,13 @@ public class CatalogOsgiVersionMoreEntityTest extends AbstractYamlTest {
log.info("autoscan for osgi found catalog items: "+Strings.join(mgmt().getCatalog().getCatalogItems(), ", "));
- CatalogItem<?, ?> item = CatalogUtils.getCatalogItemOptionalVersion(mgmt(), "more-entity");
+ RegisteredType item = mgmt().getTypeRegistry().get("more-entity");
Assert.assertNotNull(item);
Assert.assertEquals(item.getVersion(), "2.0.test");
- Assert.assertEquals(item.getCatalogItemType(), CatalogItemType.ENTITY);
+ Assert.assertTrue(RegisteredTypePredicates.IS_ENTITY.apply(item));
// this refers to the java item, where the libraries are defined
- item = CatalogUtils.getCatalogItemOptionalVersion(mgmt(), "org.apache.brooklyn.test.osgi.entities.more.MoreEntity");
+ item = mgmt().getTypeRegistry().get("org.apache.brooklyn.test.osgi.entities.more.MoreEntity");
Assert.assertEquals(item.getVersion(), "2.0.test_java");
Assert.assertEquals(item.getLibraries().size(), 2);
@@ -204,13 +204,13 @@ public class CatalogOsgiVersionMoreEntityTest extends AbstractYamlTest {
log.info("autoscan for osgi found catalog items: "+Strings.join(mgmt().getCatalog().getCatalogItems(), ", "));
- CatalogItem<?, ?> item = CatalogUtils.getCatalogItemOptionalVersion(mgmt(), "more-policy");
+ RegisteredType item = mgmt().getTypeRegistry().get("more-policy");
Assert.assertNotNull(item);
Assert.assertEquals(item.getVersion(), "2.0.test");
- Assert.assertEquals(item.getCatalogItemType(), CatalogItemType.POLICY);
+ Assert.assertTrue(RegisteredTypePredicates.IS_POLICY.apply(item));
// this refers to the java item, where the libraries are defined
- item = CatalogUtils.getCatalogItemOptionalVersion(mgmt(), "org.apache.brooklyn.test.osgi.entities.more.MorePolicy");
+ item = mgmt().getTypeRegistry().get("org.apache.brooklyn.test.osgi.entities.more.MorePolicy");
Assert.assertEquals(item.getVersion(), "2.0.test_java");
Assert.assertEquals(item.getLibraries().size(), 2);
@@ -233,27 +233,23 @@ public class CatalogOsgiVersionMoreEntityTest extends AbstractYamlTest {
addCatalogItems(getLocalResource("more-entities-osgi-catalog-scan.yaml"));
- log.info("autoscan for osgi found catalog items: "+Strings.join(mgmt().getCatalog().getCatalogItems(), ", "));
+ log.info("autoscan for osgi found catalog items: "+Strings.join(mgmt().getTypeRegistry().getAll(), ", "));
- BrooklynCatalog catalog = mgmt().getCatalog();
- Iterable<CatalogItem<Object, Object>> items = catalog.getCatalogItems();
- for (CatalogItem<Object, Object> item: items) {
- @SuppressWarnings({ "unchecked", "rawtypes" })
- Object spec = catalog.createSpec((CatalogItem)item);
- switch (item.getCatalogItemType()) {
- case TEMPLATE:
- case ENTITY:
- assertTrue(spec instanceof EntitySpec, "Not an EntitySpec: " + spec);
- BrooklynTypes.getDefinedEntityType(((EntitySpec<?>)spec).getType());
- break;
- case POLICY:
- assertTrue(spec instanceof PolicySpec, "Not a PolicySpec: " + spec);
- BrooklynTypes.getDefinedBrooklynType(((PolicySpec<?>)spec).getType());
- break;
- case LOCATION:
- assertTrue(spec instanceof LocationSpec, "Not a LocationSpec: " + spec);
- BrooklynTypes.getDefinedBrooklynType(((LocationSpec<?>)spec).getType());
- break;
+ BrooklynTypeRegistry types = mgmt().getTypeRegistry();
+ Iterable<RegisteredType> items = types.getAll();
+ for (RegisteredType item: items) {
+ Object spec = types.createSpec(item, null, null);
+ if (Entity.class.isAssignableFrom(item.getJavaType())) {
+ assertTrue(spec instanceof EntitySpec, "Not an EntitySpec: " + spec);
+ BrooklynTypes.getDefinedEntityType(((EntitySpec<?>)spec).getType());
+ } else if (Policy.class.isAssignableFrom(item.getJavaType())) {
+ assertTrue(spec instanceof PolicySpec, "Not a PolicySpec: " + spec);
+ BrooklynTypes.getDefinedBrooklynType(((PolicySpec<?>)spec).getType());
+ } else if (Location.class.isAssignableFrom(item.getJavaType())) {
+ assertTrue(spec instanceof LocationSpec, "Not a LocationSpec: " + spec);
+ BrooklynTypes.getDefinedBrooklynType(((LocationSpec<?>)spec).getType());
+ } else {
+ Assert.fail("Unexpected type: "+item.getJavaType()+" / "+item);
}
}
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogXmlOsgiTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogXmlOsgiTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogXmlOsgiTest.java
index 5a2362e..2161fec 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogXmlOsgiTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogXmlOsgiTest.java
@@ -18,11 +18,6 @@
*/
package org.apache.brooklyn.camp.brooklyn.catalog;
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.fail;
-
-import org.apache.brooklyn.util.exceptions.Exceptions;
-import org.apache.brooklyn.util.exceptions.PropagatedRuntimeException;
import org.testng.annotations.Test;
public class CatalogXmlOsgiTest extends AbstractCatalogXmlTest {
@@ -31,19 +26,12 @@ public class CatalogXmlOsgiTest extends AbstractCatalogXmlTest {
super("classpath://osgi-catalog.xml");
}
- //OSGi libraries not supported with old-style catalog items
- //We treat those catalog items just as an alias to the java type they hold.
- //No loader wrapping their libraries is ever created.
@Test
public void testOsgiItem() throws Exception {
- try {
- startApp("OsgiApp");
- fail();
- } catch (PropagatedRuntimeException e) {
- ClassNotFoundException ex = Exceptions.getFirstThrowableOfType(e, ClassNotFoundException.class);
- if (ex == null) throw e;
- assertEquals(ex.getMessage(), "org.apache.brooklyn.test.osgi.entities.SimpleApplication");
- }
+ startApp("OsgiApp");
+ // previously OSGi libraries were not supported with old-style catalog items;
+ // now they are (2015-10), even though the XML is not supported,
+ // we may use the same type instantiator from CAMP and elsewhere
}
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlCombiTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlCombiTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlCombiTest.java
index 8e10c20..8ce0023 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlCombiTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlCombiTest.java
@@ -60,7 +60,7 @@ public class CatalogYamlCombiTest extends AbstractYamlTest {
" type: A",
" brooklyn.config: { b: 1 }");
- RegisteredType item = mgmt().getTypeRegistry().get("B", TEST_VERSION, null, null);
+ RegisteredType item = mgmt().getTypeRegistry().get("B", TEST_VERSION);
Assert.assertNotNull(item);
Entity a = launchEntity("A");
@@ -113,7 +113,7 @@ public class CatalogYamlCombiTest extends AbstractYamlTest {
" brooklyn.policies:",
" - type: A");
- RegisteredType item = mgmt().getTypeRegistry().get("A", TEST_VERSION, null, null);
+ RegisteredType item = mgmt().getTypeRegistry().get("A", TEST_VERSION);
Assert.assertNotNull(item);
Entity b = launchEntity("B", false);
@@ -122,7 +122,7 @@ public class CatalogYamlCombiTest extends AbstractYamlTest {
Assert.assertEquals(Iterables.getOnlyElement(b.getLocations()).getConfig(ConfigKeys.newIntegerConfigKey("z")), (Integer)9);
- Policy p = Iterables.getOnlyElement(b.getPolicies());
+ Policy p = Iterables.getOnlyElement(b.policies());
Assert.assertTrue(ServiceRestarter.class.isInstance(p), "Wrong type: "+p);
Assert.assertEquals(p.getConfig(ConfigKeys.newIntegerConfigKey("a")), (Integer)99);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java
index 882332b..247f6b4 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java
@@ -531,9 +531,9 @@ public class CatalogYamlEntityTest extends AbstractYamlTest {
addCatalogOSGiEntity(id);
BrooklynTypeRegistry catalog = mgmt().getTypeRegistry();
RegisteredType item = catalog.get(id, TEST_VERSION);
- EntitySpec<?> spec = catalog.createSpec(item, EntitySpec.class);
+ EntitySpec<?> spec = catalog.createSpec(item, null, EntitySpec.class);
Assert.assertNotNull(spec);
- AbstractBrooklynObjectSpec<?,?> spec2 = catalog.createSpec(item, AbstractBrooklynObjectSpec.class);
+ AbstractBrooklynObjectSpec<?,?> spec2 = catalog.createSpec(item, null, null);
Assert.assertNotNull(spec2);
}
@@ -613,7 +613,7 @@ public class CatalogYamlEntityTest extends AbstractYamlTest {
" version: " + TEST_VERSION + "pre",
"",
"services:",
- "- type: org.apache.brooklyn.entity.stock.BasicEntity");
+ "- type: "+BasicEntity.class.getName());
addCatalogItems(
"brooklyn.catalog:",
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlLocationTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlLocationTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlLocationTest.java
index eebaea5..e13792d 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlLocationTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlLocationTest.java
@@ -118,7 +118,7 @@ public class CatalogYamlLocationTest extends AbstractYamlTest {
assertEquals(def.getId(), symbolicName);
assertEquals(def.getName(), symbolicName);
- LocationSpec spec = (LocationSpec) mgmt().getTypeRegistry().createSpec(item, LocationSpec.class);
+ LocationSpec spec = (LocationSpec) mgmt().getTypeRegistry().createSpec(item, null, LocationSpec.class);
assertEquals(spec.getType().getName(), expectedJavaType);
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlPolicyTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlPolicyTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlPolicyTest.java
index 062cb47..fbfe630 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlPolicyTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlPolicyTest.java
@@ -20,15 +20,15 @@ package org.apache.brooklyn.camp.brooklyn.catalog;
import static org.testng.Assert.assertEquals;
-import org.testng.annotations.Test;
-import org.apache.brooklyn.api.catalog.CatalogItem;
import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.policy.Policy;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.camp.brooklyn.AbstractYamlTest;
import org.apache.brooklyn.core.catalog.CatalogPredicates;
import org.apache.brooklyn.core.config.BasicConfigKey;
import org.apache.brooklyn.core.mgmt.osgi.OsgiStandaloneTest;
import org.apache.brooklyn.test.support.TestResourceUnavailableException;
+import org.testng.annotations.Test;
import com.google.common.collect.Iterables;
@@ -43,7 +43,7 @@ public class CatalogYamlPolicyTest extends AbstractYamlTest {
String symbolicName = "my.catalog.policy.id.load";
addCatalogOsgiPolicy(symbolicName, SIMPLE_POLICY_TYPE);
- CatalogItem<?, ?> item = mgmt().getCatalog().getCatalogItem(symbolicName, TEST_VERSION);
+ RegisteredType item = mgmt().getTypeRegistry().get(symbolicName, TEST_VERSION);
assertEquals(item.getSymbolicName(), symbolicName);
assertEquals(countCatalogPolicies(), 1);
@@ -57,7 +57,7 @@ public class CatalogYamlPolicyTest extends AbstractYamlTest {
String symbolicName = "my.catalog.policy.id.load";
addCatalogOsgiPolicyTopLevelSyntax(symbolicName, SIMPLE_POLICY_TYPE);
- CatalogItem<?, ?> item = mgmt().getCatalog().getCatalogItem(symbolicName, TEST_VERSION);
+ RegisteredType item = mgmt().getTypeRegistry().get(symbolicName, TEST_VERSION);
assertEquals(item.getSymbolicName(), symbolicName);
assertEquals(countCatalogPolicies(), 1);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlRebindTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlRebindTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlRebindTest.java
index 67ef06c..2996685 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlRebindTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlRebindTest.java
@@ -21,8 +21,8 @@ package org.apache.brooklyn.camp.brooklyn.catalog;
import static com.google.common.base.Preconditions.checkNotNull;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;
@@ -41,6 +41,7 @@ import org.apache.brooklyn.api.catalog.CatalogItem;
import org.apache.brooklyn.api.mgmt.rebind.mementos.BrooklynMementoPersister;
import org.apache.brooklyn.api.policy.Policy;
import org.apache.brooklyn.api.sensor.Enricher;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.camp.brooklyn.AbstractYamlRebindTest;
import org.apache.brooklyn.core.BrooklynFeatureEnablement;
import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
@@ -125,7 +126,7 @@ public class CatalogYamlRebindTest extends AbstractYamlRebindTest {
runRebindWithCatalogAndApp(RebindWithCatalogTestMode.STRIP_DEPRECATION_AND_ENABLEMENT_FROM_CATALOG_ITEM);
}
- @SuppressWarnings("unused")
+ @SuppressWarnings({ "unused", "deprecation" })
protected void runRebindWithCatalogAndApp(RebindWithCatalogTestMode mode) throws Exception {
String appSymbolicName = "my.catalog.app.id.load";
String appVersion = "0.1.0";
@@ -170,20 +171,12 @@ public class CatalogYamlRebindTest extends AbstractYamlRebindTest {
// Depending on test-mode, delete the catalog item, and then rebind
switch (mode) {
case DEPRECATE_CATALOG:
- appItem = CatalogUtils.getCatalogItemOptionalVersion(mgmt(), appSymbolicName+":"+appVersion);
- appItem.setDeprecated(true);
- mgmt().getCatalog().persist(appItem);
- locItem = CatalogUtils.getCatalogItemOptionalVersion(mgmt(), locSymbolicName+":"+locVersion);
- locItem.setDeprecated(true);
- mgmt().getCatalog().persist(locItem);
+ CatalogUtils.setDeprecated(mgmt(), appSymbolicName, appVersion, true);
+ CatalogUtils.setDeprecated(mgmt(), locSymbolicName, locVersion, true);
break;
case DISABLE_CATALOG:
- appItem = CatalogUtils.getCatalogItemOptionalVersion(mgmt(), appSymbolicName+":"+appVersion);
- appItem.setDisabled(true);
- mgmt().getCatalog().persist(appItem);
- locItem = CatalogUtils.getCatalogItemOptionalVersion(mgmt(), locSymbolicName+":"+locVersion);
- locItem.setDisabled(true);
- mgmt().getCatalog().persist(locItem);
+ CatalogUtils.setDisabled(mgmt(), appSymbolicName, appVersion, true);
+ CatalogUtils.setDisabled(mgmt(), locSymbolicName, locVersion, true);
break;
case DELETE_CATALOG:
mgmt().getCatalog().deleteCatalogItem(appSymbolicName, appVersion);
@@ -198,13 +191,7 @@ public class CatalogYamlRebindTest extends AbstractYamlRebindTest {
addCatalogItems(String.format(locCatalogFormat, locVersion));
break;
case STRIP_DEPRECATION_AND_ENABLEMENT_FROM_CATALOG_ITEM:
- //Make sure that the flags are actually removed from the XML instead of still being there with false values
- appItem.setDeprecated(true);
- appItem.setDisabled(true);
- mgmt().getCatalog().persist(appItem);
- locItem.setDisabled(true);
- locItem.setDeprecated(true);
- mgmt().getCatalog().persist(locItem);
+ // nothing here -- but below we rebind with these fields removed to ensure that we can rebind
break;
case NO_OP:
break; // no-op
@@ -244,8 +231,8 @@ public class CatalogYamlRebindTest extends AbstractYamlRebindTest {
assertFalse(Entities.isManaged(newEntity));
// Ensure catalog item is as expecpted
- CatalogItem<?, ?> newAppItem = mgmt().getCatalog().getCatalogItem(appSymbolicName, appVersion);
- CatalogItem<?, ?> newLocItem = mgmt().getCatalog().getCatalogItem(locSymbolicName, locVersion);
+ RegisteredType newAppItem = mgmt().getTypeRegistry().get(appSymbolicName, appVersion);
+ RegisteredType newLocItem = mgmt().getTypeRegistry().get(locSymbolicName, locVersion);
boolean itemDeployable;
switch (mode) {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlTemplateTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlTemplateTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlTemplateTest.java
index bc55be9..c3dbc48 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlTemplateTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlTemplateTest.java
@@ -18,18 +18,17 @@
*/
package org.apache.brooklyn.camp.brooklyn.catalog;
-import static org.testng.Assert.assertEquals;
-
+import org.apache.brooklyn.api.typereg.RegisteredType;
+import org.apache.brooklyn.camp.brooklyn.AbstractYamlTest;
+import org.apache.brooklyn.core.mgmt.osgi.OsgiStandaloneTest;
+import org.apache.brooklyn.core.typereg.RegisteredTypePredicates;
+import org.apache.brooklyn.core.typereg.RegisteredTypes;
+import org.apache.brooklyn.test.support.TestResourceUnavailableException;
+import org.apache.brooklyn.util.osgi.OsgiTestResources;
import org.testng.Assert;
import org.testng.TestListenerAdapter;
import org.testng.TestNG;
import org.testng.annotations.Test;
-import org.apache.brooklyn.api.catalog.CatalogItem;
-import org.apache.brooklyn.api.catalog.CatalogItem.CatalogItemType;
-import org.apache.brooklyn.camp.brooklyn.AbstractYamlTest;
-import org.apache.brooklyn.core.mgmt.osgi.OsgiStandaloneTest;
-import org.apache.brooklyn.util.osgi.OsgiTestResources;
-import org.apache.brooklyn.test.support.TestResourceUnavailableException;
public class CatalogYamlTemplateTest extends AbstractYamlTest {
@@ -38,12 +37,13 @@ public class CatalogYamlTemplateTest extends AbstractYamlTest {
@Test
public void testAddCatalogItem() throws Exception {
- CatalogItem<?, ?> item = makeItem();
- assertEquals(item.getCatalogItemType(), CatalogItemType.TEMPLATE);
- Assert.assertTrue(item.getPlanYaml().indexOf("sample comment")>=0,
- "YAML did not include original comments; it was:\n"+item.getPlanYaml());
- Assert.assertFalse(item.getPlanYaml().indexOf("description")>=0,
- "YAML included metadata which should have been excluded; it was:\n"+item.getPlanYaml());
+ RegisteredType item = makeItem();
+ Assert.assertTrue(RegisteredTypePredicates.IS_APPLICATION.apply(item), "item: "+item);
+ String yaml = RegisteredTypes.getImplementationDataStringForSpec(item);
+ Assert.assertTrue(yaml.indexOf("sample comment")>=0,
+ "YAML did not include original comments; it was:\n"+yaml);
+ Assert.assertFalse(yaml.indexOf("description")>=0,
+ "YAML included metadata which should have been excluded; it was:\n"+yaml);
deleteCatalogEntity("t1");
}
@@ -53,16 +53,17 @@ public class CatalogYamlTemplateTest extends AbstractYamlTest {
// this will fail with the Eclipse TestNG plugin -- use the static main instead to run in eclipse!
// see Yamls.KnownClassVersionException for details
- CatalogItem<?, ?> item = makeItem();
- Assert.assertTrue(item.getPlanYaml().indexOf("sample comment")>=0,
- "YAML did not include original comments; it was:\n"+item.getPlanYaml());
- Assert.assertFalse(item.getPlanYaml().indexOf("description")>=0,
- "YAML included metadata which should have been excluded; it was:\n"+item.getPlanYaml());
+ RegisteredType item = makeItem();
+ String yaml = RegisteredTypes.getImplementationDataStringForSpec(item);
+ Assert.assertTrue(yaml.indexOf("sample comment")>=0,
+ "YAML did not include original comments; it was:\n"+yaml);
+ Assert.assertFalse(yaml.indexOf("description")>=0,
+ "YAML included metadata which should have been excluded; it was:\n"+yaml);
deleteCatalogEntity("t1");
}
- private CatalogItem<?, ?> makeItem() {
+ private RegisteredType makeItem() {
TestResourceUnavailableException.throwIfResourceUnavailable(getClass(), OsgiStandaloneTest.BROOKLYN_TEST_OSGI_ENTITIES_PATH);
addCatalogItems(
@@ -80,8 +81,7 @@ public class CatalogYamlTemplateTest extends AbstractYamlTest {
" # this sample comment should be included",
" - type: " + SIMPLE_ENTITY_TYPE);
- CatalogItem<?, ?> item = mgmt().getCatalog().getCatalogItem("t1", TEST_VERSION);
- return item;
+ return mgmt().getTypeRegistry().get("t1", TEST_VERSION);
}
// convenience for running in eclipse when the TestNG plugin drags in old version of snake yaml
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlVersioningTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlVersioningTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlVersioningTest.java
index 68f73a8..f92f3a4 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlVersioningTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlVersioningTest.java
@@ -23,30 +23,31 @@ import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;
-import org.testng.Assert;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-import org.apache.brooklyn.api.catalog.BrooklynCatalog;
-import org.apache.brooklyn.api.catalog.CatalogItem;
import org.apache.brooklyn.api.entity.Entity;
+import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.camp.brooklyn.AbstractYamlTest;
-import org.apache.brooklyn.core.catalog.CatalogPredicates;
import org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog;
import org.apache.brooklyn.core.config.ConfigKeys;
+import org.apache.brooklyn.core.typereg.RegisteredTypePredicates;
+import org.apache.brooklyn.core.typereg.RegisteredTypes;
import org.apache.brooklyn.entity.stock.BasicApplication;
import org.apache.brooklyn.entity.stock.BasicEntity;
+import org.testng.Assert;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
import com.google.common.base.Predicates;
import com.google.common.collect.Iterables;
public class CatalogYamlVersioningTest extends AbstractYamlTest {
- private BrooklynCatalog catalog;
+ private BrooklynTypeRegistry types;
@BeforeMethod(alwaysRun = true)
public void setUp() {
super.setUp();
- catalog = mgmt().getCatalog();
+ types = mgmt().getTypeRegistry();
}
@Test
@@ -86,8 +87,9 @@ public class CatalogYamlVersioningTest extends AbstractYamlTest {
forceCatalogUpdate();
String expectedType = "org.apache.brooklyn.entity.stock.BasicApplication";
addCatalogEntity(symbolicName, version, expectedType);
- CatalogItem<?, ?> item = catalog.getCatalogItem(symbolicName, version);
- assertTrue(item.getPlanYaml().contains(expectedType), "Version not updated");
+ RegisteredType item = types.get(symbolicName, version);
+ String yaml = RegisteredTypes.getImplementationDataStringForSpec(item);
+ assertTrue(yaml.contains(expectedType), "Version not updated:\n"+yaml);
}
@Test
@@ -97,7 +99,7 @@ public class CatalogYamlVersioningTest extends AbstractYamlTest {
String v2 = "0.2.0";
addCatalogEntity(symbolicName, v1);
addCatalogEntity(symbolicName, v2);
- CatalogItem<?, ?> item = catalog.getCatalogItem(symbolicName, BasicBrooklynCatalog.DEFAULT_VERSION);
+ RegisteredType item = types.get(symbolicName, BasicBrooklynCatalog.DEFAULT_VERSION);
assertEquals(item.getVersion(), v2);
}
@@ -108,7 +110,7 @@ public class CatalogYamlVersioningTest extends AbstractYamlTest {
String v2 = "0.2.0-SNAPSHOT";
addCatalogEntity(symbolicName, v1);
addCatalogEntity(symbolicName, v2);
- CatalogItem<?, ?> item = catalog.getCatalogItem(symbolicName, BasicBrooklynCatalog.DEFAULT_VERSION);
+ RegisteredType item = types.get(symbolicName, BasicBrooklynCatalog.DEFAULT_VERSION);
assertEquals(item.getVersion(), v1);
}
@@ -117,18 +119,28 @@ public class CatalogYamlVersioningTest extends AbstractYamlTest {
String symbolicName = "sampleId";
String version = "0.1.0";
addCatalogEntity(symbolicName, version);
- assertTrue(catalog.getCatalogItems(CatalogPredicates.symbolicName(Predicates.equalTo(symbolicName))).iterator().hasNext());
- catalog.deleteCatalogItem(symbolicName, version);
- assertFalse(catalog.getCatalogItems(CatalogPredicates.symbolicName(Predicates.equalTo(symbolicName))).iterator().hasNext());
+
+ Iterable<RegisteredType> matches;
+ matches = types.getAll(RegisteredTypePredicates.symbolicName(Predicates.equalTo(symbolicName)));
+ assertTrue(matches.iterator().hasNext());
+
+ mgmt().getCatalog().deleteCatalogItem(symbolicName, version);
+ matches = types.getAll(RegisteredTypePredicates.symbolicName(Predicates.equalTo(symbolicName)));
+ assertFalse(matches.iterator().hasNext());
}
@Test
public void testDeleteDefault() {
String symbolicName = "sampleId";
addCatalogEntity(symbolicName, null);
- assertTrue(catalog.getCatalogItems(CatalogPredicates.symbolicName(Predicates.equalTo(symbolicName))).iterator().hasNext());
- catalog.deleteCatalogItem(symbolicName, BasicBrooklynCatalog.NO_VERSION);
- assertFalse(catalog.getCatalogItems(CatalogPredicates.symbolicName(Predicates.equalTo(symbolicName))).iterator().hasNext());
+
+ Iterable<RegisteredType> matches;
+ matches = types.getAll(RegisteredTypePredicates.symbolicName(Predicates.equalTo(symbolicName)));
+ assertTrue(matches.iterator().hasNext());
+
+ mgmt().getCatalog().deleteCatalogItem(symbolicName, BasicBrooklynCatalog.NO_VERSION);
+ matches = types.getAll(RegisteredTypePredicates.symbolicName(Predicates.equalTo(symbolicName)));
+ assertFalse(matches.iterator().hasNext());
}
@Test
@@ -138,7 +150,7 @@ public class CatalogYamlVersioningTest extends AbstractYamlTest {
String v2 = "0.2.0-SNAPSHOT";
addCatalogEntity(symbolicName, v1);
addCatalogEntity(symbolicName, v2);
- Iterable<CatalogItem<Object, Object>> items = catalog.getCatalogItems(CatalogPredicates.symbolicName(Predicates.equalTo(symbolicName)));
+ Iterable<RegisteredType> items = types.getAll(RegisteredTypePredicates.symbolicName(Predicates.equalTo(symbolicName)));
assertEquals(Iterables.size(items), 2);
}
@@ -200,9 +212,9 @@ public class CatalogYamlVersioningTest extends AbstractYamlTest {
" type: referrent\n" +
" version: 1.1"));
- Iterable<CatalogItem<Object, Object>> items = catalog.getCatalogItems(CatalogPredicates.symbolicName(Predicates.equalTo("referrer")));
+ Iterable<RegisteredType> items = types.getAll(RegisteredTypePredicates.symbolicName(Predicates.equalTo("referrer")));
Assert.assertEquals(Iterables.size(items), 1, "Wrong number of: "+items);
- CatalogItem<Object, Object> item = Iterables.getOnlyElement(items);
+ RegisteredType item = Iterables.getOnlyElement(items);
Assert.assertEquals(item.getVersion(), "1.0");
Entity app = createAndStartApplication(
@@ -227,8 +239,8 @@ public class CatalogYamlVersioningTest extends AbstractYamlTest {
}
private void assertSingleCatalogItem(String symbolicName, String version) {
- Iterable<CatalogItem<Object, Object>> items = catalog.getCatalogItems(CatalogPredicates.symbolicName(Predicates.equalTo(symbolicName)));
- CatalogItem<Object, Object> item = Iterables.getOnlyElement(items);
+ Iterable<RegisteredType> items = types.getAll(RegisteredTypePredicates.symbolicName(Predicates.equalTo(symbolicName)));
+ RegisteredType item = Iterables.getOnlyElement(items);
assertEquals(item.getSymbolicName(), symbolicName);
assertEquals(item.getVersion(), version);
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/test/lite/CampYamlLiteTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/test/lite/CampYamlLiteTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/test/lite/CampYamlLiteTest.java
index 9f2a377..cb0b169 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/test/lite/CampYamlLiteTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/test/lite/CampYamlLiteTest.java
@@ -30,6 +30,7 @@ import java.util.Map;
import org.apache.brooklyn.api.catalog.CatalogItem;
import org.apache.brooklyn.api.catalog.CatalogItem.CatalogBundle;
+import org.apache.brooklyn.api.entity.Application;
import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.entity.EntitySpec;
import org.apache.brooklyn.api.mgmt.Task;
@@ -53,6 +54,7 @@ import org.apache.brooklyn.core.mgmt.osgi.OsgiStandaloneTest;
import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
import org.apache.brooklyn.core.test.entity.TestApplication;
import org.apache.brooklyn.core.test.entity.TestEntity;
+import org.apache.brooklyn.core.typereg.RegisteredTypeConstraints;
import org.apache.brooklyn.core.typereg.RegisteredTypes;
import org.apache.brooklyn.test.support.TestResourceUnavailableException;
import org.apache.brooklyn.util.collections.MutableMap;
@@ -230,7 +232,7 @@ public class CampYamlLiteTest {
}
private void assertMgmtHasSampleMyCatalogApp(String symbolicName, String bundleUrl) {
- RegisteredType item = mgmt.getTypeRegistry().get(symbolicName, BrooklynTypeRegistry.RegisteredTypeKind.SPEC, null);
+ RegisteredType item = mgmt.getTypeRegistry().get(symbolicName, RegisteredTypeConstraints.spec(Entity.class));
assertNotNull(item, "failed to load item with id=" + symbolicName + " from catalog. Entries were: " +
Joiner.on(",").join(mgmt.getTypeRegistry().getAll()));
assertEquals(item.getSymbolicName(), symbolicName);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/rest-server/src/main/java/org/apache/brooklyn/rest/BrooklynWebConfig.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/BrooklynWebConfig.java b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/BrooklynWebConfig.java
index c2aaebd..601ff71 100644
--- a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/BrooklynWebConfig.java
+++ b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/BrooklynWebConfig.java
@@ -152,7 +152,7 @@ public class BrooklynWebConfig {
"SSL_RSA_WITH_3DES_EDE_CBC_SHA");
public final static boolean hasNoSecurityOptions(ConfigMap config) {
- return config.submap(ConfigPredicates.startingWith(BASE_NAME_SECURITY)).isEmpty();
+ return config.submap(ConfigPredicates.nameStartsWith(BASE_NAME_SECURITY)).isEmpty();
}
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/AbstractBrooklynRestResource.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/AbstractBrooklynRestResource.java b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/AbstractBrooklynRestResource.java
index a07e684..e4dacc9 100644
--- a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/AbstractBrooklynRestResource.java
+++ b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/AbstractBrooklynRestResource.java
@@ -23,7 +23,6 @@ import javax.servlet.ServletContext;
import javax.ws.rs.core.Context;
import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.entity.EntityLocal;
import org.apache.brooklyn.api.mgmt.ManagementContext;
import org.apache.brooklyn.core.config.render.RendererHints;
import org.apache.brooklyn.core.mgmt.ManagementContextInjectable;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/ApplicationResource.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/ApplicationResource.java b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/ApplicationResource.java
index c8c004c..699c860 100644
--- a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/ApplicationResource.java
+++ b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/ApplicationResource.java
@@ -42,9 +42,10 @@ import org.apache.brooklyn.api.entity.EntitySpec;
import org.apache.brooklyn.api.entity.Group;
import org.apache.brooklyn.api.location.Location;
import org.apache.brooklyn.api.mgmt.Task;
+import org.apache.brooklyn.api.objs.BrooklynObject;
import org.apache.brooklyn.api.sensor.AttributeSensor;
import org.apache.brooklyn.api.sensor.Sensor;
-import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
+import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry.RegisteredTypeKind;
import org.apache.brooklyn.core.config.ConstraintViolationException;
import org.apache.brooklyn.core.entity.Attributes;
import org.apache.brooklyn.core.entity.EntityPredicates;
@@ -57,6 +58,7 @@ import org.apache.brooklyn.core.mgmt.entitlement.Entitlements;
import org.apache.brooklyn.core.mgmt.entitlement.Entitlements.EntityAndItem;
import org.apache.brooklyn.core.mgmt.entitlement.Entitlements.StringAndArgument;
import org.apache.brooklyn.core.sensor.Sensors;
+import org.apache.brooklyn.core.typereg.RegisteredTypeConstraints;
import org.apache.brooklyn.entity.group.AbstractGroup;
import org.apache.brooklyn.rest.api.ApplicationApi;
import org.apache.brooklyn.rest.domain.ApplicationSpec;
@@ -73,6 +75,7 @@ import org.apache.brooklyn.util.collections.MutableMap;
import org.apache.brooklyn.util.core.ResourceUtils;
import org.apache.brooklyn.util.exceptions.Exceptions;
import org.apache.brooklyn.util.exceptions.UserFacingException;
+import org.apache.brooklyn.util.javalang.JavaClassNames;
import org.apache.brooklyn.util.text.Strings;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.node.ArrayNode;
@@ -144,8 +147,8 @@ public class ApplicationResource extends AbstractBrooklynRestResource implements
aRoot.put("parentId", entity.getParent().getId());
}
- if (!entity.getGroups().isEmpty())
- aRoot.put("groupIds", entitiesIdAsArray(entity.getGroups()));
+ if (!entity.groups().isEmpty())
+ aRoot.put("groupIds", entitiesIdAsArray(entity.groups()));
if (!entity.getChildren().isEmpty())
aRoot.put("children", entitiesIdAndNameAsArray(entity.getChildren()));
@@ -183,7 +186,7 @@ public class ApplicationResource extends AbstractBrooklynRestResource implements
return node;
}
- private ArrayNode entitiesIdAsArray(Collection<? extends Entity> entities) {
+ private ArrayNode entitiesIdAsArray(Iterable<? extends Entity> entities) {
ArrayNode node = mapper().createArrayNode();
for (Entity entity : entities) {
if (Entitlements.isEntitled(mgmt().getEntitlementManager(), Entitlements.SEE_ENTITY, entity)) {
@@ -398,17 +401,21 @@ public class ApplicationResource extends AbstractBrooklynRestResource implements
}
}
- private void checkEntityTypeIsValid(String type) {
- if (CatalogUtils.getCatalogItemOptionalVersion(mgmt(), type) == null) {
+ private void checkSpecTypeIsValid(String type, Class<? extends BrooklynObject> subType) {
+ if (mgmt().getTypeRegistry().get(type, RegisteredTypeConstraints.spec(subType)) == null) {
try {
brooklyn().getCatalogClassLoader().loadClass(type);
} catch (ClassNotFoundException e) {
log.debug("Class not found for type '" + type + "'; reporting 404", e);
throw WebResourceUtils.notFound("Undefined type '%s'", type);
}
- log.info("Entity type '{}' not defined in catalog but is on classpath; continuing", type);
+ log.info(JavaClassNames.simpleClassName(subType)+" type '{}' not defined in catalog but is on classpath; continuing", type);
}
}
+
+ private void checkEntityTypeIsValid(String type) {
+ checkSpecTypeIsValid(type, Entity.class);
+ }
@SuppressWarnings("deprecation")
private void checkLocationsAreValid(ApplicationSpec applicationSpec) {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/CatalogResource.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/CatalogResource.java b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/CatalogResource.java
index 38b7815..848701f 100644
--- a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/CatalogResource.java
+++ b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/CatalogResource.java
@@ -34,7 +34,6 @@ import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import org.apache.brooklyn.api.catalog.CatalogItem;
-import org.apache.brooklyn.api.catalog.CatalogItem.CatalogItemType;
import org.apache.brooklyn.api.entity.Application;
import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.entity.EntitySpec;
@@ -42,6 +41,7 @@ import org.apache.brooklyn.api.location.Location;
import org.apache.brooklyn.api.location.LocationSpec;
import org.apache.brooklyn.api.policy.Policy;
import org.apache.brooklyn.api.policy.PolicySpec;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.core.catalog.CatalogPredicates;
import org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog;
import org.apache.brooklyn.core.catalog.internal.CatalogDto;
@@ -49,6 +49,8 @@ import org.apache.brooklyn.core.catalog.internal.CatalogItemComparator;
import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
import org.apache.brooklyn.core.mgmt.entitlement.Entitlements;
import org.apache.brooklyn.core.mgmt.entitlement.Entitlements.StringAndArgument;
+import org.apache.brooklyn.core.typereg.RegisteredTypeConstraints;
+import org.apache.brooklyn.core.typereg.RegisteredTypePredicates;
import org.apache.brooklyn.rest.api.CatalogApi;
import org.apache.brooklyn.rest.domain.ApiError;
import org.apache.brooklyn.rest.domain.CatalogEntitySummary;
@@ -146,11 +148,9 @@ public class CatalogResource extends AbstractBrooklynRestResource implements Cat
Entitlements.getEntitlementContext().user());
}
try {
- CatalogItem<?, ?> item = CatalogUtils.getCatalogItemOptionalVersion(mgmt(), entityId);
+ RegisteredType item = mgmt().getTypeRegistry().get(entityId, RegisteredTypeConstraints.spec(Entity.class));
if (item==null) {
throw WebResourceUtils.notFound("Entity with id '%s' not found", entityId);
- } else if (item.getCatalogItemType() != CatalogItemType.ENTITY && item.getCatalogItemType() != CatalogItemType.TEMPLATE) {
- throw WebResourceUtils.preconditionFailed("Item with id '%s' not an entity", entityId);
}
brooklyn().getCatalog().deleteCatalogItem(item.getSymbolicName(), item.getVersion());
} catch (NoSuchElementException e) {
@@ -170,10 +170,10 @@ public class CatalogResource extends AbstractBrooklynRestResource implements Cat
Entitlements.getEntitlementContext().user());
}
- CatalogItem<?, ?> item = mgmt().getCatalog().getCatalogItem(symbolicName, version);
+ RegisteredType item = mgmt().getTypeRegistry().get(symbolicName, version);
if (item == null) {
throw WebResourceUtils.notFound("Entity with id '%s:%s' not found", symbolicName, version);
- } else if (item.getCatalogItemType() != CatalogItemType.ENTITY && item.getCatalogItemType() != CatalogItemType.TEMPLATE) {
+ } else if (!RegisteredTypePredicates.IS_ENTITY.apply(item) && !RegisteredTypePredicates.IS_APPLICATION.apply(item)) {
throw WebResourceUtils.preconditionFailed("Item with id '%s:%s' not an entity", symbolicName, version);
} else {
brooklyn().getCatalog().deleteCatalogItem(item.getSymbolicName(), item.getVersion());
@@ -187,10 +187,10 @@ public class CatalogResource extends AbstractBrooklynRestResource implements Cat
Entitlements.getEntitlementContext().user());
}
- CatalogItem<?, ?> item = mgmt().getCatalog().getCatalogItem(policyId, version);
+ RegisteredType item = mgmt().getTypeRegistry().get(policyId, version);
if (item == null) {
throw WebResourceUtils.notFound("Policy with id '%s:%s' not found", policyId, version);
- } else if (item.getCatalogItemType() != CatalogItemType.POLICY) {
+ } else if (!RegisteredTypePredicates.IS_POLICY.apply(item)) {
throw WebResourceUtils.preconditionFailed("Item with id '%s:%s' not a policy", policyId, version);
} else {
brooklyn().getCatalog().deleteCatalogItem(item.getSymbolicName(), item.getVersion());
@@ -204,10 +204,10 @@ public class CatalogResource extends AbstractBrooklynRestResource implements Cat
Entitlements.getEntitlementContext().user());
}
- CatalogItem<?, ?> item = mgmt().getCatalog().getCatalogItem(locationId, version);
+ RegisteredType item = mgmt().getTypeRegistry().get(locationId, version);
if (item == null) {
throw WebResourceUtils.notFound("Location with id '%s:%s' not found", locationId, version);
- } else if (item.getCatalogItemType() != CatalogItemType.LOCATION) {
+ } else if (!RegisteredTypePredicates.IS_LOCATION.apply(item)) {
throw WebResourceUtils.preconditionFailed("Item with id '%s:%s' not a location", locationId, version);
} else {
brooklyn().getCatalog().deleteCatalogItem(item.getSymbolicName(), item.getVersion());
@@ -404,8 +404,7 @@ public class CatalogResource extends AbstractBrooklynRestResource implements Cat
Entitlements.getEntitlementContext().user());
}
- CatalogItem<?,?> result = CatalogUtils.getCatalogItemOptionalVersion(mgmt(), itemId);
- return getCatalogItemIcon(result);
+ return getCatalogItemIcon( mgmt().getTypeRegistry().get(itemId) );
}
@Override
@@ -415,8 +414,7 @@ public class CatalogResource extends AbstractBrooklynRestResource implements Cat
Entitlements.getEntitlementContext().user());
}
- CatalogItem<?,?> result = brooklyn().getCatalog().getCatalogItem(itemId, version);
- return getCatalogItemIcon(result);
+ return getCatalogItemIcon(mgmt().getTypeRegistry().get(itemId, version));
}
@Override
@@ -426,33 +424,27 @@ public class CatalogResource extends AbstractBrooklynRestResource implements Cat
setDeprecated(itemId, deprecated);
}
+ @SuppressWarnings("deprecation")
@Override
public void setDeprecated(String itemId, boolean deprecated) {
if (!Entitlements.isEntitled(mgmt().getEntitlementManager(), Entitlements.MODIFY_CATALOG_ITEM, StringAndArgument.of(itemId, "deprecated"))) {
throw WebResourceUtils.unauthorized("User '%s' is not authorized to modify catalog",
Entitlements.getEntitlementContext().user());
}
- CatalogItem<?, ?> item = CatalogUtils.getCatalogItemOptionalVersion(mgmt(), itemId);
- if (item==null)
- throw WebResourceUtils.notFound("Catalog item with id '%s' not found", itemId);
- item.setDeprecated(deprecated);
- mgmt().getCatalog().persist(item);
+ CatalogUtils.setDeprecated(mgmt(), itemId, deprecated);
}
+ @SuppressWarnings("deprecation")
@Override
public void setDisabled(String itemId, boolean disabled) {
if (!Entitlements.isEntitled(mgmt().getEntitlementManager(), Entitlements.MODIFY_CATALOG_ITEM, StringAndArgument.of(itemId, "disabled"))) {
throw WebResourceUtils.unauthorized("User '%s' is not authorized to modify catalog",
Entitlements.getEntitlementContext().user());
}
- CatalogItem<?, ?> item = CatalogUtils.getCatalogItemOptionalVersion(mgmt(), itemId);
- if (item==null)
- throw WebResourceUtils.notFound("Catalog item with id '%s' not found", itemId);
- item.setDisabled(disabled);
- mgmt().getCatalog().persist(item);
+ CatalogUtils.setDisabled(mgmt(), itemId, disabled);
}
- private Response getCatalogItemIcon(CatalogItem<?, ?> result) {
+ private Response getCatalogItemIcon(RegisteredType result) {
String url = result.getIconUrl();
if (url==null) {
log.debug("No icon available for "+result+"; returning "+Status.NO_CONTENT);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/EffectorResource.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/EffectorResource.java b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/EffectorResource.java
index fd8dc47..4110d47 100644
--- a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/EffectorResource.java
+++ b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/EffectorResource.java
@@ -26,15 +26,8 @@ import java.util.concurrent.TimeoutException;
import javax.annotation.Nullable;
import javax.ws.rs.core.Response;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Function;
-import com.google.common.base.Predicate;
-import com.google.common.collect.FluentIterable;
-
import org.apache.brooklyn.api.effector.Effector;
-import org.apache.brooklyn.api.entity.EntityLocal;
+import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.mgmt.Task;
import org.apache.brooklyn.core.mgmt.entitlement.Entitlements;
import org.apache.brooklyn.core.mgmt.entitlement.Entitlements.StringAndArgument;
@@ -49,6 +42,12 @@ import org.apache.brooklyn.rest.util.WebResourceUtils;
import org.apache.brooklyn.util.exceptions.Exceptions;
import org.apache.brooklyn.util.guava.Maybe;
import org.apache.brooklyn.util.time.Time;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.collect.FluentIterable;
@HaHotStateRequired
public class EffectorResource extends AbstractBrooklynRestResource implements EffectorApi {
@@ -57,7 +56,7 @@ public class EffectorResource extends AbstractBrooklynRestResource implements Ef
@Override
public List<EffectorSummary> list(final String application, final String entityToken) {
- final EntityLocal entity = brooklyn().getEntity(application, entityToken);
+ final Entity entity = brooklyn().getEntity(application, entityToken);
return FluentIterable
.from(entity.getEntityType().getEffectors())
.filter(new Predicate<Effector<?>>() {
@@ -79,7 +78,7 @@ public class EffectorResource extends AbstractBrooklynRestResource implements Ef
@Override
public Response invoke(String application, String entityToken, String effectorName,
String timeout, Map<String, Object> parameters) {
- final EntityLocal entity = brooklyn().getEntity(application, entityToken);
+ final Entity entity = brooklyn().getEntity(application, entityToken);
// TODO check effectors?
Maybe<Effector<?>> effector = EffectorUtils.findEffectorDeclared(entity, effectorName);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/EntityConfigResource.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/EntityConfigResource.java b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/EntityConfigResource.java
index e0e9430..e483d0b 100644
--- a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/EntityConfigResource.java
+++ b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/EntityConfigResource.java
@@ -23,10 +23,7 @@ import static com.google.common.collect.Iterables.transform;
import java.util.List;
import java.util.Map;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.entity.EntityLocal;
import org.apache.brooklyn.config.ConfigKey;
import org.apache.brooklyn.core.config.BasicConfigKey;
import org.apache.brooklyn.core.entity.Entities;
@@ -41,6 +38,8 @@ import org.apache.brooklyn.util.core.flags.TypeCoercions;
import org.apache.brooklyn.util.core.task.ValueResolver;
import org.apache.brooklyn.util.text.Strings;
import org.apache.brooklyn.util.time.Duration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.common.base.Function;
import com.google.common.base.Predicates;
@@ -54,7 +53,7 @@ public class EntityConfigResource extends AbstractBrooklynRestResource implement
@Override
public List<EntityConfigSummary> list(final String application, final String entityToken) {
- final EntityLocal entity = brooklyn().getEntity(application, entityToken);
+ final Entity entity = brooklyn().getEntity(application, entityToken);
// TODO merge with keys which have values
return Lists.newArrayList(transform(
entity.getEntityType().getConfigKeys(),
@@ -71,7 +70,7 @@ public class EntityConfigResource extends AbstractBrooklynRestResource implement
@Override
public Map<String, Object> batchConfigRead(String application, String entityToken, Boolean raw) {
// TODO: add test
- EntityLocal entity = brooklyn().getEntity(application, entityToken);
+ Entity entity = brooklyn().getEntity(application, entityToken);
Map<ConfigKey<?>, ?> source = ((EntityInternal) entity).config().getBag().getAllConfigAsConfigKeyMap();
Map<String, Object> result = Maps.newLinkedHashMap();
for (Map.Entry<ConfigKey<?>, ?> ek : source.entrySet()) {
@@ -93,13 +92,13 @@ public class EntityConfigResource extends AbstractBrooklynRestResource implement
}
public Object get(boolean preferJson, String application, String entityToken, String configKeyName, Boolean raw) {
- EntityLocal entity = brooklyn().getEntity(application, entityToken);
+ Entity entity = brooklyn().getEntity(application, entityToken);
ConfigKey<?> ck = findConfig(entity, configKeyName);
Object value = ((EntityInternal)entity).config().getRaw(ck).orNull();
return resolving(value).preferJson(preferJson).asJerseyOutermostReturnValue(true).raw(raw).context(entity).timeout(ValueResolver.PRETTY_QUICK_WAIT).renderAs(ck).resolve();
}
- private ConfigKey<?> findConfig(EntityLocal entity, String configKeyName) {
+ private ConfigKey<?> findConfig(Entity entity, String configKeyName) {
ConfigKey<?> ck = entity.getEntityType().getConfigKey(configKeyName);
if (ck == null)
ck = new BasicConfigKey<Object>(Object.class, configKeyName);
@@ -109,7 +108,7 @@ public class EntityConfigResource extends AbstractBrooklynRestResource implement
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public void setFromMap(String application, String entityToken, Boolean recurse, Map newValues) {
- final EntityLocal entity = brooklyn().getEntity(application, entityToken);
+ final Entity entity = brooklyn().getEntity(application, entityToken);
if (!Entitlements.isEntitled(mgmt().getEntitlementManager(), Entitlements.MODIFY_ENTITY, entity)) {
throw WebResourceUtils.unauthorized("User '%s' is not authorized to modify entity '%s'",
Entitlements.getEntitlementContext().user(), entity);
@@ -134,7 +133,7 @@ public class EntityConfigResource extends AbstractBrooklynRestResource implement
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public void set(String application, String entityToken, String configName, Boolean recurse, Object newValue) {
- final EntityLocal entity = brooklyn().getEntity(application, entityToken);
+ final Entity entity = brooklyn().getEntity(application, entityToken);
if (!Entitlements.isEntitled(mgmt().getEntitlementManager(), Entitlements.MODIFY_ENTITY, entity)) {
throw WebResourceUtils.unauthorized("User '%s' is not authorized to modify entity '%s'",
Entitlements.getEntitlementContext().user(), entity);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/EntityResource.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/EntityResource.java b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/EntityResource.java
index d1290d2..9575236 100644
--- a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/EntityResource.java
+++ b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/EntityResource.java
@@ -35,16 +35,13 @@ import javax.ws.rs.core.Response.ResponseBuilder;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.core.UriInfo;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.entity.EntityLocal;
import org.apache.brooklyn.api.location.Location;
import org.apache.brooklyn.api.mgmt.Task;
import org.apache.brooklyn.core.mgmt.BrooklynTags;
+import org.apache.brooklyn.core.mgmt.BrooklynTags.NamedStringTag;
import org.apache.brooklyn.core.mgmt.BrooklynTaskTags;
import org.apache.brooklyn.core.mgmt.EntityManagementUtils;
-import org.apache.brooklyn.core.mgmt.BrooklynTags.NamedStringTag;
import org.apache.brooklyn.core.mgmt.EntityManagementUtils.CreationResult;
import org.apache.brooklyn.core.mgmt.entitlement.EntitlementPredicates;
import org.apache.brooklyn.core.mgmt.entitlement.Entitlements;
@@ -61,6 +58,8 @@ import org.apache.brooklyn.rest.util.WebResourceUtils;
import org.apache.brooklyn.util.collections.MutableList;
import org.apache.brooklyn.util.core.ResourceUtils;
import org.apache.brooklyn.util.time.Duration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.common.collect.Collections2;
import com.google.common.collect.FluentIterable;
@@ -112,7 +111,7 @@ public class EntityResource extends AbstractBrooklynRestResource implements Enti
@Override
public Response addChildren(String applicationToken, String entityToken, Boolean start, String timeoutS, String yaml) {
- final EntityLocal parent = brooklyn().getEntity(applicationToken, entityToken);
+ final Entity parent = brooklyn().getEntity(applicationToken, entityToken);
if (!Entitlements.isEntitled(mgmt().getEntitlementManager(), Entitlements.MODIFY_ENTITY, parent)) {
throw WebResourceUtils.unauthorized("User '%s' is not authorized to modify entity '%s'",
Entitlements.getEntitlementContext().user(), entityToken);
@@ -159,7 +158,7 @@ public class EntityResource extends AbstractBrooklynRestResource implements Enti
@Override
public Response getIcon(String applicationId, String entityId) {
- EntityLocal entity = brooklyn().getEntity(applicationId, entityId);
+ Entity entity = brooklyn().getEntity(applicationId, entityId);
String url = entity.getIconUrl();
if (url == null)
return Response.status(Status.NO_CONTENT).build();
@@ -186,7 +185,7 @@ public class EntityResource extends AbstractBrooklynRestResource implements Enti
@Override
public Response expunge(String application, String entity, boolean release) {
- EntityLocal entityLocal = brooklyn().getEntity(application, entity);
+ Entity entityLocal = brooklyn().getEntity(application, entity);
Task<?> task = brooklyn().expunge(entityLocal, release);
TaskSummary summary = TaskTransformer.FROM_TASK.apply(task);
return status(ACCEPTED).entity(summary).build();
@@ -206,7 +205,7 @@ public class EntityResource extends AbstractBrooklynRestResource implements Enti
@Override
public List<LocationSummary> getLocations(String application, String entity) {
List<LocationSummary> result = Lists.newArrayList();
- EntityLocal e = brooklyn().getEntity(application, entity);
+ Entity e = brooklyn().getEntity(application, entity);
for (Location l : e.getLocations()) {
result.add(LocationTransformer.newInstance(mgmt(), l, LocationDetailLevel.NONE));
}
@@ -215,7 +214,7 @@ public class EntityResource extends AbstractBrooklynRestResource implements Enti
@Override
public String getSpec(String applicationToken, String entityToken) {
- EntityLocal entity = brooklyn().getEntity(applicationToken, entityToken);
+ Entity entity = brooklyn().getEntity(applicationToken, entityToken);
NamedStringTag spec = BrooklynTags.findFirst(BrooklynTags.YAML_SPEC_KIND, entity.tags().getTags());
if (spec == null)
return null;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/LocationResource.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/LocationResource.java b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/LocationResource.java
index c6bf9e7..9f865b3 100644
--- a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/LocationResource.java
+++ b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/LocationResource.java
@@ -32,8 +32,10 @@ import org.slf4j.LoggerFactory;
import org.apache.brooklyn.api.catalog.CatalogItem;
import org.apache.brooklyn.api.location.Location;
import org.apache.brooklyn.api.location.LocationDefinition;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
import org.apache.brooklyn.core.location.LocationConfigKeys;
+import org.apache.brooklyn.core.typereg.RegisteredTypePredicates;
import org.apache.brooklyn.rest.api.LocationApi;
import org.apache.brooklyn.rest.domain.LocationSpec;
import org.apache.brooklyn.rest.domain.LocationSummary;
@@ -177,7 +179,7 @@ public class LocationResource extends AbstractBrooklynRestResource implements Lo
}
private int deleteAllVersions(String locationId) {
- CatalogItem<?, ?> item = CatalogUtils.getCatalogItemOptionalVersion(mgmt(), locationId);
+ RegisteredType item = mgmt().getTypeRegistry().get(locationId);
if (item==null) return 0;
brooklyn().getCatalog().deleteCatalogItem(item.getSymbolicName(), item.getVersion());
return 1 + deleteAllVersions(locationId);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/PolicyConfigResource.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/PolicyConfigResource.java b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/PolicyConfigResource.java
index 469eb0c..fe28576 100644
--- a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/PolicyConfigResource.java
+++ b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/PolicyConfigResource.java
@@ -24,7 +24,6 @@ import java.util.Map;
import javax.ws.rs.core.Response;
import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.entity.EntityLocal;
import org.apache.brooklyn.api.policy.Policy;
import org.apache.brooklyn.config.ConfigKey;
import org.apache.brooklyn.core.mgmt.entitlement.Entitlements;
@@ -46,7 +45,7 @@ public class PolicyConfigResource extends AbstractBrooklynRestResource implement
@Override
public List<PolicyConfigSummary> list(
final String application, final String entityToken, final String policyToken) {
- EntityLocal entity = brooklyn().getEntity(application, entityToken);
+ Entity entity = brooklyn().getEntity(application, entityToken);
Policy policy = brooklyn().getPolicy(entity, policyToken);
List<PolicyConfigSummary> result = Lists.newArrayList();
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/SensorResource.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/SensorResource.java b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/SensorResource.java
index 90e434a..303c0df 100644
--- a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/SensorResource.java
+++ b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/SensorResource.java
@@ -24,9 +24,7 @@ import static com.google.common.collect.Iterables.transform;
import java.util.List;
import java.util.Map;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.apache.brooklyn.api.entity.EntityLocal;
+import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.sensor.AttributeSensor;
import org.apache.brooklyn.api.sensor.Sensor;
import org.apache.brooklyn.core.entity.EntityInternal;
@@ -40,6 +38,8 @@ import org.apache.brooklyn.rest.util.WebResourceUtils;
import org.apache.brooklyn.util.core.task.ValueResolver;
import org.apache.brooklyn.util.text.Strings;
import org.apache.brooklyn.util.time.Duration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.common.base.Function;
import com.google.common.collect.Lists;
@@ -53,7 +53,7 @@ public class SensorResource extends AbstractBrooklynRestResource implements Sens
@SuppressWarnings("rawtypes")
@Override
public List<SensorSummary> list(final String application, final String entityToken) {
- final EntityLocal entity = brooklyn().getEntity(application, entityToken);
+ final Entity entity = brooklyn().getEntity(application, entityToken);
return Lists.newArrayList(transform(filter(entity.getEntityType().getSensors(), AttributeSensor.class),
new Function<AttributeSensor, SensorSummary>() {
@@ -66,7 +66,7 @@ public class SensorResource extends AbstractBrooklynRestResource implements Sens
@Override
public Map<String, Object> batchSensorRead(final String application, final String entityToken, final Boolean raw) {
- final EntityLocal entity = brooklyn().getEntity(application, entityToken);
+ final Entity entity = brooklyn().getEntity(application, entityToken);
Map<String, Object> sensorMap = Maps.newHashMap();
@SuppressWarnings("rawtypes")
Iterable<AttributeSensor> sensors = filter(entity.getEntityType().getSensors(), AttributeSensor.class);
@@ -80,7 +80,7 @@ public class SensorResource extends AbstractBrooklynRestResource implements Sens
}
protected Object get(boolean preferJson, String application, String entityToken, String sensorName, Boolean raw) {
- final EntityLocal entity = brooklyn().getEntity(application, entityToken);
+ final Entity entity = brooklyn().getEntity(application, entityToken);
AttributeSensor<?> sensor = findSensor(entity, sensorName);
Object value = entity.getAttribute(sensor);
return resolving(value).preferJson(preferJson).asJerseyOutermostReturnValue(true).raw(raw).context(entity).timeout(ValueResolver.PRETTY_QUICK_WAIT).renderAs(sensor).resolve();
@@ -96,7 +96,7 @@ public class SensorResource extends AbstractBrooklynRestResource implements Sens
return get(true, application, entityToken, sensorName, raw);
}
- private AttributeSensor<?> findSensor(EntityLocal entity, String name) {
+ private AttributeSensor<?> findSensor(Entity entity, String name) {
Sensor<?> s = entity.getEntityType().getSensor(name);
if (s instanceof AttributeSensor) return (AttributeSensor<?>) s;
return new BasicAttributeSensor<Object>(Object.class, name);
@@ -105,7 +105,7 @@ public class SensorResource extends AbstractBrooklynRestResource implements Sens
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public void setFromMap(String application, String entityToken, Map newValues) {
- final EntityLocal entity = brooklyn().getEntity(application, entityToken);
+ final Entity entity = brooklyn().getEntity(application, entityToken);
if (!Entitlements.isEntitled(mgmt().getEntitlementManager(), Entitlements.MODIFY_ENTITY, entity)) {
throw WebResourceUtils.unauthorized("User '%s' is not authorized to modify entity '%s'",
Entitlements.getEntitlementContext().user(), entity);
@@ -125,7 +125,7 @@ public class SensorResource extends AbstractBrooklynRestResource implements Sens
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public void set(String application, String entityToken, String sensorName, Object newValue) {
- final EntityLocal entity = brooklyn().getEntity(application, entityToken);
+ final Entity entity = brooklyn().getEntity(application, entityToken);
if (!Entitlements.isEntitled(mgmt().getEntitlementManager(), Entitlements.MODIFY_ENTITY, entity)) {
throw WebResourceUtils.unauthorized("User '%s' is not authorized to modify entity '%s'",
Entitlements.getEntitlementContext().user(), entity);
@@ -139,11 +139,11 @@ public class SensorResource extends AbstractBrooklynRestResource implements Sens
@Override
public void delete(String application, String entityToken, String sensorName) {
- final EntityLocal entity = brooklyn().getEntity(application, entityToken);
+ final Entity entity = brooklyn().getEntity(application, entityToken);
AttributeSensor<?> sensor = findSensor(entity, sensorName);
if (log.isDebugEnabled())
log.debug("REST user "+Entitlements.getEntitlementContext()+" deleting sensor "+sensorName);
- ((EntityInternal)entity).removeAttribute(sensor);
+ ((EntityInternal)entity).sensors().remove(sensor);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/ServerResource.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/ServerResource.java b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/ServerResource.java
index d0a90ea..a9fa4dc 100644
--- a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/ServerResource.java
+++ b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/resources/ServerResource.java
@@ -34,14 +34,7 @@ import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.FluentIterable;
-
import org.apache.brooklyn.api.entity.Application;
-import org.apache.brooklyn.api.entity.EntityLocal;
import org.apache.brooklyn.api.mgmt.ManagementContext;
import org.apache.brooklyn.api.mgmt.Task;
import org.apache.brooklyn.api.mgmt.entitlement.EntitlementContext;
@@ -82,6 +75,11 @@ import org.apache.brooklyn.util.text.Strings;
import org.apache.brooklyn.util.time.CountdownTimer;
import org.apache.brooklyn.util.time.Duration;
import org.apache.brooklyn.util.time.Time;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.FluentIterable;
public class ServerResource extends AbstractBrooklynRestResource implements ServerApi {
@@ -156,7 +154,7 @@ public class ServerResource extends AbstractBrooklynRestResource implements Serv
// Don't try to stop an already stopping app. Subsequent stops will complete faster
// cancelling the first stop task.
appState != Lifecycle.STOPPING) {
- stoppers.add(Entities.invokeEffector((EntityLocal)app, app, StartableApplication.STOP));
+ stoppers.add(Entities.invokeEffector(app, app, StartableApplication.STOP));
} else {
log.debug("App " + app + " is already stopping, will not stop second time. Will wait for original stop to complete.");
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/rest-server/src/main/java/org/apache/brooklyn/rest/transform/CatalogTransformer.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/transform/CatalogTransformer.java b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/transform/CatalogTransformer.java
index e3e53f9..4e9895f 100644
--- a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/transform/CatalogTransformer.java
+++ b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/transform/CatalogTransformer.java
@@ -64,6 +64,7 @@ public class CatalogTransformer {
Set<EffectorSummary> effectors = Sets.newTreeSet(SummaryComparators.nameComparator());
try {
+ @SuppressWarnings({ "unchecked", "rawtypes" })
EntitySpec<?> spec = (EntitySpec<?>) b.getCatalog().createSpec((CatalogItem) item);
EntityDynamicType typeMap = BrooklynTypes.getDefinedEntityType(spec.getType());
EntityType type = typeMap.getSnapshot();
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/rest-server/src/main/java/org/apache/brooklyn/rest/transform/EffectorTransformer.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/transform/EffectorTransformer.java b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/transform/EffectorTransformer.java
index a0c4627..a434659 100644
--- a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/transform/EffectorTransformer.java
+++ b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/transform/EffectorTransformer.java
@@ -26,7 +26,6 @@ import javax.annotation.Nullable;
import org.apache.brooklyn.api.effector.Effector;
import org.apache.brooklyn.api.effector.ParameterType;
import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.entity.EntityLocal;
import org.apache.brooklyn.rest.domain.EffectorSummary;
import org.apache.brooklyn.rest.domain.EffectorSummary.ParameterSummary;
import org.apache.brooklyn.rest.util.WebResourceUtils;
@@ -42,7 +41,7 @@ import com.google.common.collect.Iterables;
public class EffectorTransformer {
- public static EffectorSummary effectorSummary(final EntityLocal entity, Effector<?> effector) {
+ public static EffectorSummary effectorSummary(final Entity entity, Effector<?> effector) {
String applicationUri = "/v1/applications/" + entity.getApplicationId();
String entityUri = applicationUri + "/entities/" + entity.getId();
return new EffectorSummary(effector.getName(), effector.getReturnTypeName(),
[9/9] incubator-brooklyn git commit: This closes #993
Posted by he...@apache.org.
This closes #993
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/48e4fe3c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/48e4fe3c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/48e4fe3c
Branch: refs/heads/master
Commit: 48e4fe3ca0b5a00fbdec10bceec9f21edee25ded
Parents: c0021ca 2530296
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Mon Nov 2 16:42:45 2015 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Mon Nov 2 16:42:45 2015 +0000
----------------------------------------------------------------------
.../basic/relations/RelationshipType.java | 38 ---
.../brooklyn/api/catalog/BrooklynCatalog.java | 47 +--
.../brooklyn/api/catalog/CatalogItem.java | 12 +-
.../org/apache/brooklyn/api/entity/Entity.java | 6 +
.../internal/AbstractBrooklynObjectSpec.java | 14 +-
.../apache/brooklyn/api/mgmt/EntityManager.java | 2 +-
.../brooklyn/api/mgmt/ManagementContext.java | 4 +
.../brooklyn/api/objs/BrooklynObject.java | 3 +-
.../brooklyn/api/objs/BrooklynObjectType.java | 30 +-
.../apache/brooklyn/api/objs/BrooklynType.java | 3 +
.../api/relations/RelationshipType.java | 38 +++
.../api/typereg/BrooklynTypeRegistry.java | 68 ++++
.../brooklyn/api/typereg/OsgiBundleWithUrl.java | 36 +++
.../brooklyn/api/typereg/RegisteredType.java | 65 ++++
.../api/typereg/RegisteredTypeConstraint.java | 45 +++
.../catalog/internal/BasicBrooklynCatalog.java | 141 +++------
.../core/catalog/internal/CatalogBundleDto.java | 5 +-
.../internal/CatalogItemDtoAbstract.java | 2 +-
.../core/catalog/internal/CatalogUtils.java | 69 ++++-
.../internal/JavaCatalogToSpecTransformer.java | 23 +-
.../brooklyn/core/entity/AbstractEntity.java | 26 ++
.../apache/brooklyn/core/entity/Entities.java | 27 +-
.../brooklyn/core/entity/EntityRelations.java | 3 +-
.../core/entity/factory/ApplicationBuilder.java | 10 +-
.../core/location/BasicLocationRegistry.java | 37 ++-
.../core/location/CatalogLocationResolver.java | 6 +-
.../core/mgmt/EntityManagementUtils.java | 25 +-
.../OsgiBrooklynClassLoadingContext.java | 17 +-
.../brooklyn/core/mgmt/ha/OsgiManager.java | 47 +--
.../internal/AbstractManagementContext.java | 14 +-
.../core/mgmt/internal/LocalEntityManager.java | 1 +
.../mgmt/internal/ManagementTransitionMode.java | 2 +-
.../NonDeploymentManagementContext.java | 12 +-
.../BrooklynMementoPersisterToObjectStore.java | 10 +-
.../core/mgmt/persist/XmlMementoSerializer.java | 3 +-
.../AbstractBrooklynObjectRebindSupport.java | 3 +-
.../mgmt/rebind/RebindContextLookupContext.java | 9 +-
.../core/mgmt/rebind/RebindIteration.java | 30 +-
.../mgmt/rebind/dto/MementosGenerators.java | 3 +-
.../relations/AbstractBasicRelationSupport.java | 3 +-
.../relations/ByObjectBasicRelationSupport.java | 3 +-
.../core/relations/EmptyRelationSupport.java | 3 +-
.../core/relations/RelationshipTypes.java | 4 +-
.../brooklyn/core/resolve/ResolveUtils.java | 87 ------
.../entity/CatalogEntitySpecResolver.java | 60 ++--
.../resolve/entity/JavaEntitySpecResolver.java | 8 +
.../core/typereg/BasicBrooklynTypeRegistry.java | 120 +++++++
.../core/typereg/BasicOsgiBundleWithUrl.java | 101 ++++++
.../core/typereg/RegisteredTypeConstraints.java | 156 ++++++++++
.../core/typereg/RegisteredTypePredicates.java | 182 +++++++++++
.../brooklyn/core/typereg/RegisteredTypes.java | 245 +++++++++++++++
.../apache/brooklyn/util/core/osgi/Osgis.java | 2 +-
.../core/catalog/internal/CatalogDtoTest.java | 6 +-
.../core/catalog/internal/CatalogScanTest.java | 3 +-
.../core/catalog/internal/CatalogTestUtils.java | 47 ---
.../catalog/internal/CatalogVersioningTest.java | 2 +-
.../mgmt/osgi/OsgiVersionMoreEntityTest.java | 89 +++---
.../mgmt/persist/XmlMementoSerializerTest.java | 6 +-
.../rebind/ActivePartialRebindVersionTest.java | 22 +-
.../core/mgmt/rebind/RebindCatalogItemTest.java | 6 +-
.../core/mgmt/rebind/RebindTestFixture.java | 22 +-
.../core/relations/RelationshipTest.java | 3 +-
.../typereg/RegisteredTypePredicatesTest.java | 172 ++++++++++
.../BrooklynAssemblyTemplateInstantiator.java | 9 +-
.../BrooklynComponentTemplateResolver.java | 24 +-
.../BrooklynEntityDecorationResolver.java | 31 +-
.../spi/creation/CampToSpecTransformer.java | 8 +-
.../camp/brooklyn/spi/creation/CampUtils.java | 53 +++-
.../lookup/AbstractTemplateBrooklynLookup.java | 14 +-
.../lookup/AssemblyTemplateBrooklynLookup.java | 3 +-
...PlatformComponentTemplateBrooklynLookup.java | 3 +-
.../brooklyn/JavaWebAppsIntegrationTest.java | 2 +-
.../camp/brooklyn/PoliciesYamlTest.java | 14 +-
.../camp/brooklyn/TestEntityWithInitConfig.java | 3 +-
.../TestSensorAndEffectorInitializer.java | 1 -
.../camp/brooklyn/WindowsYamlLiveTest.java | 4 +-
.../CatalogOsgiVersionMoreEntityTest.java | 72 ++---
.../brooklyn/catalog/CatalogXmlOsgiTest.java | 20 +-
.../brooklyn/catalog/CatalogYamlCombiTest.java | 16 +-
.../brooklyn/catalog/CatalogYamlEntityTest.java | 41 ++-
.../catalog/CatalogYamlLocationTest.java | 27 +-
.../brooklyn/catalog/CatalogYamlPolicyTest.java | 8 +-
.../brooklyn/catalog/CatalogYamlRebindTest.java | 37 +--
.../catalog/CatalogYamlTemplateTest.java | 44 +--
.../catalog/CatalogYamlVersioningTest.java | 58 ++--
.../brooklyn/test/lite/CampYamlLiteTest.java | 22 +-
.../test/lite/TestAppAssemblyInstantiator.java | 1 -
.../apache/brooklyn/rest/BrooklynWebConfig.java | 2 +-
.../resources/AbstractBrooklynRestResource.java | 1 -
.../rest/resources/ApplicationResource.java | 21 +-
.../rest/resources/CatalogResource.java | 42 +--
.../rest/resources/EffectorResource.java | 19 +-
.../rest/resources/EntityConfigResource.java | 17 +-
.../brooklyn/rest/resources/EntityResource.java | 17 +-
.../rest/resources/LocationResource.java | 4 +-
.../rest/resources/PolicyConfigResource.java | 3 +-
.../brooklyn/rest/resources/SensorResource.java | 22 +-
.../brooklyn/rest/resources/ServerResource.java | 14 +-
.../rest/transform/CatalogTransformer.java | 1 +
.../rest/transform/EffectorTransformer.java | 3 +-
.../rest/transform/EntityTransformer.java | 3 +-
.../rest/transform/PolicyTransformer.java | 5 +-
.../rest/util/BrooklynRestResourceUtils.java | 310 +++++++++++--------
.../brooklyn/rest/util/WebResourceUtils.java | 2 +-
.../brooklyn/rest/domain/ApplicationTest.java | 3 +-
.../rest/resources/ApplicationResourceTest.java | 11 +-
.../rest/resources/CatalogResetTest.java | 7 +-
.../rest/resources/CatalogResourceTest.java | 8 +-
.../rest/resources/DescendantsTest.java | 15 +-
.../rest/resources/ScriptResourceTest.java | 12 +-
.../rest/resources/UsageResourceTest.java | 9 +-
.../brooklynnode/DeployBlueprintTest.java | 3 +-
.../rest/testing/mocks/CapitalizePolicy.java | 1 +
.../util/BrooklynRestResourceUtilsTest.java | 4 -
.../guava/IllegalStateExceptionSupplier.java | 24 +-
115 files changed, 2273 insertions(+), 1113 deletions(-)
----------------------------------------------------------------------
[6/9] incubator-brooklyn git commit: more converting CatalogItem
access to RegisteredType
Posted by he...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/core/src/main/java/org/apache/brooklyn/core/resolve/entity/CatalogEntitySpecResolver.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/resolve/entity/CatalogEntitySpecResolver.java b/core/src/main/java/org/apache/brooklyn/core/resolve/entity/CatalogEntitySpecResolver.java
index 399f9dc..70224aa 100644
--- a/core/src/main/java/org/apache/brooklyn/core/resolve/entity/CatalogEntitySpecResolver.java
+++ b/core/src/main/java/org/apache/brooklyn/core/resolve/entity/CatalogEntitySpecResolver.java
@@ -20,15 +20,10 @@ package org.apache.brooklyn.core.resolve.entity;
import java.util.Set;
-import org.apache.brooklyn.api.catalog.CatalogItem;
-import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.entity.EntitySpec;
-import org.apache.brooklyn.api.internal.AbstractBrooklynObjectSpec;
-import org.apache.brooklyn.api.mgmt.ManagementContext;
-import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
-import org.apache.brooklyn.core.mgmt.EntityManagementUtils;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.core.mgmt.classloading.BrooklynClassLoadingContext;
-import org.apache.brooklyn.core.mgmt.persist.DeserializingClassRenamesProvider;
+import org.apache.brooklyn.core.typereg.RegisteredTypeConstraints;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -41,27 +36,25 @@ public class CatalogEntitySpecResolver extends AbstractEntitySpecResolver {
super(RESOLVER_NAME);
}
+ // in 0.9.0 we've changed this *not* to perform
+ // symbolicName = DeserializingClassRenamesProvider.findMappedName(symbolicName);
+ // in belief that this should only apply to *java* loads TODO-type-registry confirm this
+
@Override
protected boolean canResolve(String type, BrooklynClassLoadingContext loader) {
String localType = getLocalType(type);
- CatalogItem<Entity, EntitySpec<?>> item = getCatalogItem(mgmt, localType);
- if (item != null) {
- try {
- //Keeps behaviour of previous functionality, but probably should throw instead when using disabled items.
- checkUsable(item);
- return true;
- } catch (IllegalStateException e) {
- return false;
- }
- } else {
- return false;
- }
+ RegisteredType item = mgmt.getTypeRegistry().get(localType);
+ if (item==null) return false;
+ //Keeps behaviour of previous functionality, but caller might be interested if item is disabled
+ if (item.isDisabled()) return false;
+
+ return true;
}
@Override
public EntitySpec<?> resolve(String type, BrooklynClassLoadingContext loader, Set<String> parentEncounteredTypes) {
String localType = getLocalType(type);
- CatalogItem<Entity, EntitySpec<?>> item = getCatalogItem(mgmt, localType);
+ RegisteredType item = mgmt.getTypeRegistry().get(localType);
if (item == null) return null;
checkUsable(item);
@@ -69,21 +62,14 @@ public class CatalogEntitySpecResolver extends AbstractEntitySpecResolver {
//Take the symbolicName part of the catalog item only for recursion detection to prevent
//cross referencing of different versions. Not interested in non-catalog item types.
//Prevent catalog items self-referencing even if explicitly different version.
- boolean nonRecursiveCall = !parentEncounteredTypes.contains(item.getSymbolicName());
- if (nonRecursiveCall) {
- // CatalogItem generics are just getting in the way, better get rid of them, we
- // are casting anyway.
- @SuppressWarnings({ "rawtypes" })
- CatalogItem rawItem = item;
- @SuppressWarnings({ "rawtypes", "unchecked" })
- AbstractBrooklynObjectSpec rawSpec = EntityManagementUtils.createCatalogSpec(mgmt, rawItem, parentEncounteredTypes);
- return (EntitySpec<?>) rawSpec;
- } else {
- return null;
- }
+ boolean recursiveCall = parentEncounteredTypes.contains(item.getSymbolicName());
+ if (recursiveCall) return null;
+ return mgmt.getTypeRegistry().createSpec(item,
+ RegisteredTypeConstraints.alreadyVisited(parentEncounteredTypes),
+ EntitySpec.class);
}
- private void checkUsable(CatalogItem<Entity, EntitySpec<?>> item) {
+ private void checkUsable(RegisteredType item) {
if (item.isDisabled()) {
throw new IllegalStateException("Illegal use of disabled catalog item "+item.getSymbolicName()+":"+item.getVersion());
} else if (item.isDeprecated()) {
@@ -91,9 +77,9 @@ public class CatalogEntitySpecResolver extends AbstractEntitySpecResolver {
}
}
- protected CatalogItem<Entity,EntitySpec<?>> getCatalogItem(ManagementContext mgmt, String brooklynType) {
- brooklynType = DeserializingClassRenamesProvider.findMappedName(brooklynType);
- return CatalogUtils.getCatalogItemOptionalVersion(mgmt, Entity.class, brooklynType);
- }
+// protected CatalogItem<Entity,EntitySpec<?>> getCatalogItem(ManagementContext mgmt, String brooklynType) {
+// brooklynType = DeserializingClassRenamesProvider.findMappedName(brooklynType);
+// return CatalogUtils.getCatalogItemOptionalVersion(mgmt, Entity.class, brooklynType);
+// }
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/core/src/main/java/org/apache/brooklyn/core/resolve/entity/JavaEntitySpecResolver.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/resolve/entity/JavaEntitySpecResolver.java b/core/src/main/java/org/apache/brooklyn/core/resolve/entity/JavaEntitySpecResolver.java
index b8ce013..047e11d 100644
--- a/core/src/main/java/org/apache/brooklyn/core/resolve/entity/JavaEntitySpecResolver.java
+++ b/core/src/main/java/org/apache/brooklyn/core/resolve/entity/JavaEntitySpecResolver.java
@@ -26,6 +26,7 @@ import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.entity.EntitySpec;
import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
import org.apache.brooklyn.core.mgmt.classloading.BrooklynClassLoadingContext;
+import org.apache.brooklyn.core.mgmt.persist.DeserializingClassRenamesProvider;
import org.apache.brooklyn.util.guava.Maybe;
import org.apache.brooklyn.util.javalang.Reflections;
@@ -37,6 +38,13 @@ public class JavaEntitySpecResolver extends AbstractEntitySpecResolver{
}
@Override
+ protected String getLocalType(String type) {
+ type = super.getLocalType(type);
+ type = DeserializingClassRenamesProvider.findMappedName(type);
+ return type;
+ }
+
+ @Override
protected boolean canResolve(String type, BrooklynClassLoadingContext loader) {
String localType = getLocalType(type);
Maybe<?> javaType = tryLoadJavaType(localType, loader);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/core/src/main/java/org/apache/brooklyn/core/typereg/BasicBrooklynTypeRegistry.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/typereg/BasicBrooklynTypeRegistry.java b/core/src/main/java/org/apache/brooklyn/core/typereg/BasicBrooklynTypeRegistry.java
index 3d418e4..0a9a229 100644
--- a/core/src/main/java/org/apache/brooklyn/core/typereg/BasicBrooklynTypeRegistry.java
+++ b/core/src/main/java/org/apache/brooklyn/core/typereg/BasicBrooklynTypeRegistry.java
@@ -18,22 +18,21 @@
*/
package org.apache.brooklyn.core.typereg;
+import javax.annotation.Nullable;
+
import org.apache.brooklyn.api.catalog.BrooklynCatalog;
import org.apache.brooklyn.api.catalog.CatalogItem;
import org.apache.brooklyn.api.internal.AbstractBrooklynObjectSpec;
import org.apache.brooklyn.api.mgmt.ManagementContext;
import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry;
-import org.apache.brooklyn.api.typereg.OsgiBundleWithUrl;
import org.apache.brooklyn.api.typereg.RegisteredType;
+import org.apache.brooklyn.api.typereg.RegisteredTypeConstraint;
+import org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog;
import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
-import org.apache.brooklyn.core.typereg.RegisteredTypes.JavaTypeImplementation;
import org.apache.brooklyn.core.typereg.RegisteredTypes.RegisteredSpecType;
-import org.apache.brooklyn.core.typereg.RegisteredTypes.TypeImplementation;
-import org.apache.brooklyn.util.collections.MutableList;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.Iterables;
@@ -49,74 +48,73 @@ public class BasicBrooklynTypeRegistry implements BrooklynTypeRegistry {
this.mgmt = mgmt;
}
- private static final Function<CatalogItem<?,?>,RegisteredType> CI_TO_RT = new Function<CatalogItem<?,?>, RegisteredType>() {
- @Override
- public RegisteredType apply(CatalogItem<?, ?> item) {
- if (item==null) return null;
- TypeImplementation impl = null;
- if (item.getPlanYaml()!=null) {
- impl = new TypeImplementation(null, item.getPlanYaml());
- }
- if (item.getJavaType()!=null) {
- impl = new JavaTypeImplementation(item.getJavaType());
- }
- if (impl!=null) {
- RegisteredSpecType type = new RegisteredSpecType(item.getSymbolicName(), item.getVersion(),
- item.getCatalogItemJavaType(), impl);
- type.bundles = MutableList.<OsgiBundleWithUrl>copyOf(item.getLibraries());
- type.displayName = item.getDisplayName();
- type.description = item.getDescription();
- type.iconUrl = item.getIconUrl();
-
- // TODO
- // disabled, deprecated
- // javaType, specType, registeredTypeName ...
- // tags ?
- return type;
- }
- throw new IllegalStateException("Unsupported catalog item "+item+" when trying to create RegisteredType");
- }
- };
-
public Iterable<RegisteredType> getAll() {
return getAll(Predicates.alwaysTrue());
}
+ @SuppressWarnings("deprecation")
@Override
public Iterable<RegisteredType> getAll(Predicate<? super RegisteredType> filter) {
- return Iterables.filter(Iterables.transform(mgmt.getCatalog().getCatalogItems(), CI_TO_RT), filter);
+ return Iterables.filter(Iterables.transform(mgmt.getCatalog().getCatalogItems(), RegisteredTypes.CI_TO_RT), filter);
}
+ @SuppressWarnings("deprecation")
@Override
- public RegisteredType get(String symbolicNameWithOptionalVersion, RegisteredTypeKind kind, Class<?> parentClass) {
+ public RegisteredType get(String symbolicName, String version, RegisteredTypeConstraint constraint) {
+ if (constraint==null) constraint = RegisteredTypeConstraints.any();
+ if (version==null) version = BrooklynCatalog.DEFAULT_VERSION;
+
+ // TODO lookup here, using constraints
+
+ // fallback to catalog
+ CatalogItem<?, ?> item = mgmt.getCatalog().getCatalogItem(symbolicName, version);
+ // TODO apply constraint
+ return RegisteredTypes.CI_TO_RT.apply( item );
+ }
+
+ @Override
+ public RegisteredType get(String symbolicName, String version) {
+ return get(symbolicName, version, null);
+ }
+
+ @Override
+ public RegisteredType get(String symbolicNameWithOptionalVersion, RegisteredTypeConstraint constraint) {
if (CatalogUtils.looksLikeVersionedId(symbolicNameWithOptionalVersion)) {
- String id = CatalogUtils.getSymbolicNameFromVersionedId(symbolicNameWithOptionalVersion);
+ String symbolicName = CatalogUtils.getSymbolicNameFromVersionedId(symbolicNameWithOptionalVersion);
String version = CatalogUtils.getVersionFromVersionedId(symbolicNameWithOptionalVersion);
- return get(id, version, kind, parentClass);
+ return get(symbolicName, version, constraint);
} else {
- return get(symbolicNameWithOptionalVersion, BrooklynCatalog.DEFAULT_VERSION, kind, parentClass);
+ return get(symbolicNameWithOptionalVersion, BrooklynCatalog.DEFAULT_VERSION, constraint);
}
}
@Override
- public RegisteredType get(String symbolicName, String version, RegisteredTypeKind kind, Class<?> parentClass) {
- return CI_TO_RT.apply( mgmt.getCatalog().getCatalogItem(symbolicName, version) );
+ public RegisteredType get(String symbolicNameWithOptionalVersion) {
+ return get(symbolicNameWithOptionalVersion, (RegisteredTypeConstraint)null);
}
+ @SuppressWarnings({ "deprecation", "unchecked", "rawtypes" })
@Override
- public RegisteredType get(String symbolicName, String version) {
- return get(symbolicName, version, null, null);
- }
-
- @SuppressWarnings({ "unchecked", "rawtypes" })
- @Override
- public <T extends AbstractBrooklynObjectSpec> T createSpec(RegisteredType type, Class<T> specKind) {
+ public <SpecT extends AbstractBrooklynObjectSpec<?,?>> SpecT createSpec(RegisteredType type, @Nullable RegisteredTypeConstraint constraint, Class<SpecT> specSuperType) {
if (!(type instanceof RegisteredSpecType)) {
throw new IllegalStateException("Cannot create spec from type "+type);
}
+ if (constraint!=null) {
+ if (constraint.getKind()!=null && constraint.getKind()!=RegisteredTypeKind.SPEC) {
+ throw new IllegalStateException("Cannot create spec with constraint "+constraint);
+ }
+ if (constraint.getEncounteredTypes().contains(type.getSymbolicName())) {
+ // avoid recursive cycle
+ // TODO implement using java if permitted
+ }
+ }
+ constraint = RegisteredTypeConstraints.extendedWithSpecSuperType(constraint, specSuperType);
+
+ // TODO look up in the actual registry
- CatalogItem item = mgmt.getCatalog().getCatalogItem(type.getSymbolicName(), type.getVersion());
- return (T) mgmt.getCatalog().createSpec(item);
+ // fallback: look up in (legacy) catalog
+ CatalogItem item = (CatalogItem) mgmt.getCatalog().getCatalogItem(type.getSymbolicName(), type.getVersion());
+ return (SpecT) BasicBrooklynCatalog.internalCreateSpecWithTransformers(mgmt, item, constraint.getEncounteredTypes());
}
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypeConstraints.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypeConstraints.java b/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypeConstraints.java
new file mode 100644
index 0000000..7f49335
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypeConstraints.java
@@ -0,0 +1,152 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.brooklyn.core.typereg;
+
+import groovy.xml.Entity;
+
+import java.util.Set;
+
+import org.apache.brooklyn.api.entity.EntitySpec;
+import org.apache.brooklyn.api.internal.AbstractBrooklynObjectSpec;
+import org.apache.brooklyn.api.objs.BrooklynObject;
+import org.apache.brooklyn.api.objs.BrooklynObjectType;
+import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry.RegisteredTypeKind;
+import org.apache.brooklyn.api.typereg.RegisteredTypeConstraint;
+import org.apache.brooklyn.util.collections.MutableSet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.collect.ImmutableSet;
+
+public class RegisteredTypeConstraints {
+
+ private static final Logger log = LoggerFactory.getLogger(RegisteredTypeConstraints.BasicRegisteredTypeConstraint.class);
+
+ public final static class BasicRegisteredTypeConstraint implements RegisteredTypeConstraint {
+ private RegisteredTypeKind kind;
+ private Class<?> javaSuperType;
+ private Set<String> encounteredTypes;
+
+ private BasicRegisteredTypeConstraint() {}
+
+ public BasicRegisteredTypeConstraint(RegisteredTypeConstraint source) {
+ if (source==null) return;
+
+ this.kind = source.getKind();
+ this.javaSuperType = source.getJavaSuperType();
+ this.encounteredTypes = source.getEncounteredTypes();
+ }
+
+ @Override
+ public RegisteredTypeKind getKind() {
+ return kind;
+ }
+
+ @Override
+ public Class<?> getJavaSuperType() {
+ if (javaSuperType==null) return Object.class;
+ return javaSuperType;
+ }
+
+ @Override
+ public Set<String> getEncounteredTypes() {
+ if (encounteredTypes==null) return ImmutableSet.of();
+ return ImmutableSet.<String>copyOf(encounteredTypes);
+ }
+
+ @Override
+ public String toString() {
+ return super.toString()+"["+kind+","+javaSuperType+","+encounteredTypes+"]";
+ }
+ }
+
+ /** returns a constraint which allows anything */
+ public static RegisteredTypeConstraint any() {
+ return new BasicRegisteredTypeConstraint();
+ }
+
+ public static RegisteredTypeConstraint alreadyVisited(Set<String> encounteredTypeSymbolicNames) {
+ BasicRegisteredTypeConstraint result = new BasicRegisteredTypeConstraint();
+ result.encounteredTypes = encounteredTypeSymbolicNames;
+ return result;
+ }
+ public static RegisteredTypeConstraint alreadyVisited(Set<String> encounteredTypeSymbolicNames, String anotherEncounteredType) {
+ BasicRegisteredTypeConstraint result = new BasicRegisteredTypeConstraint();
+ result.encounteredTypes = MutableSet.copyOf(encounteredTypeSymbolicNames);
+ if (anotherEncounteredType!=null) result.encounteredTypes.add(anotherEncounteredType);
+ return result;
+ }
+
+ private static RegisteredTypeConstraint of(RegisteredTypeKind kind, Class<? extends BrooklynObject> javaSuperType) {
+ BasicRegisteredTypeConstraint result = new BasicRegisteredTypeConstraint();
+ result.kind = kind;
+ result.javaSuperType = javaSuperType;
+ return result;
+ }
+
+ public static RegisteredTypeConstraint spec(Class<? extends BrooklynObject> javaSuperType) {
+ return of(RegisteredTypeKind.SPEC, javaSuperType);
+ }
+
+ public static <T extends AbstractBrooklynObjectSpec<?,?>> RegisteredTypeConstraint extendedWithSpecSuperType(RegisteredTypeConstraint source, Class<T> specSuperType) {
+ Class<?> superType = lookupTargetTypeForSpec(specSuperType);
+ BasicRegisteredTypeConstraint constraint = new BasicRegisteredTypeConstraint(source);
+ if (source==null) source = constraint;
+ if (source.getJavaSuperType()==null || source.getJavaSuperType().isAssignableFrom( superType )) {
+ // the constraint was weaker than present; return the new constraint
+ return constraint;
+ }
+ if (superType.isAssignableFrom( source.getJavaSuperType() )) {
+ // the constraint was already for something more specific; ignore what we've inferred here
+ return source;
+ }
+ // trickier situation; the constraint had a type not compatible with the spec type; log a warning and leave alone
+ // (e.g. caller specified some java super type which is not a super or sub of the spec target type;
+ // this may be because the caller specified a Spec as the type supertype, which is wrong;
+ // or they may have specified an interface along a different hierarchy, which we discouraged
+ // as it will make filtering/indexing more complex)
+ log.warn("Ambiguous spec supertypes ("+specSuperType+" for target "+source.getJavaSuperType()+"); "
+ + "it is recommended that any registered type constraint for a spec be compatible with the spec type");
+ return source;
+ }
+
+ /** given a spec, returns the class of the item it targets, for instance {@link EntitySpec} for {@link Entity} */
+ private static <T extends AbstractBrooklynObjectSpec<?,?>> Class<? extends BrooklynObject> lookupTargetTypeForSpec(Class<T> specSuperType) {
+ if (specSuperType==null) return BrooklynObject.class;
+ BrooklynObjectType best = null;
+
+ for (BrooklynObjectType t: BrooklynObjectType.values()) {
+ if (t.getSpecType()==null) continue;
+ if (!t.getSpecType().isAssignableFrom(specSuperType)) continue;
+ // on equality, exit immediately
+ if (t.getSpecType().equals(specSuperType)) return t.getInterfaceType();
+ // else pick which is best
+ if (best==null) { best = t; continue; }
+ // if t is more specific, it is better (handles case when e.g. a Policy is a subclass of Entity)
+ if (best.getSpecType().isAssignableFrom(t.getSpecType())) { best = t; continue; }
+ }
+ if (best==null) {
+ log.warn("Unexpected spec supertype ("+specSuperType+"); treating as any "+BrooklynObject.class, new Throwable("Trace for unexpected spec supertype"));
+ return BrooklynObject.class;
+ }
+ // the spec is more specific, but we're not familiar with it here; return the best
+ return best.getInterfaceType();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypePredicates.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypePredicates.java b/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypePredicates.java
index 7c719f2..271add5 100644
--- a/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypePredicates.java
+++ b/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypePredicates.java
@@ -20,6 +20,7 @@ package org.apache.brooklyn.core.typereg;
import javax.annotation.Nullable;
+import org.apache.brooklyn.api.catalog.BrooklynCatalog;
import org.apache.brooklyn.api.entity.Application;
import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.location.Location;
@@ -34,37 +35,37 @@ import com.google.common.base.Predicates;
public class RegisteredTypePredicates {
-// public static Predicate<RegisteredType> deprecated(final boolean deprecated) {
-// return new DeprecatedEqualTo(deprecated);
-// }
-//
-// private static class DeprecatedEqualTo implements Predicate<RegisteredType> {
-// private final boolean deprecated;
-//
-// public DeprecatedEqualTo(boolean deprecated) {
-// this.deprecated = deprecated;
-// }
-// @Override
-// public boolean apply(@Nullable RegisteredType item) {
-// return (item != null) && item.isDeprecated() == deprecated;
-// }
-// }
-//
-// public static Predicate<RegisteredType> disabled(boolean disabled) {
-// return new DisabledEqualTo(disabled);
-// }
-//
-// private static class DisabledEqualTo implements Predicate<RegisteredType> {
-// private final boolean disabled;
-//
-// public DisabledEqualTo(boolean disabled) {
-// this.disabled = disabled;
-// }
-// @Override
-// public boolean apply(@Nullable RegisteredType item) {
-// return (item != null) && item.isDisabled() == disabled;
-// }
-// }
+ public static Predicate<RegisteredType> deprecated(final boolean deprecated) {
+ return new DeprecatedEqualTo(deprecated);
+ }
+
+ private static class DeprecatedEqualTo implements Predicate<RegisteredType> {
+ private final boolean deprecated;
+
+ public DeprecatedEqualTo(boolean deprecated) {
+ this.deprecated = deprecated;
+ }
+ @Override
+ public boolean apply(@Nullable RegisteredType item) {
+ return (item != null) && item.isDeprecated() == deprecated;
+ }
+ }
+
+ public static Predicate<RegisteredType> disabled(boolean disabled) {
+ return new DisabledEqualTo(disabled);
+ }
+
+ private static class DisabledEqualTo implements Predicate<RegisteredType> {
+ private final boolean disabled;
+
+ public DisabledEqualTo(boolean disabled) {
+ this.disabled = disabled;
+ }
+ @Override
+ public boolean apply(@Nullable RegisteredType item) {
+ return (item != null) && item.isDisabled() == disabled;
+ }
+ }
@SuppressWarnings("unused")
private static final Function<RegisteredType,String> ID_OF_ITEM_TRANSFORMER_ANONYMOUS = new Function<RegisteredType, String>() {
@@ -140,6 +141,10 @@ public class RegisteredTypePredicates {
}
public static final Predicate<RegisteredType> IS_APPLICATION = javaTypeAssignableFrom(Application.class);
+ // TODO do we need this? introduced already deprecated in 0.9.0 so can be removed, or enabled
+ @Deprecated
+ public static final Predicate<RegisteredType> IS_TEMPLATE = IS_APPLICATION;
+
public static final Predicate<RegisteredType> IS_ENTITY = javaTypeAssignableFrom(Entity.class);
public static final Predicate<RegisteredType> IS_LOCATION = javaTypeAssignableFrom(Location.class);
public static final Predicate<RegisteredType> IS_POLICY = javaTypeAssignableFrom(Policy.class);
@@ -161,20 +166,26 @@ public class RegisteredTypePredicates {
}
}
-// public static Predicate<RegisteredType> isBestVersion(final ManagementContext mgmt) {
-// return new IsBestVersion(mgmt);
-// }
-//
-// private static class IsBestVersion implements Predicate<RegisteredType> {
-// private final ManagementContext mgmt;
-//
-// public IsBestVersion(ManagementContext mgmt) {
-// this.mgmt = mgmt;
-// }
-// @Override
-// public boolean apply(@Nullable RegisteredType item) {
-// return CatalogUtils.isBestVersion(mgmt, item);
-// }
-// }
-
+ public static Predicate<RegisteredType> isBestVersion(final ManagementContext mgmt) {
+ return new IsBestVersion(mgmt);
+ }
+
+ private static class IsBestVersion implements Predicate<RegisteredType> {
+ private final ManagementContext mgmt;
+
+ public IsBestVersion(ManagementContext mgmt) {
+ this.mgmt = mgmt;
+ }
+ @Override
+ public boolean apply(@Nullable RegisteredType item) {
+ return isBestVersion(mgmt, item);
+ }
+ }
+
+ public static boolean isBestVersion(ManagementContext mgmt, RegisteredType item) {
+ RegisteredType bestVersion = mgmt.getTypeRegistry().get(item.getSymbolicName(), BrooklynCatalog.DEFAULT_VERSION);
+ if (bestVersion==null) return false;
+ return (bestVersion.getVersion().equals(item.getVersion()));
+ }
+
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypes.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypes.java b/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypes.java
index 0668d0a..6013f6d 100644
--- a/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypes.java
+++ b/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypes.java
@@ -21,15 +21,56 @@ package org.apache.brooklyn.core.typereg;
import java.util.Collection;
import java.util.List;
+import org.apache.brooklyn.api.catalog.CatalogItem;
import org.apache.brooklyn.api.typereg.OsgiBundleWithUrl;
import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry.RegisteredTypeKind;
import org.apache.brooklyn.core.plan.PlanToSpecTransformer;
+import org.apache.brooklyn.util.collections.MutableList;
+import org.apache.brooklyn.util.javalang.JavaClassNames;
import com.google.common.annotations.Beta;
+import com.google.common.base.Function;
public class RegisteredTypes {
+ /** @deprecated since it was introduced in 0.9.0; for backwards compatibility only, may be removed at any point */
+ @Deprecated
+ static final Function<CatalogItem<?,?>,RegisteredType> CI_TO_RT = new Function<CatalogItem<?,?>, RegisteredType>() {
+ @Override
+ public RegisteredType apply(CatalogItem<?, ?> item) {
+ return of(item);
+ }
+ };
+
+ /** @deprecated since it was introduced in 0.9.0; for backwards compatibility only, may be removed at any point */
+ @Deprecated
+ public static RegisteredType of(CatalogItem<?, ?> item) {
+ if (item==null) return null;
+ TypeImplementation impl = null;
+ if (item.getPlanYaml()!=null) {
+ impl = new TypeImplementation(null, item.getPlanYaml());
+ } else if (item.getJavaType()!=null) {
+ impl = new JavaTypeImplementation(item.getJavaType());
+ } else {
+ throw new IllegalStateException("Unsupported catalog item "+item+" when trying to create RegisteredType");
+ }
+
+ RegisteredSpecType type = new RegisteredSpecType(item.getSymbolicName(), item.getVersion(),
+ item.getCatalogItemJavaType(), impl);
+ type.bundles = MutableList.<OsgiBundleWithUrl>copyOf(item.getLibraries());
+ type.displayName = item.getDisplayName();
+ type.description = item.getDescription();
+ type.iconUrl = item.getIconUrl();
+ type.disabled = item.isDisabled();
+ type.deprecated = item.isDeprecated();
+
+ // TODO
+ // javaType, specType, registeredTypeName ...
+ // tags ?
+ return type;
+ }
+
/** Visitor adapter which can be used to ensure all kinds are supported */
public static abstract class RegisteredTypeKindVisitor<T> {
public T visit(RegisteredType type) {
@@ -60,6 +101,8 @@ public class RegisteredTypes {
String displayName;
String description;
String iconUrl;
+ boolean deprecated;
+ boolean disabled;
// TODO ensure this is re-populated on rebind
transient Class<?> javaType;
@@ -106,9 +149,27 @@ public class RegisteredTypes {
}
@Override
+ public boolean isDisabled() {
+ return disabled;
+ }
+
+ @Override
+ public boolean isDeprecated() {
+ return deprecated;
+ }
+
+ @Override
public Class<?> getJavaType() {
return javaType;
}
+
+ @Override
+ public String toString() {
+ return JavaClassNames.simpleClassName(this)+"["+getId()+
+ (isDisabled() ? ";DISABLED" : "")+
+ (isDeprecated() ? ";deprecated" : "")+
+ "]";
+ }
}
// TODO
@@ -131,12 +192,12 @@ public class RegisteredTypes {
}
public static class TypeImplementation {
- final String kind;
+ final String format;
final Object data;
public TypeImplementation(String kind, Object data) {
super();
- this.kind = kind;
+ this.format = kind;
this.data = data;
}
@@ -145,8 +206,8 @@ public class RegisteredTypes {
* but in general we should look to determine the kind as early as possible and use that
* to retrieve the appropriate such transformer.
*/
- public String getKind() {
- return kind;
+ public String getFormat() {
+ return format;
}
public Object getData() {
@@ -155,18 +216,18 @@ public class RegisteredTypes {
}
public static class JavaTypeImplementation extends TypeImplementation {
- public static final String KIND = "java";
+ public static final String FORMAT = "java";
public JavaTypeImplementation(String javaType) {
- super(KIND, javaType);
+ super(FORMAT, javaType);
}
public String getJavaType() { return (String)getData(); }
}
// // TODO remove, unless we want it
// public static class CampYamlTypeImplementation extends TypeImplementation {
-// public static final String KIND = "camp";
+// public static final String FORMAT = "camp";
// public CampYamlTypeImplementation(String javaType) {
-// super(KIND, javaType);
+// super(FORMAT, javaType);
// }
// public String getCampYaml() { return (String)getData(); }
// }
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/core/src/test/java/org/apache/brooklyn/core/catalog/internal/CatalogTestUtils.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/catalog/internal/CatalogTestUtils.java b/core/src/test/java/org/apache/brooklyn/core/catalog/internal/CatalogTestUtils.java
deleted file mode 100644
index a448418..0000000
--- a/core/src/test/java/org/apache/brooklyn/core/catalog/internal/CatalogTestUtils.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.brooklyn.core.catalog.internal;
-
-import org.apache.brooklyn.api.catalog.CatalogItem;
-import org.apache.brooklyn.api.entity.EntitySpec;
-import org.apache.brooklyn.api.mgmt.ManagementContext;
-import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
-import org.apache.brooklyn.core.mgmt.classloading.BrooklynClassLoadingContext;
-
-import com.google.common.annotations.Beta;
-
-public class CatalogTestUtils {
-
- /** creates entity spec with the java type of a catalog item;
- * would be nice to have this in {@link CatalogUtils},
- * but the logic for parsing the yaml is buried in camp code,
- * so it's a little bit hard to make this a first class method.
- * <p>
- * (this impl ignores many things, including config and location.)
- */
- @Beta
- public static EntitySpec<?> createEssentialEntitySpec(ManagementContext mgmt, CatalogItem<?, ?> catalogItem) {
- BrooklynClassLoadingContext loader = CatalogUtils.newClassLoadingContext(mgmt, catalogItem);
- @SuppressWarnings({ "unchecked", "rawtypes" })
- EntitySpec<?> spec = EntitySpec.create( (Class)loader.loadClass(catalogItem.getJavaType()) );
- spec.catalogItemId(catalogItem.getId());
- return spec;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/core/src/test/java/org/apache/brooklyn/core/mgmt/osgi/OsgiVersionMoreEntityTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/osgi/OsgiVersionMoreEntityTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/osgi/OsgiVersionMoreEntityTest.java
index b434aa1..118ca39 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/osgi/OsgiVersionMoreEntityTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/osgi/OsgiVersionMoreEntityTest.java
@@ -18,34 +18,24 @@
*/
package org.apache.brooklyn.core.mgmt.osgi;
-import org.apache.brooklyn.util.osgi.OsgiTestResources;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;
import java.util.List;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleException;
-import org.osgi.framework.launch.Framework;
-import org.testng.Assert;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-import org.apache.brooklyn.api.catalog.CatalogItem;
import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.entity.EntitySpec;
import org.apache.brooklyn.api.mgmt.ManagementContext;
import org.apache.brooklyn.api.objs.BrooklynObject;
import org.apache.brooklyn.api.policy.PolicySpec;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.core.catalog.internal.CatalogEntityItemDto;
import org.apache.brooklyn.core.catalog.internal.CatalogItemBuilder;
import org.apache.brooklyn.core.catalog.internal.CatalogItemDtoAbstract;
-import org.apache.brooklyn.core.catalog.internal.CatalogTestUtils;
import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
import org.apache.brooklyn.core.effector.Effectors;
import org.apache.brooklyn.core.entity.Entities;
-import org.apache.brooklyn.core.mgmt.classloading.BrooklynClassLoadingContext;
import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext;
import org.apache.brooklyn.core.mgmt.internal.ManagementContextInternal;
import org.apache.brooklyn.core.objs.proxy.InternalEntityFactory;
@@ -53,14 +43,23 @@ import org.apache.brooklyn.core.objs.proxy.InternalPolicyFactory;
import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
import org.apache.brooklyn.core.test.entity.TestApplication;
import org.apache.brooklyn.test.support.TestResourceUnavailableException;
+import org.apache.brooklyn.util.collections.MutableList;
+import org.apache.brooklyn.util.core.osgi.OsgiTestBase;
import org.apache.brooklyn.util.core.osgi.Osgis;
import org.apache.brooklyn.util.guava.Maybe;
import org.apache.brooklyn.util.os.Os;
+import org.apache.brooklyn.util.osgi.OsgiTestResources;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleException;
+import org.osgi.framework.launch.Framework;
+import org.testng.Assert;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
-import org.apache.brooklyn.util.core.osgi.OsgiTestBase;
/**
@@ -135,18 +134,18 @@ public class OsgiVersionMoreEntityTest {
}
}
- protected CatalogItem<?, ?> addCatalogItemWithTypeAsName(String type, String version, String ...libraries) {
+ protected RegisteredType addCatalogItemWithTypeAsName(String type, String version, String ...libraries) {
return addCatalogItemWithNameAndType(type, version, type, libraries);
}
- protected CatalogItem<?, ?> addCatalogItemWithNameAndType(String symName, String version, String type, String ...libraries) {
+ protected RegisteredType addCatalogItemWithNameAndType(String symName, String version, String type, String ...libraries) {
return addCatalogItemWithNameAndType(mgmt, symName, version, type, libraries);
}
@SuppressWarnings("deprecation")
- static CatalogItem<?, ?> addCatalogItemWithNameAndType(ManagementContext mgmt, String symName, String version, String type, String ...libraries) {
+ static RegisteredType addCatalogItemWithNameAndType(ManagementContext mgmt, String symName, String version, String type, String ...libraries) {
CatalogEntityItemDto c1 = newCatalogItemWithNameAndType(symName, version, type, libraries);
mgmt.getCatalog().addItem(c1);
- CatalogItem<?, ?> c2 = mgmt.getCatalog().getCatalogItem(symName, version);
+ RegisteredType c2 = mgmt.getTypeRegistry().get(symName, version);
Preconditions.checkNotNull(c2, "Item "+type+":"+version+" was not found after adding it");
return c2;
}
@@ -163,12 +162,13 @@ public class OsgiVersionMoreEntityTest {
return c1;
}
- protected Entity addItemFromCatalog(CatalogItem<?, ?> c2) {
+ protected Entity addItemFromCatalog(RegisteredType c2) {
return addItemFromCatalog(mgmt, app, c2);
}
- public static Entity addItemFromCatalog(ManagementContext mgmt, TestApplication parent, CatalogItem<?, ?> c2) {
- return parent.createAndManageChild( CatalogTestUtils.createEssentialEntitySpec(mgmt, c2) );
+ @SuppressWarnings("unchecked")
+ public static Entity addItemFromCatalog(ManagementContext mgmt, TestApplication parent, RegisteredType c2) {
+ return parent.createAndManageChild( mgmt.getTypeRegistry().createSpec(c2, null, EntitySpec.class) );
}
public static void assertV1MethodCall(Entity me) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
@@ -199,7 +199,7 @@ public class OsgiVersionMoreEntityTest {
return me.invoke(Effectors.effector(String.class, "sayHI").buildAbstract(), ImmutableMap.of("name", "brooklyn")).getUnchecked();
}
- public static CatalogItem<?, ?> addMoreEntityV1(ManagementContext mgmt, String versionToRegister) {
+ public static RegisteredType addMoreEntityV1(ManagementContext mgmt, String versionToRegister) {
TestResourceUnavailableException.throwIfResourceUnavailable(OsgiVersionMoreEntityTest.class, BROOKLYN_TEST_MORE_ENTITIES_V1_PATH);
return addCatalogItemWithNameAndType(mgmt,
OsgiTestResources.BROOKLYN_TEST_MORE_ENTITIES_MORE_ENTITY,
@@ -207,7 +207,7 @@ public class OsgiVersionMoreEntityTest {
OsgiTestResources.BROOKLYN_TEST_MORE_ENTITIES_MORE_ENTITY,
BROOKLYN_TEST_MORE_ENTITIES_V1_URL);
}
- public static CatalogItem<?, ?> addMoreEntityV2(ManagementContext mgmt, String versionToRegister) {
+ public static RegisteredType addMoreEntityV2(ManagementContext mgmt, String versionToRegister) {
TestResourceUnavailableException.throwIfResourceUnavailable(OsgiVersionMoreEntityTest.class, BROOKLYN_TEST_MORE_ENTITIES_V1_PATH);
return addCatalogItemWithNameAndType(mgmt,
OsgiTestResources.BROOKLYN_TEST_MORE_ENTITIES_MORE_ENTITY,
@@ -221,7 +221,7 @@ public class OsgiVersionMoreEntityTest {
public void testMoreEntitiesV1() throws Exception {
TestResourceUnavailableException.throwIfResourceUnavailable(getClass(), BROOKLYN_TEST_MORE_ENTITIES_V1_PATH);
- CatalogItem<?, ?> c2 = addMoreEntityV1(mgmt, TEST_VERSION);
+ RegisteredType c2 = addMoreEntityV1(mgmt, TEST_VERSION);
// test load and instantiate
Entity me = addItemFromCatalog(c2);
@@ -231,18 +231,13 @@ public class OsgiVersionMoreEntityTest {
assertV1EffectorCall(me);
// test adding a child gets the right type; this time by entity parent hierarchy
- BrooklynClassLoadingContext loader = CatalogUtils.newClassLoadingContext(mgmt, c2);
- @SuppressWarnings({ "unchecked", "rawtypes" })
- Entity me2 = me.addChild(EntitySpec.create( (Class)loader.loadClass(c2.getJavaType()) ));
+ @SuppressWarnings({ "unchecked" })
+ Entity me2 = me.addChild( mgmt.getTypeRegistry().createSpec(c2, null, EntitySpec.class) );
Assert.assertEquals(me2.getCatalogItemId(), CatalogUtils.getVersionedId(OsgiTestResources.BROOKLYN_TEST_MORE_ENTITIES_MORE_ENTITY, TEST_VERSION));
}
- @SuppressWarnings({ "unchecked", "rawtypes" })
- protected PolicySpec<?> getPolicySpec(CatalogItem<?, ?> cp) {
- BrooklynClassLoadingContext loader = CatalogUtils.newClassLoadingContext(mgmt, cp);
- PolicySpec spec = PolicySpec.create( (Class)loader.loadClass(cp.getJavaType()) );
- spec.catalogItemId(cp.getId());
- return spec;
+ protected PolicySpec<?> getPolicySpec(RegisteredType cp) {
+ return mgmt.getTypeRegistry().createSpec(cp, null, PolicySpec.class);
}
@Test
@@ -250,7 +245,7 @@ public class OsgiVersionMoreEntityTest {
TestResourceUnavailableException.throwIfResourceUnavailable(getClass(), BROOKLYN_TEST_MORE_ENTITIES_V1_PATH);
TestResourceUnavailableException.throwIfResourceUnavailable(getClass(), BROOKLYN_TEST_OSGI_ENTITIES_PATH);
- CatalogItem<?, ?> c2 = addCatalogItemWithTypeAsName(
+ RegisteredType c2 = addCatalogItemWithTypeAsName(
OsgiTestResources.BROOKLYN_TEST_MORE_ENTITIES_MORE_ENTITY,
TEST_VERSION,
BROOKLYN_TEST_MORE_ENTITIES_V1_URL);
@@ -258,13 +253,13 @@ public class OsgiVersionMoreEntityTest {
// test load and instantiate
Entity me = addItemFromCatalog(c2);
- CatalogItem<?, ?> cp = addCatalogItemWithTypeAsName(
+ RegisteredType cp = addCatalogItemWithTypeAsName(
OsgiTestResources.BROOKLYN_TEST_OSGI_ENTITIES_SIMPLE_POLICY,
TEST_VERSION,
BROOKLYN_TEST_OSGI_ENTITIES_URL);
me.policies().add(getPolicySpec(cp));
- Assert.assertEquals(me.getPolicies().size(), 1, "Wrong number of policies: "+me.getPolicies());
+ Assert.assertEquals(me.policies().size(), 1, "Wrong number of policies: "+MutableList.copyOf(me.policies()));
String catalogItemId = Iterables.getOnlyElement( me.policies() ).getCatalogItemId();
Assert.assertNotNull(catalogItemId);
@@ -277,7 +272,7 @@ public class OsgiVersionMoreEntityTest {
public void testMoreEntitiesV2FailsWithoutBasicTestOsgiEntitiesBundle() throws Exception {
TestResourceUnavailableException.throwIfResourceUnavailable(getClass(), BROOKLYN_TEST_MORE_ENTITIES_V2_PATH);
- CatalogItem<?, ?> c2 = addCatalogItemWithTypeAsName(
+ RegisteredType c2 = addCatalogItemWithTypeAsName(
OsgiTestResources.BROOKLYN_TEST_MORE_ENTITIES_MORE_ENTITY,
TEST_VERSION,
BROOKLYN_TEST_MORE_ENTITIES_V2_URL);
@@ -299,7 +294,7 @@ public class OsgiVersionMoreEntityTest {
public void testMoreEntitiesV2() throws Exception {
TestResourceUnavailableException.throwIfResourceUnavailable(getClass(), BROOKLYN_TEST_MORE_ENTITIES_V2_PATH);
- CatalogItem<?, ?> c2 = addCatalogItemWithTypeAsName(
+ RegisteredType c2 = addCatalogItemWithTypeAsName(
OsgiTestResources.BROOKLYN_TEST_MORE_ENTITIES_MORE_ENTITY,
TEST_VERSION,
BROOKLYN_TEST_MORE_ENTITIES_V2_URL,
@@ -311,7 +306,7 @@ public class OsgiVersionMoreEntityTest {
assertV2MethodCall(me);
assertV2EffectorCall(me);
- Assert.assertEquals(me.getPolicies().size(), 1, "Wrong number of policies: "+me.getPolicies());
+ Assert.assertEquals(me.policies().size(), 1, "Wrong number of policies: "+MutableList.copyOf(me.policies()));
String catalogItemId = Iterables.getOnlyElement( me.policies() ).getCatalogItemId();
Assert.assertNotNull(catalogItemId);
@@ -334,11 +329,11 @@ public class OsgiVersionMoreEntityTest {
BROOKLYN_TEST_MORE_ENTITIES_V2_URL, BROOKLYN_TEST_OSGI_ENTITIES_URL);
// test load and instantiate
- Entity me = addItemFromCatalog( mgmt.getCatalog().getCatalogItem(OsgiTestResources.BROOKLYN_TEST_MORE_ENTITIES_MORE_ENTITY, TEST_VERSION) );
+ Entity me = addItemFromCatalog( mgmt.getTypeRegistry().get(OsgiTestResources.BROOKLYN_TEST_MORE_ENTITIES_MORE_ENTITY, TEST_VERSION) );
assertV2MethodCall(me);
assertV2EffectorCall(me);
- Assert.assertEquals(me.getPolicies().size(), 1, "Wrong number of policies: "+me.getPolicies());
+ Assert.assertEquals(me.policies().size(), 1, "Wrong number of policies: "+MutableList.copyOf(me.policies()));
}
@Test
@@ -356,7 +351,7 @@ public class OsgiVersionMoreEntityTest {
BROOKLYN_TEST_MORE_ENTITIES_V1_URL);
// test load and instantiate
- Entity me = addItemFromCatalog( mgmt.getCatalog().getCatalogItem(OsgiTestResources.BROOKLYN_TEST_MORE_ENTITIES_MORE_ENTITY, TEST_VERSION) );
+ Entity me = addItemFromCatalog( mgmt.getTypeRegistry().get(OsgiTestResources.BROOKLYN_TEST_MORE_ENTITIES_MORE_ENTITY, TEST_VERSION) );
/*
* WARNING - Weird maven-bundle-plugin and OSGi behaviour. Some caveats:
* <p>
@@ -383,7 +378,7 @@ public class OsgiVersionMoreEntityTest {
*/
assertV1MethodCall(me);
assertV1EffectorCall(me);
- Assert.assertEquals(me.getPolicies().size(), 0, "Wrong number of policies: "+me.getPolicies());
+ Assert.assertEquals(me.policies().size(), 0, "Wrong number of policies: "+MutableList.copyOf(me.policies()));
}
@Test
@@ -438,20 +433,20 @@ public class OsgiVersionMoreEntityTest {
// test entity resolution
- Entity v2 = addItemFromCatalog( mgmt.getCatalog().getCatalogItem("v2", TEST_VERSION) );
+ Entity v2 = addItemFromCatalog( mgmt.getTypeRegistry().get("v2", TEST_VERSION) );
assertV2MethodCall(v2);
assertV2EffectorCall(v2);
- Assert.assertEquals(v2.getPolicies().size(), 1, "Wrong number of policies: "+v2.getPolicies());
+ Assert.assertEquals(v2.policies().size(), 1, "Wrong number of policies: "+MutableList.copyOf(v2.policies()));
- Entity v2_evil = addItemFromCatalog( mgmt.getCatalog().getCatalogItem("v2-evil", TEST_VERSION) );
+ Entity v2_evil = addItemFromCatalog( mgmt.getTypeRegistry().get("v2-evil", TEST_VERSION) );
assertV2EvilTwinMethodCall(v2_evil);
assertV2EvilTwinEffectorCall(v2_evil);
- Assert.assertEquals(v2_evil.getPolicies().size(), 1, "Wrong number of policies: "+v2_evil.getPolicies());
+ Assert.assertEquals(v2_evil.policies().size(), 1, "Wrong number of policies: "+MutableList.copyOf(v2_evil.policies()));
- Entity v1 = addItemFromCatalog( mgmt.getCatalog().getCatalogItem("v1", TEST_VERSION) );
+ Entity v1 = addItemFromCatalog( mgmt.getTypeRegistry().get("v1", TEST_VERSION) );
assertV1MethodCall(v1);
assertV1EffectorCall(v1);
- Assert.assertEquals(v1.getPolicies().size(), 0, "Wrong number of policies: "+v1.getPolicies());
+ Assert.assertEquals(v1.policies().size(), 0, "Wrong number of policies: "+MutableList.copyOf(v1.policies()));
}
// TODO versioning (WIP until #92), install both V1 and V2 with version number, and test that both work
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/core/src/test/java/org/apache/brooklyn/core/mgmt/persist/XmlMementoSerializerTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/persist/XmlMementoSerializerTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/persist/XmlMementoSerializerTest.java
index 6bd850a..662e78d 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/persist/XmlMementoSerializerTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/persist/XmlMementoSerializerTest.java
@@ -43,9 +43,9 @@ import org.apache.brooklyn.api.objs.BrooklynObjectType;
import org.apache.brooklyn.api.policy.Policy;
import org.apache.brooklyn.api.sensor.Enricher;
import org.apache.brooklyn.api.sensor.Feed;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.core.catalog.internal.CatalogItemBuilder;
import org.apache.brooklyn.core.catalog.internal.CatalogItemDtoAbstract;
-import org.apache.brooklyn.core.catalog.internal.CatalogTestUtils;
import org.apache.brooklyn.core.entity.Entities;
import org.apache.brooklyn.core.location.SimulatedLocation;
import org.apache.brooklyn.core.mgmt.osgi.OsgiVersionMoreEntityTest;
@@ -304,11 +304,11 @@ public class XmlMementoSerializerTest {
TestResourceUnavailableException.throwIfResourceUnavailable(getClass(), OsgiTestResources.BROOKLYN_TEST_MORE_ENTITIES_V1_PATH);
ManagementContext mgmt = LocalManagementContextForTests.builder(true).disableOsgi(false).build();
try {
- CatalogItem<?, ?> ci = OsgiVersionMoreEntityTest.addMoreEntityV1(mgmt, "1.0");
+ RegisteredType ci = OsgiVersionMoreEntityTest.addMoreEntityV1(mgmt, "1.0");
EntitySpec<DynamicCluster> spec = EntitySpec.create(DynamicCluster.class)
.configure(DynamicCluster.INITIAL_SIZE, 1)
- .configure(DynamicCluster.MEMBER_SPEC, CatalogTestUtils.createEssentialEntitySpec(mgmt, ci));
+ .configure(DynamicCluster.MEMBER_SPEC, mgmt.getTypeRegistry().createSpec(ci, null, EntitySpec.class));
serializer.setLookupContext(new LookupContextImpl(mgmt,
ImmutableList.<Entity>of(), ImmutableList.<Location>of(), ImmutableList.<Policy>of(),
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/ActivePartialRebindVersionTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/ActivePartialRebindVersionTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/ActivePartialRebindVersionTest.java
index f420b43..7781b9b 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/ActivePartialRebindVersionTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/ActivePartialRebindVersionTest.java
@@ -18,20 +18,18 @@
*/
package org.apache.brooklyn.core.mgmt.rebind;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-import org.apache.brooklyn.api.catalog.CatalogItem;
import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.entity.EntitySpec;
-import org.apache.brooklyn.core.catalog.internal.CatalogTestUtils;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext;
import org.apache.brooklyn.core.mgmt.osgi.OsgiVersionMoreEntityTest;
-import org.apache.brooklyn.core.mgmt.rebind.RebindManagerImpl;
import org.apache.brooklyn.core.mgmt.rebind.transformer.CompoundTransformer;
import org.apache.brooklyn.entity.group.DynamicCluster;
import org.apache.brooklyn.util.collections.MutableList;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.Assert;
+import org.testng.annotations.Test;
public class ActivePartialRebindVersionTest extends RebindTestFixtureWithApp {
@@ -54,13 +52,13 @@ public class ActivePartialRebindVersionTest extends RebindTestFixtureWithApp {
@Test
public void testSwitchingVersions() throws Exception {
- CatalogItem<?, ?> catV1 = OsgiVersionMoreEntityTest.addMoreEntityV1(origManagementContext, "1.0");
+ RegisteredType catV1 = OsgiVersionMoreEntityTest.addMoreEntityV1(origManagementContext, "1.0");
Entity childV1 = OsgiVersionMoreEntityTest.addItemFromCatalog(origManagementContext, origApp, catV1);
OsgiVersionMoreEntityTest.assertV1EffectorCall(childV1);
// simply adding to catalog doesn't change
- CatalogItem<?, ?> catV2 = OsgiVersionMoreEntityTest.addMoreEntityV2(origManagementContext, "1.1");
+ RegisteredType catV2 = OsgiVersionMoreEntityTest.addMoreEntityV2(origManagementContext, "1.1");
OsgiVersionMoreEntityTest.assertV1EffectorCall(childV1);
Entity child2V2 = OsgiVersionMoreEntityTest.addItemFromCatalog(origManagementContext, origApp, catV2);
OsgiVersionMoreEntityTest.assertV2EffectorCall(child2V2);
@@ -83,8 +81,8 @@ public class ActivePartialRebindVersionTest extends RebindTestFixtureWithApp {
@Test
public void testSwitchingVersionsInCluster() throws Exception {
- CatalogItem<?, ?> catV1 = OsgiVersionMoreEntityTest.addMoreEntityV1(origManagementContext, "1.0");
- CatalogItem<?, ?> catV2 = OsgiVersionMoreEntityTest.addMoreEntityV2(origManagementContext, "1.1");
+ RegisteredType catV1 = OsgiVersionMoreEntityTest.addMoreEntityV1(origManagementContext, "1.0");
+ RegisteredType catV2 = OsgiVersionMoreEntityTest.addMoreEntityV2(origManagementContext, "1.1");
// could do a yaml test in a downstream project (no camp available here)
// CreationResult<List<Entity>, List<String>> clusterR = EntityManagementUtils.addChildren(origApp,
@@ -94,7 +92,7 @@ public class ActivePartialRebindVersionTest extends RebindTestFixtureWithApp {
// + " entitySpec: { type: "+catV1.getId()+" }\n", true);
DynamicCluster cluster = origApp.createAndManageChild(EntitySpec.create(DynamicCluster.class)
.configure(DynamicCluster.INITIAL_SIZE, 1)
- .configure(DynamicCluster.MEMBER_SPEC, CatalogTestUtils.createEssentialEntitySpec(origManagementContext, catV1))
+ .configure(DynamicCluster.MEMBER_SPEC, origManagementContext.getTypeRegistry().createSpec(catV1, null, EntitySpec.class))
);
cluster.start(MutableList.of(origApp.newSimulatedLocation()));
Entity childV1 = MutableList.copyOf(cluster.getChildren()).get(1);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindCatalogItemTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindCatalogItemTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindCatalogItemTest.java
index 2bea3a2..e336a4f 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindCatalogItemTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindCatalogItemTest.java
@@ -29,6 +29,7 @@ import org.apache.brooklyn.api.catalog.CatalogItem;
import org.apache.brooklyn.api.catalog.CatalogItem.CatalogItemType;
import org.apache.brooklyn.api.entity.EntitySpec;
import org.apache.brooklyn.api.mgmt.ManagementContext;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.core.BrooklynFeatureEnablement;
import org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog;
import org.apache.brooklyn.core.catalog.internal.CatalogDto;
@@ -44,6 +45,7 @@ import org.apache.brooklyn.core.test.entity.TestEntity;
import org.apache.brooklyn.location.localhost.LocalhostMachineProvisioningLocation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
@@ -262,14 +264,14 @@ public class RebindCatalogItemTest extends RebindTestFixtureWithApp {
item.setDeprecated(true);
catalog.persist(item);
rebindAndAssertCatalogsAreEqual();
- CatalogItem<?, ?> catalogItemAfterRebind = newManagementContext.getCatalog().getCatalogItem("rebind-yaml-catalog-item-test", TEST_VERSION);
+ RegisteredType catalogItemAfterRebind = newManagementContext.getTypeRegistry().get("rebind-yaml-catalog-item-test", TEST_VERSION);
assertTrue(catalogItemAfterRebind.isDeprecated(), "Expected item to be deprecated");
}
protected void deleteItem(ManagementContext mgmt, String symbolicName, String version) {
mgmt.getCatalog().deleteCatalogItem(symbolicName, version);
LOG.info("Deleted item from catalog: {}:{}", symbolicName, version);
- assertCatalogDoesNotContain(mgmt.getCatalog(), symbolicName, version);
+ Assert.assertNull( mgmt.getTypeRegistry().get(symbolicName, version) );
}
private void rebindAndAssertCatalogsAreEqual() {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestFixture.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestFixture.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestFixture.java
index 921ea9e..0135229 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestFixture.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestFixture.java
@@ -317,14 +317,14 @@ public abstract class RebindTestFixture<T extends StartableApplication> {
assertEquals(actual.getLibraries(), expected.getLibraries());
}
- protected void assertCatalogContains(BrooklynCatalog catalog, CatalogItem<?, ?> item) {
- CatalogItem<?, ?> found = catalog.getCatalogItem(item.getSymbolicName(), item.getVersion());
- assertNotNull(found);
- assertCatalogItemsEqual(found, item);
- }
-
- protected void assertCatalogDoesNotContain(BrooklynCatalog catalog, String symbolicName, String version) {
- CatalogItem<?, ?> found = catalog.getCatalogItem(symbolicName, version);
- assertNull(found);
- }
+// protected void assertCatalogContains(BrooklynCatalog catalog, CatalogItem<?, ?> item) {
+// CatalogItem<?, ?> found = catalog.getCatalogItem(item.getSymbolicName(), item.getVersion());
+// assertNotNull(found);
+// assertCatalogItemsEqual(found, item);
+// }
+//
+// protected void assertCatalogDoesNotContain(BrooklynCatalog catalog, String symbolicName, String version) {
+// CatalogItem<?, ?> found = catalog.getCatalogItem(symbolicName, version);
+// assertNull(found);
+// }
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/core/src/test/java/org/apache/brooklyn/core/typereg/RegisteredTypePredicatesTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/typereg/RegisteredTypePredicatesTest.java b/core/src/test/java/org/apache/brooklyn/core/typereg/RegisteredTypePredicatesTest.java
new file mode 100644
index 0000000..145c056
--- /dev/null
+++ b/core/src/test/java/org/apache/brooklyn/core/typereg/RegisteredTypePredicatesTest.java
@@ -0,0 +1,172 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.brooklyn.core.typereg;
+
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+
+import org.apache.brooklyn.api.catalog.CatalogItem;
+import org.apache.brooklyn.api.typereg.RegisteredType;
+import org.apache.brooklyn.core.catalog.internal.CatalogItemBuilder;
+import org.apache.brooklyn.core.entity.Entities;
+import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext;
+import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Predicates;
+
+
+public class RegisteredTypePredicatesTest {
+ private LocalManagementContext mgmt;
+
+ @BeforeMethod(alwaysRun = true)
+ public void setUp() throws Exception {
+ mgmt = LocalManagementContextForTests.newInstance();
+ }
+
+ @AfterMethod(alwaysRun = true)
+ public void tearDown() throws Exception {
+ if (mgmt != null) Entities.destroyAll(mgmt);
+ }
+
+ @Test
+ public void testDisplayName() {
+ RegisteredType item = createItem(CatalogItemBuilder.newEntity("foo", "1.0")
+ .plan("services:\n- type: org.apache.brooklyn.entity.stock.BasicEntity")
+ .displayName("myname")
+ .build());
+
+ assertTrue(RegisteredTypePredicates.displayName(Predicates.equalTo("myname")).apply(item));
+ assertFalse(RegisteredTypePredicates.displayName(Predicates.equalTo("wrongname")).apply(item));
+ }
+
+ @Test
+ public void testDeprecated() {
+ RegisteredType item = createItem(CatalogItemBuilder.newEntity("foo", "1.0")
+ .plan("services:\n- type: org.apache.brooklyn.entity.stock.BasicEntity")
+ .build());
+
+ assertTrue(RegisteredTypePredicates.deprecated(false).apply(item));
+ assertFalse(RegisteredTypePredicates.deprecated(true).apply(item));
+
+ item = deprecateItem(item);
+
+ assertFalse(RegisteredTypePredicates.deprecated(false).apply(item));
+ assertTrue(RegisteredTypePredicates.deprecated(true).apply(item));
+ }
+
+ @Test
+ public void testDisabled() {
+ RegisteredType item = createItem(CatalogItemBuilder.newEntity("foo", "1.0")
+ .plan("services:\n- type: org.apache.brooklyn.entity.stock.BasicEntity")
+ .build());
+
+ assertTrue(RegisteredTypePredicates.disabled(false).apply(item));
+ assertFalse(RegisteredTypePredicates.disabled(true).apply(item));
+
+ item = disableItem(item);
+
+ assertFalse(RegisteredTypePredicates.disabled(false).apply(item));
+ assertTrue(RegisteredTypePredicates.disabled(true).apply(item));
+ }
+
+ @Test
+ public void testIsCatalogItemType() {
+ RegisteredType item = createItem(CatalogItemBuilder.newEntity("foo", "1.0")
+ .plan("services:\n- type: org.apache.brooklyn.entity.stock.BasicEntity")
+ .build());
+
+ assertTrue(RegisteredTypePredicates.IS_ENTITY.apply(item));
+ assertFalse(RegisteredTypePredicates.IS_LOCATION.apply(item));
+ }
+
+ @Test
+ public void testSymbolicName() {
+ RegisteredType item = createItem(CatalogItemBuilder.newEntity("foo", "1.0")
+ .plan("services:\n- type: org.apache.brooklyn.entity.stock.BasicEntity")
+ .build());
+
+ assertTrue(RegisteredTypePredicates.symbolicName(Predicates.equalTo("foo")).apply(item));
+ assertFalse(RegisteredTypePredicates.symbolicName(Predicates.equalTo("wrongname")).apply(item));
+ }
+
+ @Test
+ public void testIsBestVersion() {
+ RegisteredType itemV1 = createItem(CatalogItemBuilder.newEntity("foo", "1.0")
+ .plan("services:\n- type: org.apache.brooklyn.entity.stock.BasicEntity")
+ .build());
+ RegisteredType itemV2 = createItem(CatalogItemBuilder.newEntity("foo", "2.0")
+ .plan("services:\n- type: org.apache.brooklyn.entity.stock.BasicEntity")
+ .build());
+ RegisteredType itemV3Disabled = createItem(CatalogItemBuilder.newEntity("foo", "3.0")
+ .disabled(true)
+ .plan("services:\n- type: org.apache.brooklyn.entity.stock.BasicEntity")
+ .build());
+
+ assertTrue(RegisteredTypePredicates.isBestVersion(mgmt).apply(itemV2));
+ assertFalse(RegisteredTypePredicates.isBestVersion(mgmt).apply(itemV1));
+ assertFalse(RegisteredTypePredicates.isBestVersion(mgmt).apply(itemV3Disabled));
+ }
+
+ @Test
+ public void testEntitledToSee() {
+ // TODO No entitlements configured, so everything allowed - therefore test not thorough enough!
+ RegisteredType item = createItem(CatalogItemBuilder.newEntity("foo", "1.0")
+ .plan("services:\n- type: org.apache.brooklyn.entity.stock.BasicEntity")
+ .build());
+
+ assertTrue(RegisteredTypePredicates.entitledToSee(mgmt).apply(item));
+ }
+
+ // TODO do we need this predicate?
+// @SuppressWarnings("deprecation")
+// @Test
+// public void testJavaType() {
+// RegisteredType item = createItem(CatalogItemBuilder.newEntity("foo", "1.0")
+// .javaType("org.apache.brooklyn.entity.stock.BasicEntity")
+// .build());
+//
+// assertTrue(RegisteredTypePredicates.javaType(Predicates.equalTo("org.apache.brooklyn.entity.stock.BasicEntity")).apply(item));
+// assertFalse(RegisteredTypePredicates.javaType(Predicates.equalTo("wrongtype")).apply(item));
+// }
+
+ @SuppressWarnings("deprecation")
+ protected RegisteredType createItem(CatalogItem<?,?> item) {
+ mgmt.getCatalog().addItem(item);
+ return RegisteredTypes.of(item);
+ }
+
+ @SuppressWarnings({ "deprecation" })
+ protected <T, SpecT> RegisteredType deprecateItem(RegisteredType orig) {
+ CatalogItem<?,?> item = (CatalogItem<?,?>) mgmt.getCatalog().getCatalogItem(orig.getSymbolicName(), orig.getVersion());
+ item.setDeprecated(true);
+ mgmt.getCatalog().persist(item);
+ return RegisteredTypes.of(item);
+ }
+
+ @SuppressWarnings({ "deprecation" })
+ protected RegisteredType disableItem(RegisteredType orig) {
+ CatalogItem<?,?> item = (CatalogItem<?,?>) mgmt.getCatalog().getCatalogItem(orig.getSymbolicName(), orig.getVersion());
+ item.setDisabled(true);
+ mgmt.getCatalog().persist(item);
+ return RegisteredTypes.of(item);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
index b1044ee..a273c50 100644
--- a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
+++ b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
@@ -145,20 +145,20 @@ public class BrooklynComponentTemplateResolver {
return serviceSpecResolver.accepts(type, loader);
}
- public <T extends Entity> EntitySpec<T> resolveSpec(Set<String> encounteredRegisteredTypeIds) {
+ public <T extends Entity> EntitySpec<T> resolveSpec(Set<String> encounteredRegisteredTypeSymbolicNames) {
if (alreadyBuilt.getAndSet(true))
throw new IllegalStateException("Spec can only be used once: "+this);
- EntitySpec<?> spec = serviceSpecResolver.resolve(type, loader, encounteredRegisteredTypeIds);
+ EntitySpec<?> spec = serviceSpecResolver.resolve(type, loader, encounteredRegisteredTypeSymbolicNames);
if (spec == null) {
// Try to provide some troubleshooting details
final String msgDetails;
- RegisteredType item = mgmt.getTypeRegistry().get(Strings.removeFromStart(type, "catalog:"), null, null);
+ RegisteredType item = mgmt.getTypeRegistry().get(Strings.removeFromStart(type, "catalog:"));
String proto = Urls.getProtocol(type);
- if (item != null && encounteredRegisteredTypeIds.contains(item.getSymbolicName())) {
+ if (item != null && encounteredRegisteredTypeSymbolicNames.contains(item.getSymbolicName())) {
msgDetails = "Cycle between catalog items detected, starting from " + type +
- ". Other catalog items being resolved up the stack are " + encounteredRegisteredTypeIds +
+ ". Other catalog items being resolved up the stack are " + encounteredRegisteredTypeSymbolicNames +
". Tried loading it as a Java class instead but failed.";
} else if (proto != null) {
msgDetails = "The reference " + type + " looks like a URL (running the CAMP Brooklyn assembly-template instantiator) but the protocol " +
@@ -170,7 +170,7 @@ public class BrooklynComponentTemplateResolver {
throw new IllegalStateException("Unable to create spec for type " + type + ". " + msgDetails);
}
- populateSpec(spec, encounteredRegisteredTypeIds);
+ populateSpec(spec, encounteredRegisteredTypeSymbolicNames);
@SuppressWarnings("unchecked")
EntitySpec<T> typedSpec = (EntitySpec<T>) spec;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynEntityDecorationResolver.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynEntityDecorationResolver.java b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynEntityDecorationResolver.java
index 181265d..b1d5dce 100644
--- a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynEntityDecorationResolver.java
+++ b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynEntityDecorationResolver.java
@@ -32,6 +32,7 @@ import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry;
import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.camp.brooklyn.BrooklynCampReservedKeys;
import org.apache.brooklyn.camp.brooklyn.spi.creation.BrooklynYamlTypeInstantiator.InstantiatorFromKey;
+import org.apache.brooklyn.core.typereg.RegisteredTypeConstraints;
import org.apache.brooklyn.util.collections.MutableList;
import org.apache.brooklyn.util.core.config.ConfigBag;
@@ -108,9 +109,9 @@ public abstract class BrooklynEntityDecorationResolver<DT> {
String policyType = decoLoader.getTypeName().get();
ManagementContext mgmt = instantiator.loader.getManagementContext();
- RegisteredType item = mgmt.getTypeRegistry().get(policyType, BrooklynTypeRegistry.RegisteredTypeKind.SPEC, Policy.class);
+ RegisteredType item = mgmt.getTypeRegistry().get(policyType, RegisteredTypeConstraints.spec(Policy.class));
PolicySpec<? extends Policy> spec;
- if (item!=null) spec = mgmt.getTypeRegistry().createSpec(item, PolicySpec.class);
+ if (item!=null) spec = mgmt.getTypeRegistry().createSpec(item, null, PolicySpec.class);
else spec = PolicySpec.create(decoLoader.getType(Policy.class));
spec.configure( decoLoader.getConfigMap() );
decorations.add(spec);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampToSpecTransformer.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampToSpecTransformer.java b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampToSpecTransformer.java
index cacd201..35feb65 100644
--- a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampToSpecTransformer.java
+++ b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampToSpecTransformer.java
@@ -87,7 +87,7 @@ public class CampToSpecTransformer implements PlanToSpecTransformer {
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public <T, SpecT extends AbstractBrooklynObjectSpec<? extends T, SpecT>> SpecT createCatalogSpec(CatalogItem<T, SpecT> item, Set<String> encounteredTypes) {
- // Ignore old-style java type catalog items
+ // Ignore old-style java type catalog items - there is a different (deprecated) transformer for that
if (item.getPlanYaml() == null) {
throw new PlanNotRecognizedException("Old style catalog item " + item + " not supported.");
}
@@ -99,17 +99,6 @@ public class CampToSpecTransformer implements PlanToSpecTransformer {
return (SpecT) CampCatalogUtils.createSpec(mgmt, (CatalogItem)item, encounteredTypes);
}
- // TODO
-// @SuppressWarnings({ "unchecked", "rawtypes" })
-// public <T, SpecT extends AbstractBrooklynObjectSpec<? extends T, SpecT>> SpecT createCatalogSpec(RegisteredType type, Set<String> encounteredTypes) {
-// if (encounteredTypes.contains(type.getSymbolicName())) {
-// throw new IllegalStateException("Already encountered types " + encounteredTypes + " must not contain catalog item being resolver " + type.getSymbolicName());
-// }
-//
-// // Not really clear what should happen to the top-level attributes, ignored until a good use case appears.
-// return (SpecT) CampCatalogUtils.createSpec(mgmt, type, encounteredTypes);
-// }
-
@Override
public void injectManagementContext(ManagementContext mgmt) {
this.mgmt = mgmt;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampUtils.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampUtils.java b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampUtils.java
index f3050c5..6390425 100644
--- a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampUtils.java
+++ b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampUtils.java
@@ -26,7 +26,6 @@ import java.util.Map;
import java.util.Set;
import org.apache.brooklyn.api.entity.EntitySpec;
-import org.apache.brooklyn.api.location.Location;
import org.apache.brooklyn.api.location.LocationSpec;
import org.apache.brooklyn.api.mgmt.ManagementContext;
import org.apache.brooklyn.api.policy.Policy;
@@ -40,16 +39,15 @@ import org.apache.brooklyn.camp.spi.pdp.DeploymentPlan;
import org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog;
import org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog.BrooklynLoaderTracker;
import org.apache.brooklyn.core.mgmt.classloading.BrooklynClassLoadingContext;
-import org.apache.brooklyn.core.objs.BrooklynObjectInternal.ConfigurationSupportInternal;
import org.apache.brooklyn.core.resolve.ResolveUtils;
import org.apache.brooklyn.util.exceptions.Exceptions;
-import org.apache.brooklyn.util.guava.Maybe;
import org.apache.brooklyn.util.stream.Streams;
import org.apache.brooklyn.util.yaml.Yamls;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
+//TODO-type-registry
public class CampUtils {
public static List<EntitySpec<?>> createServiceSpecs(String plan, BrooklynClassLoadingContext loader, Set<String> encounteredTypes) {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/lookup/AbstractTemplateBrooklynLookup.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/lookup/AbstractTemplateBrooklynLookup.java b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/lookup/AbstractTemplateBrooklynLookup.java
index f65abb1..f038e0f 100644
--- a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/lookup/AbstractTemplateBrooklynLookup.java
+++ b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/lookup/AbstractTemplateBrooklynLookup.java
@@ -18,16 +18,16 @@
*/
package org.apache.brooklyn.camp.brooklyn.spi.lookup;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.apache.brooklyn.api.catalog.CatalogItem;
import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.entity.EntitySpec;
import org.apache.brooklyn.api.mgmt.ManagementContext;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.camp.spi.AbstractResource;
import org.apache.brooklyn.camp.spi.PlatformRootSummary;
import org.apache.brooklyn.camp.spi.collection.ResolvableLink;
-import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public abstract class AbstractTemplateBrooklynLookup<T extends AbstractResource> extends AbstractBrooklynResourceLookup<T> {
@@ -39,7 +39,7 @@ public abstract class AbstractTemplateBrooklynLookup<T extends AbstractResource>
@Override
public T get(String id) {
- CatalogItem<?,?> item = getCatalogItem(id);
+ RegisteredType item = bmc.getTypeRegistry().get(id);
if (item==null) {
log.warn("Could not find item '"+id+"' in Brooklyn catalog; returning null");
return null;
@@ -47,11 +47,7 @@ public abstract class AbstractTemplateBrooklynLookup<T extends AbstractResource>
return adapt(item);
}
- private CatalogItem<?, ?> getCatalogItem(String versionedId) {
- return CatalogUtils.getCatalogItemOptionalVersion(bmc, versionedId);
- }
-
- public abstract T adapt(CatalogItem<?,?> item);
+ public abstract T adapt(RegisteredType item);
protected ResolvableLink<T> newLink(CatalogItem<? extends Entity,EntitySpec<?>> li) {
return newLink(li.getId(), li.getDisplayName());
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/lookup/AssemblyTemplateBrooklynLookup.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/lookup/AssemblyTemplateBrooklynLookup.java b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/lookup/AssemblyTemplateBrooklynLookup.java
index af0b596..e30d9c6 100644
--- a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/lookup/AssemblyTemplateBrooklynLookup.java
+++ b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/lookup/AssemblyTemplateBrooklynLookup.java
@@ -26,6 +26,7 @@ import org.apache.brooklyn.api.entity.Application;
import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.entity.EntitySpec;
import org.apache.brooklyn.api.mgmt.ManagementContext;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.camp.brooklyn.spi.creation.BrooklynAssemblyTemplateInstantiator;
import org.apache.brooklyn.camp.spi.AssemblyTemplate;
import org.apache.brooklyn.camp.spi.PlatformRootSummary;
@@ -39,7 +40,7 @@ public class AssemblyTemplateBrooklynLookup extends AbstractTemplateBrooklynLook
}
@Override
- public AssemblyTemplate adapt(CatalogItem<?,?> item) {
+ public AssemblyTemplate adapt(RegisteredType item) {
return AssemblyTemplate.builder().
name(item.getDisplayName()).
id(item.getId()).
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/lookup/PlatformComponentTemplateBrooklynLookup.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/lookup/PlatformComponentTemplateBrooklynLookup.java b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/lookup/PlatformComponentTemplateBrooklynLookup.java
index 19f5917..d70129a 100644
--- a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/lookup/PlatformComponentTemplateBrooklynLookup.java
+++ b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/lookup/PlatformComponentTemplateBrooklynLookup.java
@@ -25,6 +25,7 @@ import org.apache.brooklyn.api.catalog.CatalogItem;
import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.entity.EntitySpec;
import org.apache.brooklyn.api.mgmt.ManagementContext;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.camp.spi.PlatformComponentTemplate;
import org.apache.brooklyn.camp.spi.PlatformRootSummary;
import org.apache.brooklyn.camp.spi.collection.ResolvableLink;
@@ -37,7 +38,7 @@ public class PlatformComponentTemplateBrooklynLookup extends AbstractTemplateBro
}
@Override
- public PlatformComponentTemplate adapt(CatalogItem<?,?> item) {
+ public PlatformComponentTemplate adapt(RegisteredType item) {
return PlatformComponentTemplate.builder().
name(item.getDisplayName()).
id(item.getId()).
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/JavaWebAppsIntegrationTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/JavaWebAppsIntegrationTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/JavaWebAppsIntegrationTest.java
index 6e9e39c..3d991db 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/JavaWebAppsIntegrationTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/JavaWebAppsIntegrationTest.java
@@ -231,7 +231,7 @@ public class JavaWebAppsIntegrationTest {
Entity cluster = brooklynMgmt.getEntityManager().getEntity(clusterComponent.getId());
log.info("pc1 - "+clusterComponent+" - "+cluster);
- Assert.assertEquals(cluster.getPolicies().size(), 1);
+ Assert.assertEquals(cluster.policies().size(), 1);
Policy policy = cluster.policies().iterator().next();
Assert.assertNotNull(policy);
Assert.assertTrue(policy instanceof AutoScalerPolicy, "policy="+policy);
[8/9] incubator-brooklyn git commit: type registry code review
comments
Posted by he...@apache.org.
type registry code review comments
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/25302969
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/25302969
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/25302969
Branch: refs/heads/master
Commit: 25302969df175a92a5e02b9f709964de97809d79
Parents: 50ebfaf
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Mon Nov 2 15:43:40 2015 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Mon Nov 2 15:47:35 2015 +0000
----------------------------------------------------------------------
.../brooklyn/api/catalog/CatalogItem.java | 5 +-
.../api/typereg/BrooklynTypeRegistry.java | 2 +-
.../brooklyn/api/typereg/OsgiBundleWithUrl.java | 2 +-
.../core/catalog/internal/CatalogBundleDto.java | 4 +-
.../internal/JavaCatalogToSpecTransformer.java | 5 +-
.../brooklyn/core/mgmt/ha/OsgiManager.java | 2 +-
.../brooklyn/core/resolve/ResolveUtils.java | 84 --------------------
.../core/typereg/BasicOsgiBundleWithUrl.java | 4 +-
.../core/typereg/RegisteredTypeConstraints.java | 12 ++-
.../core/typereg/RegisteredTypePredicates.java | 9 ---
.../brooklyn/core/typereg/RegisteredTypes.java | 9 ++-
.../apache/brooklyn/util/core/osgi/Osgis.java | 2 +-
.../camp/brooklyn/spi/creation/CampUtils.java | 55 ++++++++++++-
.../brooklyn/catalog/CatalogYamlRebindTest.java | 6 +-
.../rest/util/BrooklynRestResourceUtils.java | 8 +-
15 files changed, 89 insertions(+), 120 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/25302969/api/src/main/java/org/apache/brooklyn/api/catalog/CatalogItem.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/catalog/CatalogItem.java b/api/src/main/java/org/apache/brooklyn/api/catalog/CatalogItem.java
index 5d9b5ee..d27436e 100644
--- a/api/src/main/java/org/apache/brooklyn/api/catalog/CatalogItem.java
+++ b/api/src/main/java/org/apache/brooklyn/api/catalog/CatalogItem.java
@@ -41,7 +41,7 @@ public interface CatalogItem<T,SpecT> extends BrooklynObject, Rebindable {
}
public static interface CatalogBundle extends OsgiBundleWithUrl {
- /** @deprecated since 0.9.0, use {@link #isFullDetailKnown()} */
+ /** @deprecated since 0.9.0, use {@link #isNameResolved()} */
public boolean isNamed();
}
@@ -70,7 +70,8 @@ public interface CatalogItem<T,SpecT> extends BrooklynObject, Rebindable {
/** @return The type of the spec e.g. EntitySpec corresponding to {@link #getCatalogItemJavaType()} */
public Class<SpecT> getSpecType();
- /** @return The underlying java type of the item represented, or null if not known (e.g. if it comes from yaml) */
+ /** @return The underlying java type of the item represented, if not described via a YAML spec.
+ * Normally null (and the type comes from yaml). */
@Nullable public String getJavaType();
/** @deprecated since 0.7.0. Use {@link #getDisplayName} */
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/25302969/api/src/main/java/org/apache/brooklyn/api/typereg/BrooklynTypeRegistry.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/typereg/BrooklynTypeRegistry.java b/api/src/main/java/org/apache/brooklyn/api/typereg/BrooklynTypeRegistry.java
index e13f2e6..3ade1db 100644
--- a/api/src/main/java/org/apache/brooklyn/api/typereg/BrooklynTypeRegistry.java
+++ b/api/src/main/java/org/apache/brooklyn/api/typereg/BrooklynTypeRegistry.java
@@ -40,7 +40,7 @@ public interface BrooklynTypeRegistry {
}
Iterable<RegisteredType> getAll();
- Iterable<RegisteredType> getAll(Predicate<? super RegisteredType> alwaysTrue);
+ Iterable<RegisteredType> getAll(Predicate<? super RegisteredType> filter);
/** @return The item matching the given given
* {@link RegisteredType#getSymbolicName() symbolicName}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/25302969/api/src/main/java/org/apache/brooklyn/api/typereg/OsgiBundleWithUrl.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/typereg/OsgiBundleWithUrl.java b/api/src/main/java/org/apache/brooklyn/api/typereg/OsgiBundleWithUrl.java
index ec3ef40..e8b278b 100644
--- a/api/src/main/java/org/apache/brooklyn/api/typereg/OsgiBundleWithUrl.java
+++ b/api/src/main/java/org/apache/brooklyn/api/typereg/OsgiBundleWithUrl.java
@@ -31,6 +31,6 @@ public interface OsgiBundleWithUrl {
/** @return true if we have a name and version for this bundle;
* false if not, e.g. if we only know the URL and we haven't loaded it yet */
- public boolean isFullDetailKnown();
+ public boolean isNameResolved();
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/25302969/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogBundleDto.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogBundleDto.java b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogBundleDto.java
index 51a4757..d3ce7ac 100644
--- a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogBundleDto.java
+++ b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogBundleDto.java
@@ -44,12 +44,12 @@ public class CatalogBundleDto implements CatalogBundle {
}
@Override
- public boolean isFullDetailKnown() {
+ public boolean isNameResolved() {
return symbolicName != null && version != null;
}
@Override
- public boolean isNamed() { return isFullDetailKnown(); }
+ public boolean isNamed() { return isNameResolved(); }
@Override
public String getSymbolicName() {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/25302969/core/src/main/java/org/apache/brooklyn/core/catalog/internal/JavaCatalogToSpecTransformer.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/JavaCatalogToSpecTransformer.java b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/JavaCatalogToSpecTransformer.java
index 742625a..7df9adf 100644
--- a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/JavaCatalogToSpecTransformer.java
+++ b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/JavaCatalogToSpecTransformer.java
@@ -44,7 +44,6 @@ import org.slf4j.LoggerFactory;
* with structure, only a single type.
*/
public class JavaCatalogToSpecTransformer implements PlanToSpecTransformer {
- @SuppressWarnings("unused")
private static final Logger log = LoggerFactory.getLogger(JavaCatalogToSpecTransformer.class);
private ManagementContext mgmt;
@@ -73,8 +72,12 @@ public class JavaCatalogToSpecTransformer implements PlanToSpecTransformer {
public <T, SpecT extends AbstractBrooklynObjectSpec<? extends T, SpecT>> SpecT createCatalogSpec(
CatalogItem<T, SpecT> item, Set<String> encounteredTypes) throws PlanNotRecognizedException {
if (item.getJavaType() != null) {
+ log.warn("Deprecated functionality (since 0.9.0). Using old-style xml catalog items with java type attribute for " + item);
Class<?> type;
try {
+ // java types were deprecated before we added osgi support so this isn't necessary,
+ // but it doesn't hurt (and if we re-instate a class+bundle approach for RegisteredType
+ // we will want to do this)
type = CatalogUtils.newClassLoadingContext(mgmt, item).loadClass(item.getJavaType());
} catch (Exception e) {
Exceptions.propagateIfFatal(e);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/25302969/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java
index e906e3a..0e941bd 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java
@@ -171,7 +171,7 @@ public class OsgiManager {
}
public static boolean isBundleNameEqualOrAbsent(CatalogBundle bundle, Bundle b) {
- return !bundle.isFullDetailKnown() ||
+ return !bundle.isNameResolved() ||
(bundle.getSymbolicName().equals(b.getSymbolicName()) &&
bundle.getVersion().equals(b.getVersion().toString()));
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/25302969/core/src/main/java/org/apache/brooklyn/core/resolve/ResolveUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/resolve/ResolveUtils.java b/core/src/main/java/org/apache/brooklyn/core/resolve/ResolveUtils.java
deleted file mode 100644
index 6ecbe96..0000000
--- a/core/src/main/java/org/apache/brooklyn/core/resolve/ResolveUtils.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.brooklyn.core.resolve;
-
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.brooklyn.api.location.Location;
-import org.apache.brooklyn.api.location.LocationSpec;
-import org.apache.brooklyn.api.policy.Policy;
-import org.apache.brooklyn.api.policy.PolicySpec;
-import org.apache.brooklyn.api.typereg.RegisteredType;
-import org.apache.brooklyn.core.mgmt.classloading.BrooklynClassLoadingContext;
-import org.apache.brooklyn.core.objs.BrooklynObjectInternal.ConfigurationSupportInternal;
-import org.apache.brooklyn.util.guava.Maybe;
-
-@Deprecated /** @deprecated since 0.9.0 never belonged here, and not used much; new principled TypeRegistry simplifies things */
-// only used for camp
-// TODO-type-registry
-public class ResolveUtils {
-
- @SuppressWarnings("unchecked")
- public static PolicySpec<? extends Policy> resolveSpec(
- String versionedId,
- BrooklynClassLoadingContext loader,
- Set<String> encounteredCatalogTypes) {
-
- PolicySpec<? extends Policy> spec;
- RegisteredType item = loader.getManagementContext().getTypeRegistry().get(versionedId);
- if (item != null && !encounteredCatalogTypes.contains(item.getSymbolicName())) {
- return loader.getManagementContext().getTypeRegistry().createSpec(item, null, PolicySpec.class);
- } else {
- // TODO-type-registry pass the loader in to the above, and allow it to load with the loader
- spec = PolicySpec.create(loader.loadClass(versionedId, Policy.class));
- }
- return spec;
- }
-
- public static LocationSpec<?> resolveLocationSpec(
- String type,
- Map<String, Object> brooklynConfig,
- BrooklynClassLoadingContext loader) {
- Maybe<Class<? extends Location>> javaClass = loader.tryLoadClass(type, Location.class);
- if (javaClass.isPresent()) {
- LocationSpec<?> spec = LocationSpec.create(javaClass.get());
- if (brooklynConfig != null) {
- spec.configure(brooklynConfig);
- }
- return spec;
- } else {
- Maybe<Location> loc = loader.getManagementContext().getLocationRegistry().resolve(type, false, brooklynConfig);
- if (loc.isPresent()) {
- // TODO extensions?
- Map<String, Object> locConfig = ((ConfigurationSupportInternal)loc.get().config()).getBag().getAllConfig();
- Class<? extends Location> locType = loc.get().getClass();
- Set<Object> locTags = loc.get().tags().getTags();
- String locDisplayName = loc.get().getDisplayName();
- return LocationSpec.create(locType)
- .configure(locConfig)
- .displayName(locDisplayName)
- .tags(locTags);
- } else {
- throw new IllegalStateException("No class or resolver found for location type "+type);
- }
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/25302969/core/src/main/java/org/apache/brooklyn/core/typereg/BasicOsgiBundleWithUrl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/typereg/BasicOsgiBundleWithUrl.java b/core/src/main/java/org/apache/brooklyn/core/typereg/BasicOsgiBundleWithUrl.java
index c21ca98..1c8cc40 100644
--- a/core/src/main/java/org/apache/brooklyn/core/typereg/BasicOsgiBundleWithUrl.java
+++ b/core/src/main/java/org/apache/brooklyn/core/typereg/BasicOsgiBundleWithUrl.java
@@ -47,14 +47,14 @@ public class BasicOsgiBundleWithUrl implements CatalogBundle, OsgiBundleWithUrl
}
@Override
- public boolean isFullDetailKnown() {
+ public boolean isNameResolved() {
return symbolicName != null && version != null;
}
@Override
@Deprecated //see super
public boolean isNamed() {
- return isFullDetailKnown();
+ return isNameResolved();
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/25302969/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypeConstraints.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypeConstraints.java b/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypeConstraints.java
index 7f49335..9d59343 100644
--- a/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypeConstraints.java
+++ b/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypeConstraints.java
@@ -22,6 +22,8 @@ import groovy.xml.Entity;
import java.util.Set;
+import javax.annotation.Nullable;
+
import org.apache.brooklyn.api.entity.EntitySpec;
import org.apache.brooklyn.api.internal.AbstractBrooklynObjectSpec;
import org.apache.brooklyn.api.objs.BrooklynObject;
@@ -38,6 +40,7 @@ public class RegisteredTypeConstraints {
private static final Logger log = LoggerFactory.getLogger(RegisteredTypeConstraints.BasicRegisteredTypeConstraint.class);
+ /** Immutable (from caller's perspective) record of a constraint */
public final static class BasicRegisteredTypeConstraint implements RegisteredTypeConstraint {
private RegisteredTypeKind kind;
private Class<?> javaSuperType;
@@ -45,7 +48,7 @@ public class RegisteredTypeConstraints {
private BasicRegisteredTypeConstraint() {}
- public BasicRegisteredTypeConstraint(RegisteredTypeConstraint source) {
+ public BasicRegisteredTypeConstraint(@Nullable RegisteredTypeConstraint source) {
if (source==null) return;
this.kind = source.getKind();
@@ -83,13 +86,14 @@ public class RegisteredTypeConstraints {
public static RegisteredTypeConstraint alreadyVisited(Set<String> encounteredTypeSymbolicNames) {
BasicRegisteredTypeConstraint result = new BasicRegisteredTypeConstraint();
- result.encounteredTypes = encounteredTypeSymbolicNames;
+ result.encounteredTypes = encounteredTypeSymbolicNames == null ? ImmutableSet.<String>of() : ImmutableSet.copyOf(encounteredTypeSymbolicNames);
return result;
}
public static RegisteredTypeConstraint alreadyVisited(Set<String> encounteredTypeSymbolicNames, String anotherEncounteredType) {
BasicRegisteredTypeConstraint result = new BasicRegisteredTypeConstraint();
- result.encounteredTypes = MutableSet.copyOf(encounteredTypeSymbolicNames);
- if (anotherEncounteredType!=null) result.encounteredTypes.add(anotherEncounteredType);
+ MutableSet<String> encounteredTypes = MutableSet.copyOf(encounteredTypeSymbolicNames);
+ encounteredTypes.addIfNotNull(anotherEncounteredType);
+ result.encounteredTypes = encounteredTypes.asUnmodifiable();
return result;
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/25302969/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypePredicates.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypePredicates.java b/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypePredicates.java
index 271add5..3560e47 100644
--- a/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypePredicates.java
+++ b/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypePredicates.java
@@ -67,15 +67,6 @@ public class RegisteredTypePredicates {
}
}
- @SuppressWarnings("unused")
- private static final Function<RegisteredType,String> ID_OF_ITEM_TRANSFORMER_ANONYMOUS = new Function<RegisteredType, String>() {
- @Override @Nullable
- public String apply(@Nullable RegisteredType input) {
- if (input==null) return null;
- return input.getId();
- }
- };
-
public static final Function<RegisteredType,String> ID_OF_ITEM_TRANSFORMER = new IdOfItemTransformer();
private static class IdOfItemTransformer implements Function<RegisteredType,String> {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/25302969/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypes.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypes.java b/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypes.java
index 6013f6d..8cddde2 100644
--- a/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypes.java
+++ b/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypes.java
@@ -22,15 +22,15 @@ import java.util.Collection;
import java.util.List;
import org.apache.brooklyn.api.catalog.CatalogItem;
+import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry.RegisteredTypeKind;
import org.apache.brooklyn.api.typereg.OsgiBundleWithUrl;
import org.apache.brooklyn.api.typereg.RegisteredType;
-import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry.RegisteredTypeKind;
import org.apache.brooklyn.core.plan.PlanToSpecTransformer;
-import org.apache.brooklyn.util.collections.MutableList;
import org.apache.brooklyn.util.javalang.JavaClassNames;
import com.google.common.annotations.Beta;
import com.google.common.base.Function;
+import com.google.common.collect.ImmutableList;
public class RegisteredTypes {
@@ -58,7 +58,7 @@ public class RegisteredTypes {
RegisteredSpecType type = new RegisteredSpecType(item.getSymbolicName(), item.getVersion(),
item.getCatalogItemJavaType(), impl);
- type.bundles = MutableList.<OsgiBundleWithUrl>copyOf(item.getLibraries());
+ type.bundles = item.getLibraries()==null ? ImmutableList.<OsgiBundleWithUrl>of() : ImmutableList.<OsgiBundleWithUrl>copyOf(item.getLibraries());
type.displayName = item.getDisplayName();
type.description = item.getDescription();
type.iconUrl = item.getIconUrl();
@@ -76,8 +76,9 @@ public class RegisteredTypes {
public T visit(RegisteredType type) {
if (type==null) throw new NullPointerException("Registered type must not be null");
if (type instanceof RegisteredSpecType) {
- visitSpec((RegisteredSpecType)type);
+ return visitSpec((RegisteredSpecType)type);
}
+ // others go here
throw new IllegalStateException("Unexpected registered type: "+type.getClass());
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/25302969/core/src/main/java/org/apache/brooklyn/util/core/osgi/Osgis.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/osgi/Osgis.java b/core/src/main/java/org/apache/brooklyn/util/core/osgi/Osgis.java
index 9b94f57..6d5dc91 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/osgi/Osgis.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/osgi/Osgis.java
@@ -133,7 +133,7 @@ public class Osgis {
}
public BundleFinder bundle(CatalogBundle bundle) {
- if (bundle.isFullDetailKnown()) {
+ if (bundle.isNameResolved()) {
symbolicName(bundle.getSymbolicName());
version(bundle.getVersion());
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/25302969/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampUtils.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampUtils.java b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampUtils.java
index 6390425..bcb18df 100644
--- a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampUtils.java
+++ b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampUtils.java
@@ -26,10 +26,12 @@ import java.util.Map;
import java.util.Set;
import org.apache.brooklyn.api.entity.EntitySpec;
+import org.apache.brooklyn.api.location.Location;
import org.apache.brooklyn.api.location.LocationSpec;
import org.apache.brooklyn.api.mgmt.ManagementContext;
import org.apache.brooklyn.api.policy.Policy;
import org.apache.brooklyn.api.policy.PolicySpec;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.camp.CampPlatform;
import org.apache.brooklyn.camp.brooklyn.BrooklynCampConstants;
import org.apache.brooklyn.camp.brooklyn.api.AssemblyTemplateSpecInstantiator;
@@ -39,8 +41,9 @@ import org.apache.brooklyn.camp.spi.pdp.DeploymentPlan;
import org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog;
import org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog.BrooklynLoaderTracker;
import org.apache.brooklyn.core.mgmt.classloading.BrooklynClassLoadingContext;
-import org.apache.brooklyn.core.resolve.ResolveUtils;
+import org.apache.brooklyn.core.objs.BrooklynObjectInternal.ConfigurationSupportInternal;
import org.apache.brooklyn.util.exceptions.Exceptions;
+import org.apache.brooklyn.util.guava.Maybe;
import org.apache.brooklyn.util.stream.Streams;
import org.apache.brooklyn.util.yaml.Yamls;
@@ -106,7 +109,7 @@ public class CampUtils {
}
String versionedId = (String) checkNotNull(Yamls.getMultinameAttribute(itemMap, "policy_type", "policyType", "type"), "policy type");
- PolicySpec<? extends Policy> spec = ResolveUtils.resolveSpec(versionedId, loader, encounteredCatalogTypes);
+ PolicySpec<? extends Policy> spec = resolveSpec(versionedId, loader, encounteredCatalogTypes);
Map<String, Object> brooklynConfig = (Map<String, Object>) itemMap.get("brooklyn.config");
if (brooklynConfig != null) {
spec.configure(brooklynConfig);
@@ -139,7 +142,7 @@ public class CampUtils {
String type = (String) checkNotNull(Yamls.getMultinameAttribute(itemMap, "location_type", "locationType", "type"), "location type");
Map<String, Object> brooklynConfig = (Map<String, Object>) itemMap.get("brooklyn.config");
- return ResolveUtils.resolveLocationSpec(type, brooklynConfig, loader);
+ return resolveLocationSpec(type, brooklynConfig, loader);
}
public static DeploymentPlan makePlanFromYaml(ManagementContext mgmt, String yaml) {
@@ -156,4 +159,50 @@ public class CampUtils {
}
}
+ @SuppressWarnings("unchecked")
+ private static PolicySpec<? extends Policy> resolveSpec(
+ String versionedId,
+ BrooklynClassLoadingContext loader,
+ Set<String> encounteredCatalogTypes) {
+
+ PolicySpec<? extends Policy> spec;
+ RegisteredType item = loader.getManagementContext().getTypeRegistry().get(versionedId);
+ if (item != null && !encounteredCatalogTypes.contains(item.getSymbolicName())) {
+ return loader.getManagementContext().getTypeRegistry().createSpec(item, null, PolicySpec.class);
+ } else {
+ // TODO-type-registry pass the loader in to the above, and allow it to load with the loader
+ spec = PolicySpec.create(loader.loadClass(versionedId, Policy.class));
+ }
+ return spec;
+ }
+
+ private static LocationSpec<?> resolveLocationSpec(
+ String type,
+ Map<String, Object> brooklynConfig,
+ BrooklynClassLoadingContext loader) {
+ Maybe<Class<? extends Location>> javaClass = loader.tryLoadClass(type, Location.class);
+ if (javaClass.isPresent()) {
+ LocationSpec<?> spec = LocationSpec.create(javaClass.get());
+ if (brooklynConfig != null) {
+ spec.configure(brooklynConfig);
+ }
+ return spec;
+ } else {
+ Maybe<Location> loc = loader.getManagementContext().getLocationRegistry().resolve(type, false, brooklynConfig);
+ if (loc.isPresent()) {
+ // TODO extensions?
+ Map<String, Object> locConfig = ((ConfigurationSupportInternal)loc.get().config()).getBag().getAllConfig();
+ Class<? extends Location> locType = loc.get().getClass();
+ Set<Object> locTags = loc.get().tags().getTags();
+ String locDisplayName = loc.get().getDisplayName();
+ return LocationSpec.create(locType)
+ .configure(locConfig)
+ .displayName(locDisplayName)
+ .tags(locTags);
+ } else {
+ throw new IllegalStateException("No class or resolver found for location type "+type);
+ }
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/25302969/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlRebindTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlRebindTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlRebindTest.java
index 2996685..989bdb3 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlRebindTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlRebindTest.java
@@ -191,7 +191,11 @@ public class CatalogYamlRebindTest extends AbstractYamlRebindTest {
addCatalogItems(String.format(locCatalogFormat, locVersion));
break;
case STRIP_DEPRECATION_AND_ENABLEMENT_FROM_CATALOG_ITEM:
- // nothing here -- but below we rebind with these fields removed to ensure that we can rebind
+ // set everything false -- then below we rebind with these fields removed to ensure that we can rebind
+ CatalogUtils.setDeprecated(mgmt(), appSymbolicName, appVersion, false);
+ CatalogUtils.setDeprecated(mgmt(), locSymbolicName, locVersion, false);
+ CatalogUtils.setDisabled(mgmt(), appSymbolicName, appVersion, false);
+ CatalogUtils.setDisabled(mgmt(), locSymbolicName, locVersion, false);
break;
case NO_OP:
break; // no-op
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/25302969/usage/rest-server/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java
index 2d9054a..e92c5f1 100644
--- a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java
+++ b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java
@@ -145,7 +145,7 @@ public class BrooklynRestResourceUtils {
public Entity getEntity(String application, String entity) {
if (entity==null) return null;
Application app = application!=null ? getApplication(application) : null;
- Entity e = (Entity) mgmt.getEntityManager().getEntity(entity);
+ Entity e = mgmt.getEntityManager().getEntity(entity);
if (e!=null) {
if (!Entitlements.isEntitled(mgmt.getEntitlementManager(), Entitlements.SEE_ENTITY, e)) {
@@ -201,10 +201,10 @@ public class BrooklynRestResourceUtils {
* an entity matching the given ID or name; returns the first such entity, or null if none found
**/
public Entity searchForEntityNamed(Entity root, String entity) {
- if (root.getId().equals(entity) || entity.equals(root.getDisplayName())) return (Entity) root;
+ if (root.getId().equals(entity) || entity.equals(root.getDisplayName())) return root;
for (Entity child: root.getChildren()) {
Entity result = searchForEntityNamed(child, entity);
- if (result!=null) return (Entity) result;
+ if (result!=null) return result;
}
return null;
}
@@ -393,7 +393,7 @@ public class BrooklynRestResourceUtils {
}
public Task<?> start(Application app, List<? extends Location> locations) {
- return Entities.invokeEffector((Entity)app, app, Startable.START,
+ return Entities.invokeEffector(app, app, Startable.START,
MutableMap.of("locations", locations));
}
[2/9] incubator-brooklyn git commit: introduce BrooklynTypeRegistry
and start migrating Catalog to it
Posted by he...@apache.org.
introduce BrooklynTypeRegistry and start migrating Catalog to it
remove some of the deprecated Catalog methods, and change many lookups to catalog to lookup in the type registry.
NEXT - immediate low-hanging fruit:
* move the TypeReg classes to where they belong
* finish changing lookups in catalog so all reads go through registry
(but writes still go to catalog)
NEXT - provide new features:
* add TypeReg for Beans, so types can be registered (at least by brooklyn startup code) for relationships, tasks, etc
* new TypeReg REST API, including allowing completion proposals for yaml
* new PlanToSpecTransformer API, and use the TypeImplementation.kind to pick the transformer to use, so we don't try the stupid attempt-load-with-any-transformer
NEXT - clean up:
* persist registered types and REST API and addToCatalog allows defining new (e.g. new relationships)
* get rid of catalog, or at least deprecate it and make all *writes* to TypeRegistry, and it stores things
* optionally, allow interim/multiple TypeRegistry instances to be used when loading catalogs or to resolve deep blueprints
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/dc968f9d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/dc968f9d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/dc968f9d
Branch: refs/heads/master
Commit: dc968f9d0dab816df6f6993399f0a84ce5e8810c
Parents: 4585e2c
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Thu Oct 29 22:28:14 2015 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Fri Oct 30 02:54:07 2015 +0000
----------------------------------------------------------------------
.../brooklyn/api/catalog/BrooklynCatalog.java | 45 ++--
.../brooklyn/api/catalog/CatalogItem.java | 9 +-
.../apache/brooklyn/api/mgmt/EntityManager.java | 2 +-
.../brooklyn/api/mgmt/ManagementContext.java | 4 +
.../api/typereg/BrooklynTypeRegistry.java | 55 +++++
.../brooklyn/api/typereg/OsgiBundleWithUrl.java | 36 +++
.../brooklyn/api/typereg/RegisteredType.java | 55 +++++
.../catalog/internal/BasicBrooklynCatalog.java | 71 +-----
.../core/catalog/internal/CatalogBundleDto.java | 5 +-
.../internal/CatalogItemDtoAbstract.java | 2 +-
.../core/catalog/internal/CatalogUtils.java | 22 +-
.../core/entity/factory/ApplicationBuilder.java | 7 +-
.../OsgiBrooklynClassLoadingContext.java | 8 +-
.../brooklyn/core/mgmt/ha/OsgiManager.java | 47 ++--
.../internal/AbstractManagementContext.java | 9 +
.../core/mgmt/internal/LocalEntityManager.java | 1 +
.../mgmt/internal/ManagementTransitionMode.java | 2 +-
.../NonDeploymentManagementContext.java | 12 +-
.../core/mgmt/rebind/RebindIteration.java | 2 +-
.../core/typereg/BasicBrooklynTypeRegistry.java | 122 ++++++++++
.../core/typereg/BasicOsgiBundleWithUrl.java | 101 ++++++++
.../core/typereg/RegisteredTypePredicates.java | 180 ++++++++++++++
.../brooklyn/core/typereg/RegisteredTypes.java | 183 ++++++++++++++
.../apache/brooklyn/util/core/osgi/Osgis.java | 2 +-
.../core/catalog/internal/CatalogDtoTest.java | 6 +-
.../core/catalog/internal/CatalogScanTest.java | 3 +-
.../catalog/internal/CatalogVersioningTest.java | 2 +-
.../core/mgmt/rebind/RebindTestFixture.java | 2 +-
.../BrooklynAssemblyTemplateInstantiator.java | 9 +-
.../BrooklynComponentTemplateResolver.java | 24 +-
.../BrooklynEntityDecorationResolver.java | 30 +--
.../spi/creation/CampToSpecTransformer.java | 17 +-
.../brooklyn/catalog/CatalogYamlCombiTest.java | 14 +-
.../brooklyn/catalog/CatalogYamlEntityTest.java | 39 +--
.../catalog/CatalogYamlLocationTest.java | 27 +-
.../brooklyn/test/lite/CampYamlLiteTest.java | 20 +-
.../test/lite/TestAppAssemblyInstantiator.java | 1 -
.../rest/util/BrooklynRestResourceUtils.java | 244 +++++++++----------
.../brooklyn/rest/util/WebResourceUtils.java | 2 +-
.../rest/resources/ApplicationResourceTest.java | 11 +-
.../rest/resources/DescendantsTest.java | 15 +-
.../rest/resources/ScriptResourceTest.java | 12 +-
.../rest/resources/UsageResourceTest.java | 9 +-
43 files changed, 1079 insertions(+), 390 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/api/src/main/java/org/apache/brooklyn/api/catalog/BrooklynCatalog.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/catalog/BrooklynCatalog.java b/api/src/main/java/org/apache/brooklyn/api/catalog/BrooklynCatalog.java
index 0bc0dfe..da850d7 100644
--- a/api/src/main/java/org/apache/brooklyn/api/catalog/BrooklynCatalog.java
+++ b/api/src/main/java/org/apache/brooklyn/api/catalog/BrooklynCatalog.java
@@ -23,41 +23,30 @@ import java.util.NoSuchElementException;
import org.apache.brooklyn.api.internal.AbstractBrooklynObjectSpec;
+import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Predicate;
public interface BrooklynCatalog {
+ /**
+ * Version set in catalog when creator does not supply a version, to mean a low priority item;
+ * and used when requesting to indicate the best version.
+ * (See {@link #getCatalogItem(String, String)} for discussion of the best version.)
+ */
static String DEFAULT_VERSION = "0.0.0_DEFAULT_VERSION";
- /** @return The item with the given {@link CatalogItem#getSymbolicName()
- * symbolicName}, or null if not found.
- * @deprecated since 0.7.0 use {@link #getCatalogItem(String, String)};
- * or see also CatalogUtils getCatalogItemOptionalVersion */
- @Deprecated
- CatalogItem<?,?> getCatalogItem(String symbolicName);
-
- /** @return The item with the given {@link CatalogItem#getSymbolicName()
- * symbolicName}, or null if not found. */
+ /** @return The item matching the given given
+ * {@link CatalogItem#getSymbolicName() symbolicName}
+ * and optionally {@link CatalogItem#getVersion()},
+ * taking the best version if the version is {@link #DEFAULT_VERSION} or null,
+ * returning null if no matches are found. */
CatalogItem<?,?> getCatalogItem(String symbolicName, String version);
- /** @return Deletes the item with the given
- * {@link CatalogItem#getSymbolicName() symbolicName}
- * @throws NoSuchElementException if not found
- * @deprecated since 0.7.0 use {@link #deleteCatalogItem(String, String)} */
- @Deprecated
- void deleteCatalogItem(String symbolicName);
-
/** @return Deletes the item with the given {@link CatalogItem#getSymbolicName()
* symbolicName} and version
* @throws NoSuchElementException if not found */
void deleteCatalogItem(String symbolicName, String version);
/** variant of {@link #getCatalogItem(String, String)} which checks (and casts) type for convenience
- * (returns null if type does not match)
- * @deprecated since 0.7.0 use {@link #getCatalogItem(Class<T>, String, String)} */
- @Deprecated
- <T,SpecT> CatalogItem<T,SpecT> getCatalogItem(Class<T> type, String symbolicName);
-
- /** variant of {@link #getCatalogItem(String, String)} which checks (and casts) type for convenience
* (returns null if type does not match) */
<T,SpecT> CatalogItem<T,SpecT> getCatalogItem(Class<T> type, String symbolicName, String version);
@@ -80,14 +69,8 @@ public interface BrooklynCatalog {
// TODO this should be cached on the item and renamed getSpec(...), else we re-create it too often (every time catalog is listed)
<T, SpecT extends AbstractBrooklynObjectSpec<? extends T, SpecT>> SpecT createSpec(CatalogItem<T, SpecT> item);
- /** throws exceptions if any problems
- * @deprecated since 0.7.0 use {@link #createSpec(CatalogItem)} */
- @Deprecated
- <T,SpecT> Class<? extends T> loadClass(CatalogItem<T,SpecT> item);
- /** @deprecated since 0.7.0 use {@link #createSpec(CatalogItem)} */
- @Deprecated
- <T> Class<? extends T> loadClassByType(String typeName, Class<T> typeClass);
/** @deprecated since 0.7.0 use {@link #createSpec(CatalogItem)} */
+ // used in one place in BRRU with warnings added in 0.9.0. remove after 0.9.
CatalogItem<?,?> getCatalogItemForType(String typeName);
/**
@@ -150,9 +133,11 @@ public interface BrooklynCatalog {
* so it is recommended to edit the 'manual' catalog DTO if using it to
* generate a catalog, either adding the appropriate classpath URL or removing this entry.
*
- * @deprecated since 0.7.0 Construct catalogs with OSGi bundles instead
+ * @deprecated since 0.7.0 Construct catalogs with OSGi bundles instead.
+ * This is used in a handful of tests which should be rewritten to refer to OSGi bundles.
*/
@Deprecated
+ @VisibleForTesting
CatalogItem<?,?> addItem(Class<?> clazz);
void reset(Collection<CatalogItem<?, ?>> entries);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/api/src/main/java/org/apache/brooklyn/api/catalog/CatalogItem.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/catalog/CatalogItem.java b/api/src/main/java/org/apache/brooklyn/api/catalog/CatalogItem.java
index bf806aa..5d9b5ee 100644
--- a/api/src/main/java/org/apache/brooklyn/api/catalog/CatalogItem.java
+++ b/api/src/main/java/org/apache/brooklyn/api/catalog/CatalogItem.java
@@ -26,6 +26,7 @@ import org.apache.brooklyn.api.mgmt.rebind.RebindSupport;
import org.apache.brooklyn.api.mgmt.rebind.Rebindable;
import org.apache.brooklyn.api.mgmt.rebind.mementos.CatalogItemMemento;
import org.apache.brooklyn.api.objs.BrooklynObject;
+import org.apache.brooklyn.api.typereg.OsgiBundleWithUrl;
import com.google.common.annotations.Beta;
@@ -39,12 +40,8 @@ public interface CatalogItem<T,SpecT> extends BrooklynObject, Rebindable {
LOCATION;
}
- public static interface CatalogBundle {
- public String getSymbolicName();
- public String getVersion();
- public String getUrl();
-
- /** @return true if the bundle reference contains both name and version*/
+ public static interface CatalogBundle extends OsgiBundleWithUrl {
+ /** @deprecated since 0.9.0, use {@link #isFullDetailKnown()} */
public boolean isNamed();
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/api/src/main/java/org/apache/brooklyn/api/mgmt/EntityManager.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/mgmt/EntityManager.java b/api/src/main/java/org/apache/brooklyn/api/mgmt/EntityManager.java
index d423c76..fe66a5b 100644
--- a/api/src/main/java/org/apache/brooklyn/api/mgmt/EntityManager.java
+++ b/api/src/main/java/org/apache/brooklyn/api/mgmt/EntityManager.java
@@ -48,7 +48,7 @@ public interface EntityManager {
EntityTypeRegistry getEntityTypeRegistry();
/**
- * Creates a new (unmanaged) entity.
+ * Creates a new entity. Management is started immediately (by this method).
*
* @param spec
* @return A proxy to the created entity (rather than the actual entity itself).
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/api/src/main/java/org/apache/brooklyn/api/mgmt/ManagementContext.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/mgmt/ManagementContext.java b/api/src/main/java/org/apache/brooklyn/api/mgmt/ManagementContext.java
index f809fb2..cabadee 100644
--- a/api/src/main/java/org/apache/brooklyn/api/mgmt/ManagementContext.java
+++ b/api/src/main/java/org/apache/brooklyn/api/mgmt/ManagementContext.java
@@ -34,6 +34,7 @@ import org.apache.brooklyn.api.mgmt.entitlement.EntitlementManager;
import org.apache.brooklyn.api.mgmt.ha.HighAvailabilityManager;
import org.apache.brooklyn.api.mgmt.rebind.RebindManager;
import org.apache.brooklyn.api.objs.BrooklynObject;
+import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry;
import org.apache.brooklyn.config.StringConfigMap;
import org.apache.brooklyn.util.guava.Maybe;
@@ -206,6 +207,9 @@ public interface ManagementContext {
/** Record of configured Brooklyn entities (and templates and policies) which can be loaded */
BrooklynCatalog getCatalog();
+ /** Record of configured classes which can be loaded */
+ BrooklynTypeRegistry getTypeRegistry();
+
/** Returns the class loader to be used to load items.
* Temporary routine while catalog supports classloader-based and OSGi-based classloading. */
@Beta
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/api/src/main/java/org/apache/brooklyn/api/typereg/BrooklynTypeRegistry.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/typereg/BrooklynTypeRegistry.java b/api/src/main/java/org/apache/brooklyn/api/typereg/BrooklynTypeRegistry.java
new file mode 100644
index 0000000..25f07ab
--- /dev/null
+++ b/api/src/main/java/org/apache/brooklyn/api/typereg/BrooklynTypeRegistry.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.brooklyn.api.typereg;
+
+import javax.annotation.Nullable;
+
+import org.apache.brooklyn.api.entity.Entity;
+import org.apache.brooklyn.api.entity.EntitySpec;
+import org.apache.brooklyn.api.internal.AbstractBrooklynObjectSpec;
+
+import com.google.common.base.Predicate;
+
+
+public interface BrooklynTypeRegistry {
+
+ public enum RegisteredTypeKind {
+ /** a registered type which will create an {@link AbstractBrooklynObjectSpec} (e.g. {@link EntitySpec})
+ * for the type registered (e.g. the {@link Entity} instance) */
+ SPEC,
+ // TODO
+// BEAN
+
+ // NB: additional kinds should have the Visitor in RegisteredTypes updated
+ }
+
+ Iterable<RegisteredType> getAll();
+ Iterable<RegisteredType> getAll(Predicate<? super RegisteredType> alwaysTrue);
+
+ RegisteredType get(String symbolicNameWithOptionalVersion, @Nullable RegisteredTypeKind kind, @Nullable Class<?> requiredSupertype);
+ RegisteredType get(String symbolicName, String version, @Nullable RegisteredTypeKind kind, @Nullable Class<?> requiredSupertype);
+ RegisteredType get(String symbolicName, String version);
+
+ @SuppressWarnings("rawtypes")
+ <T extends AbstractBrooklynObjectSpec> T createSpec(RegisteredType type, @Nullable Class<T> specKind);
+
+ // TODO when we support beans
+// <T> T createBean(RegisteredType type, Class<T> superType);
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/api/src/main/java/org/apache/brooklyn/api/typereg/OsgiBundleWithUrl.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/typereg/OsgiBundleWithUrl.java b/api/src/main/java/org/apache/brooklyn/api/typereg/OsgiBundleWithUrl.java
new file mode 100644
index 0000000..ec3ef40
--- /dev/null
+++ b/api/src/main/java/org/apache/brooklyn/api/typereg/OsgiBundleWithUrl.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.brooklyn.api.typereg;
+
+import com.google.common.annotations.Beta;
+
+@Beta
+public interface OsgiBundleWithUrl {
+
+ public String getSymbolicName();
+ public String getVersion();
+
+ /** where this bundle can be downloaded; typically required unless we are guaranteed the bundle will be manually installed */
+ public String getUrl();
+
+ /** @return true if we have a name and version for this bundle;
+ * false if not, e.g. if we only know the URL and we haven't loaded it yet */
+ public boolean isFullDetailKnown();
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/api/src/main/java/org/apache/brooklyn/api/typereg/RegisteredType.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/typereg/RegisteredType.java b/api/src/main/java/org/apache/brooklyn/api/typereg/RegisteredType.java
new file mode 100644
index 0000000..5158c34
--- /dev/null
+++ b/api/src/main/java/org/apache/brooklyn/api/typereg/RegisteredType.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.brooklyn.api.typereg;
+
+import java.util.Collection;
+
+import org.apache.brooklyn.api.entity.Entity;
+import org.apache.brooklyn.api.entity.EntitySpec;
+import org.apache.brooklyn.api.objs.Identifiable;
+
+public interface RegisteredType extends Identifiable {
+
+ @Override
+ String getId();
+
+ String getSymbolicName();
+ String getVersion();
+
+ Collection<OsgiBundleWithUrl> getLibraries();
+
+ String getDisplayName();
+ String getDescription();
+ String getIconUrl();
+
+ /** @return the java type or a supertype thereof that this registered type represents.
+ * <p>
+ * For beans, this is the type that the {@link BrooklynTypeRegistry} will create.
+ * For specs, this is what the spec that will be created points at
+ * (e.g. the concrete {@link Entity}, not the {@link EntitySpec});
+ * <p>
+ * In some cases this may return an interface or a super-type of what will actually be created,
+ * such as if the concrete type is private and callers should know only about a particular public interface,
+ * or if precise type details are unavailable and all that is known at creation is some higher level interface/supertype
+ * (e.g. this may return {@link Entity} even though the spec points at a specific subclass,
+ * for instance because the YAML has not yet been parsed or OSGi bundles downloaded).
+ */
+ Class<?> getJavaType();
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
index 9850eca..ce168b6 100644
--- a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
+++ b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
@@ -185,14 +185,15 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
}
private String getFixedVersionId(String symbolicName, String version) {
- if (!DEFAULT_VERSION.equals(version)) {
+ if (version!=null && !DEFAULT_VERSION.equals(version)) {
return version;
} else {
- return getDefaultVersion(symbolicName);
+ return getBestVersion(symbolicName);
}
}
- private String getDefaultVersion(String symbolicName) {
+ /** returns best version, as defined by {@link BrooklynCatalog#getCatalogItem(String, String)} */
+ private String getBestVersion(String symbolicName) {
Iterable<CatalogItem<Object, Object>> versions = getCatalogItems(Predicates.and(
CatalogPredicates.disabled(false),
CatalogPredicates.symbolicName(Predicates.equalTo(symbolicName))));
@@ -209,12 +210,6 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
}
@Override
- @Deprecated
- public CatalogItem<?,?> getCatalogItem(String symbolicName) {
- return getCatalogItem(symbolicName, DEFAULT_VERSION);
- }
-
- @Override
public CatalogItem<?,?> getCatalogItem(String symbolicName, String version) {
if (symbolicName == null) return null;
checkNotNull(version, "version");
@@ -224,14 +219,6 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
}
@Override
- @Deprecated
- public void deleteCatalogItem(String id) {
- //Delete only if installed through the
- //deprecated methods. Don't support DEFAULT_VERSION for delete.
- deleteCatalogItem(id, NO_VERSION);
- }
-
- @Override
public void deleteCatalogItem(String symbolicName, String version) {
log.debug("Deleting manual catalog item from "+mgmt+": "+symbolicName + ":" + version);
checkNotNull(symbolicName, "id");
@@ -263,12 +250,6 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
}
- @Override
- @Deprecated
- public <T,SpecT> CatalogItem<T,SpecT> getCatalogItem(Class<T> type, String id) {
- return getCatalogItem(type, id, DEFAULT_VERSION);
- }
-
@SuppressWarnings("unchecked")
@Override
public <T,SpecT> CatalogItem<T,SpecT> getCatalogItem(Class<T> type, String id, String version) {
@@ -315,46 +296,16 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
@SuppressWarnings("unchecked")
CatalogItemDo<T,SpecT> loadedItem = (CatalogItemDo<T, SpecT>) getCatalogItemDo(item.getSymbolicName(), item.getVersion());
if (loadedItem == null) throw new RuntimeException(item+" not in catalog; cannot create spec");
- Class<SpecT> specType = loadedItem.getSpecType();
- if (specType==null) return null;
+ if (loadedItem.getSpecType()==null) return null;
- if (loadedItem.getPlanYaml() != null) {
- SpecT yamlSpec = EntityManagementUtils.createCatalogSpec(mgmt, loadedItem);
- if (yamlSpec != null) {
- return yamlSpec;
- }
+ SpecT spec = EntityManagementUtils.createCatalogSpec(mgmt, loadedItem);
+ if (spec != null) {
+ return spec;
}
throw new IllegalStateException("No known mechanism to create instance of "+item);
}
- @SuppressWarnings("unchecked")
- @Override
- /** @deprecated since 0.7.0 use {@link #createSpec(CatalogItem)} */
- @Deprecated
- public <T,SpecT> Class<? extends T> loadClass(CatalogItem<T,SpecT> item) {
- if (log.isDebugEnabled())
- log.debug("Loading class for catalog item " + item);
- checkNotNull(item);
- CatalogItemDo<?,?> loadedItem = getCatalogItemDo(item.getSymbolicName(), item.getVersion());
- if (loadedItem==null) throw new NoSuchElementException("Unable to load '"+item.getId()+"' to instantiate it");
- return (Class<? extends T>) loadedItem.getJavaClass();
- }
-
- @SuppressWarnings("unchecked")
- @Override
- /** @deprecated since 0.7.0 use {@link #createSpec(CatalogItem)} */
- @Deprecated
- public <T> Class<? extends T> loadClassByType(String typeName, Class<T> typeClass) {
- final CatalogItem<?,?> resultI = getCatalogItemForType(typeName);
-
- if (resultI == null) {
- throw new NoSuchElementException("Unable to find catalog item for type "+typeName);
- }
-
- return (Class<? extends T>) loadClass(resultI);
- }
-
@Deprecated /** @deprecated since 0.7.0 only used by other deprecated items */
private <T,SpecT> CatalogItemDtoAbstract<T,SpecT> getAbstractCatalogItem(CatalogItem<T,SpecT> item) {
while (item instanceof CatalogItemDo) item = ((CatalogItemDo<T,SpecT>)item).itemDto;
@@ -507,13 +458,13 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
if (Strings.isBlank(symbolicName)) {
if (Strings.isNonBlank(id)) {
if (CatalogUtils.looksLikeVersionedId(id)) {
- symbolicName = CatalogUtils.getIdFromVersionedId(id);
+ symbolicName = CatalogUtils.getSymbolicNameFromVersionedId(id);
} else {
symbolicName = id;
}
} else if (Strings.isNonBlank(name)) {
if (CatalogUtils.looksLikeVersionedId(name)) {
- symbolicName = CatalogUtils.getIdFromVersionedId(name);
+ symbolicName = CatalogUtils.getSymbolicNameFromVersionedId(name);
} else {
symbolicName = name;
}
@@ -741,7 +692,7 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
String version = null;
if (CatalogUtils.looksLikeVersionedId(type)) {
version = CatalogUtils.getVersionFromVersionedId(type);
- type = CatalogUtils.getIdFromVersionedId(type);
+ type = CatalogUtils.getSymbolicNameFromVersionedId(type);
}
if (type!=null && key!=null) {
for (CatalogItemDtoAbstract<?,?> candidate: itemsDefinedSoFar) {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogBundleDto.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogBundleDto.java b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogBundleDto.java
index 60472ae..51a4757 100644
--- a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogBundleDto.java
+++ b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogBundleDto.java
@@ -44,9 +44,12 @@ public class CatalogBundleDto implements CatalogBundle {
}
@Override
- public boolean isNamed() {
+ public boolean isFullDetailKnown() {
return symbolicName != null && version != null;
}
+
+ @Override
+ public boolean isNamed() { return isFullDetailKnown(); }
@Override
public String getSymbolicName() {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemDtoAbstract.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemDtoAbstract.java b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemDtoAbstract.java
index 6262508..414b3e6 100644
--- a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemDtoAbstract.java
+++ b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemDtoAbstract.java
@@ -411,7 +411,7 @@ public abstract class CatalogItemDtoAbstract<T, SpecT> extends AbstractBrooklynO
url = inlineRef;
} else if (CatalogUtils.looksLikeVersionedId(inlineRef)) {
//looks like a name+version ref
- name = CatalogUtils.getIdFromVersionedId(inlineRef);
+ name = CatalogUtils.getSymbolicNameFromVersionedId(inlineRef);
version = CatalogUtils.getVersionFromVersionedId(inlineRef);
url = null;
} else {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogUtils.java b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogUtils.java
index 1da2957..4561046 100644
--- a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogUtils.java
+++ b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogUtils.java
@@ -22,14 +22,14 @@ import java.util.Collection;
import javax.annotation.Nullable;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.apache.brooklyn.api.catalog.BrooklynCatalog;
import org.apache.brooklyn.api.catalog.CatalogItem;
import org.apache.brooklyn.api.catalog.CatalogItem.CatalogBundle;
import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.mgmt.ManagementContext;
import org.apache.brooklyn.api.objs.BrooklynObject;
+import org.apache.brooklyn.api.typereg.OsgiBundleWithUrl;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.core.BrooklynLogging;
import org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog.BrooklynLoaderTracker;
import org.apache.brooklyn.core.entity.EntityInternal;
@@ -44,6 +44,8 @@ import org.apache.brooklyn.core.objs.BrooklynObjectInternal;
import org.apache.brooklyn.util.guava.Maybe;
import org.apache.brooklyn.util.text.Strings;
import org.apache.brooklyn.util.time.Time;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.common.annotations.Beta;
import com.google.common.base.Joiner;
@@ -63,6 +65,10 @@ public class CatalogUtils {
return newClassLoadingContext(mgmt, item.getId(), item.getLibraries());
}
+ public static BrooklynClassLoadingContext newClassLoadingContext(ManagementContext mgmt, RegisteredType item) {
+ return newClassLoadingContext(mgmt, item.getId(), item.getLibraries());
+ }
+
public static BrooklynClassLoadingContext getClassLoadingContext(Entity entity) {
ManagementContext mgmt = ((EntityInternal)entity).getManagementContext();
String catId = entity.getCatalogItemId();
@@ -75,7 +81,7 @@ public class CatalogUtils {
return newClassLoadingContext(mgmt, cat);
}
- public static BrooklynClassLoadingContext newClassLoadingContext(@Nullable ManagementContext mgmt, String catalogItemId, Collection<CatalogBundle> libraries) {
+ public static BrooklynClassLoadingContext newClassLoadingContext(@Nullable ManagementContext mgmt, String catalogItemId, Collection<? extends OsgiBundleWithUrl> libraries) {
BrooklynClassLoadingContextSequential result = new BrooklynClassLoadingContextSequential(mgmt);
if (libraries!=null && !libraries.isEmpty()) {
@@ -193,7 +199,13 @@ public class CatalogUtils {
return true;
}
+ /** @deprecated since 0.9.0 use {@link #getSymbolicNameFromVersionedId(String)} */
+ @Deprecated
public static String getIdFromVersionedId(String versionedId) {
+ return getSymbolicNameFromVersionedId(versionedId);
+ }
+
+ public static String getSymbolicNameFromVersionedId(String versionedId) {
if (versionedId == null) return null;
int versionDelimiterPos = versionedId.lastIndexOf(VERSION_DELIMITER);
if (versionDelimiterPos != -1) {
@@ -224,7 +236,7 @@ public class CatalogUtils {
public static CatalogItem<?, ?> getCatalogItemOptionalVersion(ManagementContext mgmt, String versionedId) {
if (versionedId == null) return null;
if (looksLikeVersionedId(versionedId)) {
- String id = getIdFromVersionedId(versionedId);
+ String id = getSymbolicNameFromVersionedId(versionedId);
String version = getVersionFromVersionedId(versionedId);
return mgmt.getCatalog().getCatalogItem(id, version);
} else {
@@ -240,7 +252,7 @@ public class CatalogUtils {
public static <T,SpecT> CatalogItem<T, SpecT> getCatalogItemOptionalVersion(ManagementContext mgmt, Class<T> type, String versionedId) {
if (looksLikeVersionedId(versionedId)) {
- String id = getIdFromVersionedId(versionedId);
+ String id = getSymbolicNameFromVersionedId(versionedId);
String version = getVersionFromVersionedId(versionedId);
return mgmt.getCatalog().getCatalogItem(type, id, version);
} else {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/core/src/main/java/org/apache/brooklyn/core/entity/factory/ApplicationBuilder.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/entity/factory/ApplicationBuilder.java b/core/src/main/java/org/apache/brooklyn/core/entity/factory/ApplicationBuilder.java
index 2d3ee08..f8167a0 100644
--- a/core/src/main/java/org/apache/brooklyn/core/entity/factory/ApplicationBuilder.java
+++ b/core/src/main/java/org/apache/brooklyn/core/entity/factory/ApplicationBuilder.java
@@ -88,11 +88,7 @@ public abstract class ApplicationBuilder {
}
@SuppressWarnings("unchecked")
- @Beta
- /** @deprecated since 0.7.0 the management context should normally be passed in;
- * for TestApplication also see TestApplication.Factory.newManagedInstanceForTests() */
- @Deprecated
- public static <T extends StartableApplication> T newManagedApp(EntitySpec<T> spec) {
+ private static <T extends StartableApplication> T newManagedApp(EntitySpec<T> spec) {
return (T) new ApplicationBuilder(spec) {
@Override protected void doBuild() {
}
@@ -109,6 +105,7 @@ public abstract class ApplicationBuilder {
}
}
+ /** @deprecated class can be removed; users of this convenience method can now simply do mgmt.getEntityManager().createEntity(spec) */
@SuppressWarnings("unchecked")
@Beta
public static <T extends StartableApplication> T newManagedApp(EntitySpec<T> spec, ManagementContext managementContext) {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/core/src/main/java/org/apache/brooklyn/core/mgmt/classloading/OsgiBrooklynClassLoadingContext.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/classloading/OsgiBrooklynClassLoadingContext.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/classloading/OsgiBrooklynClassLoadingContext.java
index fa12aa2..74f3de1 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/classloading/OsgiBrooklynClassLoadingContext.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/classloading/OsgiBrooklynClassLoadingContext.java
@@ -23,8 +23,8 @@ import java.util.Collection;
import java.util.Collections;
import org.apache.brooklyn.api.catalog.CatalogItem;
-import org.apache.brooklyn.api.catalog.CatalogItem.CatalogBundle;
import org.apache.brooklyn.api.mgmt.ManagementContext;
+import org.apache.brooklyn.api.typereg.OsgiBundleWithUrl;
import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
import org.apache.brooklyn.core.mgmt.entitlement.Entitlements;
import org.apache.brooklyn.core.mgmt.ha.OsgiManager;
@@ -37,16 +37,16 @@ public class OsgiBrooklynClassLoadingContext extends AbstractBrooklynClassLoadin
private final String catalogItemId;
private boolean hasBundles = false;
- private transient Collection<CatalogBundle> _bundles;
+ private transient Collection<? extends OsgiBundleWithUrl> _bundles;
- public OsgiBrooklynClassLoadingContext(ManagementContext mgmt, String catalogItemId, Collection<CatalogBundle> bundles) {
+ public OsgiBrooklynClassLoadingContext(ManagementContext mgmt, String catalogItemId, Collection<? extends OsgiBundleWithUrl> bundles) {
super(mgmt);
this._bundles = bundles;
this.hasBundles = bundles!=null && !bundles.isEmpty();
this.catalogItemId = catalogItemId;
}
- public Collection<CatalogBundle> getBundles() {
+ public Collection<? extends OsgiBundleWithUrl> getBundles() {
if (_bundles!=null || !hasBundles) return _bundles;
CatalogItem<?, ?> cat = CatalogUtils.getCatalogItemOptionalVersion(mgmt, catalogItemId);
if (cat==null) {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java
index 2afb17c..e906e3a 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java
@@ -29,12 +29,9 @@ import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.atomic.AtomicReference;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.launch.Framework;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.apache.brooklyn.api.catalog.CatalogItem.CatalogBundle;
import org.apache.brooklyn.api.mgmt.ManagementContext;
+import org.apache.brooklyn.api.typereg.OsgiBundleWithUrl;
import org.apache.brooklyn.config.ConfigKey;
import org.apache.brooklyn.core.BrooklynVersion;
import org.apache.brooklyn.core.server.BrooklynServerConfig;
@@ -50,9 +47,13 @@ import org.apache.brooklyn.util.os.Os.DeletionResult;
import org.apache.brooklyn.util.repeat.Repeater;
import org.apache.brooklyn.util.text.Strings;
import org.apache.brooklyn.util.time.Duration;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.launch.Framework;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
public class OsgiManager {
@@ -170,20 +171,20 @@ public class OsgiManager {
}
public static boolean isBundleNameEqualOrAbsent(CatalogBundle bundle, Bundle b) {
- return !bundle.isNamed() ||
+ return !bundle.isFullDetailKnown() ||
(bundle.getSymbolicName().equals(b.getSymbolicName()) &&
bundle.getVersion().equals(b.getVersion().toString()));
}
- public <T> Maybe<Class<T>> tryResolveClass(String type, CatalogBundle... catalogBundles) {
- return tryResolveClass(type, Arrays.asList(catalogBundles));
+ public <T> Maybe<Class<T>> tryResolveClass(String type, OsgiBundleWithUrl... osgiBundles) {
+ return tryResolveClass(type, Arrays.asList(osgiBundles));
}
- public <T> Maybe<Class<T>> tryResolveClass(String type, Iterable<CatalogBundle> catalogBundles) {
- Map<CatalogBundle,Throwable> bundleProblems = MutableMap.of();
+ public <T> Maybe<Class<T>> tryResolveClass(String type, Iterable<? extends OsgiBundleWithUrl> osgiBundles) {
+ Map<OsgiBundleWithUrl,Throwable> bundleProblems = MutableMap.of();
Set<String> extraMessages = MutableSet.of();
- for (CatalogBundle catalogBundle: catalogBundles) {
+ for (OsgiBundleWithUrl osgiBundle: osgiBundles) {
try {
- Maybe<Bundle> bundle = findBundle(catalogBundle);
+ Maybe<Bundle> bundle = findBundle(osgiBundle);
if (bundle.isPresent()) {
Bundle b = bundle.get();
Class<T> clazz;
@@ -200,13 +201,13 @@ public class OsgiManager {
}
return Maybe.of(clazz);
} else {
- bundleProblems.put(catalogBundle, ((Maybe.Absent<?>)bundle).getException());
+ bundleProblems.put(osgiBundle, ((Maybe.Absent<?>)bundle).getException());
}
} catch (Exception e) {
// should come from classloading now; name formatting or missing bundle errors will be caught above
Exceptions.propagateIfFatal(e);
- bundleProblems.put(catalogBundle, e);
+ bundleProblems.put(osgiBundle, e);
Throwable cause = e.getCause();
if (cause != null && cause.getMessage().contains("Unresolved constraint in bundle")) {
@@ -217,7 +218,7 @@ public class OsgiManager {
extraMessages.add("Your development environment may not have created necessary files. Doing a maven build then retrying may fix the issue.");
}
if (!extraMessages.isEmpty()) log.warn(Strings.join(extraMessages, " "));
- log.warn("Unresolved constraint resolving OSGi bundle "+catalogBundle+" to load "+type+": "+cause.getMessage());
+ log.warn("Unresolved constraint resolving OSGi bundle "+osgiBundle+" to load "+type+": "+cause.getMessage());
if (log.isDebugEnabled()) log.debug("Trace for OSGi resolution failure", e);
}
}
@@ -235,7 +236,7 @@ public class OsgiManager {
}
}
- public Maybe<Bundle> findBundle(CatalogBundle catalogBundle) {
+ public Maybe<Bundle> findBundle(OsgiBundleWithUrl catalogBundle) {
//Either fail at install time when the user supplied name:version is different
//from the one reported from the bundle
//or
@@ -256,10 +257,10 @@ public class OsgiManager {
/**
* Iterates through catalogBundles until one contains a resource with the given name.
*/
- public URL getResource(String name, Iterable<CatalogBundle> catalogBundles) {
- for (CatalogBundle catalogBundle: catalogBundles) {
+ public URL getResource(String name, Iterable<? extends OsgiBundleWithUrl> osgiBundles) {
+ for (OsgiBundleWithUrl osgiBundle: osgiBundles) {
try {
- Maybe<Bundle> bundle = findBundle(catalogBundle);
+ Maybe<Bundle> bundle = findBundle(osgiBundle);
if (bundle.isPresent()) {
URL result = bundle.get().getResource(name);
if (result!=null) return result;
@@ -272,11 +273,11 @@ public class OsgiManager {
}
/**
- * @return An iterable of all resources matching name in catalogBundles.
+ * @return URL's to all resources matching the given name (using {@link Bundle#getResources(String)} in the referenced osgi bundles.
*/
- public Iterable<URL> getResources(String name, Iterable<CatalogBundle> catalogBundles) {
- List<URL> resources = Lists.newArrayList();
- for (CatalogBundle catalogBundle : catalogBundles) {
+ public Iterable<URL> getResources(String name, Iterable<? extends OsgiBundleWithUrl> osgiBundles) {
+ Set<URL> resources = Sets.newLinkedHashSet();
+ for (OsgiBundleWithUrl catalogBundle : osgiBundles) {
try {
Maybe<Bundle> bundle = findBundle(catalogBundle);
if (bundle.isPresent()) {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/AbstractManagementContext.java
----------------------------------------------------------------------
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 01b507f..284b357 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
@@ -48,6 +48,7 @@ import org.apache.brooklyn.api.mgmt.entitlement.EntitlementManager;
import org.apache.brooklyn.api.mgmt.ha.HighAvailabilityManager;
import org.apache.brooklyn.api.mgmt.rebind.RebindManager;
import org.apache.brooklyn.api.objs.BrooklynObject;
+import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry;
import org.apache.brooklyn.config.StringConfigMap;
import org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog;
import org.apache.brooklyn.core.catalog.internal.CatalogInitialization;
@@ -69,6 +70,7 @@ import org.apache.brooklyn.core.mgmt.classloading.JavaBrooklynClassLoadingContex
import org.apache.brooklyn.core.mgmt.entitlement.Entitlements;
import org.apache.brooklyn.core.mgmt.ha.HighAvailabilityManagerImpl;
import org.apache.brooklyn.core.mgmt.rebind.RebindManagerImpl;
+import org.apache.brooklyn.core.typereg.BasicBrooklynTypeRegistry;
import org.apache.brooklyn.util.collections.MutableList;
import org.apache.brooklyn.util.collections.MutableMap;
import org.apache.brooklyn.util.core.ResourceUtils;
@@ -151,6 +153,7 @@ public abstract class AbstractManagementContext implements ManagementContextInte
protected BrooklynProperties configMap;
protected BasicLocationRegistry locationRegistry;
protected final BasicBrooklynCatalog catalog;
+ protected final BrooklynTypeRegistry typeRegistry;
protected ClassLoader baseClassLoader;
protected Iterable<URL> baseClassPathForScanning;
@@ -189,6 +192,7 @@ public abstract class AbstractManagementContext implements ManagementContextInte
DataGrid datagrid = datagridFactory.newDataGrid(this);
this.catalog = new BasicBrooklynCatalog(this);
+ this.typeRegistry = new BasicBrooklynTypeRegistry(this);
this.storage = new BrooklynStorageImpl(datagrid);
this.rebindManager = new RebindManagerImpl(this); // TODO leaking "this" reference; yuck
@@ -385,6 +389,11 @@ public abstract class AbstractManagementContext implements ManagementContextInte
}
@Override
+ public BrooklynTypeRegistry getTypeRegistry() {
+ return typeRegistry;
+ }
+
+ @Override
public ClassLoader getCatalogClassLoader() {
// catalog does not have to be initialized
return catalog.getRootClassLoader();
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/LocalEntityManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/LocalEntityManager.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/LocalEntityManager.java
index 7d3b705..aaa12d5 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/LocalEntityManager.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/LocalEntityManager.java
@@ -394,6 +394,7 @@ public class LocalEntityManager implements EntityManagerInternal {
@Override
public void unmanage(final Entity e) {
+ // TODO don't want to guess; should we inspect state of e ? or maybe it doesn't matter ?
unmanage(e, ManagementTransitionMode.guessing(BrooklynObjectManagementMode.MANAGED_PRIMARY, BrooklynObjectManagementMode.NONEXISTENT));
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/ManagementTransitionMode.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/ManagementTransitionMode.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/ManagementTransitionMode.java
index f076c3a..08f111b 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/ManagementTransitionMode.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/ManagementTransitionMode.java
@@ -44,7 +44,7 @@ public class ManagementTransitionMode {
return new ManagementTransitionMode(Preconditions.checkNotNull(modeBefore, "modeBefore"), Preconditions.checkNotNull(modeAfter, "modeAfter"));
}
- @Deprecated /** @deprecated marking places where we aren't sure */
+ @Deprecated /** @deprecated since 0.9.0 - used to mark places where we aren't sure, remove once we are satisfied */
public static ManagementTransitionMode guessing(BrooklynObjectManagementMode modeBefore, BrooklynObjectManagementMode modeAfter) {
return transitioning(modeBefore, modeAfter);
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/NonDeploymentManagementContext.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/NonDeploymentManagementContext.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/NonDeploymentManagementContext.java
index 5223cf8..68172bb 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/NonDeploymentManagementContext.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/NonDeploymentManagementContext.java
@@ -29,8 +29,6 @@ import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.apache.brooklyn.api.catalog.BrooklynCatalog;
import org.apache.brooklyn.api.effector.Effector;
import org.apache.brooklyn.api.entity.Application;
@@ -59,12 +57,12 @@ import org.apache.brooklyn.api.mgmt.rebind.RebindManager;
import org.apache.brooklyn.api.mgmt.rebind.mementos.BrooklynMementoPersister;
import org.apache.brooklyn.api.mgmt.rebind.mementos.BrooklynMementoRawData;
import org.apache.brooklyn.api.objs.BrooklynObject;
+import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry;
import org.apache.brooklyn.config.StringConfigMap;
import org.apache.brooklyn.core.catalog.internal.CatalogInitialization;
import org.apache.brooklyn.core.entity.AbstractEntity;
import org.apache.brooklyn.core.internal.BrooklynProperties;
import org.apache.brooklyn.core.internal.storage.BrooklynStorage;
-import org.apache.brooklyn.core.mgmt.entitlement.Entitlements;
import org.apache.brooklyn.core.mgmt.ha.OsgiManager;
import org.apache.brooklyn.core.mgmt.usage.UsageManager;
import org.apache.brooklyn.core.objs.proxy.InternalEntityFactory;
@@ -72,6 +70,8 @@ import org.apache.brooklyn.core.objs.proxy.InternalLocationFactory;
import org.apache.brooklyn.core.objs.proxy.InternalPolicyFactory;
import org.apache.brooklyn.util.guava.Maybe;
import org.apache.brooklyn.util.time.Duration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.common.base.Objects;
@@ -329,6 +329,12 @@ public class NonDeploymentManagementContext implements ManagementContextInternal
checkInitialManagementContextReal();
return initialManagementContext.getCatalog();
}
+
+ @Override
+ public BrooklynTypeRegistry getTypeRegistry() {
+ checkInitialManagementContextReal();
+ return initialManagementContext.getTypeRegistry();
+ }
@Override
public ClassLoader getCatalogClassLoader() {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindIteration.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindIteration.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindIteration.java
index 7b00ff8..2279e8c 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindIteration.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindIteration.java
@@ -932,7 +932,7 @@ public abstract class RebindIteration {
// This is a dangling reference to the catalog item (which will have been logged by lookupCatalogItem).
// Try loading as any version.
if (CatalogUtils.looksLikeVersionedId(catalogItemId)) {
- String symbolicName = CatalogUtils.getIdFromVersionedId(catalogItemId);
+ String symbolicName = CatalogUtils.getSymbolicNameFromVersionedId(catalogItemId);
catalogItem = rebindContext.lookup().lookupCatalogItem(symbolicName);
if (catalogItem != null) {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/core/src/main/java/org/apache/brooklyn/core/typereg/BasicBrooklynTypeRegistry.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/typereg/BasicBrooklynTypeRegistry.java b/core/src/main/java/org/apache/brooklyn/core/typereg/BasicBrooklynTypeRegistry.java
new file mode 100644
index 0000000..3d418e4
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/typereg/BasicBrooklynTypeRegistry.java
@@ -0,0 +1,122 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.brooklyn.core.typereg;
+
+import org.apache.brooklyn.api.catalog.BrooklynCatalog;
+import org.apache.brooklyn.api.catalog.CatalogItem;
+import org.apache.brooklyn.api.internal.AbstractBrooklynObjectSpec;
+import org.apache.brooklyn.api.mgmt.ManagementContext;
+import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry;
+import org.apache.brooklyn.api.typereg.OsgiBundleWithUrl;
+import org.apache.brooklyn.api.typereg.RegisteredType;
+import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
+import org.apache.brooklyn.core.typereg.RegisteredTypes.JavaTypeImplementation;
+import org.apache.brooklyn.core.typereg.RegisteredTypes.RegisteredSpecType;
+import org.apache.brooklyn.core.typereg.RegisteredTypes.TypeImplementation;
+import org.apache.brooklyn.util.collections.MutableList;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.collect.Iterables;
+
+public class BasicBrooklynTypeRegistry implements BrooklynTypeRegistry {
+
+ @SuppressWarnings("unused")
+ private static final Logger log = LoggerFactory.getLogger(BasicBrooklynTypeRegistry.class);
+
+ private ManagementContext mgmt;
+
+ public BasicBrooklynTypeRegistry(ManagementContext mgmt) {
+ this.mgmt = mgmt;
+ }
+
+ private static final Function<CatalogItem<?,?>,RegisteredType> CI_TO_RT = new Function<CatalogItem<?,?>, RegisteredType>() {
+ @Override
+ public RegisteredType apply(CatalogItem<?, ?> item) {
+ if (item==null) return null;
+ TypeImplementation impl = null;
+ if (item.getPlanYaml()!=null) {
+ impl = new TypeImplementation(null, item.getPlanYaml());
+ }
+ if (item.getJavaType()!=null) {
+ impl = new JavaTypeImplementation(item.getJavaType());
+ }
+ if (impl!=null) {
+ RegisteredSpecType type = new RegisteredSpecType(item.getSymbolicName(), item.getVersion(),
+ item.getCatalogItemJavaType(), impl);
+ type.bundles = MutableList.<OsgiBundleWithUrl>copyOf(item.getLibraries());
+ type.displayName = item.getDisplayName();
+ type.description = item.getDescription();
+ type.iconUrl = item.getIconUrl();
+
+ // TODO
+ // disabled, deprecated
+ // javaType, specType, registeredTypeName ...
+ // tags ?
+ return type;
+ }
+ throw new IllegalStateException("Unsupported catalog item "+item+" when trying to create RegisteredType");
+ }
+ };
+
+ public Iterable<RegisteredType> getAll() {
+ return getAll(Predicates.alwaysTrue());
+ }
+
+ @Override
+ public Iterable<RegisteredType> getAll(Predicate<? super RegisteredType> filter) {
+ return Iterables.filter(Iterables.transform(mgmt.getCatalog().getCatalogItems(), CI_TO_RT), filter);
+ }
+
+ @Override
+ public RegisteredType get(String symbolicNameWithOptionalVersion, RegisteredTypeKind kind, Class<?> parentClass) {
+ if (CatalogUtils.looksLikeVersionedId(symbolicNameWithOptionalVersion)) {
+ String id = CatalogUtils.getSymbolicNameFromVersionedId(symbolicNameWithOptionalVersion);
+ String version = CatalogUtils.getVersionFromVersionedId(symbolicNameWithOptionalVersion);
+ return get(id, version, kind, parentClass);
+ } else {
+ return get(symbolicNameWithOptionalVersion, BrooklynCatalog.DEFAULT_VERSION, kind, parentClass);
+ }
+ }
+
+ @Override
+ public RegisteredType get(String symbolicName, String version, RegisteredTypeKind kind, Class<?> parentClass) {
+ return CI_TO_RT.apply( mgmt.getCatalog().getCatalogItem(symbolicName, version) );
+ }
+
+ @Override
+ public RegisteredType get(String symbolicName, String version) {
+ return get(symbolicName, version, null, null);
+ }
+
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ @Override
+ public <T extends AbstractBrooklynObjectSpec> T createSpec(RegisteredType type, Class<T> specKind) {
+ if (!(type instanceof RegisteredSpecType)) {
+ throw new IllegalStateException("Cannot create spec from type "+type);
+ }
+
+ CatalogItem item = mgmt.getCatalog().getCatalogItem(type.getSymbolicName(), type.getVersion());
+ return (T) mgmt.getCatalog().createSpec(item);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/core/src/main/java/org/apache/brooklyn/core/typereg/BasicOsgiBundleWithUrl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/typereg/BasicOsgiBundleWithUrl.java b/core/src/main/java/org/apache/brooklyn/core/typereg/BasicOsgiBundleWithUrl.java
new file mode 100644
index 0000000..c21ca98
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/typereg/BasicOsgiBundleWithUrl.java
@@ -0,0 +1,101 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.brooklyn.core.typereg;
+
+import org.apache.brooklyn.api.catalog.CatalogItem.CatalogBundle;
+import org.apache.brooklyn.api.typereg.OsgiBundleWithUrl;
+
+import com.google.common.base.Objects;
+import com.google.common.base.Preconditions;
+
+public class BasicOsgiBundleWithUrl implements CatalogBundle, OsgiBundleWithUrl {
+ private String symbolicName;
+ private String version;
+ private String url;
+
+ // for deserializing (not sure if needed?)
+ @SuppressWarnings("unused")
+ private BasicOsgiBundleWithUrl() {}
+
+ public BasicOsgiBundleWithUrl(String name, String version, String url) {
+ if (name == null && version == null) {
+ Preconditions.checkNotNull(url, "url to an OSGi bundle is required");
+ } else {
+ Preconditions.checkNotNull(name, "both name and version are required");
+ Preconditions.checkNotNull(version, "both name and version are required");
+ }
+
+ this.symbolicName = name;
+ this.version = version;
+ this.url = url;
+ }
+
+ @Override
+ public boolean isFullDetailKnown() {
+ return symbolicName != null && version != null;
+ }
+
+ @Override
+ @Deprecated //see super
+ public boolean isNamed() {
+ return isFullDetailKnown();
+ }
+
+ @Override
+ public String getSymbolicName() {
+ return symbolicName;
+ }
+
+ @Override
+ public String getVersion() {
+ return version;
+ }
+
+ @Override
+ public String getUrl() {
+ return url;
+ }
+
+ @Override
+ public String toString() {
+ return Objects.toStringHelper(this)
+ .add("symbolicName", symbolicName)
+ .add("version", version)
+ .add("url", url)
+ .toString();
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(symbolicName, version, url);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) return true;
+ if (obj == null) return false;
+ if (getClass() != obj.getClass()) return false;
+ OsgiBundleWithUrl other = (OsgiBundleWithUrl) obj;
+ if (!Objects.equal(symbolicName, other.getSymbolicName())) return false;
+ if (!Objects.equal(version, other.getVersion())) return false;
+ if (!Objects.equal(url, other.getUrl())) return false;
+ return true;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypePredicates.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypePredicates.java b/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypePredicates.java
new file mode 100644
index 0000000..7c719f2
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypePredicates.java
@@ -0,0 +1,180 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.brooklyn.core.typereg;
+
+import javax.annotation.Nullable;
+
+import org.apache.brooklyn.api.entity.Application;
+import org.apache.brooklyn.api.entity.Entity;
+import org.apache.brooklyn.api.location.Location;
+import org.apache.brooklyn.api.mgmt.ManagementContext;
+import org.apache.brooklyn.api.policy.Policy;
+import org.apache.brooklyn.api.typereg.RegisteredType;
+import org.apache.brooklyn.core.mgmt.entitlement.Entitlements;
+
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+
+public class RegisteredTypePredicates {
+
+// public static Predicate<RegisteredType> deprecated(final boolean deprecated) {
+// return new DeprecatedEqualTo(deprecated);
+// }
+//
+// private static class DeprecatedEqualTo implements Predicate<RegisteredType> {
+// private final boolean deprecated;
+//
+// public DeprecatedEqualTo(boolean deprecated) {
+// this.deprecated = deprecated;
+// }
+// @Override
+// public boolean apply(@Nullable RegisteredType item) {
+// return (item != null) && item.isDeprecated() == deprecated;
+// }
+// }
+//
+// public static Predicate<RegisteredType> disabled(boolean disabled) {
+// return new DisabledEqualTo(disabled);
+// }
+//
+// private static class DisabledEqualTo implements Predicate<RegisteredType> {
+// private final boolean disabled;
+//
+// public DisabledEqualTo(boolean disabled) {
+// this.disabled = disabled;
+// }
+// @Override
+// public boolean apply(@Nullable RegisteredType item) {
+// return (item != null) && item.isDisabled() == disabled;
+// }
+// }
+
+ @SuppressWarnings("unused")
+ private static final Function<RegisteredType,String> ID_OF_ITEM_TRANSFORMER_ANONYMOUS = new Function<RegisteredType, String>() {
+ @Override @Nullable
+ public String apply(@Nullable RegisteredType input) {
+ if (input==null) return null;
+ return input.getId();
+ }
+ };
+
+ public static final Function<RegisteredType,String> ID_OF_ITEM_TRANSFORMER = new IdOfItemTransformer();
+
+ private static class IdOfItemTransformer implements Function<RegisteredType,String> {
+ @Override @Nullable
+ public String apply(@Nullable RegisteredType input) {
+ if (input==null) return null;
+ return input.getId();
+ }
+ };
+
+ public static Predicate<RegisteredType> displayName(final Predicate<? super String> filter) {
+ return new DisplayNameMatches(filter);
+ }
+
+ private static class DisplayNameMatches implements Predicate<RegisteredType> {
+ private final Predicate<? super String> filter;
+
+ public DisplayNameMatches(Predicate<? super String> filter) {
+ this.filter = filter;
+ }
+ @Override
+ public boolean apply(@Nullable RegisteredType item) {
+ return (item != null) && filter.apply(item.getDisplayName());
+ }
+ }
+
+ public static Predicate<RegisteredType> symbolicName(final Predicate<? super String> filter) {
+ return new SymbolicNameMatches(filter);
+ }
+
+ private static class SymbolicNameMatches implements Predicate<RegisteredType> {
+ private final Predicate<? super String> filter;
+
+ public SymbolicNameMatches(Predicate<? super String> filter) {
+ this.filter = filter;
+ }
+ @Override
+ public boolean apply(@Nullable RegisteredType item) {
+ return (item != null) && filter.apply(item.getSymbolicName());
+ }
+ }
+
+ public static <T> Predicate<RegisteredType> javaType(final Predicate<Class<T>> filter) {
+ return new JavaTypeMatches(filter);
+ }
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ public static Predicate<RegisteredType> javaTypeAssignableFrom(final Class<?> filter) {
+ return javaType((Predicate)Predicates.assignableFrom(filter));
+ }
+
+ private static class JavaTypeMatches implements Predicate<RegisteredType> {
+ private final Predicate<Class<?>> filter;
+
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ private <T> JavaTypeMatches(Predicate filter) {
+ this.filter = filter;
+ }
+ @Override
+ public boolean apply(@Nullable RegisteredType item) {
+ if (item==null) return false;
+ return (item != null) && filter.apply(item.getJavaType());
+ }
+ }
+
+ public static final Predicate<RegisteredType> IS_APPLICATION = javaTypeAssignableFrom(Application.class);
+ public static final Predicate<RegisteredType> IS_ENTITY = javaTypeAssignableFrom(Entity.class);
+ public static final Predicate<RegisteredType> IS_LOCATION = javaTypeAssignableFrom(Location.class);
+ public static final Predicate<RegisteredType> IS_POLICY = javaTypeAssignableFrom(Policy.class);
+
+ public static Predicate<RegisteredType> entitledToSee(final ManagementContext mgmt) {
+ return new EntitledToSee(mgmt);
+ }
+
+ private static class EntitledToSee implements Predicate<RegisteredType> {
+ private final ManagementContext mgmt;
+
+ public EntitledToSee(ManagementContext mgmt) {
+ this.mgmt = mgmt;
+ }
+ @Override
+ public boolean apply(@Nullable RegisteredType item) {
+ return (item != null) &&
+ Entitlements.isEntitled(mgmt.getEntitlementManager(), Entitlements.SEE_CATALOG_ITEM, item.getId());
+ }
+ }
+
+// public static Predicate<RegisteredType> isBestVersion(final ManagementContext mgmt) {
+// return new IsBestVersion(mgmt);
+// }
+//
+// private static class IsBestVersion implements Predicate<RegisteredType> {
+// private final ManagementContext mgmt;
+//
+// public IsBestVersion(ManagementContext mgmt) {
+// this.mgmt = mgmt;
+// }
+// @Override
+// public boolean apply(@Nullable RegisteredType item) {
+// return CatalogUtils.isBestVersion(mgmt, item);
+// }
+// }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypes.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypes.java b/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypes.java
new file mode 100644
index 0000000..0668d0a
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypes.java
@@ -0,0 +1,183 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.brooklyn.core.typereg;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.brooklyn.api.typereg.OsgiBundleWithUrl;
+import org.apache.brooklyn.api.typereg.RegisteredType;
+import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry.RegisteredTypeKind;
+import org.apache.brooklyn.core.plan.PlanToSpecTransformer;
+
+import com.google.common.annotations.Beta;
+
+public class RegisteredTypes {
+
+ /** Visitor adapter which can be used to ensure all kinds are supported */
+ public static abstract class RegisteredTypeKindVisitor<T> {
+ public T visit(RegisteredType type) {
+ if (type==null) throw new NullPointerException("Registered type must not be null");
+ if (type instanceof RegisteredSpecType) {
+ visitSpec((RegisteredSpecType)type);
+ }
+ throw new IllegalStateException("Unexpected registered type: "+type.getClass());
+ }
+
+ protected abstract T visitSpec(RegisteredSpecType type);
+
+ // TODO beans, others
+ }
+
+ public static RegisteredTypeKind getKindOf(RegisteredType type) {
+ return new RegisteredTypeKindVisitor<RegisteredTypeKind>() {
+ @Override protected RegisteredTypeKind visitSpec(RegisteredSpecType type) { return RegisteredTypeKind.SPEC; }
+ }.visit(type);
+ }
+
+ public abstract static class AbstractRegisteredType implements RegisteredType {
+
+ final String symbolicName;
+ final String version;
+
+ List<OsgiBundleWithUrl> bundles;
+ String displayName;
+ String description;
+ String iconUrl;
+
+ // TODO ensure this is re-populated on rebind
+ transient Class<?> javaType;
+
+ public AbstractRegisteredType(String symbolicName, String version, Class<?> javaType) {
+ this.symbolicName = symbolicName;
+ this.version = version;
+ this.javaType = javaType;
+ }
+
+ @Override
+ public String getId() {
+ return symbolicName + (version!=null ? ":"+version : "");
+ }
+
+ @Override
+ public String getSymbolicName() {
+ return symbolicName;
+ }
+
+ @Override
+ public String getVersion() {
+ return version;
+ }
+
+ @Override
+ public Collection<OsgiBundleWithUrl> getLibraries() {
+ return bundles;
+ }
+
+ @Override
+ public String getDisplayName() {
+ return displayName;
+ }
+
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+ @Override
+ public String getIconUrl() {
+ return iconUrl;
+ }
+
+ @Override
+ public Class<?> getJavaType() {
+ return javaType;
+ }
+ }
+
+ // TODO
+// public static class RegisteredBeanType extends AbstractRegisteredType {
+//
+// }
+
+ public static class RegisteredSpecType extends AbstractRegisteredType {
+
+ private TypeImplementation impl;
+
+ public RegisteredSpecType(String symbolicName, String version, Class<?> javaType, TypeImplementation impl) {
+ super(symbolicName, version, javaType);
+ this.impl = impl;
+ }
+
+ public TypeImplementation getImplementation() {
+ return impl;
+ }
+ }
+
+ public static class TypeImplementation {
+ final String kind;
+ final Object data;
+
+ public TypeImplementation(String kind, Object data) {
+ super();
+ this.kind = kind;
+ this.data = data;
+ }
+
+ /** details of the implementation, if known;
+ * this may be null if the relevant {@link PlanToSpecTransformer} was not declared when created,
+ * but in general we should look to determine the kind as early as possible and use that
+ * to retrieve the appropriate such transformer.
+ */
+ public String getKind() {
+ return kind;
+ }
+
+ public Object getData() {
+ return data;
+ }
+ }
+
+ public static class JavaTypeImplementation extends TypeImplementation {
+ public static final String KIND = "java";
+ public JavaTypeImplementation(String javaType) {
+ super(KIND, javaType);
+ }
+ public String getJavaType() { return (String)getData(); }
+ }
+
+// // TODO remove, unless we want it
+// public static class CampYamlTypeImplementation extends TypeImplementation {
+// public static final String KIND = "camp";
+// public CampYamlTypeImplementation(String javaType) {
+// super(KIND, javaType);
+// }
+// public String getCampYaml() { return (String)getData(); }
+// }
+
+ /** returns the implementation data for a spec if it is a string (e.g. plan yaml or java class name); else false */
+ @Beta
+ public static String getImplementationDataStringForSpec(RegisteredType item) {
+ if (!(item instanceof RegisteredSpecType)) return null;
+ Object data = ((RegisteredSpecType)item).getImplementation().getData();
+ if (data instanceof String) return (String) data;
+ return null;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/core/src/main/java/org/apache/brooklyn/util/core/osgi/Osgis.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/osgi/Osgis.java b/core/src/main/java/org/apache/brooklyn/util/core/osgi/Osgis.java
index 006604d..9b94f57 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/osgi/Osgis.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/osgi/Osgis.java
@@ -133,7 +133,7 @@ public class Osgis {
}
public BundleFinder bundle(CatalogBundle bundle) {
- if (bundle.isNamed()) {
+ if (bundle.isFullDetailKnown()) {
symbolicName(bundle.getSymbolicName());
version(bundle.getVersion());
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/core/src/test/java/org/apache/brooklyn/core/catalog/internal/CatalogDtoTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/catalog/internal/CatalogDtoTest.java b/core/src/test/java/org/apache/brooklyn/core/catalog/internal/CatalogDtoTest.java
index 0b72c90..dc3662c 100644
--- a/core/src/test/java/org/apache/brooklyn/core/catalog/internal/CatalogDtoTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/catalog/internal/CatalogDtoTest.java
@@ -147,11 +147,11 @@ public class CatalogDtoTest {
String version = "0.1.2";
String versionedId = CatalogUtils.getVersionedId(id, version);
- Assert.assertNull(CatalogUtils.getIdFromVersionedId(null));
+ Assert.assertNull(CatalogUtils.getSymbolicNameFromVersionedId(null));
Assert.assertNull(CatalogUtils.getVersionFromVersionedId(null));
- Assert.assertNull(CatalogUtils.getIdFromVersionedId(id));
+ Assert.assertNull(CatalogUtils.getSymbolicNameFromVersionedId(id));
Assert.assertNull(CatalogUtils.getVersionFromVersionedId(version));
- Assert.assertEquals(CatalogUtils.getIdFromVersionedId(versionedId), id);
+ Assert.assertEquals(CatalogUtils.getSymbolicNameFromVersionedId(versionedId), id);
Assert.assertEquals(CatalogUtils.getVersionFromVersionedId(versionedId), version);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/core/src/test/java/org/apache/brooklyn/core/catalog/internal/CatalogScanTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/catalog/internal/CatalogScanTest.java b/core/src/test/java/org/apache/brooklyn/core/catalog/internal/CatalogScanTest.java
index 7a4fecb..da5ca53 100644
--- a/core/src/test/java/org/apache/brooklyn/core/catalog/internal/CatalogScanTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/catalog/internal/CatalogScanTest.java
@@ -121,7 +121,8 @@ public class CatalogScanTest {
Assert.assertEquals(s1.getDescription(), "Some silly app test");
- Class<? extends Application> app = c.loadClass(s1);
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ Class<?> app = c.createSpec((CatalogItem)s1).getType();
Assert.assertEquals(MySillyAppTemplate.class, app);
String xml = ((BasicBrooklynCatalog)c).toXmlString();
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/core/src/test/java/org/apache/brooklyn/core/catalog/internal/CatalogVersioningTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/catalog/internal/CatalogVersioningTest.java b/core/src/test/java/org/apache/brooklyn/core/catalog/internal/CatalogVersioningTest.java
index e7eeba9..0ca2171 100644
--- a/core/src/test/java/org/apache/brooklyn/core/catalog/internal/CatalogVersioningTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/catalog/internal/CatalogVersioningTest.java
@@ -71,7 +71,7 @@ public class CatalogVersioningTest {
Assert.assertFalse(CatalogUtils.looksLikeVersionedId(versionedId));
} else {
Assert.assertTrue(CatalogUtils.looksLikeVersionedId(versionedId));
- Assert.assertEquals(CatalogUtils.getIdFromVersionedId(versionedId), id);
+ Assert.assertEquals(CatalogUtils.getSymbolicNameFromVersionedId(versionedId), id);
Assert.assertEquals(CatalogUtils.getVersionFromVersionedId(versionedId), version);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestFixture.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestFixture.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestFixture.java
index c9acdf3..921ea9e 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestFixture.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestFixture.java
@@ -289,7 +289,7 @@ public abstract class RebindTestFixture<T extends StartableApplication> {
assertEquals(actualIds.size(), Iterables.size(actual.getCatalogItems()), "id keyset size != size of catalog. Are there duplicates in the catalog?");
assertEquals(actualIds, expectedIds);
for (String versionedId : actualIds) {
- String id = CatalogUtils.getIdFromVersionedId(versionedId);
+ String id = CatalogUtils.getSymbolicNameFromVersionedId(versionedId);
String version = CatalogUtils.getVersionFromVersionedId(versionedId);
assertCatalogItemsEqual(actual.getCatalogItem(id, version), expected.getCatalogItem(id, version));
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/dc968f9d/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynAssemblyTemplateInstantiator.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynAssemblyTemplateInstantiator.java b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynAssemblyTemplateInstantiator.java
index 1876e99..3368df2 100644
--- a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynAssemblyTemplateInstantiator.java
+++ b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynAssemblyTemplateInstantiator.java
@@ -32,7 +32,6 @@ import org.apache.brooklyn.camp.spi.AssemblyTemplate;
import org.apache.brooklyn.camp.spi.AssemblyTemplate.Builder;
import org.apache.brooklyn.camp.spi.PlatformComponentTemplate;
import org.apache.brooklyn.camp.spi.collection.ResolvableLink;
-import org.apache.brooklyn.core.entity.Entities;
import org.apache.brooklyn.core.mgmt.EntityManagementUtils;
import org.apache.brooklyn.core.mgmt.EntityManagementUtils.CreationResult;
import org.apache.brooklyn.core.mgmt.HasBrooklynManagementContext;
@@ -74,8 +73,8 @@ public class BrooklynAssemblyTemplateInstantiator implements AssemblyTemplateSpe
public List<EntitySpec<?>> createServiceSpecs(
AssemblyTemplate template,
CampPlatform platform, BrooklynClassLoadingContext itemLoader,
- Set<String> encounteredCatalogTypes) {
- return buildTemplateServicesAsSpecs(itemLoader, template, platform, encounteredCatalogTypes);
+ Set<String> encounteredRegisteredTypeIds) {
+ return buildTemplateServicesAsSpecs(itemLoader, template, platform, encounteredRegisteredTypeIds);
}
@Override
@@ -125,13 +124,13 @@ public class BrooklynAssemblyTemplateInstantiator implements AssemblyTemplateSpe
return EntityManagementUtils.canPromoteWrappedApplication(app);
}
- private List<EntitySpec<?>> buildTemplateServicesAsSpecs(BrooklynClassLoadingContext loader, AssemblyTemplate template, CampPlatform platform, Set<String> encounteredCatalogTypes) {
+ private List<EntitySpec<?>> buildTemplateServicesAsSpecs(BrooklynClassLoadingContext loader, AssemblyTemplate template, CampPlatform platform, Set<String> encounteredRegisteredTypeIds) {
List<EntitySpec<?>> result = Lists.newArrayList();
for (ResolvableLink<PlatformComponentTemplate> ctl: template.getPlatformComponentTemplates().links()) {
PlatformComponentTemplate appChildComponentTemplate = ctl.resolve();
BrooklynComponentTemplateResolver entityResolver = BrooklynComponentTemplateResolver.Factory.newInstance(loader, appChildComponentTemplate);
- EntitySpec<?> spec = entityResolver.resolveSpec(encounteredCatalogTypes);
+ EntitySpec<?> spec = entityResolver.resolveSpec(encounteredRegisteredTypeIds);
result.add(spec);
}
return result;
[4/9] incubator-brooklyn git commit: more converting CatalogItem
access to RegisteredType
Posted by he...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/rest-server/src/main/java/org/apache/brooklyn/rest/transform/EntityTransformer.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/transform/EntityTransformer.java b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/transform/EntityTransformer.java
index 7bd36f6..4e6e15b 100644
--- a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/transform/EntityTransformer.java
+++ b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/transform/EntityTransformer.java
@@ -28,7 +28,6 @@ import java.util.Map;
import org.apache.brooklyn.api.catalog.CatalogConfig;
import org.apache.brooklyn.api.entity.Application;
import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.entity.EntityLocal;
import org.apache.brooklyn.config.ConfigKey;
import org.apache.brooklyn.core.config.render.RendererHints;
import org.apache.brooklyn.rest.domain.EntityConfigSummary;
@@ -104,7 +103,7 @@ public class EntityTransformer {
/** generates a representation for a given config key,
* with label inferred from annoation in the entity class,
* and links pointing to the entity and the applicaiton */
- public static EntityConfigSummary entityConfigSummary(EntityLocal entity, ConfigKey<?> config) {
+ public static EntityConfigSummary entityConfigSummary(Entity entity, ConfigKey<?> config) {
/*
* following code nearly there to get the @CatalogConfig annotation
* in the class and use that to populate a label
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/rest-server/src/main/java/org/apache/brooklyn/rest/transform/PolicyTransformer.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/transform/PolicyTransformer.java b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/transform/PolicyTransformer.java
index 39bc783..b29e010 100644
--- a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/transform/PolicyTransformer.java
+++ b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/transform/PolicyTransformer.java
@@ -22,7 +22,6 @@ import java.net.URI;
import java.util.Map;
import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.entity.EntityLocal;
import org.apache.brooklyn.api.policy.Policy;
import org.apache.brooklyn.config.ConfigKey;
import org.apache.brooklyn.core.policy.Policies;
@@ -56,7 +55,7 @@ public class PolicyTransformer {
return new PolicySummary(policy.getId(), policy.getDisplayName(), policy.getCatalogItemId(), ApplicationTransformer.statusFromLifecycle(Policies.getPolicyStatus(policy)), links);
}
- public static PolicyConfigSummary policyConfigSummary(BrooklynRestResourceUtils utils, ApplicationSummary application, EntityLocal entity, Policy policy, ConfigKey<?> config) {
+ public static PolicyConfigSummary policyConfigSummary(BrooklynRestResourceUtils utils, ApplicationSummary application, Entity entity, Policy policy, ConfigKey<?> config) {
PolicyConfigSummary summary = policyConfigSummary(utils, entity, policy, config);
// TODO
// if (!entity.getApplicationId().equals(application.getInstance().getId()))
@@ -64,7 +63,7 @@ public class PolicyTransformer {
return summary;
}
- public static PolicyConfigSummary policyConfigSummary(BrooklynRestResourceUtils utils, EntityLocal entity, Policy policy, ConfigKey<?> config) {
+ public static PolicyConfigSummary policyConfigSummary(BrooklynRestResourceUtils utils, Entity entity, Policy policy, ConfigKey<?> config) {
String applicationUri = "/v1/applications/" + entity.getApplicationId();
String entityUri = applicationUri + "/entities/" + entity.getId();
String policyUri = entityUri + "/policies/" + policy.getId();
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/rest-server/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java
index f30c7ec..2d9054a 100644
--- a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java
+++ b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java
@@ -23,6 +23,7 @@ import static org.apache.brooklyn.rest.util.WebResourceUtils.notFound;
import java.lang.reflect.Constructor;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -36,26 +37,28 @@ import org.apache.brooklyn.api.catalog.BrooklynCatalog;
import org.apache.brooklyn.api.catalog.CatalogItem;
import org.apache.brooklyn.api.entity.Application;
import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.entity.EntityLocal;
import org.apache.brooklyn.api.location.Location;
import org.apache.brooklyn.api.location.LocationRegistry;
import org.apache.brooklyn.api.mgmt.ManagementContext;
import org.apache.brooklyn.api.mgmt.Task;
import org.apache.brooklyn.api.policy.Policy;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.camp.brooklyn.BrooklynCampConstants;
import org.apache.brooklyn.camp.brooklyn.spi.dsl.methods.DslComponent;
import org.apache.brooklyn.camp.brooklyn.spi.dsl.methods.DslComponent.Scope;
import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.core.catalog.CatalogPredicates;
+import org.apache.brooklyn.core.catalog.internal.CatalogItemComparator;
import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
import org.apache.brooklyn.core.entity.Attributes;
import org.apache.brooklyn.core.entity.Entities;
import org.apache.brooklyn.core.entity.EntityInternal;
-import org.apache.brooklyn.core.entity.factory.ApplicationBuilder;
import org.apache.brooklyn.core.entity.trait.Startable;
import org.apache.brooklyn.core.mgmt.BrooklynTaskTags;
import org.apache.brooklyn.core.mgmt.entitlement.Entitlements;
import org.apache.brooklyn.core.mgmt.entitlement.Entitlements.StringAndArgument;
import org.apache.brooklyn.core.objs.BrooklynTypes;
+import org.apache.brooklyn.core.typereg.RegisteredTypes;
import org.apache.brooklyn.enricher.stock.Enrichers;
import org.apache.brooklyn.entity.stock.BasicApplication;
import org.apache.brooklyn.rest.domain.ApplicationSpec;
@@ -73,7 +76,9 @@ import org.slf4j.LoggerFactory;
import com.google.common.base.Function;
import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.ImmutableSortedSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@@ -137,10 +142,10 @@ public class BrooklynRestResourceUtils {
* in which case names will be searched recursively (and the application is required).
*
* @throws 404 or 412 (unless input is null in which case output is null) */
- public EntityLocal getEntity(String application, String entity) {
+ public Entity getEntity(String application, String entity) {
if (entity==null) return null;
Application app = application!=null ? getApplication(application) : null;
- EntityLocal e = (EntityLocal) mgmt.getEntityManager().getEntity(entity);
+ Entity e = (Entity) mgmt.getEntityManager().getEntity(entity);
if (e!=null) {
if (!Entitlements.isEntitled(mgmt.getEntitlementManager(), Entitlements.SEE_ENTITY, e)) {
@@ -195,11 +200,11 @@ public class BrooklynRestResourceUtils {
/** walks the hierarchy (depth-first) at root (often an Application) looking for
* an entity matching the given ID or name; returns the first such entity, or null if none found
**/
- public EntityLocal searchForEntityNamed(Entity root, String entity) {
- if (root.getId().equals(entity) || entity.equals(root.getDisplayName())) return (EntityLocal) root;
+ public Entity searchForEntityNamed(Entity root, String entity) {
+ if (root.getId().equals(entity) || entity.equals(root.getDisplayName())) return (Entity) root;
for (Entity child: root.getChildren()) {
Entity result = searchForEntityNamed(child, entity);
- if (result!=null) return (EntityLocal) result;
+ if (result!=null) return (Entity) result;
}
return null;
}
@@ -208,14 +213,16 @@ public class BrooklynRestResourceUtils {
String catalogItemId;
Class<? extends Entity> clazz;
- @SuppressWarnings("unchecked")
+ @SuppressWarnings({ "unchecked" })
private FindItemAndClass inferFrom(String type) {
- BrooklynCatalog catalog = getCatalog();
- CatalogItem<?, ?> item = CatalogUtils.getCatalogItemOptionalVersion(mgmt, type);
+ RegisteredType item = mgmt.getTypeRegistry().get(type);
if (item==null) {
- // although the method was deprecated in 0.7.0, its use here was not warned until 0.9.0;
- // therefore this behaviour should not be changed until after 0.9.0
- item = catalog.getCatalogItemForType(type);
+ // deprecated attempt to load an item not in the type registry
+
+ // although the method called was deprecated in 0.7.0, its use here was not warned until 0.9.0;
+ // therefore this behaviour should not be changed until after 0.9.0;
+ // at which point it should try a pojo load (see below)
+ item = getCatalogItemForType(type);
if (item!=null) {
log.warn("Creating application for requested type `"+type+" using item "+item+"; "
+ "the registered type name ("+item.getSymbolicName()+") should be used from the spec instead, "
@@ -226,12 +233,12 @@ public class BrooklynRestResourceUtils {
if (item != null) {
return setAs(
- catalog.createSpec((CatalogItem<Entity,org.apache.brooklyn.api.entity.EntitySpec<Entity>>)item).getType(),
+ mgmt.getTypeRegistry().createSpec(item, null, org.apache.brooklyn.api.entity.EntitySpec.class).getType(),
item.getId());
} else {
try {
setAs(
- (Class<? extends Entity>) catalog.getRootClassLoader().loadClass(type),
+ (Class<? extends Entity>) getCatalog().getRootClassLoader().loadClass(type),
null);
log.info("Catalog does not contain item for type {}; loaded class directly instead", type);
return this;
@@ -247,6 +254,50 @@ public class BrooklynRestResourceUtils {
this.catalogItemId = catalogItemId;
return this;
}
+
+ @Deprecated // see caller
+ private RegisteredType getCatalogItemForType(String typeName) {
+ final RegisteredType resultI;
+ if (CatalogUtils.looksLikeVersionedId(typeName)) {
+ //All catalog identifiers of the form xxxx:yyyy are composed of symbolicName+version.
+ //No javaType is allowed as part of the identifier.
+ resultI = mgmt.getTypeRegistry().get(typeName);
+ } else {
+ //Usually for catalog items with javaType (that is items from catalog.xml)
+ //the symbolicName and javaType match because symbolicName (was ID)
+ //is not specified explicitly. But could be the case that there is an item
+ //whose symbolicName is explicitly set to be different from the javaType.
+ //Note that in the XML the attribute is called registeredTypeName.
+ Iterable<CatalogItem<Object,Object>> resultL = mgmt.getCatalog().getCatalogItems(CatalogPredicates.javaType(Predicates.equalTo(typeName)));
+ if (!Iterables.isEmpty(resultL)) {
+ //Push newer versions in front of the list (not that there should
+ //be more than one considering the items are coming from catalog.xml).
+ resultI = RegisteredTypes.of(sortVersionsDesc(resultL).iterator().next());
+ if (log.isDebugEnabled() && Iterables.size(resultL)>1) {
+ log.debug("Found "+Iterables.size(resultL)+" matches in catalog for type "+typeName+"; returning the result with preferred version, "+resultI);
+ }
+ } else {
+ //As a last resort try searching for items with the same symbolicName supposedly
+ //different from the javaType.
+ resultI = mgmt.getTypeRegistry().get(typeName, BrooklynCatalog.DEFAULT_VERSION);
+ if (resultI != null) {
+ if (resultI.getJavaType() == null) {
+ //Catalog items scanned from the classpath (using reflection and annotations) now
+ //get yaml spec rather than a java type. Can't use those when creating apps from
+ //the legacy app spec format.
+ log.warn("Unable to find catalog item for type "+typeName +
+ ". There is an existing catalog item with ID " + resultI.getId() +
+ " but it doesn't define a class type.");
+ return null;
+ }
+ }
+ }
+ }
+ return resultI;
+ }
+ private <T,SpecT> Collection<CatalogItem<T,SpecT>> sortVersionsDesc(Iterable<CatalogItem<T,SpecT>> versions) {
+ return ImmutableSortedSet.orderedBy(CatalogItemComparator.<T,SpecT>getInstance()).addAll(versions).build();
+ }
}
@SuppressWarnings({ "deprecation" })
@@ -281,11 +332,11 @@ public class BrooklynRestResourceUtils {
}
try {
- if (ApplicationBuilder.class.isAssignableFrom(itemAndClass.clazz)) {
+ if (org.apache.brooklyn.core.entity.factory.ApplicationBuilder.class.isAssignableFrom(itemAndClass.clazz)) {
// warning only added in 0.9.0
log.warn("Using deprecated ApplicationBuilder "+itemAndClass.clazz+"; callers must migrate to use of Application");
Constructor<?> constructor = itemAndClass.clazz.getConstructor();
- ApplicationBuilder appBuilder = (ApplicationBuilder) constructor.newInstance();
+ org.apache.brooklyn.core.entity.factory.ApplicationBuilder appBuilder = (org.apache.brooklyn.core.entity.factory.ApplicationBuilder) constructor.newInstance();
if (!Strings.isEmpty(name)) appBuilder.appDisplayName(name);
if (entities.size() > 0)
log.warn("Cannot supply additional entities when using an ApplicationBuilder; ignoring in spec {}", spec);
@@ -342,7 +393,7 @@ public class BrooklynRestResourceUtils {
}
public Task<?> start(Application app, List<? extends Location> locations) {
- return Entities.invokeEffector((EntityLocal)app, app, Startable.START,
+ return Entities.invokeEffector((Entity)app, app, Startable.START,
MutableMap.of("locations", locations));
}
@@ -381,7 +432,8 @@ public class BrooklynRestResourceUtils {
return result;
}
- protected void configureRenderingMetadata(ApplicationSpec spec, ApplicationBuilder appBuilder) {
+ @SuppressWarnings("deprecation")
+ protected void configureRenderingMetadata(ApplicationSpec spec, org.apache.brooklyn.core.entity.factory.ApplicationBuilder appBuilder) {
appBuilder.configure(getRenderingConfigurationFor(spec.getType()));
}
@@ -395,7 +447,7 @@ public class BrooklynRestResourceUtils {
protected Map<?, ?> getRenderingConfigurationFor(String catalogId) {
MutableMap<Object, Object> result = MutableMap.of();
- CatalogItem<?,?> item = CatalogUtils.getCatalogItemOptionalVersion(mgmt, catalogId);
+ RegisteredType item = mgmt.getTypeRegistry().get(catalogId);
if (item==null) return result;
result.addIfNotNull("iconUrl", item.getIconUrl());
@@ -527,7 +579,7 @@ public class BrooklynRestResourceUtils {
public Iterable<Entity> descendantsOfAnyType(String application, String entity) {
List<Entity> result = Lists.newArrayList();
- EntityLocal e = getEntity(application, entity);
+ Entity e = getEntity(application, entity);
gatherAllDescendants(e, result);
return result;
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/rest-server/src/test/java/org/apache/brooklyn/rest/domain/ApplicationTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/domain/ApplicationTest.java b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/domain/ApplicationTest.java
index c992ec2..7e9c910 100644
--- a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/domain/ApplicationTest.java
+++ b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/domain/ApplicationTest.java
@@ -27,7 +27,6 @@ import java.io.IOException;
import java.net.URI;
import java.util.Map;
-import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.mgmt.ManagementContext;
import org.apache.brooklyn.core.entity.Entities;
import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
@@ -84,7 +83,7 @@ public class ApplicationTest {
ManagementContext mgmt = LocalManagementContextForTests.newInstance();
try {
TestApplication app = mgmt.getEntityManager().createEntity(org.apache.brooklyn.api.entity.EntitySpec.create(TestApplication.class));
- TestApplication e2 = app.addChild(org.apache.brooklyn.api.entity.EntitySpec.create(TestApplication.class));
+ app.addChild(org.apache.brooklyn.api.entity.EntitySpec.create(TestApplication.class));
Asserts.assertEqualsIgnoringOrder(mgmt.getApplications(), ImmutableList.of(app));
} finally {
Entities.destroyAll(mgmt);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/CatalogResetTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/CatalogResetTest.java b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/CatalogResetTest.java
index 6adfdb5..0b5daf5 100644
--- a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/CatalogResetTest.java
+++ b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/CatalogResetTest.java
@@ -27,6 +27,7 @@ import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import org.apache.brooklyn.api.catalog.BrooklynCatalog;
+import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry;
import org.apache.brooklyn.core.test.TestHttpRequestHandler;
import org.apache.brooklyn.core.test.TestHttpServer;
import org.apache.brooklyn.rest.testing.BrooklynRestResourceTest;
@@ -104,9 +105,9 @@ public class CatalogResetTest extends BrooklynRestResourceTest {
}
private void assertItems() {
- BrooklynCatalog catalog = getManagementContext().getCatalog();
- assertNotNull(catalog.getCatalogItem("org.apache.brooklyn.entity.stock.BasicApplication", BrooklynCatalog.DEFAULT_VERSION));
- assertNotNull(catalog.getCatalogItem("org.apache.brooklyn.test.osgi.entities.SimpleApplication", BrooklynCatalog.DEFAULT_VERSION));
+ BrooklynTypeRegistry types = getManagementContext().getTypeRegistry();
+ assertNotNull(types.get("org.apache.brooklyn.entity.stock.BasicApplication", BrooklynCatalog.DEFAULT_VERSION));
+ assertNotNull(types.get("org.apache.brooklyn.test.osgi.entities.SimpleApplication", BrooklynCatalog.DEFAULT_VERSION));
}
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/CatalogResourceTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/CatalogResourceTest.java b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/CatalogResourceTest.java
index 3ce0e56..3883ce8 100644
--- a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/CatalogResourceTest.java
+++ b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/resources/CatalogResourceTest.java
@@ -33,8 +33,8 @@ import java.util.Set;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
-import org.apache.brooklyn.api.catalog.CatalogItem;
-import org.apache.brooklyn.api.catalog.CatalogItem.CatalogBundle;
+import org.apache.brooklyn.api.typereg.OsgiBundleWithUrl;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
import org.apache.brooklyn.core.mgmt.osgi.OsgiStandaloneTest;
import org.apache.brooklyn.policy.autoscaling.AutoScalerPolicy;
@@ -113,9 +113,9 @@ public class CatalogResourceTest extends BrooklynRestResourceTest {
assertEquals(entityItem.getVersion(), TEST_VERSION);
// and internally let's check we have libraries
- CatalogItem<?, ?> item = getManagementContext().getCatalog().getCatalogItem(symbolicName, TEST_VERSION);
+ RegisteredType item = getManagementContext().getTypeRegistry().get(symbolicName, TEST_VERSION);
Assert.assertNotNull(item);
- Collection<CatalogBundle> libs = item.getLibraries();
+ Collection<OsgiBundleWithUrl> libs = item.getLibraries();
assertEquals(libs.size(), 1);
assertEquals(Iterables.getOnlyElement(libs).getUrl(), bundleUrl);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/rest-server/src/test/java/org/apache/brooklyn/rest/test/entity/brooklynnode/DeployBlueprintTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/test/entity/brooklynnode/DeployBlueprintTest.java b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/test/entity/brooklynnode/DeployBlueprintTest.java
index 980e844..2ab62a9 100644
--- a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/test/entity/brooklynnode/DeployBlueprintTest.java
+++ b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/test/entity/brooklynnode/DeployBlueprintTest.java
@@ -24,7 +24,6 @@ import java.net.URI;
import java.util.List;
import java.util.Map;
-import org.apache.brooklyn.api.entity.EntityLocal;
import org.apache.brooklyn.api.entity.EntitySpec;
import org.apache.brooklyn.api.mgmt.EntityManager;
import org.apache.brooklyn.entity.brooklynnode.BrooklynNode;
@@ -63,7 +62,7 @@ public class DeployBlueprintTest extends BrooklynRestApiLauncherTestFixture {
EntitySpec<BrooklynNode> spec = EntitySpec.create(BrooklynNode.class);
EntityManager mgr = getManagementContextFromJettyServerAttributes(server).getEntityManager();
BrooklynNode node = mgr.createEntity(spec);
- ((EntityLocal)node).sensors().set(BrooklynNode.WEB_CONSOLE_URI, webConsoleUri);
+ node.sensors().set(BrooklynNode.WEB_CONSOLE_URI, webConsoleUri);
mgr.manage(node);
Map<String, String> params = ImmutableMap.of(DeployBlueprintEffector.BLUEPRINT_CAMP_PLAN.getName(), "{ services: [ serviceType: \"java:"+BasicApplication.class.getName()+"\" ] }");
String id = node.invoke(BrooklynNode.DEPLOY_BLUEPRINT, params).getUnchecked();
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/rest-server/src/test/java/org/apache/brooklyn/rest/testing/mocks/CapitalizePolicy.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/testing/mocks/CapitalizePolicy.java b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/testing/mocks/CapitalizePolicy.java
index 412ab7e..7d80a6f 100644
--- a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/testing/mocks/CapitalizePolicy.java
+++ b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/testing/mocks/CapitalizePolicy.java
@@ -21,6 +21,7 @@ package org.apache.brooklyn.rest.testing.mocks;
import org.apache.brooklyn.api.entity.EntityLocal;
import org.apache.brooklyn.core.policy.AbstractPolicy;
+@SuppressWarnings("deprecation")
public class CapitalizePolicy extends AbstractPolicy {
@Override
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/usage/rest-server/src/test/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtilsTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtilsTest.java b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtilsTest.java
index 0c7e849..48908e3 100644
--- a/usage/rest-server/src/test/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtilsTest.java
+++ b/usage/rest-server/src/test/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtilsTest.java
@@ -27,24 +27,20 @@ import java.util.Map;
import org.apache.brooklyn.api.catalog.Catalog;
import org.apache.brooklyn.api.entity.Application;
import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.entity.EntityLocal;
import org.apache.brooklyn.api.policy.Policy;
import org.apache.brooklyn.core.catalog.internal.CatalogItemBuilder;
import org.apache.brooklyn.core.catalog.internal.CatalogTemplateItemDto;
import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
import org.apache.brooklyn.core.entity.AbstractApplication;
-import org.apache.brooklyn.core.entity.Entities;
import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext;
import org.apache.brooklyn.core.objs.proxy.EntityProxy;
import org.apache.brooklyn.core.policy.AbstractPolicy;
import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
import org.apache.brooklyn.core.test.entity.TestApplication;
import org.apache.brooklyn.core.test.entity.TestEntity;
-import org.apache.brooklyn.core.test.entity.TestEntityImpl;
import org.apache.brooklyn.entity.stock.BasicEntity;
import org.apache.brooklyn.rest.domain.ApplicationSpec;
import org.apache.brooklyn.rest.domain.EntitySpec;
-import org.apache.brooklyn.util.collections.MutableMap;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/utils/common/src/main/java/org/apache/brooklyn/util/guava/IllegalStateExceptionSupplier.java
----------------------------------------------------------------------
diff --git a/utils/common/src/main/java/org/apache/brooklyn/util/guava/IllegalStateExceptionSupplier.java b/utils/common/src/main/java/org/apache/brooklyn/util/guava/IllegalStateExceptionSupplier.java
index deaba53..a79a8c9 100644
--- a/utils/common/src/main/java/org/apache/brooklyn/util/guava/IllegalStateExceptionSupplier.java
+++ b/utils/common/src/main/java/org/apache/brooklyn/util/guava/IllegalStateExceptionSupplier.java
@@ -18,26 +18,38 @@
*/
package org.apache.brooklyn.util.guava;
+import org.apache.brooklyn.util.exceptions.Exceptions;
+
import com.google.common.base.Supplier;
+import com.google.common.base.Suppliers;
public class IllegalStateExceptionSupplier implements Supplier<RuntimeException> {
public static final IllegalStateExceptionSupplier EMPTY_EXCEPTION = new IllegalStateExceptionSupplier();
- protected final String message;
+ protected final Supplier<String> message;
protected final Throwable cause;
- public IllegalStateExceptionSupplier() { this(null, null); }
+ public IllegalStateExceptionSupplier() { this((Supplier<String>)null, null); }
public IllegalStateExceptionSupplier(String message) { this(message, null); }
- public IllegalStateExceptionSupplier(Throwable cause) { this(cause!=null ? cause.getMessage() : null, cause); }
- public IllegalStateExceptionSupplier(String message, Throwable cause) {
+ public IllegalStateExceptionSupplier(Throwable cause) { this(new CollapseTextSupplier(cause), cause); }
+ public IllegalStateExceptionSupplier(String message, Throwable cause) { this(Suppliers.ofInstance(message), cause); }
+ public IllegalStateExceptionSupplier(Supplier<String> message, Throwable cause) {
this.message = message;
this.cause = cause;
}
-
+
+ private static class CollapseTextSupplier implements Supplier<String> {
+ final Throwable cause;
+ CollapseTextSupplier(Throwable cause) { this.cause = cause; }
+ @Override
+ public String get() {
+ return Exceptions.collapseText(cause);
+ }
+ }
@Override
public RuntimeException get() {
- return new IllegalStateException(message, cause);
+ return new IllegalStateException(message==null ? null : message.get(), cause);
}
}
[3/9] incubator-brooklyn git commit: fix package name of
RelationshipType
Posted by he...@apache.org.
fix package name of RelationshipType
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/4585e2c4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/4585e2c4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/4585e2c4
Branch: refs/heads/master
Commit: 4585e2c496a528fe83bcbf2b76bf41603c4fda7c
Parents: 6d00890
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Fri Oct 30 02:50:34 2015 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Fri Oct 30 02:54:07 2015 +0000
----------------------------------------------------------------------
.../basic/relations/RelationshipType.java | 38 --------------------
.../brooklyn/api/objs/BrooklynObject.java | 3 +-
.../api/relations/RelationshipType.java | 38 ++++++++++++++++++++
.../brooklyn/core/entity/EntityRelations.java | 3 +-
.../AbstractBrooklynObjectRebindSupport.java | 3 +-
.../mgmt/rebind/dto/MementosGenerators.java | 3 +-
.../relations/AbstractBasicRelationSupport.java | 3 +-
.../relations/ByObjectBasicRelationSupport.java | 3 +-
.../core/relations/EmptyRelationSupport.java | 3 +-
.../core/relations/RelationshipTypes.java | 4 +--
.../core/relations/RelationshipTest.java | 3 +-
11 files changed, 48 insertions(+), 56 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4585e2c4/api/src/main/java/brooklyn/basic/relations/RelationshipType.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/basic/relations/RelationshipType.java b/api/src/main/java/brooklyn/basic/relations/RelationshipType.java
deleted file mode 100644
index f7d6abb..0000000
--- a/api/src/main/java/brooklyn/basic/relations/RelationshipType.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package brooklyn.basic.relations;
-
-import brooklyn.basic.relations.RelationshipType;
-
-
-public interface RelationshipType<SourceType,TargetType> {
-
- public String getRelationshipTypeName();
- public Class<SourceType> getSourceType();
- public Class<TargetType> getTargetType();
-
- public String getSourceName();
- public String getSourceNamePlural();
-
- public String getTargetName();
- public String getTargetNamePlural();
-
- public RelationshipType<TargetType,SourceType> getInverseRelationshipType();
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4585e2c4/api/src/main/java/org/apache/brooklyn/api/objs/BrooklynObject.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/objs/BrooklynObject.java b/api/src/main/java/org/apache/brooklyn/api/objs/BrooklynObject.java
index f388bd6..b42bc58 100644
--- a/api/src/main/java/org/apache/brooklyn/api/objs/BrooklynObject.java
+++ b/api/src/main/java/org/apache/brooklyn/api/objs/BrooklynObject.java
@@ -28,14 +28,13 @@ import org.apache.brooklyn.api.entity.Group;
import org.apache.brooklyn.api.mgmt.SubscriptionContext;
import org.apache.brooklyn.api.mgmt.SubscriptionHandle;
import org.apache.brooklyn.api.mgmt.SubscriptionManager;
+import org.apache.brooklyn.api.relations.RelationshipType;
import org.apache.brooklyn.api.sensor.Sensor;
import org.apache.brooklyn.api.sensor.SensorEventListener;
import com.google.common.annotations.Beta;
import com.google.common.collect.ImmutableMap;
-import brooklyn.basic.relations.RelationshipType;
-
/**
* Super-type of entity, location, policy and enricher.
*/
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4585e2c4/api/src/main/java/org/apache/brooklyn/api/relations/RelationshipType.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/relations/RelationshipType.java b/api/src/main/java/org/apache/brooklyn/api/relations/RelationshipType.java
new file mode 100644
index 0000000..54162f2
--- /dev/null
+++ b/api/src/main/java/org/apache/brooklyn/api/relations/RelationshipType.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.brooklyn.api.relations;
+
+import org.apache.brooklyn.api.relations.RelationshipType;
+
+
+public interface RelationshipType<SourceType,TargetType> {
+
+ public String getRelationshipTypeName();
+ public Class<SourceType> getSourceType();
+ public Class<TargetType> getTargetType();
+
+ public String getSourceName();
+ public String getSourceNamePlural();
+
+ public String getTargetName();
+ public String getTargetNamePlural();
+
+ public RelationshipType<TargetType,SourceType> getInverseRelationshipType();
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4585e2c4/core/src/main/java/org/apache/brooklyn/core/entity/EntityRelations.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/entity/EntityRelations.java b/core/src/main/java/org/apache/brooklyn/core/entity/EntityRelations.java
index 6203f22..d29b80c 100644
--- a/core/src/main/java/org/apache/brooklyn/core/entity/EntityRelations.java
+++ b/core/src/main/java/org/apache/brooklyn/core/entity/EntityRelations.java
@@ -28,6 +28,7 @@ import org.apache.brooklyn.api.mgmt.ManagementContext;
import org.apache.brooklyn.api.objs.BrooklynObject;
import org.apache.brooklyn.api.objs.BrooklynObject.RelationSupport;
import org.apache.brooklyn.api.policy.Policy;
+import org.apache.brooklyn.api.relations.RelationshipType;
import org.apache.brooklyn.core.objs.BrooklynObjectInternal;
import org.apache.brooklyn.core.relations.AbstractBasicRelationSupport;
import org.apache.brooklyn.core.relations.RelationshipTypes;
@@ -35,8 +36,6 @@ import org.apache.brooklyn.util.collections.MutableMap;
import com.google.common.annotations.Beta;
-import brooklyn.basic.relations.RelationshipType;
-
/** TODO these relations are not used yet; see issue where this is introduced and email thread */
@Beta
public class EntityRelations<T extends BrooklynObject> {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4585e2c4/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/AbstractBrooklynObjectRebindSupport.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/AbstractBrooklynObjectRebindSupport.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/AbstractBrooklynObjectRebindSupport.java
index 8c5abdf..114a455 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/AbstractBrooklynObjectRebindSupport.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/AbstractBrooklynObjectRebindSupport.java
@@ -26,6 +26,7 @@ import org.apache.brooklyn.api.mgmt.rebind.RebindSupport;
import org.apache.brooklyn.api.mgmt.rebind.mementos.Memento;
import org.apache.brooklyn.api.objs.BrooklynObject;
import org.apache.brooklyn.api.objs.EntityAdjunct;
+import org.apache.brooklyn.api.relations.RelationshipType;
import org.apache.brooklyn.core.entity.EntityRelations;
import org.apache.brooklyn.core.mgmt.rebind.dto.MementosGenerators;
import org.apache.brooklyn.core.objs.AbstractBrooklynObject;
@@ -34,8 +35,6 @@ import org.apache.brooklyn.util.text.Strings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import brooklyn.basic.relations.RelationshipType;
-
public abstract class AbstractBrooklynObjectRebindSupport<T extends Memento> implements RebindSupport<T> {
private static final Logger LOG = LoggerFactory.getLogger(AbstractBrooklynObjectRebindSupport.class);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4585e2c4/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/MementosGenerators.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/MementosGenerators.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/MementosGenerators.java
index f0c08a6..934a8e8 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/MementosGenerators.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/MementosGenerators.java
@@ -43,6 +43,7 @@ import org.apache.brooklyn.api.mgmt.rebind.mementos.PolicyMemento;
import org.apache.brooklyn.api.objs.BrooklynObject;
import org.apache.brooklyn.api.objs.EntityAdjunct;
import org.apache.brooklyn.api.policy.Policy;
+import org.apache.brooklyn.api.relations.RelationshipType;
import org.apache.brooklyn.api.sensor.AttributeSensor;
import org.apache.brooklyn.api.sensor.AttributeSensor.SensorPersistenceMode;
import org.apache.brooklyn.api.sensor.Enricher;
@@ -68,8 +69,6 @@ import com.google.common.base.Function;
import com.google.common.base.Predicates;
import com.google.common.collect.Sets;
-import brooklyn.basic.relations.RelationshipType;
-
public class MementosGenerators {
private MementosGenerators() {}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4585e2c4/core/src/main/java/org/apache/brooklyn/core/relations/AbstractBasicRelationSupport.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/relations/AbstractBasicRelationSupport.java b/core/src/main/java/org/apache/brooklyn/core/relations/AbstractBasicRelationSupport.java
index a76d349..14cde82 100644
--- a/core/src/main/java/org/apache/brooklyn/core/relations/AbstractBasicRelationSupport.java
+++ b/core/src/main/java/org/apache/brooklyn/core/relations/AbstractBasicRelationSupport.java
@@ -21,11 +21,10 @@ package org.apache.brooklyn.core.relations;
import java.util.Set;
import org.apache.brooklyn.api.objs.BrooklynObject;
+import org.apache.brooklyn.api.relations.RelationshipType;
import org.apache.brooklyn.core.entity.EntityRelations;
import org.apache.brooklyn.core.objs.BrooklynObjectInternal.RelationSupportInternal;
-import brooklyn.basic.relations.RelationshipType;
-
/** This abstract impl delegates to {@link EntityRelations} for all changes, routing through a local backing store.
* This allows us to make the changes in both directions simultaneously when a relationship is bi-directional,
* and should facilitate changing a backing datastore or remote instances when that is supported.
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4585e2c4/core/src/main/java/org/apache/brooklyn/core/relations/ByObjectBasicRelationSupport.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/relations/ByObjectBasicRelationSupport.java b/core/src/main/java/org/apache/brooklyn/core/relations/ByObjectBasicRelationSupport.java
index 5e065c0..7c78e97 100644
--- a/core/src/main/java/org/apache/brooklyn/core/relations/ByObjectBasicRelationSupport.java
+++ b/core/src/main/java/org/apache/brooklyn/core/relations/ByObjectBasicRelationSupport.java
@@ -24,6 +24,7 @@ import java.util.Set;
import org.apache.brooklyn.api.objs.BrooklynObject;
import org.apache.brooklyn.api.objs.BrooklynObject.RelationSupport;
+import org.apache.brooklyn.api.relations.RelationshipType;
import org.apache.brooklyn.util.collections.MutableMap;
import org.apache.brooklyn.util.collections.MutableSet;
@@ -31,8 +32,6 @@ import com.google.common.base.Supplier;
import com.google.common.collect.Multimap;
import com.google.common.collect.Multimaps;
-import brooklyn.basic.relations.RelationshipType;
-
public class ByObjectBasicRelationSupport<SourceType extends BrooklynObject> extends AbstractBasicRelationSupport<SourceType> {
DataForBasicRelations<SourceType> data;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4585e2c4/core/src/main/java/org/apache/brooklyn/core/relations/EmptyRelationSupport.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/relations/EmptyRelationSupport.java b/core/src/main/java/org/apache/brooklyn/core/relations/EmptyRelationSupport.java
index e1e721d..947f4bd 100644
--- a/core/src/main/java/org/apache/brooklyn/core/relations/EmptyRelationSupport.java
+++ b/core/src/main/java/org/apache/brooklyn/core/relations/EmptyRelationSupport.java
@@ -23,10 +23,9 @@ import java.util.Set;
import org.apache.brooklyn.api.objs.BrooklynObject;
import org.apache.brooklyn.api.objs.BrooklynObject.RelationSupport;
+import org.apache.brooklyn.api.relations.RelationshipType;
import org.apache.brooklyn.core.objs.BrooklynObjectInternal.RelationSupportInternal;
-import brooklyn.basic.relations.RelationshipType;
-
public final class EmptyRelationSupport<SourceType extends BrooklynObject> implements RelationSupportInternal<SourceType> {
final SourceType source;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4585e2c4/core/src/main/java/org/apache/brooklyn/core/relations/RelationshipTypes.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/relations/RelationshipTypes.java b/core/src/main/java/org/apache/brooklyn/core/relations/RelationshipTypes.java
index b358039..1768e46 100644
--- a/core/src/main/java/org/apache/brooklyn/core/relations/RelationshipTypes.java
+++ b/core/src/main/java/org/apache/brooklyn/core/relations/RelationshipTypes.java
@@ -18,9 +18,9 @@
*/
package org.apache.brooklyn.core.relations;
-import com.google.common.base.Objects;
+import org.apache.brooklyn.api.relations.RelationshipType;
-import brooklyn.basic.relations.RelationshipType;
+import com.google.common.base.Objects;
public class RelationshipTypes {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4585e2c4/core/src/test/java/org/apache/brooklyn/core/relations/RelationshipTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/relations/RelationshipTest.java b/core/src/test/java/org/apache/brooklyn/core/relations/RelationshipTest.java
index 5d73652..5f1c2bc 100644
--- a/core/src/test/java/org/apache/brooklyn/core/relations/RelationshipTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/relations/RelationshipTest.java
@@ -19,12 +19,11 @@
package org.apache.brooklyn.core.relations;
import org.apache.brooklyn.api.entity.Entity;
+import org.apache.brooklyn.api.relations.RelationshipType;
import org.apache.brooklyn.core.test.entity.TestEntity;
import org.testng.Assert;
import org.testng.annotations.Test;
-import brooklyn.basic.relations.RelationshipType;
-
@Test
public class RelationshipTest {
[7/9] incubator-brooklyn git commit: more converting CatalogItem
access to RegisteredType
Posted by he...@apache.org.
more converting CatalogItem access to RegisteredType
use JavaCatalogToSpecTransformer to transform java types,
introduce RegisteredTypeConstraints,
start to clean up / migrate createSpec calls,
deprecated syntax updated
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/50ebfafb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/50ebfafb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/50ebfafb
Branch: refs/heads/master
Commit: 50ebfafbc0e186c3ad65593504b7566014f240a3
Parents: dc968f9
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Fri Oct 30 13:38:33 2015 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Mon Nov 2 08:01:12 2015 +0000
----------------------------------------------------------------------
.../brooklyn/api/catalog/BrooklynCatalog.java | 4 -
.../org/apache/brooklyn/api/entity/Entity.java | 6 +
.../internal/AbstractBrooklynObjectSpec.java | 14 +-
.../brooklyn/api/objs/BrooklynObjectType.java | 30 +++-
.../apache/brooklyn/api/objs/BrooklynType.java | 3 +
.../api/typereg/BrooklynTypeRegistry.java | 23 ++-
.../brooklyn/api/typereg/RegisteredType.java | 10 ++
.../api/typereg/RegisteredTypeConstraint.java | 45 +++++
.../catalog/internal/BasicBrooklynCatalog.java | 80 ++++-----
.../core/catalog/internal/CatalogUtils.java | 47 ++++-
.../internal/JavaCatalogToSpecTransformer.java | 22 ++-
.../brooklyn/core/entity/AbstractEntity.java | 26 +++
.../apache/brooklyn/core/entity/Entities.java | 27 ++-
.../core/entity/factory/ApplicationBuilder.java | 3 +-
.../core/location/BasicLocationRegistry.java | 37 ++--
.../core/location/CatalogLocationResolver.java | 6 +-
.../core/mgmt/EntityManagementUtils.java | 25 ++-
.../OsgiBrooklynClassLoadingContext.java | 9 +-
.../internal/AbstractManagementContext.java | 5 +-
.../BrooklynMementoPersisterToObjectStore.java | 10 +-
.../core/mgmt/persist/XmlMementoSerializer.java | 3 +-
.../mgmt/rebind/RebindContextLookupContext.java | 9 +-
.../core/mgmt/rebind/RebindIteration.java | 28 +--
.../brooklyn/core/resolve/ResolveUtils.java | 21 +--
.../entity/CatalogEntitySpecResolver.java | 60 +++----
.../resolve/entity/JavaEntitySpecResolver.java | 8 +
.../core/typereg/BasicBrooklynTypeRegistry.java | 98 ++++++-----
.../core/typereg/RegisteredTypeConstraints.java | 152 ++++++++++++++++
.../core/typereg/RegisteredTypePredicates.java | 105 ++++++-----
.../brooklyn/core/typereg/RegisteredTypes.java | 77 ++++++++-
.../core/catalog/internal/CatalogTestUtils.java | 47 -----
.../mgmt/osgi/OsgiVersionMoreEntityTest.java | 89 +++++-----
.../mgmt/persist/XmlMementoSerializerTest.java | 6 +-
.../rebind/ActivePartialRebindVersionTest.java | 22 ++-
.../core/mgmt/rebind/RebindCatalogItemTest.java | 6 +-
.../core/mgmt/rebind/RebindTestFixture.java | 20 +--
.../typereg/RegisteredTypePredicatesTest.java | 172 +++++++++++++++++++
.../BrooklynComponentTemplateResolver.java | 12 +-
.../BrooklynEntityDecorationResolver.java | 5 +-
.../spi/creation/CampToSpecTransformer.java | 13 +-
.../camp/brooklyn/spi/creation/CampUtils.java | 4 +-
.../lookup/AbstractTemplateBrooklynLookup.java | 14 +-
.../lookup/AssemblyTemplateBrooklynLookup.java | 3 +-
...PlatformComponentTemplateBrooklynLookup.java | 3 +-
.../brooklyn/JavaWebAppsIntegrationTest.java | 2 +-
.../camp/brooklyn/PoliciesYamlTest.java | 14 +-
.../camp/brooklyn/TestEntityWithInitConfig.java | 3 +-
.../TestSensorAndEffectorInitializer.java | 1 -
.../camp/brooklyn/WindowsYamlLiveTest.java | 4 +-
.../CatalogOsgiVersionMoreEntityTest.java | 72 ++++----
.../brooklyn/catalog/CatalogXmlOsgiTest.java | 20 +--
.../brooklyn/catalog/CatalogYamlCombiTest.java | 6 +-
.../brooklyn/catalog/CatalogYamlEntityTest.java | 6 +-
.../catalog/CatalogYamlLocationTest.java | 2 +-
.../brooklyn/catalog/CatalogYamlPolicyTest.java | 8 +-
.../brooklyn/catalog/CatalogYamlRebindTest.java | 33 ++--
.../catalog/CatalogYamlTemplateTest.java | 44 ++---
.../catalog/CatalogYamlVersioningTest.java | 58 ++++---
.../brooklyn/test/lite/CampYamlLiteTest.java | 4 +-
.../apache/brooklyn/rest/BrooklynWebConfig.java | 2 +-
.../resources/AbstractBrooklynRestResource.java | 1 -
.../rest/resources/ApplicationResource.java | 21 ++-
.../rest/resources/CatalogResource.java | 42 ++---
.../rest/resources/EffectorResource.java | 19 +-
.../rest/resources/EntityConfigResource.java | 17 +-
.../brooklyn/rest/resources/EntityResource.java | 17 +-
.../rest/resources/LocationResource.java | 4 +-
.../rest/resources/PolicyConfigResource.java | 3 +-
.../brooklyn/rest/resources/SensorResource.java | 22 +--
.../brooklyn/rest/resources/ServerResource.java | 14 +-
.../rest/transform/CatalogTransformer.java | 1 +
.../rest/transform/EffectorTransformer.java | 3 +-
.../rest/transform/EntityTransformer.java | 3 +-
.../rest/transform/PolicyTransformer.java | 5 +-
.../rest/util/BrooklynRestResourceUtils.java | 94 +++++++---
.../brooklyn/rest/domain/ApplicationTest.java | 3 +-
.../rest/resources/CatalogResetTest.java | 7 +-
.../rest/resources/CatalogResourceTest.java | 8 +-
.../brooklynnode/DeployBlueprintTest.java | 3 +-
.../rest/testing/mocks/CapitalizePolicy.java | 1 +
.../util/BrooklynRestResourceUtilsTest.java | 4 -
.../guava/IllegalStateExceptionSupplier.java | 24 ++-
82 files changed, 1257 insertions(+), 747 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/api/src/main/java/org/apache/brooklyn/api/catalog/BrooklynCatalog.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/catalog/BrooklynCatalog.java b/api/src/main/java/org/apache/brooklyn/api/catalog/BrooklynCatalog.java
index da850d7..b47d4b1 100644
--- a/api/src/main/java/org/apache/brooklyn/api/catalog/BrooklynCatalog.java
+++ b/api/src/main/java/org/apache/brooklyn/api/catalog/BrooklynCatalog.java
@@ -68,10 +68,6 @@ public interface BrooklynCatalog {
/** creates a spec for the given catalog item, throwing exceptions if any problems */
// TODO this should be cached on the item and renamed getSpec(...), else we re-create it too often (every time catalog is listed)
<T, SpecT extends AbstractBrooklynObjectSpec<? extends T, SpecT>> SpecT createSpec(CatalogItem<T, SpecT> item);
-
- /** @deprecated since 0.7.0 use {@link #createSpec(CatalogItem)} */
- // used in one place in BRRU with warnings added in 0.9.0. remove after 0.9.
- CatalogItem<?,?> getCatalogItemForType(String typeName);
/**
* Adds an item (represented in yaml) to the catalog.
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/api/src/main/java/org/apache/brooklyn/api/entity/Entity.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/entity/Entity.java b/api/src/main/java/org/apache/brooklyn/api/entity/Entity.java
index 3bca701..14d3c23 100644
--- a/api/src/main/java/org/apache/brooklyn/api/entity/Entity.java
+++ b/api/src/main/java/org/apache/brooklyn/api/entity/Entity.java
@@ -363,6 +363,9 @@ public interface Entity extends BrooklynObject {
*/
Iterator<T> iterator();
+ int size();
+ boolean isEmpty();
+
/**
* Adds an instance.
*/
@@ -432,5 +435,8 @@ public interface Entity extends BrooklynObject {
*/
@Override
Iterator<Group> iterator();
+
+ int size();
+ boolean isEmpty();
}
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/api/src/main/java/org/apache/brooklyn/api/internal/AbstractBrooklynObjectSpec.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/internal/AbstractBrooklynObjectSpec.java b/api/src/main/java/org/apache/brooklyn/api/internal/AbstractBrooklynObjectSpec.java
index 91aa869..7e8a022 100644
--- a/api/src/main/java/org/apache/brooklyn/api/internal/AbstractBrooklynObjectSpec.java
+++ b/api/src/main/java/org/apache/brooklyn/api/internal/AbstractBrooklynObjectSpec.java
@@ -29,7 +29,7 @@ import com.google.common.base.Objects;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
-public abstract class AbstractBrooklynObjectSpec<T,K extends AbstractBrooklynObjectSpec<T,K>> implements Serializable {
+public abstract class AbstractBrooklynObjectSpec<T,SpecT extends AbstractBrooklynObjectSpec<T,SpecT>> implements Serializable {
private static final long serialVersionUID = 3010955277740333030L;
@@ -45,8 +45,8 @@ public abstract class AbstractBrooklynObjectSpec<T,K extends AbstractBrooklynObj
}
@SuppressWarnings("unchecked")
- protected K self() {
- return (K) this;
+ protected SpecT self() {
+ return (SpecT) this;
}
@Override
@@ -56,23 +56,23 @@ public abstract class AbstractBrooklynObjectSpec<T,K extends AbstractBrooklynObj
protected abstract void checkValidType(Class<? extends T> type);
- public K displayName(String val) {
+ public SpecT displayName(String val) {
displayName = val;
return self();
}
- public K catalogItemId(String val) {
+ public SpecT catalogItemId(String val) {
catalogItemId = val;
return self();
}
- public K tag(Object tag) {
+ public SpecT tag(Object tag) {
tags.add(tag);
return self();
}
/** adds the given tags */
- public K tags(Iterable<Object> tagsToAdd) {
+ public SpecT tags(Iterable<Object> tagsToAdd) {
Iterables.addAll(this.tags, tagsToAdd);
return self();
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/api/src/main/java/org/apache/brooklyn/api/objs/BrooklynObjectType.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/objs/BrooklynObjectType.java b/api/src/main/java/org/apache/brooklyn/api/objs/BrooklynObjectType.java
index f6cd057..e0ef84c 100644
--- a/api/src/main/java/org/apache/brooklyn/api/objs/BrooklynObjectType.java
+++ b/api/src/main/java/org/apache/brooklyn/api/objs/BrooklynObjectType.java
@@ -20,9 +20,14 @@ package org.apache.brooklyn.api.objs;
import org.apache.brooklyn.api.catalog.CatalogItem;
import org.apache.brooklyn.api.entity.Entity;
+import org.apache.brooklyn.api.entity.EntitySpec;
+import org.apache.brooklyn.api.internal.AbstractBrooklynObjectSpec;
import org.apache.brooklyn.api.location.Location;
+import org.apache.brooklyn.api.location.LocationSpec;
import org.apache.brooklyn.api.policy.Policy;
+import org.apache.brooklyn.api.policy.PolicySpec;
import org.apache.brooklyn.api.sensor.Enricher;
+import org.apache.brooklyn.api.sensor.EnricherSpec;
import org.apache.brooklyn.api.sensor.Feed;
import com.google.common.annotations.Beta;
@@ -30,19 +35,22 @@ import com.google.common.base.CaseFormat;
@Beta
public enum BrooklynObjectType {
- ENTITY(Entity.class, "entities"),
- LOCATION(Location.class, "locations"),
- POLICY(Policy.class, "policies"),
- ENRICHER(Enricher.class, "enrichers"),
- FEED(Feed.class, "feeds"),
- CATALOG_ITEM(CatalogItem.class, "catalog"),
- UNKNOWN(null, "unknown");
+ // these are correctly type-checked by i can't tell how to get java not to warn!
+ @SuppressWarnings("unchecked") ENTITY(Entity.class, EntitySpec.class, "entities"),
+ @SuppressWarnings("unchecked") LOCATION(Location.class, LocationSpec.class, "locations"),
+ @SuppressWarnings("unchecked") POLICY(Policy.class, PolicySpec.class, "policies"),
+ @SuppressWarnings("unchecked") ENRICHER(Enricher.class, EnricherSpec.class, "enrichers"),
+ FEED(Feed.class, null, "feeds"),
+ CATALOG_ITEM(CatalogItem.class, null, "catalog"),
+ UNKNOWN(null, null, "unknown");
- private Class<? extends BrooklynObject> interfaceType;
+ private final Class<? extends BrooklynObject> interfaceType;
+ private final Class<? extends AbstractBrooklynObjectSpec<?,?>> specType;
private final String subPathName;
- BrooklynObjectType(Class<? extends BrooklynObject> interfaceType, String subPathName) {
+ <T extends BrooklynObject,K extends AbstractBrooklynObjectSpec<T,K>> BrooklynObjectType(Class<T> interfaceType, Class<K> specType, String subPathName) {
this.interfaceType = interfaceType;
+ this.specType = specType;
this.subPathName = subPathName;
}
public String toCamelCase() {
@@ -57,6 +65,10 @@ public enum BrooklynObjectType {
return interfaceType;
}
+ public Class<? extends AbstractBrooklynObjectSpec<?, ?>> getSpecType() {
+ return specType;
+ }
+
public static BrooklynObjectType of(BrooklynObject instance) {
for (BrooklynObjectType t: values()) {
if (t.getInterfaceType()!=null && t.getInterfaceType().isInstance(instance))
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/api/src/main/java/org/apache/brooklyn/api/objs/BrooklynType.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/objs/BrooklynType.java b/api/src/main/java/org/apache/brooklyn/api/objs/BrooklynType.java
index f16b1d9..72d0be9 100644
--- a/api/src/main/java/org/apache/brooklyn/api/objs/BrooklynType.java
+++ b/api/src/main/java/org/apache/brooklyn/api/objs/BrooklynType.java
@@ -30,6 +30,9 @@ import org.apache.brooklyn.config.ConfigKey;
* were added or removed on-the-fly then those changes will be included in subsequent
* snapshots. Therefore instances of a given class could have different {@link BrooklynType}s.
*/
+// TODO rename as BrooklynObjectSignature or BrooklynObjectMetadata;
+// or (perhaps better and easier to retire deprecated usage, if that is required?)
+// introduce new mechanism for storing accessing this information
public interface BrooklynType extends Serializable {
/**
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/api/src/main/java/org/apache/brooklyn/api/typereg/BrooklynTypeRegistry.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/typereg/BrooklynTypeRegistry.java b/api/src/main/java/org/apache/brooklyn/api/typereg/BrooklynTypeRegistry.java
index 25f07ab..e13f2e6 100644
--- a/api/src/main/java/org/apache/brooklyn/api/typereg/BrooklynTypeRegistry.java
+++ b/api/src/main/java/org/apache/brooklyn/api/typereg/BrooklynTypeRegistry.java
@@ -42,14 +42,27 @@ public interface BrooklynTypeRegistry {
Iterable<RegisteredType> getAll();
Iterable<RegisteredType> getAll(Predicate<? super RegisteredType> alwaysTrue);
- RegisteredType get(String symbolicNameWithOptionalVersion, @Nullable RegisteredTypeKind kind, @Nullable Class<?> requiredSupertype);
- RegisteredType get(String symbolicName, String version, @Nullable RegisteredTypeKind kind, @Nullable Class<?> requiredSupertype);
+ /** @return The item matching the given given
+ * {@link RegisteredType#getSymbolicName() symbolicName}
+ * and optionally {@link RegisteredType#getVersion()},
+ * filtered for the optionally supplied {@link RegisteredTypeConstraint},
+ * taking the best version if the version is null or a default marker,
+ * returning null if no matches are found. */
+ RegisteredType get(String symbolicName, String version, @Nullable RegisteredTypeConstraint constraint);
+ /** as {@link #get(String, String, RegisteredTypeConstraint)} with no constraints */
RegisteredType get(String symbolicName, String version);
+ /** as {@link #get(String, String, RegisteredTypeConstraint)} but allows <code>"name:version"</code>
+ * (the {@link RegisteredType#getId()}) in addition to the unversioned name,
+ * using a default marker if no version can be inferred */
+ RegisteredType get(String symbolicNameWithOptionalVersion, @Nullable RegisteredTypeConstraint constraint);
+ /** as {@link #get(String, RegisteredTypeConstraint)} but with no constraints */
+ RegisteredType get(String symbolicNameWithOptionalVersion);
- @SuppressWarnings("rawtypes")
- <T extends AbstractBrooklynObjectSpec> T createSpec(RegisteredType type, @Nullable Class<T> specKind);
+ // NB the seemingly more correct generics <T,SpecT extends AbstractBrooklynObjectSpec<T,SpecT>>
+ // cause compile errors, not in Eclipse, but in maven (?)
+ <SpecT extends AbstractBrooklynObjectSpec<?,?>> SpecT createSpec(RegisteredType type, @Nullable RegisteredTypeConstraint optionalConstraint, Class<SpecT> optionalSpecSuperType);
// TODO when we support beans
-// <T> T createBean(RegisteredType type, Class<T> superType);
+// <T> T createBean(RegisteredType type, @Nullable RegisteredTypeConstraint optionalConstraint, Class<T> optionalResultSuperType);
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/api/src/main/java/org/apache/brooklyn/api/typereg/RegisteredType.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/typereg/RegisteredType.java b/api/src/main/java/org/apache/brooklyn/api/typereg/RegisteredType.java
index 5158c34..6ffa09c 100644
--- a/api/src/main/java/org/apache/brooklyn/api/typereg/RegisteredType.java
+++ b/api/src/main/java/org/apache/brooklyn/api/typereg/RegisteredType.java
@@ -51,5 +51,15 @@ public interface RegisteredType extends Identifiable {
* for instance because the YAML has not yet been parsed or OSGi bundles downloaded).
*/
Class<?> getJavaType();
+
+ /**
+ * @return True if the item has been deprecated (i.e. its use is discouraged)
+ */
+ boolean isDeprecated();
+
+ /**
+ * @return True if the item has been disabled (i.e. its use is forbidden, except for pre-existing apps)
+ */
+ boolean isDisabled();
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/api/src/main/java/org/apache/brooklyn/api/typereg/RegisteredTypeConstraint.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/typereg/RegisteredTypeConstraint.java b/api/src/main/java/org/apache/brooklyn/api/typereg/RegisteredTypeConstraint.java
new file mode 100644
index 0000000..b55d546
--- /dev/null
+++ b/api/src/main/java/org/apache/brooklyn/api/typereg/RegisteredTypeConstraint.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.brooklyn.api.typereg;
+
+import java.util.Set;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+import org.apache.brooklyn.api.entity.Entity;
+import org.apache.brooklyn.api.entity.EntitySpec;
+import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry.RegisteredTypeKind;
+
+public interface RegisteredTypeConstraint {
+
+ /** The kind required, if specified. */
+ @Nullable public RegisteredTypeKind getKind();
+
+ /** A java super-type or interface that should be filtered for;
+ * for specs, this refers to the target type, not the spec
+ * (eg {@link Entity} not {@link EntitySpec}).
+ * If nothing is specified, this returns {@link Object}'s class. */
+ @Nonnull public Class<?> getJavaSuperType();
+
+ /** encountered types, so that during resolution,
+ * if we have already attempted to resolve a given type,
+ * the instantiator can avoid recursive cycles */
+ public Set<String> getEncounteredTypes();
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
index ce168b6..c176a42 100644
--- a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
+++ b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
@@ -25,6 +25,7 @@ import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
+import java.util.Set;
import javax.annotation.Nullable;
@@ -39,11 +40,13 @@ import org.apache.brooklyn.api.mgmt.ManagementContext;
import org.apache.brooklyn.core.catalog.CatalogPredicates;
import org.apache.brooklyn.core.catalog.internal.CatalogClasspathDo.CatalogScanningModes;
import org.apache.brooklyn.core.location.BasicLocationRegistry;
-import org.apache.brooklyn.core.mgmt.EntityManagementUtils;
import org.apache.brooklyn.core.mgmt.classloading.BrooklynClassLoadingContext;
import org.apache.brooklyn.core.mgmt.internal.ManagementContextInternal;
+import org.apache.brooklyn.core.plan.PlanToSpecFactory;
+import org.apache.brooklyn.core.plan.PlanToSpecTransformer;
import org.apache.brooklyn.util.collections.MutableList;
import org.apache.brooklyn.util.collections.MutableMap;
+import org.apache.brooklyn.util.collections.MutableSet;
import org.apache.brooklyn.util.core.flags.TypeCoercions;
import org.apache.brooklyn.util.exceptions.Exceptions;
import org.apache.brooklyn.util.guava.Maybe;
@@ -298,13 +301,37 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
if (loadedItem == null) throw new RuntimeException(item+" not in catalog; cannot create spec");
if (loadedItem.getSpecType()==null) return null;
- SpecT spec = EntityManagementUtils.createCatalogSpec(mgmt, loadedItem);
+ SpecT spec = internalCreateSpecWithTransformers(mgmt, loadedItem, MutableSet.<String>of());
if (spec != null) {
return spec;
}
throw new IllegalStateException("No known mechanism to create instance of "+item);
}
+
+ /** @deprecated since introduction in 0.9.0, only used for backwards compatibility, can be removed any time;
+ * uses the type-creation info on the item */
+ @Deprecated
+ public static <T,SpecT extends AbstractBrooklynObjectSpec<? extends T, SpecT>> SpecT internalCreateSpecWithTransformers(ManagementContext mgmt, final CatalogItem<T, SpecT> item, final Set<String> encounteredTypes) {
+ // deprecated lookup
+ if (encounteredTypes.contains(item.getSymbolicName())) {
+ throw new IllegalStateException("Type being resolved '"+item.getSymbolicName()+"' has already been encountered in " + encounteredTypes + "; recursive cycle detected");
+ }
+ return PlanToSpecFactory.attemptWithLoaders(mgmt, new Function<PlanToSpecTransformer, SpecT>() {
+ @Override
+ public SpecT apply(PlanToSpecTransformer input) {
+ return input.createCatalogSpec(item, encounteredTypes);
+ }
+ }).get();
+ }
+
+ /**
+ * as internalCreateSpecFromItemWithTransformers, but marking contexts where the creation is being attempted
+ * @deprecated since introduction in 0.9.0, only used for backwards compatibility, can be removed any time */
+ @Deprecated
+ public static <T,SpecT extends AbstractBrooklynObjectSpec<? extends T, SpecT>> SpecT internalCreateSpecAttempting(ManagementContext mgmt, final CatalogItem<T, SpecT> item, final Set<String> encounteredTypes) {
+ return internalCreateSpecWithTransformers(mgmt, item, encounteredTypes);
+ }
@Deprecated /** @deprecated since 0.7.0 only used by other deprecated items */
private <T,SpecT> CatalogItemDtoAbstract<T,SpecT> getAbstractCatalogItem(CatalogItem<T,SpecT> item) {
@@ -620,7 +647,7 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
public PlanInterpreterGuessingType(@Nullable String id, Object item, String itemYaml, @Nullable CatalogItemType optionalCiType,
Collection<CatalogBundle> libraryBundles, List<CatalogItemDtoAbstract<?,?>> itemsDefinedSoFar) {
- // ID is useful to prevent recursive references (currently for entities only)
+ // ID is useful to prevent recursive references (possibly only supported for entities?)
this.id = id;
if (item instanceof String) {
@@ -717,7 +744,7 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
.libraries(libraryBundles)
.build();
@SuppressWarnings("unchecked")
- Object spec = EntityManagementUtils.createCatalogSpec(mgmt, itemToAttempt);
+ Object spec = internalCreateSpecAttempting(mgmt, itemToAttempt, MutableSet.<String>of());
if (spec!=null) {
catalogItemType = candidateCiType;
planYaml = candidateYaml;
@@ -755,7 +782,7 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
.libraries(libraryBundles)
.build();
@SuppressWarnings("unchecked")
- Object cutdownSpec = EntityManagementUtils.createCatalogSpec(mgmt, itemToAttempt);
+ Object cutdownSpec = internalCreateSpecAttempting(mgmt, itemToAttempt, MutableSet.<String>of());
if (cutdownSpec!=null) {
catalogItemType = candidateCiType;
planYaml = candidateYaml;
@@ -1027,47 +1054,4 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
serializer = new CatalogXmlSerializer();
}
- @Override
- @Deprecated
- public CatalogItem<?,?> getCatalogItemForType(String typeName) {
- final CatalogItem<?,?> resultI;
- final BrooklynCatalog catalog = mgmt.getCatalog();
- if (CatalogUtils.looksLikeVersionedId(typeName)) {
- //All catalog identifiers of the form xxxx:yyyy are composed of symbolicName+version.
- //No javaType is allowed as part of the identifier.
- resultI = CatalogUtils.getCatalogItemOptionalVersion(mgmt, typeName);
- } else {
- //Usually for catalog items with javaType (that is items from catalog.xml)
- //the symbolicName and javaType match because symbolicName (was ID)
- //is not specified explicitly. But could be the case that there is an item
- //whose symbolicName is explicitly set to be different from the javaType.
- //Note that in the XML the attribute is called registeredTypeName.
- Iterable<CatalogItem<Object,Object>> resultL = catalog.getCatalogItems(CatalogPredicates.javaType(Predicates.equalTo(typeName)));
- if (!Iterables.isEmpty(resultL)) {
- //Push newer versions in front of the list (not that there should
- //be more than one considering the items are coming from catalog.xml).
- resultI = sortVersionsDesc(resultL).iterator().next();
- if (log.isDebugEnabled() && Iterables.size(resultL)>1) {
- log.debug("Found "+Iterables.size(resultL)+" matches in catalog for type "+typeName+"; returning the result with preferred version, "+resultI);
- }
- } else {
- //As a last resort try searching for items with the same symbolicName supposedly
- //different from the javaType.
- resultI = catalog.getCatalogItem(typeName, BrooklynCatalog.DEFAULT_VERSION);
- if (resultI != null) {
- if (resultI.getJavaType() == null) {
- //Catalog items scanned from the classpath (using reflection and annotations) now
- //get yaml spec rather than a java type. Can't use those when creating apps from
- //the legacy app spec format.
- log.warn("Unable to find catalog item for type "+typeName +
- ". There is an existing catalog item with ID " + resultI.getId() +
- " but it doesn't define a class type.");
- return null;
- }
- }
- }
- }
- return resultI;
- }
-
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogUtils.java b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogUtils.java
index 4561046..db4b72a 100644
--- a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogUtils.java
+++ b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogUtils.java
@@ -28,6 +28,7 @@ import org.apache.brooklyn.api.catalog.CatalogItem.CatalogBundle;
import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.mgmt.ManagementContext;
import org.apache.brooklyn.api.objs.BrooklynObject;
+import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry;
import org.apache.brooklyn.api.typereg.OsgiBundleWithUrl;
import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.core.BrooklynLogging;
@@ -41,12 +42,14 @@ import org.apache.brooklyn.core.mgmt.ha.OsgiManager;
import org.apache.brooklyn.core.mgmt.internal.ManagementContextInternal;
import org.apache.brooklyn.core.mgmt.rebind.RebindManagerImpl.RebindTracker;
import org.apache.brooklyn.core.objs.BrooklynObjectInternal;
+import org.apache.brooklyn.core.typereg.RegisteredTypeConstraints;
import org.apache.brooklyn.util.guava.Maybe;
import org.apache.brooklyn.util.text.Strings;
import org.apache.brooklyn.util.time.Time;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.google.api.client.util.Preconditions;
import com.google.common.annotations.Beta;
import com.google.common.base.Joiner;
import com.google.common.base.Stopwatch;
@@ -73,7 +76,7 @@ public class CatalogUtils {
ManagementContext mgmt = ((EntityInternal)entity).getManagementContext();
String catId = entity.getCatalogItemId();
if (Strings.isBlank(catId)) return JavaBrooklynClassLoadingContext.create(mgmt);
- CatalogItem<?, ?> cat = getCatalogItemOptionalVersion(mgmt, catId);
+ RegisteredType cat = mgmt.getTypeRegistry().get(catId, RegisteredTypeConstraints.spec(Entity.class));
if (cat==null) {
log.warn("Cannot load "+catId+" to get classloader for "+entity+"; will try with standard loader, but might fail subsequently");
return JavaBrooklynClassLoadingContext.create(mgmt);
@@ -200,6 +203,7 @@ public class CatalogUtils {
}
/** @deprecated since 0.9.0 use {@link #getSymbolicNameFromVersionedId(String)} */
+ // all uses removed
@Deprecated
public static String getIdFromVersionedId(String versionedId) {
return getSymbolicNameFromVersionedId(versionedId);
@@ -230,9 +234,8 @@ public class CatalogUtils {
return id + VERSION_DELIMITER + version;
}
- //TODO Don't really like this, but it's better to have it here than on the interface to keep the API's
- //surface minimal. Could instead have the interface methods accept VerionedId object and have the helpers
- //construct it as needed.
+ /** @deprecated since 0.9.0 use {@link BrooklynTypeRegistry#get(String, org.apache.brooklyn.api.typereg.BrooklynTypeRegistry.RegisteredTypeKind, Class)} */
+ // only a handful of items remaining, and those require a CatalogItem
public static CatalogItem<?, ?> getCatalogItemOptionalVersion(ManagementContext mgmt, String versionedId) {
if (versionedId == null) return null;
if (looksLikeVersionedId(versionedId)) {
@@ -245,11 +248,13 @@ public class CatalogUtils {
}
public static boolean isBestVersion(ManagementContext mgmt, CatalogItem<?,?> item) {
- CatalogItem<?, ?> bestVersion = getCatalogItemOptionalVersion(mgmt, item.getSymbolicName());
+ RegisteredType bestVersion = mgmt.getTypeRegistry().get(item.getSymbolicName(), BrooklynCatalog.DEFAULT_VERSION, null);
if (bestVersion==null) return false;
return (bestVersion.getVersion().equals(item.getVersion()));
}
+ /** @deprecated since 0.9.0 use {@link BrooklynTypeRegistry#get(String, org.apache.brooklyn.api.typereg.BrooklynTypeRegistry.RegisteredTypeKind, Class)} */
+ // only a handful of items remaining, and those require a CatalogItem
public static <T,SpecT> CatalogItem<T, SpecT> getCatalogItemOptionalVersion(ManagementContext mgmt, Class<T> type, String versionedId) {
if (looksLikeVersionedId(versionedId)) {
String id = getSymbolicNameFromVersionedId(versionedId);
@@ -260,4 +265,36 @@ public class CatalogUtils {
}
}
+ /** @deprecated since it was introduced in 0.9.0; TBD where this should live */
+ public static void setDeprecated(ManagementContext mgmt, String symbolicNameAndOptionalVersion, boolean newValue) {
+ RegisteredType item = mgmt.getTypeRegistry().get(symbolicNameAndOptionalVersion);
+ Preconditions.checkNotNull(item, "No such item: "+symbolicNameAndOptionalVersion);
+ setDeprecated(mgmt, item.getSymbolicName(), item.getVersion(), newValue);
+ }
+
+ /** @deprecated since it was introduced in 0.9.0; TBD where this should live */
+ public static void setDisabled(ManagementContext mgmt, String symbolicNameAndOptionalVersion, boolean newValue) {
+ RegisteredType item = mgmt.getTypeRegistry().get(symbolicNameAndOptionalVersion);
+ Preconditions.checkNotNull(item, "No such item: "+symbolicNameAndOptionalVersion);
+ setDisabled(mgmt, item.getSymbolicName(), item.getVersion(), newValue);
+ }
+
+ /** @deprecated since it was introduced in 0.9.0; TBD where this should live */
+ @Deprecated
+ public static void setDeprecated(ManagementContext mgmt, String symbolicName, String version, boolean newValue) {
+ CatalogItem<?, ?> item = mgmt.getCatalog().getCatalogItem(symbolicName, version);
+ Preconditions.checkNotNull(item, "No such item: "+symbolicName+" v "+version);
+ item.setDeprecated(newValue);
+ mgmt.getCatalog().persist(item);
+ }
+
+ /** @deprecated since it was introduced in 0.9.0; TBD where this should live */
+ @Deprecated
+ public static void setDisabled(ManagementContext mgmt, String symbolicName, String version, boolean newValue) {
+ CatalogItem<?, ?> item = mgmt.getCatalog().getCatalogItem(symbolicName, version);
+ Preconditions.checkNotNull(item, "No such item: "+symbolicName+" v "+version);
+ item.setDisabled(newValue);
+ mgmt.getCatalog().persist(item);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/core/src/main/java/org/apache/brooklyn/core/catalog/internal/JavaCatalogToSpecTransformer.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/JavaCatalogToSpecTransformer.java b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/JavaCatalogToSpecTransformer.java
index a6a8e3a..742625a 100644
--- a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/JavaCatalogToSpecTransformer.java
+++ b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/JavaCatalogToSpecTransformer.java
@@ -28,18 +28,23 @@ import org.apache.brooklyn.api.internal.AbstractBrooklynObjectSpec;
import org.apache.brooklyn.api.mgmt.ManagementContext;
import org.apache.brooklyn.api.policy.Policy;
import org.apache.brooklyn.api.policy.PolicySpec;
-import org.apache.brooklyn.core.mgmt.classloading.BrooklynClassLoadingContext;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.core.plan.PlanNotRecognizedException;
import org.apache.brooklyn.core.plan.PlanToSpecTransformer;
+import org.apache.brooklyn.util.exceptions.Exceptions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * Old-style catalog items (can be defined in catalog.xml only) don't have structure, only a single type, so
- * they are loaded as a simple java type, only taking the class name from the catalog item instead of the
- * type value in the YAML. Classpath entries in the item are also used (through the catalog root classloader).
+ * Instantiates classes from a registered type which simply
+ * defines the java class name and OSGi bundles to use.
+ * <p>
+ * This is used where a {@link RegisteredType} is defined simply with the name of a java class
+ * (no YAML etc); and for legacy old-style (c0.7.0) catalog items (defined in catalog.xml only)
+ * with structure, only a single type.
*/
public class JavaCatalogToSpecTransformer implements PlanToSpecTransformer {
+ @SuppressWarnings("unused")
private static final Logger log = LoggerFactory.getLogger(JavaCatalogToSpecTransformer.class);
private ManagementContext mgmt;
@@ -51,7 +56,7 @@ public class JavaCatalogToSpecTransformer implements PlanToSpecTransformer {
@Override
public String getShortDescription() {
- return "Deprecated java-type catalog items transformer";
+ return "Java type instantiator";
}
@Override
@@ -68,11 +73,11 @@ public class JavaCatalogToSpecTransformer implements PlanToSpecTransformer {
public <T, SpecT extends AbstractBrooklynObjectSpec<? extends T, SpecT>> SpecT createCatalogSpec(
CatalogItem<T, SpecT> item, Set<String> encounteredTypes) throws PlanNotRecognizedException {
if (item.getJavaType() != null) {
- log.warn("Deprecated functionality (since 0.9.0). Using old-style xml catalog items with java type attribute for " + item);
Class<?> type;
try {
- type = mgmt.getCatalogClassLoader().loadClass(item.getJavaType());
- } catch (ClassNotFoundException e) {
+ type = CatalogUtils.newClassLoadingContext(mgmt, item).loadClass(item.getJavaType());
+ } catch (Exception e) {
+ Exceptions.propagateIfFatal(e);
throw new IllegalStateException("Unable to load old-style java catalog item type " + item.getJavaType() + " for item " + item, e);
}
AbstractBrooklynObjectSpec<?,?> spec;
@@ -87,6 +92,7 @@ public class JavaCatalogToSpecTransformer implements PlanToSpecTransformer {
} else {
throw new IllegalStateException("Catalog item " + item + " java type " + item.getJavaType() + " is not a Brooklyn supported object.");
}
+ spec.catalogItemId(item.getCatalogItemId());
@SuppressWarnings("unchecked")
SpecT untypedSpc = (SpecT) spec;
return untypedSpc;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java b/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java
index c75c908..09b362d 100644
--- a/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java
+++ b/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java
@@ -715,6 +715,14 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E
public Iterator<Group> iterator() {
return asList().iterator();
}
+ @Override
+ public int size() {
+ return asList().size();
+ }
+ @Override
+ public boolean isEmpty() {
+ return asList().isEmpty();
+ }
protected List<Group> asList() {
return ImmutableList.copyOf(groupsInternal);
@@ -1598,6 +1606,15 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E
return asList().iterator();
}
+ @Override
+ public int size() {
+ return policiesInternal.size();
+ }
+ @Override
+ public boolean isEmpty() {
+ return policiesInternal.isEmpty();
+ }
+
protected List<Policy> asList() {
return ImmutableList.<Policy>copyOf(policiesInternal);
}
@@ -1661,6 +1678,15 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E
return asList().iterator();
}
+ @Override
+ public int size() {
+ return enrichersInternal.size();
+ }
+ @Override
+ public boolean isEmpty() {
+ return enrichersInternal.isEmpty();
+ }
+
protected List<Enricher> asList() {
return ImmutableList.<Enricher>copyOf(enrichersInternal);
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/core/src/main/java/org/apache/brooklyn/core/entity/Entities.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/entity/Entities.java b/core/src/main/java/org/apache/brooklyn/core/entity/Entities.java
index 0120fd7..8b10676 100644
--- a/core/src/main/java/org/apache/brooklyn/core/entity/Entities.java
+++ b/core/src/main/java/org/apache/brooklyn/core/entity/Entities.java
@@ -42,7 +42,6 @@ import java.util.concurrent.atomic.AtomicReference;
import org.apache.brooklyn.api.effector.Effector;
import org.apache.brooklyn.api.entity.Application;
import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.entity.EntityLocal;
import org.apache.brooklyn.api.entity.EntitySpec;
import org.apache.brooklyn.api.entity.Group;
import org.apache.brooklyn.api.entity.drivers.EntityDriver;
@@ -170,7 +169,7 @@ public class Entities {
*
* @return {@link ParallelTask} containing results from each invocation
*/
- public static <T> Task<List<T>> invokeEffectorList(EntityLocal callingEntity, Iterable<? extends Entity> entitiesToCall,
+ public static <T> Task<List<T>> invokeEffectorList(Entity callingEntity, Iterable<? extends Entity> entitiesToCall,
final Effector<T> effector, final Map<String,?> parameters) {
// formulation is complicated, but it is building up a list of tasks, without blocking on them initially,
// but ensuring that when the parallel task is gotten it does block on all of them
@@ -194,25 +193,25 @@ public class Entities {
return DynamicTasks.queueIfPossible(invoke).orSubmitAsync(callingEntity).asTask();
}
- public static <T> Task<List<T>> invokeEffectorListWithMap(EntityLocal callingEntity, Iterable<? extends Entity> entitiesToCall,
+ public static <T> Task<List<T>> invokeEffectorListWithMap(Entity callingEntity, Iterable<? extends Entity> entitiesToCall,
final Effector<T> effector, final Map<String,?> parameters) {
return invokeEffectorList(callingEntity, entitiesToCall, effector, parameters);
}
@SuppressWarnings("unchecked")
- public static <T> Task<List<T>> invokeEffectorListWithArgs(EntityLocal callingEntity, Iterable<? extends Entity> entitiesToCall,
+ public static <T> Task<List<T>> invokeEffectorListWithArgs(Entity callingEntity, Iterable<? extends Entity> entitiesToCall,
final Effector<T> effector, Object ...args) {
return invokeEffectorListWithMap(callingEntity, entitiesToCall, effector,
// putting into a map, unnecessarily, as it ends up being the array again...
EffectorUtils.prepareArgsForEffectorAsMapFromArray(effector, args));
}
- public static <T> Task<List<T>> invokeEffectorList(EntityLocal callingEntity, Iterable<? extends Entity> entitiesToCall,
+ public static <T> Task<List<T>> invokeEffectorList(Entity callingEntity, Iterable<? extends Entity> entitiesToCall,
final Effector<T> effector) {
return invokeEffectorList(callingEntity, entitiesToCall, effector, Collections.<String,Object>emptyMap());
}
- public static <T> Task<T> invokeEffector(EntityLocal callingEntity, Entity entityToCall,
+ public static <T> Task<T> invokeEffector(Entity callingEntity, Entity entityToCall,
final Effector<T> effector, final Map<String,?> parameters) {
Task<T> t = Effectors.invocation(entityToCall, effector, parameters).asTask();
TaskTags.markInessential(t);
@@ -231,19 +230,19 @@ public class Entities {
}
@SuppressWarnings("unchecked")
- public static <T> Task<T> invokeEffectorWithArgs(EntityLocal callingEntity, Entity entityToCall,
+ public static <T> Task<T> invokeEffectorWithArgs(Entity callingEntity, Entity entityToCall,
final Effector<T> effector, Object ...args) {
return invokeEffector(callingEntity, entityToCall, effector,
EffectorUtils.prepareArgsForEffectorAsMapFromArray(effector, args));
}
- public static <T> Task<T> invokeEffector(EntityLocal callingEntity, Entity entityToCall,
+ public static <T> Task<T> invokeEffector(Entity callingEntity, Entity entityToCall,
final Effector<T> effector) {
return invokeEffector(callingEntity, entityToCall, effector, Collections.<String,Object>emptyMap());
}
/** Invokes in parallel if multiple, but otherwise invokes the item directly. */
- public static Task<?> invokeEffector(EntityLocal callingEntity, Iterable<? extends Entity> entitiesToCall,
+ public static Task<?> invokeEffector(Entity callingEntity, Iterable<? extends Entity> entitiesToCall,
final Effector<?> effector, final Map<String,?> parameters) {
if (Iterables.size(entitiesToCall)==1)
return invokeEffector(callingEntity, entitiesToCall.iterator().next(), effector, parameters);
@@ -252,7 +251,7 @@ public class Entities {
}
/** Invokes in parallel if multiple, but otherwise invokes the item directly. */
- public static Task<?> invokeEffector(EntityLocal callingEntity, Iterable<? extends Entity> entitiesToCall,
+ public static Task<?> invokeEffector(Entity callingEntity, Iterable<? extends Entity> entitiesToCall,
final Effector<?> effector) {
return invokeEffector(callingEntity, entitiesToCall, effector, Collections.<String,Object>emptyMap());
}
@@ -376,14 +375,14 @@ public class Entities {
out.append(currentIndentation+tab+tab+"Members: "+members.toString()+"\n");
}
- if (!e.getPolicies().isEmpty()) {
+ if (!e.policies().isEmpty()) {
out.append(currentIndentation+tab+tab+"Policies:\n");
for (Policy policy : e.policies()) {
dumpInfo(policy, out, currentIndentation+tab+tab+tab, tab);
}
}
- if (!e.getEnrichers().isEmpty()) {
+ if (!e.enrichers().isEmpty()) {
out.append(currentIndentation+tab+tab+"Enrichers:\n");
for (Enricher enricher : e.enrichers()) {
dumpInfo(enricher, out, currentIndentation+tab+tab+tab, tab);
@@ -699,7 +698,7 @@ public class Entities {
log.warn("Using deprecated discouraged mechanism to start management -- Entities.start(Application, Locations) -- caller should create and use the preferred management context");
startManagement(e);
}
- if (e instanceof Startable) Entities.invokeEffector((EntityLocal)e, e, Startable.START,
+ if (e instanceof Startable) Entities.invokeEffector(e, e, Startable.START,
MutableMap.of("locations", locations)).getUnchecked();
}
@@ -714,7 +713,7 @@ public class Entities {
unmanage(e);
log.debug("destroyed and unmanaged read-only copy of "+e);
} else {
- if (e instanceof Startable) Entities.invokeEffector((EntityLocal)e, e, Startable.STOP).getUnchecked();
+ if (e instanceof Startable) Entities.invokeEffector(e, e, Startable.STOP).getUnchecked();
// if destroying gracefully we might also want to do this (currently gets done by GC after unmanage,
// which is good enough for leaks, but not sure if that's ideal for subscriptions etc)
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/core/src/main/java/org/apache/brooklyn/core/entity/factory/ApplicationBuilder.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/entity/factory/ApplicationBuilder.java b/core/src/main/java/org/apache/brooklyn/core/entity/factory/ApplicationBuilder.java
index f8167a0..66f4795 100644
--- a/core/src/main/java/org/apache/brooklyn/core/entity/factory/ApplicationBuilder.java
+++ b/core/src/main/java/org/apache/brooklyn/core/entity/factory/ApplicationBuilder.java
@@ -217,7 +217,8 @@ public abstract class ApplicationBuilder {
this.managementContext = managementContext;
this.app = managementContext.getEntityManager().createEntity(appSpec);
doBuild();
- Entities.startManagement(app, managementContext);
+ // not needed with 0.9.0 (TODO - remove when confirmed)
+// Entities.startManagement(app, managementContext);
managed = true;
return app;
} finally {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/core/src/main/java/org/apache/brooklyn/core/location/BasicLocationRegistry.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/location/BasicLocationRegistry.java b/core/src/main/java/org/apache/brooklyn/core/location/BasicLocationRegistry.java
index 573da76..202ecf4 100644
--- a/core/src/main/java/org/apache/brooklyn/core/location/BasicLocationRegistry.java
+++ b/core/src/main/java/org/apache/brooklyn/core/location/BasicLocationRegistry.java
@@ -38,12 +38,14 @@ import org.apache.brooklyn.api.location.LocationRegistry;
import org.apache.brooklyn.api.location.LocationResolver;
import org.apache.brooklyn.api.location.LocationSpec;
import org.apache.brooklyn.api.mgmt.ManagementContext;
+import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.config.ConfigMap;
-import org.apache.brooklyn.core.catalog.CatalogPredicates;
import org.apache.brooklyn.core.config.ConfigPredicates;
import org.apache.brooklyn.core.config.ConfigUtils;
import org.apache.brooklyn.core.location.internal.LocationInternal;
import org.apache.brooklyn.core.mgmt.internal.LocalLocationManager;
+import org.apache.brooklyn.core.typereg.RegisteredTypePredicates;
import org.apache.brooklyn.util.collections.MutableList;
import org.apache.brooklyn.util.collections.MutableMap;
import org.apache.brooklyn.util.core.config.ConfigBag;
@@ -72,8 +74,8 @@ import com.google.common.collect.Sets;
* <p>
* Any location item added to the catalog must therefore be registered here.
* Whenever an item is added to the catalog, it will automatically call
- * {@link #updateDefinedLocation(CatalogItem)}. Similarly, when a location
- * is deleted from the catalog it will call {@link #removeDefinedLocation(CatalogItem)}.
+ * {@link #updateDefinedLocation(RegisteredType)}. Similarly, when a location
+ * is deleted from the catalog it will call {@link #removeDefinedLocation(RegisteredType)}.
* <p>
* However, the location item in the catalog has an unparsed blob of YAML, which contains
* important things like the type and the config of the location. This is only parsed when
@@ -86,8 +88,8 @@ import com.google.common.collect.Sets;
* <ol>
* <li>Call {@link BrooklynCatalog#addItems(String)}
* <ol>
- * <li>This automatically calls {@link #updateDefinedLocation(CatalogItem)}
- * <li>A LocationDefinition is creating, using as its id the {@link CatalogItem#getSymbolicName()}.
+ * <li>This automatically calls {@link #updateDefinedLocation(RegisteredType)}
+ * <li>A LocationDefinition is creating, using as its id the {@link RegisteredType#getSymbolicName()}.
* The definition's spec is {@code brooklyn.catalog:<symbolicName>:<version>},
* </ol>
* <li>A blueprint can reference the catalog item using its symbolic name,
@@ -100,8 +102,8 @@ import com.google.common.collect.Sets;
* found for it.
* <li>This uses the {@link CatalogLocationResolver}, because the spec starts with {@code brooklyn.catalog:}.
* <li>This resolver extracts from the spec the <symobolicName>:<version>, and looks up the
- * catalog item using {@link BrooklynCatalog#getCatalogItem(String, String)}.
- * <li>It then creates a {@link LocationSpec} by calling {@link BrooklynCatalog#createSpec(CatalogItem)}.
+ * location item using the {@link BrooklynTypeRegistry}.
+ * <li>It then creates a {@link LocationSpec} by calling {@link BrooklynTypeRegistry#createSpec(RegisteredType)}.
* <ol>
* <li>This first tries to use the type (that is in the YAML) as a simple Java class.
* <li>If that fails, it will resolve the type using {@link #resolve(String, Boolean, Map)}, which
@@ -113,7 +115,7 @@ import com.google.common.collect.Sets;
* </ol>
* </ol>
*
- * There is no concept of a location version in this registry. The version
+ * TODO There is no concept of a location version in this registry. The version
* in the catalog is generally ignored.
*/
@SuppressWarnings({"rawtypes","unchecked"})
@@ -222,6 +224,21 @@ public class BasicLocationRegistry implements LocationRegistry {
updateDefinedLocation(locDefinition);
}
+ /**
+ * Converts the given item from the catalog into a LocationDefinition, and adds it
+ * to the registry (overwriting anything already registered with the id
+ * {@link RegisteredType#getId()}.
+ */
+ public void updateDefinedLocation(RegisteredType item) {
+ String id = item.getId();
+ String symbolicName = item.getSymbolicName();
+ String spec = CatalogLocationResolver.NAME + ":" + id;
+ Map<String, Object> config = ImmutableMap.<String, Object>of();
+ BasicLocationDefinition locDefinition = new BasicLocationDefinition(symbolicName, symbolicName, spec, config);
+
+ updateDefinedLocation(locDefinition);
+ }
+
public void removeDefinedLocation(CatalogItem<Location, LocationSpec<?>> item) {
removeDefinedLocation(item.getSymbolicName());
}
@@ -244,7 +261,7 @@ public class BasicLocationRegistry implements LocationRegistry {
// we need ability/format for persisting named locations, and better support for adding+saving via REST/GUI)
int count = 0;
String NAMED_LOCATION_PREFIX = "brooklyn.location.named.";
- ConfigMap namedLocationProps = mgmt.getConfig().submap(ConfigPredicates.startingWith(NAMED_LOCATION_PREFIX));
+ ConfigMap namedLocationProps = mgmt.getConfig().submap(ConfigPredicates.nameStartsWith(NAMED_LOCATION_PREFIX));
for (String k: namedLocationProps.asMapWithStringKeys().keySet()) {
String name = k.substring(NAMED_LOCATION_PREFIX.length());
// If has a dot, then is a sub-property of a named location (e.g. brooklyn.location.named.prod1.user=bob)
@@ -271,7 +288,7 @@ public class BasicLocationRegistry implements LocationRegistry {
definedLocations.putAll(oldDefined);
}
- for (CatalogItem<Location, LocationSpec<?>> item : mgmt.getCatalog().getCatalogItems(CatalogPredicates.IS_LOCATION)) {
+ for (RegisteredType item: mgmt.getTypeRegistry().getAll(RegisteredTypePredicates.IS_LOCATION)) {
updateDefinedLocation(item);
count++;
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/core/src/main/java/org/apache/brooklyn/core/location/CatalogLocationResolver.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/location/CatalogLocationResolver.java b/core/src/main/java/org/apache/brooklyn/core/location/CatalogLocationResolver.java
index db4c0d5..5db14b7 100644
--- a/core/src/main/java/org/apache/brooklyn/core/location/CatalogLocationResolver.java
+++ b/core/src/main/java/org/apache/brooklyn/core/location/CatalogLocationResolver.java
@@ -28,7 +28,7 @@ import org.apache.brooklyn.api.location.LocationRegistry;
import org.apache.brooklyn.api.location.LocationResolver;
import org.apache.brooklyn.api.location.LocationSpec;
import org.apache.brooklyn.api.mgmt.ManagementContext;
-import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -53,14 +53,14 @@ public class CatalogLocationResolver implements LocationResolver {
@SuppressWarnings({ "rawtypes", "unchecked" })
public Location newLocationFromString(Map locationFlags, String spec, LocationRegistry registry) {
String id = spec.substring(NAME.length()+1);
- CatalogItem<?, ?> item = CatalogUtils.getCatalogItemOptionalVersion(managementContext, id);
+ RegisteredType item = managementContext.getTypeRegistry().get(id);
if (item.isDisabled()) {
throw new IllegalStateException("Illegal use of disabled catalog item "+item.getSymbolicName()+":"+item.getVersion());
} else if (item.isDeprecated()) {
log.warn("Use of deprecated catalog item "+item.getSymbolicName()+":"+item.getVersion());
}
- LocationSpec origLocSpec = (LocationSpec) managementContext.getCatalog().createSpec((CatalogItem)item);
+ LocationSpec origLocSpec = (LocationSpec) managementContext.getTypeRegistry().createSpec(item, null, LocationSpec.class);
LocationSpec locSpec = LocationSpec.create(origLocSpec)
.configure(locationFlags);
return managementContext.getLocationManager().createLocation(locSpec);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/core/src/main/java/org/apache/brooklyn/core/mgmt/EntityManagementUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/EntityManagementUtils.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/EntityManagementUtils.java
index 889f74f..9c4ebc1 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/EntityManagementUtils.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/EntityManagementUtils.java
@@ -28,12 +28,12 @@ import javax.annotation.Nullable;
import org.apache.brooklyn.api.catalog.CatalogItem;
import org.apache.brooklyn.api.entity.Application;
import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.entity.EntityLocal;
import org.apache.brooklyn.api.entity.EntitySpec;
import org.apache.brooklyn.api.internal.AbstractBrooklynObjectSpec;
import org.apache.brooklyn.api.mgmt.ManagementContext;
import org.apache.brooklyn.api.mgmt.Task;
import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog;
import org.apache.brooklyn.core.config.ConfigKeys;
import org.apache.brooklyn.core.effector.Effectors;
import org.apache.brooklyn.core.entity.Entities;
@@ -89,6 +89,7 @@ public class EntityManagementUtils {
}
public static EntitySpec<? extends Application> createEntitySpecForApplication(ManagementContext mgmt, final String plan) {
+ // TODO-type-registry
return PlanToSpecFactory.attemptWithLoaders(mgmt, new Function<PlanToSpecTransformer, EntitySpec<? extends Application>>() {
@Override
public EntitySpec<? extends Application> apply(PlanToSpecTransformer input) {
@@ -97,20 +98,16 @@ public class EntityManagementUtils {
}).get();
}
+ @Deprecated /** @deprecated since 0.9.0; use {@link BrooklynTypeRegistry#createSpec(RegisteredType, org.apache.brooklyn.api.typereg.RegisteredTypeConstraint, Class)} */
+ // not used in Brooklyn
public static <T,SpecT extends AbstractBrooklynObjectSpec<? extends T, SpecT>> SpecT createCatalogSpec(ManagementContext mgmt, CatalogItem<T, SpecT> item) {
return createCatalogSpec(mgmt, item, ImmutableSet.<String>of());
}
+ @Deprecated /** @deprecated since 0.9.0; use {@link BrooklynTypeRegistry#createSpec(RegisteredType, org.apache.brooklyn.api.typereg.RegisteredTypeConstraint, Class)} */
+ // not used in Brooklyn
public static <T,SpecT extends AbstractBrooklynObjectSpec<? extends T, SpecT>> SpecT createCatalogSpec(ManagementContext mgmt, final CatalogItem<T, SpecT> item, final Set<String> encounteredTypes) {
- if (encounteredTypes.contains(item.getSymbolicName())) {
- throw new IllegalStateException("Already encountered types " + encounteredTypes + " must not contain catalog item being resolver " + item.getSymbolicName());
- }
- return PlanToSpecFactory.attemptWithLoaders(mgmt, new Function<PlanToSpecTransformer, SpecT>() {
- @Override
- public SpecT apply(PlanToSpecTransformer input) {
- return input.createCatalogSpec(item, encounteredTypes);
- }
- }).get();
+ return BasicBrooklynCatalog.internalCreateSpecWithTransformers(mgmt, item, encounteredTypes);
}
/** container for operation which creates something and which wants to return both
@@ -145,21 +142,21 @@ public class EntityManagementUtils {
}
public static <T extends Application> CreationResult<T,Void> start(T app) {
- Task<Void> task = Entities.invokeEffector((EntityLocal)app, app, Startable.START,
+ Task<Void> task = Entities.invokeEffector(app, app, Startable.START,
// locations already set in the entities themselves;
// TODO make it so that this arg does not have to be supplied to START !
MutableMap.of("locations", MutableList.of()));
return CreationResult.of(app, task);
}
- public static CreationResult<List<Entity>, List<String>> addChildren(final EntityLocal parent, String yaml, Boolean start) {
+ public static CreationResult<List<Entity>, List<String>> addChildren(final Entity parent, String yaml, Boolean start) {
if (Boolean.FALSE.equals(start))
return CreationResult.of(addChildrenUnstarted(parent, yaml), null);
return addChildrenStarting(parent, yaml);
}
/** adds entities from the given yaml, under the given parent; but does not start them */
- public static List<Entity> addChildrenUnstarted(final EntityLocal parent, String yaml) {
+ public static List<Entity> addChildrenUnstarted(final Entity parent, String yaml) {
log.debug("Creating child of "+parent+" from yaml:\n{}", yaml);
ManagementContext mgmt = parent.getApplication().getManagementContext();
@@ -193,7 +190,7 @@ public class EntityManagementUtils {
return children;
}
- public static CreationResult<List<Entity>,List<String>> addChildrenStarting(final EntityLocal parent, String yaml) {
+ public static CreationResult<List<Entity>,List<String>> addChildrenStarting(final Entity parent, String yaml) {
final List<Entity> children = addChildrenUnstarted(parent, yaml);
String childrenCountString;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/core/src/main/java/org/apache/brooklyn/core/mgmt/classloading/OsgiBrooklynClassLoadingContext.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/classloading/OsgiBrooklynClassLoadingContext.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/classloading/OsgiBrooklynClassLoadingContext.java
index 74f3de1..524f7b5 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/classloading/OsgiBrooklynClassLoadingContext.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/classloading/OsgiBrooklynClassLoadingContext.java
@@ -22,10 +22,9 @@ import java.net.URL;
import java.util.Collection;
import java.util.Collections;
-import org.apache.brooklyn.api.catalog.CatalogItem;
import org.apache.brooklyn.api.mgmt.ManagementContext;
import org.apache.brooklyn.api.typereg.OsgiBundleWithUrl;
-import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.core.mgmt.entitlement.Entitlements;
import org.apache.brooklyn.core.mgmt.ha.OsgiManager;
import org.apache.brooklyn.core.mgmt.internal.ManagementContextInternal;
@@ -48,11 +47,11 @@ public class OsgiBrooklynClassLoadingContext extends AbstractBrooklynClassLoadin
public Collection<? extends OsgiBundleWithUrl> getBundles() {
if (_bundles!=null || !hasBundles) return _bundles;
- CatalogItem<?, ?> cat = CatalogUtils.getCatalogItemOptionalVersion(mgmt, catalogItemId);
- if (cat==null) {
+ RegisteredType item = mgmt.getTypeRegistry().get(catalogItemId);
+ if (item==null) {
throw new IllegalStateException("Catalog item not found for "+catalogItemId+"; cannot create loading context");
}
- _bundles = cat.getLibraries();
+ _bundles = item.getLibraries();
return _bundles;
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/AbstractManagementContext.java
----------------------------------------------------------------------
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 284b357..cba394c 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
@@ -33,7 +33,6 @@ import java.util.concurrent.atomic.AtomicLong;
import javax.annotation.Nullable;
import org.apache.brooklyn.api.catalog.BrooklynCatalog;
-import org.apache.brooklyn.api.catalog.CatalogItem;
import org.apache.brooklyn.api.effector.Effector;
import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.entity.drivers.EntityDriverManager;
@@ -49,6 +48,7 @@ import org.apache.brooklyn.api.mgmt.ha.HighAvailabilityManager;
import org.apache.brooklyn.api.mgmt.rebind.RebindManager;
import org.apache.brooklyn.api.objs.BrooklynObject;
import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.config.StringConfigMap;
import org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog;
import org.apache.brooklyn.core.catalog.internal.CatalogInitialization;
@@ -127,7 +127,8 @@ public abstract class AbstractManagementContext implements ManagementContextInte
if (input instanceof EntityInternal) {
EntityInternal internal = (EntityInternal)input;
if (internal.getCatalogItemId() != null) {
- CatalogItem<?, ?> item = CatalogUtils.getCatalogItemOptionalVersion(internal.getManagementContext(), internal.getCatalogItemId());
+ RegisteredType item = internal.getManagementContext().getTypeRegistry().get(internal.getCatalogItemId());
+
if (item != null) {
return CatalogUtils.newClassLoadingContext(internal.getManagementContext(), item);
} else {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/BrooklynMementoPersisterToObjectStore.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/BrooklynMementoPersisterToObjectStore.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/BrooklynMementoPersisterToObjectStore.java
index 10f349a..adbb01f 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/BrooklynMementoPersisterToObjectStore.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/BrooklynMementoPersisterToObjectStore.java
@@ -35,9 +35,6 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
import javax.annotation.Nullable;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.apache.brooklyn.api.catalog.CatalogItem;
import org.apache.brooklyn.api.mgmt.rebind.PersistenceExceptionHandler;
import org.apache.brooklyn.api.mgmt.rebind.RebindExceptionHandler;
import org.apache.brooklyn.api.mgmt.rebind.mementos.BrooklynMemento;
@@ -48,6 +45,7 @@ import org.apache.brooklyn.api.mgmt.rebind.mementos.CatalogItemMemento;
import org.apache.brooklyn.api.mgmt.rebind.mementos.Memento;
import org.apache.brooklyn.api.objs.BrooklynObject;
import org.apache.brooklyn.api.objs.BrooklynObjectType;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.config.ConfigKey;
import org.apache.brooklyn.config.StringConfigMap;
import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
@@ -56,7 +54,6 @@ import org.apache.brooklyn.core.mgmt.classloading.ClassLoaderFromBrooklynClassLo
import org.apache.brooklyn.core.mgmt.persist.PersistenceObjectStore.StoreObjectAccessor;
import org.apache.brooklyn.core.mgmt.persist.PersistenceObjectStore.StoreObjectAccessorWithLock;
import org.apache.brooklyn.core.mgmt.rebind.PeriodicDeltaChangeListener;
-import org.apache.brooklyn.core.mgmt.rebind.PersisterDeltaImpl;
import org.apache.brooklyn.core.mgmt.rebind.dto.BrooklynMementoImpl;
import org.apache.brooklyn.core.mgmt.rebind.dto.BrooklynMementoManifestImpl;
import org.apache.brooklyn.util.collections.MutableMap;
@@ -66,9 +63,10 @@ import org.apache.brooklyn.util.exceptions.Exceptions;
import org.apache.brooklyn.util.text.Strings;
import org.apache.brooklyn.util.time.Duration;
import org.apache.brooklyn.util.time.Time;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.common.annotations.Beta;
-import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Objects;
import com.google.common.base.Stopwatch;
import com.google.common.collect.ImmutableSet;
@@ -176,7 +174,7 @@ public class BrooklynMementoPersisterToObjectStore implements BrooklynMementoPer
}
// See RebindIteration.BrooklynObjectInstantiator.load(), for handling where catalog item is missing;
// similar logic here.
- CatalogItem<?, ?> catalogItem = CatalogUtils.getCatalogItemOptionalVersion(lookupContext.lookupManagementContext(), catalogItemId);
+ RegisteredType catalogItem = lookupContext.lookupManagementContext().getTypeRegistry().get(catalogItemId);
if (catalogItem == null) {
// TODO do we need to only log once, rather than risk log.warn too often? I think this only happens on rebind, so ok.
LOG.warn("Unable to load catalog item "+catalogItemId+" for custom class loader of "+type+" "+objectId+"; will use default class loader");
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/XmlMementoSerializer.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/XmlMementoSerializer.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/XmlMementoSerializer.java
index 3d2ecef..98b5aa2 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/XmlMementoSerializer.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/XmlMementoSerializer.java
@@ -40,6 +40,7 @@ import org.apache.brooklyn.api.objs.Identifiable;
import org.apache.brooklyn.api.policy.Policy;
import org.apache.brooklyn.api.sensor.Enricher;
import org.apache.brooklyn.api.sensor.Feed;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.core.catalog.internal.CatalogBundleDto;
import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
import org.apache.brooklyn.core.config.BasicConfigKey;
@@ -439,7 +440,7 @@ public class XmlMementoSerializer<T> extends XmlSerializer<T> implements Memento
try {
if (Strings.isNonBlank(catalogItemId)) {
if (lookupContext==null) throw new NullPointerException("lookupContext required to load catalog item "+catalogItemId);
- CatalogItem<?, ?> cat = CatalogUtils.getCatalogItemOptionalVersion(lookupContext.lookupManagementContext(), catalogItemId);
+ RegisteredType cat = lookupContext.lookupManagementContext().getTypeRegistry().get(catalogItemId);
if (cat==null) throw new NoSuchElementException("catalog item: "+catalogItemId);
BrooklynClassLoadingContext clcNew = CatalogUtils.newClassLoadingContext(lookupContext.lookupManagementContext(), cat);
pushXstreamCustomClassLoader(clcNew);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindContextLookupContext.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindContextLookupContext.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindContextLookupContext.java
index 1faaa1c..eb55784 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindContextLookupContext.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindContextLookupContext.java
@@ -18,12 +18,8 @@
*/
package org.apache.brooklyn.core.mgmt.rebind;
-import java.util.NoSuchElementException;
-
import javax.annotation.Nullable;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.apache.brooklyn.api.catalog.CatalogItem;
import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.location.Location;
@@ -37,6 +33,8 @@ import org.apache.brooklyn.api.policy.Policy;
import org.apache.brooklyn.api.sensor.Enricher;
import org.apache.brooklyn.api.sensor.Feed;
import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/** Looks in {@link RebindContext} <i>and</i> {@link ManagementContext} to find entities, locations, etc. */
public class RebindContextLookupContext implements LookupContext {
@@ -115,10 +113,13 @@ public class RebindContextLookupContext implements LookupContext {
return result;
}
+ @SuppressWarnings("deprecation")
@Override
public CatalogItem<?, ?> lookupCatalogItem(String id) {
CatalogItem<?, ?> result = rebindContext.getCatalogItem(id);
if (result == null) {
+ // TODO-type-registry
+// result = managementContext.getTypeRegistry().get(id, null, null);
result = CatalogUtils.getCatalogItemOptionalVersion(managementContext, id);
}
if (result == null) {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindIteration.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindIteration.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindIteration.java
index 2279e8c..3655886 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindIteration.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindIteration.java
@@ -30,8 +30,6 @@ import java.util.concurrent.Semaphore;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.apache.brooklyn.api.catalog.BrooklynCatalog;
import org.apache.brooklyn.api.catalog.CatalogItem;
import org.apache.brooklyn.api.entity.Application;
@@ -43,6 +41,7 @@ import org.apache.brooklyn.api.mgmt.rebind.RebindExceptionHandler;
import org.apache.brooklyn.api.mgmt.rebind.RebindSupport;
import org.apache.brooklyn.api.mgmt.rebind.mementos.BrooklynMemento;
import org.apache.brooklyn.api.mgmt.rebind.mementos.BrooklynMementoManifest;
+import org.apache.brooklyn.api.mgmt.rebind.mementos.BrooklynMementoManifest.EntityMementoManifest;
import org.apache.brooklyn.api.mgmt.rebind.mementos.BrooklynMementoPersister;
import org.apache.brooklyn.api.mgmt.rebind.mementos.BrooklynMementoRawData;
import org.apache.brooklyn.api.mgmt.rebind.mementos.CatalogItemMemento;
@@ -53,12 +52,13 @@ import org.apache.brooklyn.api.mgmt.rebind.mementos.LocationMemento;
import org.apache.brooklyn.api.mgmt.rebind.mementos.Memento;
import org.apache.brooklyn.api.mgmt.rebind.mementos.PolicyMemento;
import org.apache.brooklyn.api.mgmt.rebind.mementos.TreeNode;
-import org.apache.brooklyn.api.mgmt.rebind.mementos.BrooklynMementoManifest.EntityMementoManifest;
import org.apache.brooklyn.api.objs.BrooklynObject;
import org.apache.brooklyn.api.objs.BrooklynObjectType;
import org.apache.brooklyn.api.policy.Policy;
import org.apache.brooklyn.api.sensor.Enricher;
import org.apache.brooklyn.api.sensor.Feed;
+import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.core.BrooklynFeatureEnablement;
import org.apache.brooklyn.core.BrooklynLogging;
import org.apache.brooklyn.core.BrooklynLogging.LoggingLevel;
@@ -98,6 +98,8 @@ import org.apache.brooklyn.util.javalang.Reflections;
import org.apache.brooklyn.util.text.Strings;
import org.apache.brooklyn.util.time.Duration;
import org.apache.brooklyn.util.time.Time;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
@@ -787,12 +789,13 @@ public abstract class RebindIteration {
EntityMementoManifest ptr = entityManifest;
while (ptr != null) {
if (ptr.getCatalogItemId() != null) {
- CatalogItem<?, ?> catalogItem = CatalogUtils.getCatalogItemOptionalVersion(managementContext, ptr.getCatalogItemId());
- if (catalogItem != null) {
- return catalogItem.getId();
+ RegisteredType type = managementContext.getTypeRegistry().get(ptr.getCatalogItemId());
+ if (type != null) {
+ return type.getId();
} else {
//Couldn't find a catalog item with this id, but return it anyway and
//let the caller deal with the error.
+ //TODO under what circumstances is this permitted?
return ptr.getCatalogItemId();
}
}
@@ -807,13 +810,13 @@ public abstract class RebindIteration {
//The current convention is to set catalog item IDs to the java type (for both plain java or CAMP plan) they represent.
//This will be applicable only the first time the store is rebinded, while the catalog items don't have the default
//version appended to their IDs, but then we will have catalogItemId set on entities so not neede further anyways.
- BrooklynCatalog catalog = managementContext.getCatalog();
+ BrooklynTypeRegistry types = managementContext.getTypeRegistry();
ptr = entityManifest;
while (ptr != null) {
- CatalogItem<?, ?> catalogItem = catalog.getCatalogItem(ptr.getType(), BrooklynCatalog.DEFAULT_VERSION);
- if (catalogItem != null) {
- LOG.debug("Inferred catalog item ID "+catalogItem.getId()+" for "+entityManifest+" from ancestor "+ptr);
- return catalogItem.getId();
+ RegisteredType t = types.get(ptr.getType(), BrooklynCatalog.DEFAULT_VERSION);
+ if (t != null) {
+ LOG.debug("Inferred catalog item ID "+t.getId()+" for "+entityManifest+" from ancestor "+ptr);
+ return t.getId();
}
if (ptr.getParent() != null) {
ptr = entityIdToManifest.get(ptr.getParent());
@@ -827,7 +830,8 @@ public abstract class RebindIteration {
if (JavaBrooklynClassLoadingContext.create(managementContext).tryLoadClass(entityManifest.getType()).isPresent())
return null;
- for (CatalogItem<?, ?> item : catalog.getCatalogItems()) {
+ // TODO get to the point when we can deprecate this behaviour!:
+ for (RegisteredType item : types.getAll()) {
BrooklynClassLoadingContext loader = CatalogUtils.newClassLoadingContext(managementContext, item);
boolean canLoadClass = loader.tryLoadClass(entityManifest.getType()).isPresent();
if (canLoadClass) {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/50ebfafb/core/src/main/java/org/apache/brooklyn/core/resolve/ResolveUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/resolve/ResolveUtils.java b/core/src/main/java/org/apache/brooklyn/core/resolve/ResolveUtils.java
index c3fc85f..6ecbe96 100644
--- a/core/src/main/java/org/apache/brooklyn/core/resolve/ResolveUtils.java
+++ b/core/src/main/java/org/apache/brooklyn/core/resolve/ResolveUtils.java
@@ -21,18 +21,18 @@ package org.apache.brooklyn.core.resolve;
import java.util.Map;
import java.util.Set;
-import org.apache.brooklyn.api.catalog.CatalogItem;
-import org.apache.brooklyn.api.catalog.CatalogItem.CatalogItemType;
import org.apache.brooklyn.api.location.Location;
import org.apache.brooklyn.api.location.LocationSpec;
import org.apache.brooklyn.api.policy.Policy;
import org.apache.brooklyn.api.policy.PolicySpec;
-import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
-import org.apache.brooklyn.core.mgmt.EntityManagementUtils;
+import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.core.mgmt.classloading.BrooklynClassLoadingContext;
import org.apache.brooklyn.core.objs.BrooklynObjectInternal.ConfigurationSupportInternal;
import org.apache.brooklyn.util.guava.Maybe;
+@Deprecated /** @deprecated since 0.9.0 never belonged here, and not used much; new principled TypeRegistry simplifies things */
+// only used for camp
+// TODO-type-registry
public class ResolveUtils {
@SuppressWarnings("unchecked")
@@ -40,16 +40,13 @@ public class ResolveUtils {
String versionedId,
BrooklynClassLoadingContext loader,
Set<String> encounteredCatalogTypes) {
+
PolicySpec<? extends Policy> spec;
- CatalogItem<?, ?> policyItem = CatalogUtils.getCatalogItemOptionalVersion(loader.getManagementContext(), versionedId);
- if (policyItem != null && !encounteredCatalogTypes.contains(policyItem.getSymbolicName())) {
- if (policyItem.getCatalogItemType() != CatalogItemType.POLICY) {
- throw new IllegalStateException("Non-policy catalog item in policy context: " + policyItem);
- }
- @SuppressWarnings("rawtypes")
- CatalogItem rawItem = policyItem;
- spec = (PolicySpec<? extends Policy>) EntityManagementUtils.createCatalogSpec(loader.getManagementContext(), rawItem, encounteredCatalogTypes);
+ RegisteredType item = loader.getManagementContext().getTypeRegistry().get(versionedId);
+ if (item != null && !encounteredCatalogTypes.contains(item.getSymbolicName())) {
+ return loader.getManagementContext().getTypeRegistry().createSpec(item, null, PolicySpec.class);
} else {
+ // TODO-type-registry pass the loader in to the above, and allow it to load with the loader
spec = PolicySpec.create(loader.loadClass(versionedId, Policy.class));
}
return spec;