You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by sv...@apache.org on 2015/11/24 22:00:01 UTC

[3/4] incubator-brooklyn git commit: Swap catalogue interfaces for catalogue traits

Swap catalogue interfaces for catalogue traits

"Interfaces" is too specific for a feature whose purpose is to guide
consumers about the capabilities of a catalogue item and does not lend
itself to the use or addition of other metadata.

Also: InterfacesTag maintains a List<String> rather than List<Class<?>>
and CatalogTransformer.makeTags handles null specs.


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

Branch: refs/heads/master
Commit: 641247fd94b9aca2964aef9e016aabd8951816b7
Parents: d6eada1
Author: Sam Corbett <sa...@cloudsoftcorp.com>
Authored: Tue Nov 24 14:38:24 2015 +0000
Committer: Sam Corbett <sa...@cloudsoftcorp.com>
Committed: Tue Nov 24 14:38:24 2015 +0000

----------------------------------------------------------------------
 .../catalog/internal/CatalogClasspathDo.java    |  2 +-
 .../apache/brooklyn/core/mgmt/BrooklynTags.java | 58 +++++++++++++-------
 .../rest/domain/CatalogEntitySummary.java       |  1 +
 .../rest/transform/CatalogTransformer.java      | 25 +++++----
 .../rest/resources/CatalogResourceTest.java     | 16 +++---
 5 files changed, 62 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/641247fd/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogClasspathDo.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogClasspathDo.java b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogClasspathDo.java
index ea07e56..d183c7e 100644
--- a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogClasspathDo.java
+++ b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogClasspathDo.java
@@ -311,7 +311,7 @@ public class CatalogClasspathDo {
             item.setIconUrl(firstNonEmpty(catalogAnnotation.iconUrl()));
         }
         if (item instanceof CatalogEntityItemDto || item instanceof CatalogTemplateItemDto) {
-            item.tags().addTag(BrooklynTags.newInterfacesTag(ClassUtils.getAllInterfaces(c)));
+            item.tags().addTag(BrooklynTags.newTraitsTag(ClassUtils.getAllInterfaces(c)));
         }
         if (log.isTraceEnabled())
             log.trace("adding to catalog: "+c+" (from catalog "+catalog+")");

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/641247fd/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTags.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTags.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTags.java
index f47171b..e8d7915 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTags.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTags.java
@@ -21,10 +21,13 @@ package org.apache.brooklyn.core.mgmt;
 import java.io.Serializable;
 import java.util.List;
 
+import org.codehaus.jackson.annotate.JsonIgnore;
 import org.codehaus.jackson.annotate.JsonProperty;
 
 import com.google.common.annotations.Beta;
+import com.google.common.base.Function;
 import com.google.common.base.Objects;
+import com.google.common.collect.Lists;
 
 /** @since 0.7.0 some strongly typed tags for reference; note these may migrate elsewhere! */
 @Beta
@@ -54,40 +57,57 @@ public class BrooklynTags {
         }
     }
 
