Merge branch 'master' into type-registry

Conflicts - CI parameters removed, and TypeRegistry expanded; resolved, except 
we'll want to add a test for StaticTypePlanTransformer
        api/src/main/java/org/apache/brooklyn/api/catalog/CatalogItem.java
        
core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
        
core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemBuilder.java
        
core/src/main/resources/META-INF/services/org.apache.brooklyn.core.typereg.BrooklynTypePlanTransformer
        
core/src/test/java/org/apache/brooklyn/core/catalog/internal/TestToSpecTransformer.java
        
usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/SpecParameterParsingTest.java
        
usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/SpecParameterUnwrappingTest.java


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

Branch: refs/heads/master
Commit: 03aacd3e4d64a4d0701e122e0ee6931408c7e07e
Parents: 5dd940b 462e5ea
Author: Alex Heneveld <[email protected]>
Authored: Tue Nov 17 15:41:49 2015 +0000
Committer: Alex Heneveld <[email protected]>
Committed: Tue Nov 17 22:50:17 2015 +0000

----------------------------------------------------------------------
 .../brooklyn/api/catalog/CatalogItem.java       |   4 -
 .../apache/brooklyn/api/location/Location.java  |   3 +-
 .../api/mgmt/rebind/RebindExceptionHandler.java |   4 +
 .../brooklyn/api/typereg/RegisteredType.java    |   2 +-
 .../catalog/internal/BasicBrooklynCatalog.java  |  32 --
 .../catalog/internal/CatalogClasspathDo.java    |   8 -
 .../catalog/internal/CatalogItemBuilder.java    |  10 -
 .../core/catalog/internal/CatalogItemDo.java    |   5 -
 .../internal/CatalogItemDtoAbstract.java        |  24 +-
 .../apache/brooklyn/core/config/ConfigKeys.java |   8 +
 .../vault/VaultExternalConfigSupplier.java      |  22 +-
 .../core/entity/BrooklynConfigKeys.java         |  12 +-
 .../core/location/AbstractLocation.java         |   2 -
 .../AggregatingMachineProvisioningLocation.java |   2 -
 .../access/PortForwardManagerClient.java        |   2 -
 .../mgmt/ha/HighAvailabilityManagerImpl.java    |  17 +-
 .../persist/FileBasedStoreObjectAccessor.java   |  10 +-
 .../mgmt/rebind/BasicEntityRebindSupport.java   |   9 +-
 .../mgmt/rebind/RebindExceptionHandlerImpl.java |  27 ++
 .../core/mgmt/rebind/RebindManagerImpl.java     |   8 +
 .../brooklyn/core/sensor/AttributeMap.java      |   5 +-
 .../entity/stock/EffectorStartableImpl.java     |   2 -
 .../byon/SingleMachineProvisioningLocation.java |   1 -
 .../LocalhostMachineProvisioningLocation.java   |   6 +-
 .../brooklyn/location/multi/MultiLocation.java  |   2 -
 .../location/ssh/SshMachineLocation.java        |  83 ++--
 .../util/core/internal/ssh/SshTool.java         |  14 +-
 .../internal/SpecParameterInMetaTest.java       | 200 ----------
 .../catalog/internal/TestToSpecTransformer.java | 120 ------
 .../brooklyn/core/config/ConfigKeysTest.java    |  21 +-
 .../core/location/AbstractLocationTest.java     |   1 -
 .../core/location/LocationExtensionsTest.java   |   2 -
 .../core/location/SimulatedLocation.java        |   2 -
 .../FileBasedStoreObjectAccessorWriterTest.java |  32 +-
 .../core/mgmt/rebind/RebindLocationTest.java    |   8 -
 .../qa/performance/AbstractPerformanceTest.java |  47 ++-
 .../qa/performance/EntityPerformanceTest.java   |  84 ++--
 .../FilePersistencePerformanceTest.java         | 146 ++++---
 .../GroovyYardStickPerformanceTest.groovy       |   7 +-
 .../JavaYardStickPerformanceTest.java           |  35 +-
 .../SubscriptionPerformanceTest.java            |  58 ++-
 .../qa/performance/TaskPerformanceTest.java     |  63 ++-
 .../SshMachineLocationReuseIntegrationTest.java |  11 +-
 .../ssh/SshMachineLocationSshToolTest.java      |  96 +++++
 .../location/ssh/SshMachineLocationTest.java    |  27 +-
 .../core/task/DynamicSequentialTaskTest.java    |  41 +-
 docs/guide/index.md                             |   1 +
 docs/guide/ops/catalog/index.md                 |  25 --
 docs/guide/ops/persistence/index.md             |   2 +
 docs/guide/test/entities.md                     | 143 +++++++
 docs/guide/test/index.md                        |   8 +
 docs/guide/yaml/yaml-reference.md               |  35 +-
 docs/website/documentation/faq.md               |  28 ++
 .../jclouds/JcloudsSshMachineLocation.java      |   1 -
 .../BlobStorePersistencePerformanceTest.java    |  39 +-
 .../jclouds/BailOutJcloudsLocation.java         |   3 -
 .../policy/jclouds/os/CreateUserPolicyTest.java |   2 -
 .../entity/machine/pool/ServerPoolLocation.java |   2 -
 .../brooklyn/entity/java/JavaOptsTest.java      |  17 +-
 .../entity/software/base/EntitySshToolTest.java | 103 +++++
 .../base/SoftwareProcessEntityRebindTest.java   |   2 -
 .../base/SoftwareProcessEntityTest.java         |   2 -
 .../base/lifecycle/StartStopSshDriverTest.java  |   4 +-
 .../mgmt/usage/LocationUsageTrackingTest.java   |   2 -
 .../nginx/NginxRebindWithHaIntegrationTest.java |   9 +-
 usage/all/pom.xml                               |   6 +
 .../brooklyn/catalog/CatalogParametersTest.java | 365 ------------------
 .../catalog/SpecParameterParsingTest.java       | 156 ++++++++
 .../catalog/SpecParameterUnwrappingTest.java    | 379 +++++++++++++++++++
 usage/dist/licensing/overrides.yaml             |  44 ++-
 usage/dist/src/main/license/files/LICENSE       |  92 +++--
 .../assets/js/view/application-add-wizard.js    |  11 +-
 .../org/apache/brooklyn/rest/api/ServerApi.java |   4 +-
 .../rest/transform/CatalogTransformer.java      |   5 +-
 .../rest/resources/UsageResourceTest.java       |   2 -
 usage/test-framework/README.md                  | 109 ------
 usage/test-framework/pom.xml                    |  27 +-
 .../brooklyn/test/framework/AbstractTest.java   |  19 +-
 .../brooklyn/test/framework/BaseTest.java       |  18 +
 .../test/framework/ParallelTestCase.java        |  18 +
 .../test/framework/ParallelTestCaseImpl.java    |  59 ++-
 .../brooklyn/test/framework/TestCase.java       |  18 +
 .../brooklyn/test/framework/TestCaseImpl.java   |  18 +
 .../brooklyn/test/framework/TestEffector.java   |  20 +-
 .../test/framework/TestEffectorImpl.java        |  18 +
 .../brooklyn/test/framework/TestHttpCall.java   |  18 +
 .../test/framework/TestHttpCallImpl.java        |  18 +
 .../brooklyn/test/framework/TestSensor.java     |  23 +-
 .../brooklyn/test/framework/TestSensorImpl.java |  19 +-
 .../test/framework/TestEffectorTest.java        |  19 +
 .../brooklyn/test/framework/TestSensorTest.java |  19 +
 .../test/framework/entity/TestEntity.java       |  19 +
 .../test/framework/entity/TestEntityImpl.java   |  19 +
 .../resources/test-framework-examples/README.md |  19 +
 .../example-catalog-test.bom                    |  18 +
 .../test-framework-examples/example-catalog.bom |  18 +
 .../nginx-test-examples.yml                     |  18 +
 .../testhttpcall-examples.yml                   |  18 +
 .../tomcat-test-examples.yml                    |  18 +
 .../brooklyn/test/PerformanceTestUtils.java     |  82 +---
 .../test/performance/FilePersister.java         |  85 +++++
 .../brooklyn/test/performance/Histogram.java    |  89 +++++
 .../performance/MeasurementResultPersister.java |  29 ++
 .../test/performance/PerformanceMeasurer.java   | 156 ++++++++
 .../performance/PerformanceTestDescriptor.java  | 208 ++++++++++
 .../test/performance/PerformanceTestResult.java |  62 +++
 .../test/performance/PerformanceTestUtils.java  | 107 ++++++
 .../brooklyn/util/JavaGroovyEquivalents.java    |   9 +-
 .../brooklyn/util/exceptions/Exceptions.java    |  29 +-
 .../org/apache/brooklyn/util/io/FileUtil.java   |  18 +-
 .../util/exceptions/ExceptionsTest.java         |  22 ++
 .../brooklyn/util/maven/MavenArtifactTest.java  |  10 +-
 .../brooklyn/util/ssh/IptablesCommandsTest.java |   2 +-
 .../osgi/more-entities-v2-evil-twin/pom.xml     |   2 +-
 .../dependencies/osgi/more-entities-v2/pom.xml  |   4 +-
 .../brooklyn-test-osgi-more-entities_0.2.0.jar  | Bin 15745 -> 15646 bytes
 ...-test-osgi-more-entities_evil-twin_0.2.0.jar | Bin 13922 -> 13811 bytes
 .../TestResourceUnavailableException.java       |   3 +-
 118 files changed, 2888 insertions(+), 1433 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/03aacd3e/api/src/main/java/org/apache/brooklyn/api/catalog/CatalogItem.java
