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 2014/07/04 11:51:14 UTC

[32/45] git commit: support more catalog type info and yaml via REST API, and make getPlanYaml available (nullable) on CatalogItem API; starting to fix CatalogResourceTest of POSTing a YAML

support more catalog type info and yaml via REST API, and make getPlanYaml available (nullable) on CatalogItem API;
starting to fix CatalogResourceTest of POSTing a YAML


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

Branch: refs/heads/master
Commit: d4d17b720f6a27086615131720e0f4080d6abbec
Parents: f99fb58
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Thu Jul 3 14:39:45 2014 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Thu Jul 3 14:39:45 2014 +0100

----------------------------------------------------------------------
 .../main/java/brooklyn/catalog/CatalogItem.java |  5 ++--
 .../catalog/internal/BasicBrooklynCatalog.java  |  2 +-
 .../catalog/internal/CatalogEntityItemDto.java  |  6 -----
 .../catalog/internal/CatalogItemDo.java         | 13 ++++-----
 .../internal/CatalogItemDtoAbstract.java        |  7 +++++
 .../rest/domain/CatalogEntitySummary.java       |  5 +++-
 .../rest/domain/CatalogItemSummary.java         | 28 ++++++++++++++++++--
 .../rest/domain/CatalogPolicySummary.java       |  2 +-
 .../rest/transform/CatalogTransformer.java      | 14 +++++++---
 .../rest/resources/CatalogResourceTest.java     | 25 ++++++++++-------
 10 files changed, 72 insertions(+), 35 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d4d17b72/api/src/main/java/brooklyn/catalog/CatalogItem.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/catalog/CatalogItem.java b/api/src/main/java/brooklyn/catalog/CatalogItem.java
