You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by al...@apache.org on 2014/07/09 23:46:57 UTC

[44/50] git commit: Don't tell BCTR explicitly what classes to use for the spec.

Don't tell BCTR explicitly what classes to use for the spec.

The behaviour of the resolver should depend entirely on the passed AbstractResource and its attributes.


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

Branch: refs/heads/master
Commit: 773d5c98fbc02fa023bc1bff9d559473e6ac9c5c
Parents: f2269ec
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Wed Jul 9 15:44:58 2014 +0300
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Jul 9 22:34:47 2014 +0100

----------------------------------------------------------------------
 .../BrooklynAssemblyTemplateInstantiator.java   | 21 ++++++++++++++++++--
 .../BrooklynComponentTemplateResolver.java      | 17 ++++++----------
 2 files changed, 25 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/773d5c98/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynAssemblyTemplateInstantiator.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynAssemblyTemplateInstantiator.java b/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynAssemblyTemplateInstantiator.java
index 175382e..7b640c5 100644
--- a/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynAssemblyTemplateInstantiator.java
+++ b/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynAssemblyTemplateInstantiator.java
@@ -19,16 +19,20 @@
 package io.brooklyn.camp.brooklyn.spi.creation;
 
 import io.brooklyn.camp.CampPlatform;
+import io.brooklyn.camp.spi.AbstractResource;
 import io.brooklyn.camp.spi.Assembly;
 import io.brooklyn.camp.spi.AssemblyTemplate;
+import io.brooklyn.camp.spi.AssemblyTemplate.Builder;
 import io.brooklyn.camp.spi.PlatformComponentTemplate;
 import io.brooklyn.camp.spi.collection.ResolvableLink;
 import io.brooklyn.camp.spi.instantiate.AssemblyTemplateInstantiator;
+import io.brooklyn.camp.spi.pdp.AssemblyTemplateConstructor;
 
 import java.io.Reader;
 import java.io.StringReader;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Set;
 
 import org.slf4j.Logger;
@@ -159,8 +163,8 @@ public class BrooklynAssemblyTemplateInstantiator implements AssemblyTemplateSpe
         // AssemblyTemplates created via PDP, _specifying_ then entities to put in
 
         BrooklynComponentTemplateResolver resolver = BrooklynComponentTemplateResolver.Factory.newInstance(
-            loader, template);
-        EntitySpec<? extends Application> app = resolver.resolveSpec(StartableApplication.class, BasicApplicationImpl.class);
+            loader, buildWrapperAppTemplate(template));
+        EntitySpec<? extends Application> app = resolver.resolveSpec();
         
         // first build the children into an empty shell app
         List<EntitySpec<?>> childSpecs = buildTemplateServicesAsSpecs(loader, template, platform);
@@ -180,6 +184,19 @@ public class BrooklynAssemblyTemplateInstantiator implements AssemblyTemplateSpe
         return app;
     }
 
+    private AssemblyTemplate buildWrapperAppTemplate(AssemblyTemplate template) {
+        Builder<? extends AssemblyTemplate> builder = AssemblyTemplate.builder();
+        builder.type("brooklyn:" + BasicApplicationImpl.class.getName());
+        builder.id(template.getId());
+        builder.name(template.getName());
+        for (Entry<String, Object> entry : template.getCustomAttributes().entrySet()) {
+            builder.customAttribute(entry.getKey(), entry.getValue());
+        }
+        builder.instantiator(template.getInstantiator());
+        AssemblyTemplate wrapTemplate = builder.build();
+        return wrapTemplate;
+    }
+
     protected boolean shouldUnwrap(AssemblyTemplate template, EntitySpec<? extends Application> app) {
         Object leaveWrapped = template.getCustomAttributes().get(NEVER_UNWRAP_APPS_PROPERTY);
         if (leaveWrapped!=null) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/773d5c98/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java b/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
index ceb248b..20cbc01 100644
--- a/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
+++ b/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
@@ -232,21 +232,16 @@ public class BrooklynComponentTemplateResolver {
     /** resolves the spec, updating the loader if a catalog item is loaded */
     @SuppressWarnings("unchecked")
     public <T extends Entity> EntitySpec<T> resolveSpec() {
-        // ensure loader is updated
-        getCatalogItem();
-        
-        return (EntitySpec<T>)resolveSpec(loadEntityClass(), null);
-    }
-
-    @SuppressWarnings({ "rawtypes", "unchecked" })
-    public <T extends Entity> EntitySpec<T> resolveSpec(Class<T> type, @Nullable Class<? extends T> optionalImpl) {
         if (alreadyBuilt.getAndSet(true))
             throw new IllegalStateException("Spec can only be used once: "+this);
 
+        // ensure loader is updated
+        getCatalogItem();
+        
+        Class<T> type = (Class<T>) loadEntityClass();
+        
         EntitySpec<T> spec;
-        if (optionalImpl != null) {
-            spec = EntitySpec.create(type).impl(optionalImpl);
-        } else if (type.isInterface()) {
+        if (type.isInterface()) {
             spec = EntitySpec.create(type);
         } else {
             // If this is a concrete class, particularly for an Application class, we want the proxy