-    public static class InterfacesTag {
-        @JsonProperty
-        final List<Class<?>> interfaces;
+    public static class ListTag<T> {
+        @JsonIgnore
+        final List<T> list;
 
-        public InterfacesTag(List<Class<?>> interfaces) {
-            this.interfaces = interfaces;
+        public ListTag(List<T> list) {
+            this.list = list;
         }
 
-        public List<Class<?>> getInterfaces() {
-            return interfaces;
+        public List<T> getList() {
+            return list;
         }
 
         @Override
         public boolean equals(Object o) {
             if (this == o) return true;
             if (o == null || getClass() != o.getClass()) return false;
-
-            InterfacesTag that = (InterfacesTag) o;
-
-            return interfaces == null
-                    ? that.interfaces == null
-                    : interfaces.equals(that.interfaces);
+            ListTag that = (ListTag) o;
+            return list == null ? that.list == null : list.equals(that.list);
         }
 
         @Override
         public int hashCode() {
-            return Objects.hashCode(interfaces);
+            return Objects.hashCode(list);
         }
     }
-    
-    public static NamedStringTag newYamlSpecTag(String contents) { return new NamedStringTag(YAML_SPEC_KIND, contents); }
-    public static NamedStringTag newNotesTag(String contents) { return new NamedStringTag(NOTES_KIND, contents); }
-    public static InterfacesTag newInterfacesTag(List<Class<?>> interfaces) {
-        return new InterfacesTag(interfaces);
+
+    public static class TraitsTag extends ListTag<String> {
+        public TraitsTag(List<Class<?>> interfaces) {
+            super(Lists.transform(interfaces, new Function<Class<?>, String>() {
+                @Override public String apply(Class<?> input) {
+                    return input.getName();
+                }
+            }));
+        }
+
+        @JsonProperty("traits")
+        public List<String> getTraits() {
+            return super.list;
+        }
+    }
+
+    public static NamedStringTag newYamlSpecTag(String contents) {
+        return new NamedStringTag(YAML_SPEC_KIND, contents);
+    }
+
+    public static NamedStringTag newNotesTag(String contents) {
+        return new NamedStringTag(NOTES_KIND, contents);
+    }
+
+    public static TraitsTag newTraitsTag(List<Class<?>> interfaces) {
+        return new TraitsTag(interfaces);
     }
     
     public static NamedStringTag findFirst(String kind, Iterable<Object> tags) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/641247fd/usage/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogEntitySummary.java
----------------------------------------------------------------------
diff --git a/usage/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogEntitySummary.java b/usage/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogEntitySummary.java
index 4d39ed0..48e49cb 100644
--- a/usage/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogEntitySummary.java
+++ b/usage/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogEntitySummary.java
@@ -35,6 +35,7 @@ public class CatalogEntitySummary extends CatalogItemSummary {
     
     @JsonSerialize(include=Inclusion.NON_EMPTY)
     private final Set<SensorSummary> sensors;
+
     @JsonSerialize(include=Inclusion.NON_EMPTY)
     private final Set<EffectorSummary> effectors;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/641247fd/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 332132b..0f710bc 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
@@ -51,7 +51,7 @@ import org.apache.brooklyn.rest.util.BrooklynRestResourceUtils;
 import org.apache.brooklyn.util.collections.MutableMap;
 import org.apache.brooklyn.util.collections.MutableSet;
 import org.apache.brooklyn.util.exceptions.Exceptions;
-import org.apache.commons.lang.ClassUtils;
+import org.apache.brooklyn.util.javalang.Reflections;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.collect.ImmutableSet;
@@ -165,17 +165,20 @@ public class CatalogTransformer {
     }
 
     private static Set<Object> makeTags(EntitySpec<?> spec, CatalogItem<?, ?> item) {
-        Class<?> type = null;
-        if (spec.getImplementation() != null) {
-            type = spec.getImplementation();
-        } else {
-            type = spec.getType();
+        // Combine tags on item with an InterfacesTag.
+        Set<Object> tags = MutableSet.copyOf(item.tags().getTags());
+        if (spec != null) {
+            Class<?> type;
+            if (spec.getImplementation() != null) {
+                type = spec.getImplementation();
+            } else {
+                type = spec.getType();
+            }
+            if (type != null) {
+                tags.add(new BrooklynTags.TraitsTag(Reflections.getAllInterfaces(type)));
+            }
         }
-
-        return MutableSet.builder()
-                .addAll(item.tags().getTags())
-                .add(new BrooklynTags.InterfacesTag(ClassUtils.getAllInterfaces(type)))
-                .build();
+        return tags;
     }
     
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/641247fd/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 3e0eec2..25d16e7 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
@@ -44,7 +44,7 @@ import org.apache.brooklyn.rest.domain.CatalogLocationSummary;
 import org.apache.brooklyn.rest.domain.CatalogPolicySummary;
 import org.apache.brooklyn.rest.testing.BrooklynRestResourceTest;
 import org.apache.brooklyn.test.support.TestResourceUnavailableException;
-import org.apache.commons.lang3.ClassUtils;
+import org.apache.brooklyn.util.javalang.Reflections;
 import org.apache.http.HttpHeaders;
 import org.apache.http.entity.ContentType;
 import org.eclipse.jetty.http.HttpStatus;
@@ -128,14 +128,12 @@ public class CatalogResourceTest extends BrooklynRestResourceTest {
 
         // an InterfacesTag should be created for every catalog item
         assertEquals(entityItem.getTags().size(), 1);
-        for (Object tag : entityItem.getTags()) {
-            // As tags are treated as object, an InterfacesTag is return as a Map<String, List<String>> to match what the API expose
-            List<String> actualInterfaces = ((Map<String, List<String>>) tag).get("interfaces");
-            List<Class<?>> expectedInterfaces = ClassUtils.getAllInterfaces(TestEntity.class);
-            assertEquals(actualInterfaces.size(), expectedInterfaces.size());
-            for (Class<?> expectedInterface : expectedInterfaces) {
-                assertTrue(actualInterfaces.contains(expectedInterface.getName()));
-            }
+        Object tag = entityItem.getTags().iterator().next();
+        List<String> actualInterfaces = ((Map<String, List<String>>) tag).get("traits");
+        List<Class<?>> expectedInterfaces = Reflections.getAllInterfaces(TestEntity.class);
+        assertEquals(actualInterfaces.size(), expectedInterfaces.size());
+        for (Class<?> expectedInterface : expectedInterfaces) {
+            assertTrue(actualInterfaces.contains(expectedInterface.getName()));
         }
 
         byte[] iconData = client().resource("/v1/catalog/icon/" + symbolicName + "/" + TEST_VERSION).get(byte[].class);