----------------------------------------------------------------------
diff --cc api/src/main/java/org/apache/brooklyn/api/catalog/CatalogItem.java
index fe21daa,610967b..795e393
--- a/api/src/main/java/org/apache/brooklyn/api/catalog/CatalogItem.java
+++ b/api/src/main/java/org/apache/brooklyn/api/catalog/CatalogItem.java
@@@ -33,9 -26,6 +32,8 @@@ import org.apache.brooklyn.api.mgmt.reb
  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.objs.SpecParameter;
 +import org.apache.brooklyn.api.policy.Policy;
 +import org.apache.brooklyn.api.policy.PolicySpec;
  import org.apache.brooklyn.api.typereg.OsgiBundleWithUrl;
  
  import com.google.common.annotations.Beta;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/03aacd3e/api/src/main/java/org/apache/brooklyn/api/typereg/RegisteredType.java
----------------------------------------------------------------------
diff --cc api/src/main/java/org/apache/brooklyn/api/typereg/RegisteredType.java
index ed84179,6ffa09c..2674736
--- a/api/src/main/java/org/apache/brooklyn/api/typereg/RegisteredType.java
+++ b/api/src/main/java/org/apache/brooklyn/api/typereg/RegisteredType.java
@@@ -58,12 -48,9 +58,12 @@@ public interface RegisteredType extend
       * 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). 
 +     * for instance because the YAML has not yet been parsed or OSGi bundles 