index 276eba4..7cfbdd6 100644
--- a/api/src/main/java/brooklyn/catalog/CatalogItem.java
+++ b/api/src/main/java/brooklyn/catalog/CatalogItem.java
@@ -36,12 +36,13 @@ public interface CatalogItem<T,SpecT> {
     public String getIconUrl();
     public String getVersion();
 
-    // FIXME many of the static methods in CatalogItemAbstractDto which create CatalogItems set this as null
-    // I (alex) suggest removing the annotation, here, and in subclasses where the method is defined
     @Nonnull
     public CatalogItemLibraries getLibraries();
 
     public String toXmlString();
+    
+    /** return underlying YAML for this item, if known */ 
+    @Nullable public String getPlanYaml();
 
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d4d17b72/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java b/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java
index 6a4f3d2..f924869 100644
--- a/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java
+++ b/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java
@@ -110,7 +110,7 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
         Class<SpecT> specType = loadedItem.getSpecType();
         if (specType==null) return null;
             
-        String yaml = loadedItem.getYaml();
+        String yaml = loadedItem.getPlanYaml();
         SpecT spec = null;
             
         if (yaml!=null) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d4d17b72/core/src/main/java/brooklyn/catalog/internal/CatalogEntityItemDto.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/catalog/internal/CatalogEntityItemDto.java b/core/src/main/java/brooklyn/catalog/internal/CatalogEntityItemDto.java
index 60d6fbe..e130052 100644
--- a/core/src/main/java/brooklyn/catalog/internal/CatalogEntityItemDto.java
+++ b/core/src/main/java/brooklyn/catalog/internal/CatalogEntityItemDto.java
@@ -6,8 +6,6 @@ import brooklyn.entity.proxying.EntitySpec;
 
 public class CatalogEntityItemDto extends CatalogItemDtoAbstract<Entity,EntitySpec<?>> {
     
-    String planYaml;
-
     @Override
     public CatalogItemType getCatalogItemType() {
         return CatalogItemType.ENTITY;
@@ -24,8 +22,4 @@ public class CatalogEntityItemDto extends CatalogItemDtoAbstract<Entity,EntitySp
         return (Class)EntitySpec.class;
     }
 
-    public String getPlanYaml() {
-        return planYaml;
-    }
-    
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d4d17b72/core/src/main/java/brooklyn/catalog/internal/CatalogItemDo.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/catalog/internal/CatalogItemDo.java b/core/src/main/java/brooklyn/catalog/internal/CatalogItemDo.java
index 200db52..d1d8d82 100644
--- a/core/src/main/java/brooklyn/catalog/internal/CatalogItemDo.java
+++ b/core/src/main/java/brooklyn/catalog/internal/CatalogItemDo.java
@@ -75,14 +75,6 @@ public class CatalogItemDo<T,SpecT> implements CatalogItem<T,SpecT> {
         return itemDto.getLibraries();
     }
 
-    @Nullable
-    public String getYaml() {
-        if (itemDto instanceof CatalogEntityItemDto) {
-            return ((CatalogEntityItemDto)itemDto).getPlanYaml();
-        }
-        return null;
-    }
-    
     /** @deprecated since 0.7.0 this is the legacy mechanism; still needed for policies and apps, but being phased out.
      * new items should use {@link #getYaml()} */
     @Deprecated
@@ -117,5 +109,10 @@ public class CatalogItemDo<T,SpecT> implements CatalogItem<T,SpecT> {
     public Class<SpecT> getSpecType() {
         return itemDto.getSpecType();
     }
+
+    @Nullable @Override
+    public String getPlanYaml() {
+        return itemDto.getPlanYaml();
+    }
     
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d4d17b72/core/src/main/java/brooklyn/catalog/internal/CatalogItemDtoAbstract.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/catalog/internal/CatalogItemDtoAbstract.java b/core/src/main/java/brooklyn/catalog/internal/CatalogItemDtoAbstract.java
index 4957474..b9b633d 100644
--- a/core/src/main/java/brooklyn/catalog/internal/CatalogItemDtoAbstract.java
+++ b/core/src/main/java/brooklyn/catalog/internal/CatalogItemDtoAbstract.java
@@ -19,6 +19,8 @@ public abstract class CatalogItemDtoAbstract<T,SpecT> implements CatalogItem<T,S
     String version;
     CatalogLibrariesDto libraries;
     
+    String planYaml;
+    
     /** @deprecated since 0.7.0.
      * used for backwards compatibility when deserializing.
      * when catalogs are converted to new yaml format, this can be removed. */
@@ -68,6 +70,11 @@ public abstract class CatalogItemDtoAbstract<T,SpecT> implements CatalogItem<T,S
         return libraries;
     }
 
+    @Override
+    public String getPlanYaml() {
+        return planYaml;
+    }
+
     public static CatalogTemplateItemDto newTemplateFromJava(String javaType, String name) {
         return newTemplateFromJava(null, javaType, name, null);
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d4d17b72/usage/rest-api/src/main/java/brooklyn/rest/domain/CatalogEntitySummary.java
----------------------------------------------------------------------
diff --git a/usage/rest-api/src/main/java/brooklyn/rest/domain/CatalogEntitySummary.java b/usage/rest-api/src/main/java/brooklyn/rest/domain/CatalogEntitySummary.java
index ce8b73b..679064b 100644
--- a/usage/rest-api/src/main/java/brooklyn/rest/domain/CatalogEntitySummary.java
+++ b/usage/rest-api/src/main/java/brooklyn/rest/domain/CatalogEntitySummary.java
@@ -15,7 +15,10 @@ public class CatalogEntitySummary extends CatalogItemSummary {
     public CatalogEntitySummary(
             @JsonProperty("id") String id,
             @JsonProperty("name") String name,
+            @JsonProperty("registeredType") String registeredType,
+            @JsonProperty("javaType") String javaType,
             @JsonProperty("type") String type,
+            @JsonProperty("planYaml") String planYaml,
             @JsonProperty("description") String description,
             @JsonProperty("iconUrl") String iconUrl,
             @JsonProperty("config") Set<EntityConfigSummary> config, 
@@ -23,7 +26,7 @@ public class CatalogEntitySummary extends CatalogItemSummary {
             @JsonProperty("effectors") Set<EffectorSummary> effectors,
             @JsonProperty("links") Map<String, URI> links
         ) {
-        super(id, name, type, description, iconUrl, links);
+        super(id, name, registeredType, javaType, type, planYaml, description, iconUrl, links);
         this.config = config;
         this.sensors = sensors;
         this.effectors = effectors;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d4d17b72/usage/rest-api/src/main/java/brooklyn/rest/domain/CatalogItemSummary.java
----------------------------------------------------------------------
diff --git a/usage/rest-api/src/main/java/brooklyn/rest/domain/CatalogItemSummary.java b/usage/rest-api/src/main/java/brooklyn/rest/domain/CatalogItemSummary.java
index 34d87ac..fb66d7f 100644
--- a/usage/rest-api/src/main/java/brooklyn/rest/domain/CatalogItemSummary.java
+++ b/usage/rest-api/src/main/java/brooklyn/rest/domain/CatalogItemSummary.java
@@ -16,26 +16,38 @@ import com.google.common.collect.ImmutableMap;
 public class CatalogItemSummary {
 
     private final String id;
+    
+    // TODO too many types, see in CatalogItem
     private final String type;
+    private final String javaType;
+    private final String registeredType;
+    
     private final String name;
     @JsonSerialize(include=Inclusion.NON_EMPTY)
     private final String description;
     @JsonSerialize(include=Inclusion.NON_EMPTY)
     private final String iconUrl;
+    private final String planYaml;
     
     private final Map<String, URI> links;
 
     public CatalogItemSummary(
             @JsonProperty("id") String id,
             @JsonProperty("name") String name,
-            @JsonProperty("type") String type,
+            @JsonProperty("registeredType") String registeredType,
+            @JsonProperty("javaType") String javaType,
+            @JsonProperty("type") String highLevelType,
+            @JsonProperty("planYaml") String planYaml,
             @JsonProperty("description") String description,
             @JsonProperty("iconUrl") String iconUrl,
             @JsonProperty("links") Map<String, URI> links
         ) {
         this.id = id;
         this.name = name;
-        this.type = type;
+        this.javaType = javaType;
+        this.registeredType = registeredType;
+        this.type = highLevelType;
+        this.planYaml = planYaml;
         this.description = description;
         this.iconUrl = iconUrl;
         this.links = ImmutableMap.copyOf(links);
@@ -49,6 +61,18 @@ public class CatalogItemSummary {
         return type;
     }
 
+    public String getJavaType() {
+        return javaType;
+    }
+
+    public String getRegisteredType() {
+        return registeredType;
+    }
+
+    public String getPlanYaml() {
+        return planYaml;
+    }
+    
     public String getName() {
         return name;
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d4d17b72/usage/rest-api/src/main/java/brooklyn/rest/domain/CatalogPolicySummary.java
----------------------------------------------------------------------
diff --git a/usage/rest-api/src/main/java/brooklyn/rest/domain/CatalogPolicySummary.java b/usage/rest-api/src/main/java/brooklyn/rest/domain/CatalogPolicySummary.java
index 8f74dce..43ee8f5 100644
--- a/usage/rest-api/src/main/java/brooklyn/rest/domain/CatalogPolicySummary.java
+++ b/usage/rest-api/src/main/java/brooklyn/rest/domain/CatalogPolicySummary.java
@@ -19,7 +19,7 @@ public class CatalogPolicySummary extends CatalogItemSummary {
             @JsonProperty("config") Set<PolicyConfigSummary> config,
             @JsonProperty("links") Map<String, URI> links
         ) {
-        super(id, name, type, description, iconUrl, links);
+        super(id, name, type, type, type, null, description, iconUrl, links);
         // TODO expose config from policies
         this.config = config;
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d4d17b72/usage/rest-server/src/main/java/brooklyn/rest/transform/CatalogTransformer.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/brooklyn/rest/transform/CatalogTransformer.java b/usage/rest-server/src/main/java/brooklyn/rest/transform/CatalogTransformer.java
index 8b05bd9..4d24974 100644
--- a/usage/rest-server/src/main/java/brooklyn/rest/transform/CatalogTransformer.java
+++ b/usage/rest-server/src/main/java/brooklyn/rest/transform/CatalogTransformer.java
@@ -36,8 +36,8 @@ public class CatalogTransformer {
     private static final org.slf4j.Logger log = LoggerFactory.getLogger(CatalogTransformer.class);
     
     public static CatalogEntitySummary catalogEntitySummary(BrooklynRestResourceUtils b, CatalogItem<? extends Entity,EntitySpec<?>> item) {
-        Class<? extends Entity> clazz = b.getCatalog().loadClass(item);
-        EntityDynamicType typeMap = EntityTypes.getDefinedEntityType(clazz);
+        EntitySpec<?> spec = b.getCatalog().createSpec(item);
+        EntityDynamicType typeMap = EntityTypes.getDefinedEntityType(spec.getType());
         EntityType type = typeMap.getSnapshot();
 
         Set<EntityConfigSummary> config = Sets.newLinkedHashSet();
@@ -48,14 +48,20 @@ public class CatalogTransformer {
         for (Sensor<?> x: type.getSensors()) sensors.add(SensorTransformer.sensorSummaryForCatalog(x));
         for (Effector<?> x: type.getEffectors()) effectors.add(EffectorTransformer.effectorSummaryForCatalog(x));
 
-        return new CatalogEntitySummary(item.getId(), item.getName(), item.getJavaType(),
+        return new CatalogEntitySummary(item.getId(), item.getName(), 
+            item.getRegisteredTypeName(), item.getJavaType(), 
+            item.getRegisteredTypeName()!=null ? item.getRegisteredTypeName() : item.getJavaType(),
+            item.getPlanYaml(),
                 item.getDescription(), tidyIconLink(b, item, item.getIconUrl()),
                 config, sensors, effectors,
                 makeLinks(item));
     }
 
     public static CatalogItemSummary catalogItemSummary(BrooklynRestResourceUtils b, CatalogItem<?,?> item) {
-        return new CatalogItemSummary(item.getId(), item.getName(), item.getJavaType(),
+        return new CatalogItemSummary(item.getId(), item.getName(), 
+                item.getRegisteredTypeName(), item.getJavaType(), 
+                item.getRegisteredTypeName()!=null ? item.getRegisteredTypeName() : item.getJavaType(),
+                item.getPlanYaml(),
                 item.getDescription(), tidyIconLink(b, item, item.getIconUrl()), makeLinks(item));
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d4d17b72/usage/rest-server/src/test/java/brooklyn/rest/resources/CatalogResourceTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/resources/CatalogResourceTest.java b/usage/rest-server/src/test/java/brooklyn/rest/resources/CatalogResourceTest.java
index 2a25dfd..810e6e3 100644
--- a/usage/rest-server/src/test/java/brooklyn/rest/resources/CatalogResourceTest.java
+++ b/usage/rest-server/src/test/java/brooklyn/rest/resources/CatalogResourceTest.java
@@ -44,17 +44,20 @@ public class CatalogResourceTest extends BrooklynRestResourceTest {
     addResource(new CatalogResource());
   }
 
-  @Test(enabled=false, groups="WIP") // FIXME broken until BasicBrooklynCatalog can parse the yaml
+  @Test(enabled=false, groups="WIP")
   public void testRegisterCustomEntity() {
+    String registeredTypeName = "my.catalog.app.id";
     String yaml =
+        "name: "+registeredTypeName+"\n"+
+        // TODO name above should be unnecessary when brooklyn.catalog below is working
         "brooklyn.catalog:\n"+
-        "- id: my.catalog.app.id\n"+
+        "- id: " + registeredTypeName + "\n"+
         "- name: My Catalog App\n"+
         "- description: My description\n"+
         "- icon_url: classpath://path/to/myicon.jpg\n"+
         "- version: 0.1.2\n"+
-        "- bundles:\n"+
-        "- url: http://myurl/my.jar\n"+
+        "- brooklyn.libraries:\n"+
+        "  - url: http://myurl/my.jar\n"+
         "\n"+
         "services:\n"+
         "- type: brooklyn.test.entity.TestEntity\n";
@@ -64,13 +67,15 @@ public class CatalogResourceTest extends BrooklynRestResourceTest {
 
     assertEquals(response.getStatus(), Response.Status.CREATED.getStatusCode());
 
-    CatalogEntitySummary entityItem = client().resource("/v1/catalog/entities/my.catalog.app.id")
+    CatalogEntitySummary entityItem = client().resource("/v1/catalog/entities/"+registeredTypeName)
             .get(CatalogEntitySummary.class);
-    assertEquals(entityItem.getId(), "my.catalog.app.id");
-    assertEquals(entityItem.getName(), "My Catalog App");
-    assertEquals(entityItem.getDescription(), "My description");
-    assertEquals(entityItem.getIconUrl(), "classpath://path/to/myicon.jpg");
-    assertEquals(entityItem.getType(), "brooklyn.test.entity.TestEntity");
+    // TODO more checks, when  brooklyn.catalog  working
+//    assertEquals(entityItem.getId(), registeredTypeName);
+//    assertEquals(entityItem.getName(), "My Catalog App");
+//    assertEquals(entityItem.getDescription(), "My description");
+//    assertEquals(entityItem.getIconUrl(), "classpath://path/to/myicon.jpg");
+    assertEquals(entityItem.getRegisteredType(), registeredTypeName);
+    assertEquals(entityItem.getJavaType(), "brooklyn.test.entity.TestEntity");
   }
 
   @Test