downloaded).
 +     * <p>
 +     * This may include other registered types such as marker interfaces.
       */
 -    Class<?> getJavaType();
 +    @Beta
-     @Nullable Set<Object> getSuperTypes();
++    Set<Object> getSuperTypes();
  
      /**
       * @return True if the item has been deprecated (i.e. its use is 
discouraged)

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/03aacd3e/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
----------------------------------------------------------------------
diff --cc 
core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
index 1b5d381,0a39725..e3fc287
--- 
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
@@@ -37,14 -37,13 +37,12 @@@ import org.apache.brooklyn.api.internal
  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.mgmt.classloading.BrooklynClassLoadingContext;
- import org.apache.brooklyn.api.objs.SpecParameter;
  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.classloading.BrooklynClassLoadingContext;
  import org.apache.brooklyn.core.mgmt.internal.ManagementContextInternal;
- import org.apache.brooklyn.core.objs.BasicSpecParameter;
 -import org.apache.brooklyn.core.plan.PlanToSpecFactory;
 -import org.apache.brooklyn.core.plan.PlanToSpecTransformer;
 +import org.apache.brooklyn.core.typereg.BrooklynTypePlanTransformer;
  import org.apache.brooklyn.util.collections.MutableList;
  import org.apache.brooklyn.util.collections.MutableMap;
  import org.apache.brooklyn.util.collections.MutableSet;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/03aacd3e/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemBuilder.java
----------------------------------------------------------------------
diff --cc 
core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemBuilder.java
index 59bc3a9,8918a74..8e23329
--- 
a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemBuilder.java
+++ 
b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemBuilder.java
@@@ -20,11 -20,8 +20,9 @@@ package org.apache.brooklyn.core.catalo
  
  import java.util.Collection;
  import java.util.Collections;
- import java.util.List;
  
  import org.apache.brooklyn.api.catalog.CatalogItem.CatalogBundle;
 +import org.apache.brooklyn.api.catalog.CatalogItem.CatalogItemType;
- import org.apache.brooklyn.api.objs.SpecParameter;
  
  import com.google.common.base.Preconditions;
  
@@@ -118,12 -104,7 +116,7 @@@ public class CatalogItemBuilder<CIConcr
          return this;
      }
  
-     public CatalogItemBuilder<CIConcreteType> 
parameters(List<SpecParameter<?>> inputs) {
-         dto.setParameters(inputs);
-         return this;
-     }
- 
 -    public CatalogItemBuilder<CatalogItemType> 
libraries(Collection<CatalogBundle> libraries) {
 +    public CatalogItemBuilder<CIConcreteType> 
libraries(Collection<CatalogBundle> libraries) {
          dto.setLibraries(libraries);
          return this;
      }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/03aacd3e/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/SpecParameterParsingTest.java
----------------------------------------------------------------------
diff --cc 
usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/SpecParameterParsingTest.java
index 0000000,022a216..fdf5807
mode 000000,100644..100644
--- 
a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/SpecParameterParsingTest.java
+++ 
b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/SpecParameterParsingTest.java
@@@ -1,0 -1,140 +1,156 @@@
+ /*
+  * 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.camp.brooklyn.catalog;
+ 
+ import static org.testng.Assert.assertEquals;
+ import static org.testng.Assert.assertFalse;
+ import static org.testng.Assert.assertTrue;
+ 
+ import java.util.List;
+ 
+ import org.apache.brooklyn.api.catalog.CatalogItem;
++import org.apache.brooklyn.api.entity.EntitySpec;
+ import org.apache.brooklyn.api.internal.AbstractBrooklynObjectSpec;
+ import org.apache.brooklyn.api.objs.SpecParameter;
++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.entity.stock.BasicApplication;
+ import org.apache.brooklyn.test.support.TestResourceUnavailableException;
+ import org.apache.brooklyn.util.osgi.OsgiTestResources;
++import org.testng.Assert;
+ import org.testng.annotations.Test;
+ 
++import com.google.common.base.Function;
+ import com.google.common.base.Joiner;
+ import com.google.common.collect.Iterables;
+ import com.google.common.reflect.TypeToken;
+ 
+ public class SpecParameterParsingTest  extends AbstractYamlTest {
 -
++    
+     @Test
+     public void testYamlInputsParsed() {
 -        CatalogItem<?, ?> item = add(
++        String itemId = add(
+                 "brooklyn.catalog:",
+                 "  id: test.inputs",
+                 "  version: 0.0.1",
+                 "  item: ",
+                 "    type: "+ BasicApplication.class.getName(),
+                 "    brooklyn.parameters:",
+                 "    - simple",
+                 "    - name: explicit_name",
+                 "    - name: third_input",
+                 "      type: integer");
 -        AbstractBrooklynObjectSpec<?,?> spec = createSpec(item);
 -        List<SpecParameter<?>> inputs = spec.getParameters();
++        EntitySpec<?> item = 
mgmt().getTypeRegistry().createSpec(mgmt().getTypeRegistry().get(itemId), null, 
EntitySpec.class);
++        List<SpecParameter<?>> inputs = item.getParameters();
+         assertEquals(inputs.size(), 3);
+         SpecParameter<?> firstInput = inputs.get(0);
+         assertEquals(firstInput.getLabel(), "simple");
+         assertEquals(firstInput.isPinned(), true);
+         assertEquals(firstInput.getType().getName(), "simple");
+         assertEquals(firstInput.getType().getTypeToken(), 
TypeToken.of(String.class));
+         
+         SpecParameter<?> secondInput = inputs.get(1);
+         assertEquals(secondInput.getLabel(), "explicit_name");
+         assertEquals(secondInput.isPinned(), true);
+         assertEquals(secondInput.getType().getName(), "explicit_name");
+         assertEquals(secondInput.getType().getTypeToken(), 
TypeToken.of(String.class));
+         
+         SpecParameter<?> thirdInput = inputs.get(2);
+         assertEquals(thirdInput.getLabel(), "third_input");
+         assertEquals(thirdInput.isPinned(), true);
+         assertEquals(thirdInput.getType().getName(), "third_input");
+         assertEquals(thirdInput.getType().getTypeToken(), 
TypeToken.of(Integer.class));
+     }
+ 
+     @Test
+     public void testOsgiType() {
+         
TestResourceUnavailableException.throwIfResourceUnavailable(getClass(), 
OsgiTestResources.BROOKLYN_TEST_OSGI_ENTITIES_PATH);
+ 
 -        CatalogItem<?, ?> item = add(
++        String itemId = add(
+                 "brooklyn.catalog:",
+                 "  id: test.inputs",
+                 "  version: 0.0.1",
+                 "  libraries:",
+                 "  - classpath://" + 
OsgiTestResources.BROOKLYN_TEST_OSGI_ENTITIES_PATH,
+                 "  item: ",
+                 "    type: "+ BasicApplication.class.getName(),
+                 "    brooklyn.parameters:",
+                 "    - name: simple",
+                 "      type: " + 
OsgiTestResources.BROOKLYN_TEST_OSGI_ENTITIES_SIMPLE_ENTITY);
 -        AbstractBrooklynObjectSpec<?,?> spec = createSpec(item);
++        AbstractBrooklynObjectSpec<?,?> spec = createSpec(itemId);
+         List<SpecParameter<?>> inputs = spec.getParameters();
+         assertEquals(inputs.size(), 1);
+         SpecParameter<?> firstInput = inputs.get(0);
+         assertEquals(firstInput.getLabel(), "simple");
+         assertTrue(firstInput.isPinned());
+         assertEquals(firstInput.getType().getName(), "simple");
+         
assertEquals(firstInput.getType().getTypeToken().getRawType().getName(), 
OsgiTestResources.BROOKLYN_TEST_OSGI_ENTITIES_SIMPLE_ENTITY);
+     }
+ 
+     @Test
+     public void testOsgiClassScanned() {
+         
TestResourceUnavailableException.throwIfResourceUnavailable(getClass(), 
OsgiTestResources.BROOKLYN_TEST_OSGI_ENTITIES_PATH);
+         
TestResourceUnavailableException.throwIfResourceUnavailable(getClass(), 
OsgiTestResources.BROOKLYN_TEST_MORE_ENTITIES_V2_PATH);
+ 
+         addMulti("brooklyn.catalog:",
+             "    items:",
+             "    - scanJavaAnnotations: true",
+             "      version: 2.0.test_java",
+             "      libraries:",
+             "      - classpath://" + 
OsgiTestResources.BROOKLYN_TEST_OSGI_ENTITIES_PATH,
+             "      - classpath://" + 
OsgiTestResources.BROOKLYN_TEST_MORE_ENTITIES_V2_PATH);
+ 
 -        CatalogItem<?, ?> item = 
CatalogUtils.getCatalogItemOptionalVersion(mgmt(), 
OsgiTestResources.BROOKLYN_TEST_MORE_ENTITIES_MORE_ENTITY);
++        RegisteredType item = 
mgmt().getTypeRegistry().get(OsgiTestResources.BROOKLYN_TEST_MORE_ENTITIES_MORE_ENTITY);
+         assertEquals(item.getVersion(), "2.0.test_java");
+         assertEquals(item.getLibraries().size(), 2);
+         AbstractBrooklynObjectSpec<?,?> spec = createSpec(item);
+         List<SpecParameter<?>> inputs = spec.getParameters();
++        if (inputs.isEmpty()) Assert.fail("no inputs (if you're in the IDE, 
mvn clean install may need to be run to rebuild osgi test JARs)");
++        assertEquals(inputs.size(), 1);
+         SpecParameter<?> input = inputs.get(0);
+         assertEquals(input.getLabel(), "more_config");
+         assertFalse(input.isPinned());
+         assertEquals(input.getType().getName(), "more_config");
+     }
+ 
 -    private CatalogItem<?,?> add(String... def) {
++    private String add(String... def) {
+         return Iterables.getOnlyElement(addMulti(def));
+     }
+ 
 -    private Iterable<? extends CatalogItem<?, ?>> addMulti(String... def) {
 -        return catalog.addItems(Joiner.on('\n').join(def));
++    private Iterable<String> addMulti(String... def) {
++        return 
Iterables.transform(catalog.addItems(Joiner.on('\n').join(def)),
++            new Function<CatalogItem<?,?>, String>() {
++                @Override
++                public String apply(CatalogItem<?, ?> input) {
++                    return input.getId();
++                }
++            });
+     }
+ 
 -    @SuppressWarnings({"unchecked", "rawtypes"})
 -    private AbstractBrooklynObjectSpec<?, ?> createSpec(CatalogItem<?, ?> 
item) {
 -        return (AbstractBrooklynObjectSpec<?,?>) 
catalog.createSpec((CatalogItem)item);
++    private AbstractBrooklynObjectSpec<?, ?> createSpec(String itemId) {
++        RegisteredType item = mgmt().getTypeRegistry().get(itemId);
++        Assert.assertNotNull(item, "Could not load: "+itemId);
++        return createSpec(item);
++    }
++    
++    private AbstractBrooklynObjectSpec<?, ?> createSpec(RegisteredType item) {
++        return mgmt().getTypeRegistry().createSpec(item, null, 
EntitySpec.class);
+     }
+ 
+ }

Reply via email to