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 21:59:59 UTC
[1/4] incubator-brooklyn git commit: Adds support for interfaces tag
on catalog items
Repository: incubator-brooklyn
Updated Branches:
refs/heads/master 9a9e780e8 -> b264fc98a
Adds support for interfaces tag on catalog items
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/d6115886
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/d6115886
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/d6115886
Branch: refs/heads/master
Commit: d61158860bc5d620024cdbf089a10195df665657
Parents: 3e40b2b
Author: Thomas Bouron <th...@cloudsoftcorp.com>
Authored: Wed Nov 18 11:32:58 2015 +0000
Committer: Thomas Bouron <th...@cloudsoftcorp.com>
Committed: Fri Nov 20 16:44:42 2015 +0000
----------------------------------------------------------------------
.../catalog/internal/BasicBrooklynCatalog.java | 3 +-
.../catalog/internal/CatalogClasspathDo.java | 15 ++-
.../catalog/internal/CatalogItemBuilder.java | 5 +
.../core/catalog/internal/CatalogItemDo.java | 2 -
.../apache/brooklyn/core/mgmt/BrooklynTags.java | 35 +++++
.../internal/CatalogItemBuilderTest.java | 132 +++++++++++++++++++
.../rest/domain/CatalogEntitySummary.java | 5 +-
.../rest/domain/CatalogItemSummary.java | 14 +-
.../rest/domain/CatalogLocationSummary.java | 3 +-
.../rest/domain/CatalogPolicySummary.java | 3 +-
usage/rest-server/pom.xml | 7 +
.../rest/transform/CatalogTransformer.java | 32 ++++-
.../rest/resources/CatalogResourceTest.java | 17 ++-
13 files changed, 251 insertions(+), 22 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d6115886/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 e3fc287..96cf452 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
@@ -558,7 +558,7 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
throw new IllegalStateException("Could not resolve plan once id and itemType are known (recursive reference?): "+sourceYaml);
}
String sourcePlanYaml = planInterpreter.getPlanYaml();
-
+
CatalogItemDtoAbstract<?, ?> dto = createItemBuilder(itemType, symbolicName, version)
.libraries(libraryBundles)
.displayName(displayName)
@@ -859,6 +859,7 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
log.debug("Adding manual catalog item to "+mgmt+": "+yaml);
checkNotNull(yaml, "yaml");
List<CatalogItemDtoAbstract<?, ?>> result = collectCatalogItems(yaml);
+
// do this at the end for atomic updates; if there are intra-yaml references, we handle them specially
for (CatalogItemDtoAbstract<?, ?> item: result) {
addItemDto(item, forceUpdate);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d6115886/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 f9dee80..ea07e56 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
@@ -36,6 +36,7 @@ import org.apache.brooklyn.api.entity.ImplementedBy;
import org.apache.brooklyn.api.location.Location;
import org.apache.brooklyn.api.policy.Policy;
import org.apache.brooklyn.core.entity.factory.ApplicationBuilder;
+import org.apache.brooklyn.core.mgmt.BrooklynTags;
import org.apache.brooklyn.core.mgmt.internal.ManagementContextInternal;
import org.apache.brooklyn.util.core.ResourceUtils;
import org.apache.brooklyn.util.core.javalang.ReflectionScanner;
@@ -46,6 +47,7 @@ import org.apache.brooklyn.util.os.Os;
import org.apache.brooklyn.util.stream.Streams;
import org.apache.brooklyn.util.text.Strings;
import org.apache.brooklyn.util.time.Time;
+import org.apache.commons.lang3.ClassUtils;
import org.reflections.util.ClasspathHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -299,14 +301,17 @@ public class CatalogClasspathDo {
* @deprecated since 0.7.0 the classpath DO is replaced by libraries */
@Deprecated
public CatalogItem<?,?> addCatalogEntry(CatalogItemDtoAbstract<?,?> item, Class<?> c) {
- Catalog annotations = c.getAnnotation(Catalog.class);
+ Catalog catalogAnnotation = c.getAnnotation(Catalog.class);
item.setSymbolicName(c.getName());
item.setJavaType(c.getName());
item.setDisplayName(firstNonEmpty(c.getSimpleName(), c.getName()));
- if (annotations!=null) {
- item.setDisplayName(firstNonEmpty(annotations.name(), item.getDisplayName()));
- item.setDescription(firstNonEmpty(annotations.description()));
- item.setIconUrl(firstNonEmpty(annotations.iconUrl()));
+ if (catalogAnnotation!=null) {
+ item.setDisplayName(firstNonEmpty(catalogAnnotation.name(), item.getDisplayName()));
+ item.setDescription(firstNonEmpty(catalogAnnotation.description()));
+ item.setIconUrl(firstNonEmpty(catalogAnnotation.iconUrl()));
+ }
+ if (item instanceof CatalogEntityItemDto || item instanceof CatalogTemplateItemDto) {
+ item.tags().addTag(BrooklynTags.newInterfacesTag(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/d6115886/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemBuilder.java
----------------------------------------------------------------------
diff --git 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
index 8e23329..299abdb 100644
--- 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
@@ -126,6 +126,11 @@ public class CatalogItemBuilder<CIConcreteType extends CatalogItemDtoAbstract<?,
return this;
}
+ public CatalogItemBuilder<CIConcreteType> tag(Object tag) {
+ dto.tags().addTag(tag);
+ return this;
+ }
+
public CIConcreteType build() {
Preconditions.checkNotNull(dto.getSymbolicName());
Preconditions.checkNotNull(dto.getVersion());
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d6115886/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemDo.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemDo.java b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemDo.java
index bc2926c..1766ad7 100644
--- a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemDo.java
+++ b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemDo.java
@@ -19,7 +19,6 @@
package org.apache.brooklyn.core.catalog.internal;
import java.util.Collection;
-import java.util.List;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@@ -28,7 +27,6 @@ import org.apache.brooklyn.api.catalog.CatalogItem;
import org.apache.brooklyn.api.mgmt.ManagementContext;
import org.apache.brooklyn.api.mgmt.rebind.RebindSupport;
import org.apache.brooklyn.api.mgmt.rebind.mementos.CatalogItemMemento;
-import org.apache.brooklyn.api.objs.SpecParameter;
import org.apache.brooklyn.config.ConfigKey;
import org.apache.brooklyn.core.objs.BrooklynObjectInternal;
import org.apache.brooklyn.core.relations.EmptyRelationSupport;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d6115886/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 7c34b28..f47171b 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
@@ -19,10 +19,12 @@
package org.apache.brooklyn.core.mgmt;
import java.io.Serializable;
+import java.util.List;
import org.codehaus.jackson.annotate.JsonProperty;
import com.google.common.annotations.Beta;
+import com.google.common.base.Objects;
/** @since 0.7.0 some strongly typed tags for reference; note these may migrate elsewhere! */
@Beta
@@ -51,9 +53,42 @@ public class BrooklynTags {
return contents;
}
}
+
+ public static class InterfacesTag {
+ @JsonProperty
+ final List<Class<?>> interfaces;
+
+ public InterfacesTag(List<Class<?>> interfaces) {
+ this.interfaces = interfaces;
+ }
+
+ public List<Class<?>> getInterfaces() {
+ return interfaces;
+ }
+
+ @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);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(interfaces);
+ }
+ }
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 NamedStringTag findFirst(String kind, Iterable<Object> tags) {
for (Object object: tags) {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d6115886/core/src/test/java/org/apache/brooklyn/core/catalog/internal/CatalogItemBuilderTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/catalog/internal/CatalogItemBuilderTest.java b/core/src/test/java/org/apache/brooklyn/core/catalog/internal/CatalogItemBuilderTest.java
new file mode 100644
index 0000000..fe3546e
--- /dev/null
+++ b/core/src/test/java/org/apache/brooklyn/core/catalog/internal/CatalogItemBuilderTest.java
@@ -0,0 +1,132 @@
+/*
+ * 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 static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
+import java.util.List;
+
+import org.apache.brooklyn.api.catalog.CatalogItem;
+import org.apache.brooklyn.api.objs.SpecParameter;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+
+public class CatalogItemBuilderTest {
+
+ private String symbolicName = "test";
+ private String version = "1.0.0";
+ private String javaType = "1.0.0";
+ private String name = "My name";
+ private String displayName = "My display name";
+ private String description = "My long description";
+ private String iconUrl = "http://my.icon.url";
+ private boolean deprecated = true;
+ private boolean disabled = true;
+ private String plan = "name: my.yaml.plan";
+ private List<CatalogItem.CatalogBundle> libraries = ImmutableList.<CatalogItem.CatalogBundle>of(new CatalogBundleDto(name, version, null));
+ private Object tag = new Object();
+
+ @Test(expectedExceptions = NullPointerException.class)
+ public void testCannotBuildWithoutName() {
+ new CatalogItemBuilder<CatalogEntityItemDto>(new CatalogEntityItemDto())
+ .symbolicName(null)
+ .build();
+ }
+
+ @Test(expectedExceptions = NullPointerException.class)
+ public void testCannotBuildWithoutVersion() {
+ new CatalogItemBuilder<CatalogEntityItemDto>(new CatalogEntityItemDto())
+ .version(null)
+ .build();
+ }
+
+ @Test
+ public void testNewEntityReturnCatalogEntityItemDto() {
+ final CatalogItem catalogItem = CatalogItemBuilder.newEntity(symbolicName, version).build();
+
+ assertTrue(catalogItem != null);
+ }
+
+ @Test
+ public void testNewLocationReturnCatalogLocationItemDto() {
+ final CatalogItem catalogItem = CatalogItemBuilder.newLocation(symbolicName, version).build();
+
+ assertTrue(catalogItem != null);
+ }
+
+ @Test
+ public void testNewPolicyReturnCatalogPolicyItemDto() {
+ final CatalogItem catalogItem = CatalogItemBuilder.newPolicy(symbolicName, version).build();
+
+ assertTrue(catalogItem != null);
+ }
+
+ @Test
+ public void testNewTemplateReturnCatalogTemplateItemDto() {
+ final CatalogItem<?, ?> catalogItem = CatalogItemBuilder.newTemplate(symbolicName, version).build();
+
+ assertTrue(catalogItem != null);
+ }
+
+ @Test
+ public void testEmptyLibrariesIfNotSpecified() {
+ final CatalogItem catalogItem = CatalogItemBuilder.newEntity(symbolicName, version).build();
+
+ assertEquals(catalogItem.getLibraries().size(), 0);
+ }
+
+ @Test
+ public void testNameReplacedByDisplayName() {
+ final CatalogEntityItemDto catalogItem = CatalogItemBuilder.newEntity(symbolicName, version)
+ .name(name)
+ .displayName(displayName)
+ .build();
+
+ assertEquals(catalogItem.getName(), displayName);
+ }
+
+ @Test
+ public void testBuiltEntity() {
+ final CatalogEntityItemDto catalogItem = CatalogItemBuilder.newEntity(symbolicName, version)
+ .javaType(javaType)
+ .displayName(displayName)
+ .description(description)
+ .iconUrl(iconUrl)
+ .deprecated(deprecated)
+ .disabled(disabled)
+ .plan(plan)
+ .libraries(libraries)
+ .tag(tag)
+ .build();
+
+ assertEquals(catalogItem.getSymbolicName(), symbolicName);
+ assertEquals(catalogItem.getVersion(), version);
+ assertEquals(catalogItem.getJavaType(), javaType);
+ assertEquals(catalogItem.getDisplayName(), displayName);
+ assertEquals(catalogItem.getIconUrl(), iconUrl);
+ assertEquals(catalogItem.isDeprecated(), deprecated);
+ assertEquals(catalogItem.isDisabled(), disabled);
+ assertEquals(catalogItem.getPlanYaml(), plan);
+ assertEquals(catalogItem.getLibraries(), libraries);
+ assertEquals(catalogItem.tags().getTags().size(), 1);
+ assertTrue(catalogItem.tags().getTags().contains(tag));
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d6115886/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 307af78..4d39ed0 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
@@ -29,7 +29,7 @@ import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;
public class CatalogEntitySummary extends CatalogItemSummary {
private static final long serialVersionUID = 1063908984191424539L;
-
+
@JsonSerialize(include=Inclusion.NON_EMPTY)
private final Set<EntityConfigSummary> config;
@@ -46,13 +46,14 @@ public class CatalogEntitySummary extends CatalogItemSummary {
@JsonProperty("planYaml") String planYaml,
@JsonProperty("description") String description,
@JsonProperty("iconUrl") String iconUrl,
+ @JsonProperty("tags") Set<Object> tags,
@JsonProperty("config") Set<EntityConfigSummary> config,
@JsonProperty("sensors") Set<SensorSummary> sensors,
@JsonProperty("effectors") Set<EffectorSummary> effectors,
@JsonProperty("deprecated") boolean deprecated,
@JsonProperty("links") Map<String, URI> links
) {
- super(symbolicName, version, name, javaType, planYaml, description, iconUrl, deprecated, links);
+ super(symbolicName, version, name, javaType, planYaml, description, iconUrl, tags, deprecated, links);
this.config = config;
this.sensors = sensors;
this.effectors = effectors;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d6115886/usage/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogItemSummary.java
----------------------------------------------------------------------
diff --git a/usage/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogItemSummary.java b/usage/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogItemSummary.java
index 1e5bc2e..e3daf87 100644
--- a/usage/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogItemSummary.java
+++ b/usage/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogItemSummary.java
@@ -20,7 +20,10 @@ package org.apache.brooklyn.rest.domain;
import java.io.Serializable;
import java.net.URI;
+import java.util.Collection;
+import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
@@ -29,6 +32,7 @@ import org.codehaus.jackson.map.annotate.JsonSerialize;
import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;
import com.google.common.base.Objects;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
/** variant of Catalog*ItemDto objects for JS/JSON serialization;
@@ -55,6 +59,8 @@ public class CatalogItemSummary implements HasId, HasName, Serializable {
@JsonSerialize(include=Inclusion.NON_EMPTY)
private final String iconUrl;
private final String planYaml;
+ @JsonSerialize(include=Inclusion.NON_EMPTY)
+ private final List<Object> tags;
private final boolean deprecated;
private final Map<String, URI> links;
@@ -67,6 +73,7 @@ public class CatalogItemSummary implements HasId, HasName, Serializable {
@JsonProperty("planYaml") String planYaml,
@JsonProperty("description") String description,
@JsonProperty("iconUrl") String iconUrl,
+ @JsonProperty("tags") Set<Object> tags,
@JsonProperty("deprecated") boolean deprecated,
@JsonProperty("links") Map<String, URI> links
) {
@@ -79,6 +86,7 @@ public class CatalogItemSummary implements HasId, HasName, Serializable {
this.planYaml = planYaml;
this.description = description;
this.iconUrl = iconUrl;
+ this.tags = (tags == null) ? ImmutableList.of() : ImmutableList.copyOf(tags);
this.links = (links == null) ? ImmutableMap.<String, URI>of() : ImmutableMap.copyOf(links);
this.deprecated = deprecated;
}
@@ -121,6 +129,10 @@ public class CatalogItemSummary implements HasId, HasName, Serializable {
return iconUrl;
}
+ public Collection<Object> getTags() {
+ return tags;
+ }
+
public Map<String, URI> getLinks() {
return links;
}
@@ -140,7 +152,7 @@ public class CatalogItemSummary implements HasId, HasName, Serializable {
@Override
public int hashCode() {
- return Objects.hashCode(symbolicName, version, name, javaType, deprecated);
+ return Objects.hashCode(symbolicName, version, name, javaType, tags, deprecated);
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d6115886/usage/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogLocationSummary.java
----------------------------------------------------------------------
diff --git a/usage/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogLocationSummary.java b/usage/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogLocationSummary.java
index dd79fc1..cd94d8e 100644
--- a/usage/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogLocationSummary.java
+++ b/usage/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogLocationSummary.java
@@ -41,10 +41,11 @@ public class CatalogLocationSummary extends CatalogItemSummary {
@JsonProperty("description") String description,
@JsonProperty("iconUrl") String iconUrl,
@JsonProperty("config") Set<LocationConfigSummary> config,
+ @JsonProperty("tags") Set<Object> tags,
@JsonProperty("deprecated") boolean deprecated,
@JsonProperty("links") Map<String, URI> links
) {
- super(symbolicName, version, name, javaType, planYaml, description, iconUrl, deprecated, links);
+ super(symbolicName, version, name, javaType, planYaml, description, iconUrl, tags, deprecated, links);
// TODO expose config from policies
this.config = (config == null) ? ImmutableSet.<LocationConfigSummary>of() : config;
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d6115886/usage/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogPolicySummary.java
----------------------------------------------------------------------
diff --git a/usage/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogPolicySummary.java b/usage/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogPolicySummary.java
index 7906558..2b34f55 100644
--- a/usage/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogPolicySummary.java
+++ b/usage/rest-api/src/main/java/org/apache/brooklyn/rest/domain/CatalogPolicySummary.java
@@ -44,10 +44,11 @@ public class CatalogPolicySummary extends CatalogItemSummary {
@JsonProperty("description") String description,
@JsonProperty("iconUrl") String iconUrl,
@JsonProperty("config") Set<PolicyConfigSummary> config,
+ @JsonProperty("tags") Set<Object> tags,
@JsonProperty("deprecated") boolean deprecated,
@JsonProperty("links") Map<String, URI> links
) {
- super(symbolicName, version, name, javaType, planYaml, description, iconUrl, deprecated, links);
+ super(symbolicName, version, name, javaType, planYaml, description, iconUrl, tags, deprecated, links);
// TODO expose config from policies
this.config = (config == null) ? ImmutableSet.<PolicyConfigSummary>of() : config;
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d6115886/usage/rest-server/pom.xml
----------------------------------------------------------------------
diff --git a/usage/rest-server/pom.xml b/usage/rest-server/pom.xml
index 28cfc7e..d021f13 100644
--- a/usage/rest-server/pom.xml
+++ b/usage/rest-server/pom.xml
@@ -231,6 +231,13 @@
<artifactId>jersey-test-framework-inmemory</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.brooklyn</groupId>
+ <artifactId>brooklyn-rt-osgi</artifactId>
+ <version>${project.version}</version>
+ <classifier>tests</classifier>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d6115886/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 a003c70..332132b 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
@@ -35,6 +35,7 @@ import org.apache.brooklyn.api.policy.Policy;
import org.apache.brooklyn.api.policy.PolicySpec;
import org.apache.brooklyn.api.sensor.Sensor;
import org.apache.brooklyn.core.entity.EntityDynamicType;
+import org.apache.brooklyn.core.mgmt.BrooklynTags;
import org.apache.brooklyn.core.objs.BrooklynTypes;
import org.apache.brooklyn.rest.domain.CatalogEntitySummary;
import org.apache.brooklyn.rest.domain.CatalogItemSummary;
@@ -48,7 +49,9 @@ import org.apache.brooklyn.rest.domain.SensorSummary;
import org.apache.brooklyn.rest.domain.SummaryComparators;
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.slf4j.LoggerFactory;
import com.google.common.collect.ImmutableSet;
@@ -63,9 +66,10 @@ public class CatalogTransformer {
Set<SensorSummary> sensors = Sets.newTreeSet(SummaryComparators.nameComparator());
Set<EffectorSummary> effectors = Sets.newTreeSet(SummaryComparators.nameComparator());
+ EntitySpec<?> spec = null;
+
try {
- @SuppressWarnings({ "unchecked", "rawtypes" })
- EntitySpec<?> spec = (EntitySpec<?>) b.getCatalog().createSpec((CatalogItem) item);
+ spec = (EntitySpec<?>) b.getCatalog().createSpec((CatalogItem) item);
EntityDynamicType typeMap = BrooklynTypes.getDefinedEntityType(spec.getType());
EntityType type = typeMap.getSnapshot();
@@ -75,7 +79,7 @@ public class CatalogTransformer {
sensors.add(SensorTransformer.sensorSummaryForCatalog(x));
for (Effector<?> x: type.getEffectors())
effectors.add(EffectorTransformer.effectorSummaryForCatalog(x));
-
+
} catch (Exception e) {
Exceptions.propagateIfFatal(e);
@@ -91,7 +95,7 @@ public class CatalogTransformer {
return new CatalogEntitySummary(item.getSymbolicName(), item.getVersion(), item.getDisplayName(),
item.getJavaType(), item.getPlanYaml(),
item.getDescription(), tidyIconLink(b, item, item.getIconUrl()),
- config, sensors, effectors,
+ makeTags(spec, item), config, sensors, effectors,
item.isDeprecated(), makeLinks(item));
}
@@ -115,7 +119,7 @@ public class CatalogTransformer {
}
return new CatalogItemSummary(item.getSymbolicName(), item.getVersion(), item.getDisplayName(),
item.getJavaType(), item.getPlanYaml(),
- item.getDescription(), tidyIconLink(b, item, item.getIconUrl()), item.isDeprecated(), makeLinks(item));
+ item.getDescription(), tidyIconLink(b, item, item.getIconUrl()), item.tags().getTags(), item.isDeprecated(), makeLinks(item));
}
public static CatalogPolicySummary catalogPolicySummary(BrooklynRestResourceUtils b, CatalogItem<? extends Policy,PolicySpec<?>> item) {
@@ -123,7 +127,7 @@ public class CatalogTransformer {
return new CatalogPolicySummary(item.getSymbolicName(), item.getVersion(), item.getDisplayName(),
item.getJavaType(), item.getPlanYaml(),
item.getDescription(), tidyIconLink(b, item, item.getIconUrl()), config,
- item.isDeprecated(), makeLinks(item));
+ item.tags().getTags(), item.isDeprecated(), makeLinks(item));
}
public static CatalogLocationSummary catalogLocationSummary(BrooklynRestResourceUtils b, CatalogItem<? extends Location,LocationSpec<?>> item) {
@@ -131,7 +135,7 @@ public class CatalogTransformer {
return new CatalogLocationSummary(item.getSymbolicName(), item.getVersion(), item.getDisplayName(),
item.getJavaType(), item.getPlanYaml(),
item.getDescription(), tidyIconLink(b, item, item.getIconUrl()), config,
- item.isDeprecated(), makeLinks(item));
+ item.tags().getTags(), item.isDeprecated(), makeLinks(item));
}
protected static Map<String, URI> makeLinks(CatalogItem<?,?> item) {
@@ -159,5 +163,19 @@ public class CatalogTransformer {
return "/v1/catalog/icon/"+item.getSymbolicName() + "/" + item.getVersion();
return iconUrl;
}
+
+ private static Set<Object> makeTags(EntitySpec<?> spec, CatalogItem<?, ?> item) {
+ Class<?> type = null;
+ if (spec.getImplementation() != null) {
+ type = spec.getImplementation();
+ } else {
+ type = spec.getType();
+ }
+
+ return MutableSet.builder()
+ .addAll(item.tags().getTags())
+ .add(new BrooklynTags.InterfacesTag(ClassUtils.getAllInterfaces(type)))
+ .build();
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d6115886/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 3883ce8..3e0eec2 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
@@ -21,8 +21,7 @@ package org.apache.brooklyn.rest.resources;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
-import java.awt.Image;
-import java.awt.Toolkit;
+import java.awt.*;
import java.io.IOException;
import java.net.URI;
import java.util.Collection;
@@ -37,6 +36,7 @@ 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.core.test.entity.TestEntity;
import org.apache.brooklyn.policy.autoscaling.AutoScalerPolicy;
import org.apache.brooklyn.rest.domain.CatalogEntitySummary;
import org.apache.brooklyn.rest.domain.CatalogItemSummary;
@@ -44,6 +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.http.HttpHeaders;
import org.apache.http.entity.ContentType;
import org.eclipse.jetty.http.HttpStatus;
@@ -125,6 +126,18 @@ public class CatalogResourceTest extends BrooklynRestResourceTest {
assertEquals(entityItem.getIconUrl(), "/v1/catalog/icon/" + symbolicName + "/" + entityItem.getVersion());
assertEquals(item.getIconUrl(), "classpath:/org/apache/brooklyn/test/osgi/entities/icon.gif");
+ // 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()));
+ }
+ }
+
byte[] iconData = client().resource("/v1/catalog/icon/" + symbolicName + "/" + TEST_VERSION).get(byte[].class);
assertEquals(iconData.length, 43);
}
[4/4] incubator-brooklyn git commit: Closes #1063
Posted by sv...@apache.org.
Closes #1063
Api tags support
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/b264fc98
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/b264fc98
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/b264fc98
Branch: refs/heads/master
Commit: b264fc98ad39ea9d5d15761148450b8b676b64e7
Parents: 9a9e780 641247f
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Tue Nov 24 22:59:46 2015 +0200
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Tue Nov 24 22:59:46 2015 +0200
----------------------------------------------------------------------
.../catalog/internal/BasicBrooklynCatalog.java | 3 +-
.../catalog/internal/CatalogClasspathDo.java | 15 ++-
.../catalog/internal/CatalogItemBuilder.java | 5 +
.../core/catalog/internal/CatalogItemDo.java | 2 -
.../apache/brooklyn/core/mgmt/BrooklynTags.java | 61 ++++++++-
.../internal/CatalogItemBuilderTest.java | 132 +++++++++++++++++++
.../rest/domain/CatalogEntitySummary.java | 6 +-
.../rest/domain/CatalogItemSummary.java | 14 +-
.../rest/domain/CatalogLocationSummary.java | 3 +-
.../rest/domain/CatalogPolicySummary.java | 3 +-
usage/rest-server/pom.xml | 6 +
.../rest/transform/CatalogTransformer.java | 35 ++++-
.../rest/resources/CatalogResourceTest.java | 15 ++-
13 files changed, 275 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
[2/4] incubator-brooklyn git commit: Merge branch 'master' into
api-tags-support
Posted by sv...@apache.org.
Merge branch 'master' into api-tags-support
# Conflicts:
# usage/rest-server/pom.xml
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/d6eada11
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/d6eada11
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/d6eada11
Branch: refs/heads/master
Commit: d6eada11975190d44c116bbcc16329aaadae7cca
Parents: d611588 7087b1a
Author: Sam Corbett <sa...@cloudsoftcorp.com>
Authored: Tue Nov 24 12:10:46 2015 +0000
Committer: Sam Corbett <sa...@cloudsoftcorp.com>
Committed: Tue Nov 24 12:10:46 2015 +0000
----------------------------------------------------------------------
DISCLAIMER | 8 -
README.md | 6 +-
.../apache/brooklyn/api/entity/EntitySpec.java | 13 +-
camp/camp-server/pom.xml | 6 -
.../server/dto/ApplicationComponentDto.java | 4 -
.../dto/ApplicationComponentTemplateDto.java | 4 -
.../brooklyn/camp/server/dto/AssemblyDto.java | 4 -
.../camp/server/dto/AssemblyTemplateDto.java | 4 -
.../camp/server/dto/PlatformComponentDto.java | 4 -
.../dto/PlatformComponentTemplateDto.java | 4 -
.../brooklyn/camp/server/dto/PlatformDto.java | 4 -
.../camp/server/rest/CampRestResources.java | 10 +-
.../rest/resource/ApidocRestResource.java | 6 +-
.../ApplicationComponentRestResource.java | 10 +-
...pplicationComponentTemplateRestResource.java | 10 +-
.../rest/resource/AssemblyRestResource.java | 10 +-
.../resource/AssemblyTemplateRestResource.java | 10 +-
.../resource/PlatformComponentRestResource.java | 10 +-
.../PlatformComponentTemplateRestResource.java | 10 +-
.../rest/resource/PlatformRestResource.java | 8 +-
.../org/apache/brooklyn/core/feed/Poller.java | 9 +-
.../core/internal/BrooklynProperties.java | 3 +-
.../brooklyn/core/location/PortRanges.java | 28 +-
.../mgmt/ha/HighAvailabilityManagerImpl.java | 2 +-
.../mgmt/internal/EntityManagementSupport.java | 10 +-
.../location/ssh/SshMachineLocation.java | 41 +-
.../brooklyn/util/core/ResourcePredicates.java | 11 +
.../brooklyn/util/core/ResourceUtils.java | 3 +-
.../brooklyn/util/core/http/HttpTool.java | 63 +-
.../util/core/http/HttpToolResponse.java | 14 +-
.../util/core/task/BasicExecutionManager.java | 50 +-
.../brooklyn/util/core/task/ScheduledTask.java | 54 +-
.../brooklyn/util/core/task/ssh/SshTasks.java | 5 +
.../brooklyn/core/entity/EntitySpecTest.java | 69 +-
.../apache/brooklyn/core/feed/PollerTest.java | 191 ++-
.../brooklyn/core/location/PortRangesTest.java | 4 +-
.../RebindManagerExceptionHandlerTest.java | 86 ++
.../ssh/SshMachineLocationSshToolTest.java | 47 +-
.../location/ssh/SshMachineLocationTest.java | 4 +-
.../core/internal/ssh/RecordingSshTool.java | 7 +
.../util/core/task/ScheduledExecutionTest.java | 48 +-
docs/README.md | 6 +-
docs/_build/config-production.yml | 4 +-
docs/_includes/footer.html | 6 +-
docs/_layouts/website-landing.html | 7 -
docs/guide/dev/index.md | 2 +-
docs/guide/misc/release-notes.md | 51 +-
docs/guide/start/_my-web-cluster.yaml | 5 +-
docs/guide/start/concept-quickstart.md | 5 +-
docs/guide/start/index.md | 3 +-
docs/guide/start/running.md | 2 +
docs/guide/yaml/index.md | 1 +
.../entities/paralleltestcase-entity.yaml | 6 +
.../example_yaml/entities/testcase-entity.yaml | 6 +
.../entities/testeffector-entity.yaml | 8 +
.../entities/testhttpcall-entity.yaml | 7 +
.../entities/testsensor-entity.yaml | 7 +
.../testcases/effector-test-snippet.yaml | 28 +
.../testcases/getting-started-test-example.yaml | 71 +
.../testcases/http-test-snippet.yaml | 20 +
.../testcases/sensor-test-snippet.yaml | 7 +
.../getting-started-blueprint-test-large.png | Bin 0 -> 156553 bytes
.../images/getting-started-blueprint-test.png | Bin 0 -> 84906 bytes
docs/guide/yaml/test/index.md | 24 +
docs/guide/yaml/test/test-entities.md | 85 ++
docs/guide/yaml/test/usage-examples.md | 58 +
.../website/community/how-to-contribute-docs.md | 4 +-
.../committers/release-process/announce.md | 8 +-
docs/website/index.md | 2 +-
docs/website/learnmore/catalog/index.html | 2 +-
.../demo/WebClusterDatabaseExampleApp.java | 18 +-
.../features/src/main/history/dependencies.xml | 6 +-
.../location/jclouds/BrooklynImageChooser.java | 2 +-
.../location/jclouds/JcloudsLocation.java | 64 +-
.../location/jclouds/JcloudsLocationTest.java | 140 +-
parent/pom.xml | 40 +-
pom.xml | 7 +-
.../base/AbstractSoftwareProcessDriver.java | 2 +-
.../brooklyn/entity/java/JavaOptsTest.java | 4 +-
.../entity/software/base/EntitySshToolTest.java | 8 +-
.../nosql/couchbase/CouchbaseNodeImpl.java | 3 +-
.../nosql/elasticsearch/ElasticSearchNode.java | 29 +-
.../nosql/mongodb/AbstractMongoDBServer.java | 14 +-
.../brooklyn/entity/nosql/redis/RedisStore.java | 10 +-
.../entity/nosql/redis/RedisStoreImpl.java | 2 +-
.../entity/webapp/jboss/JBoss7Server.java | 14 +-
.../entity/webapp/tomcat/TomcatServer.java | 19 +-
.../camp/brooklyn/DslAndRebindYamlTest.java | 3 +-
usage/dist/licensing/overrides.yaml | 52 +-
usage/jsgui/pom.xml | 9 +-
usage/jsgui/src/main/license/files/LICENSE | 54 +-
.../src/main/license/source-inclusions.yaml | 1 +
.../src/main/webapp/assets/html/swagger-ui.html | 78 +
.../main/webapp/assets/js/libs/swagger-ui.js | 1410 ------------------
.../src/main/webapp/assets/js/libs/swagger.js | 708 ---------
usage/jsgui/src/main/webapp/assets/js/router.js | 16 +-
.../src/main/webapp/assets/js/view/apidoc.js | 82 -
.../webapp/assets/js/view/entity-details.js | 2 +-
.../main/webapp/assets/swagger-ui/css/print.css | 1195 +++++++++++++++
.../main/webapp/assets/swagger-ui/css/reset.css | 144 ++
.../webapp/assets/swagger-ui/css/screen.css | 1301 ++++++++++++++++
.../main/webapp/assets/swagger-ui/css/style.css | 269 ++++
.../webapp/assets/swagger-ui/css/typography.css | 45 +
.../fonts/droid-sans-v6-latin-700.eot | Bin 0 -> 22922 bytes
.../fonts/droid-sans-v6-latin-700.svg | 411 +++++
.../fonts/droid-sans-v6-latin-700.ttf | Bin 0 -> 40513 bytes
.../fonts/droid-sans-v6-latin-700.woff | Bin 0 -> 25992 bytes
.../fonts/droid-sans-v6-latin-700.woff2 | Bin 0 -> 11480 bytes
.../fonts/droid-sans-v6-latin-regular.eot | Bin 0 -> 22008 bytes
.../fonts/droid-sans-v6-latin-regular.svg | 403 +++++
.../fonts/droid-sans-v6-latin-regular.ttf | Bin 0 -> 39069 bytes
.../fonts/droid-sans-v6-latin-regular.woff | Bin 0 -> 24868 bytes
.../fonts/droid-sans-v6-latin-regular.woff2 | Bin 0 -> 11304 bytes
.../assets/swagger-ui/images/explorer_icons.png | Bin 0 -> 5763 bytes
.../assets/swagger-ui/images/pet_store_api.png | Bin 0 -> 824 bytes
.../assets/swagger-ui/images/throbber.gif | Bin 0 -> 9257 bytes
.../assets/swagger-ui/images/wordnik_api.png | Bin 0 -> 980 bytes
.../assets/swagger-ui/lib/backbone-min.js | 34 +
.../assets/swagger-ui/lib/handlebars-2.0.0.js | 20 +
.../assets/swagger-ui/lib/jquery-1.8.0.min.js | 21 +
.../assets/swagger-ui/lib/jquery.ba-bbq.min.js | 29 +
.../assets/swagger-ui/lib/jquery.wiggle.min.js | 27 +
.../main/webapp/assets/swagger-ui/lib/marked.js | 1285 ++++++++++++++++
.../assets/swagger-ui/lib/swagger-ui.min.js | 37 +
.../assets/swagger-ui/lib/underscore-min.js | 25 +
.../assets/swagger-ui/lib/underscore-min.map | 1 +
usage/jsgui/src/main/webapp/index.html | 32 +-
.../jsgui/BrooklynJavascriptGuiLauncher.java | 2 +-
usage/launcher/pom.xml | 4 +
.../brooklyn/launcher/BrooklynWebServer.java | 2 +
usage/rest-api/pom.xml | 9 +-
.../org/apache/brooklyn/rest/api/AccessApi.java | 10 +-
.../apache/brooklyn/rest/api/ActivityApi.java | 26 +-
.../brooklyn/rest/api/ApplicationApi.java | 68 +-
.../apache/brooklyn/rest/api/CatalogApi.java | 132 +-
.../apache/brooklyn/rest/api/EffectorApi.java | 24 +-
.../org/apache/brooklyn/rest/api/EntityApi.java | 72 +-
.../brooklyn/rest/api/EntityConfigApi.java | 40 +-
.../apache/brooklyn/rest/api/LocationApi.java | 18 +-
.../org/apache/brooklyn/rest/api/PolicyApi.java | 42 +-
.../brooklyn/rest/api/PolicyConfigApi.java | 34 +-
.../org/apache/brooklyn/rest/api/ScriptApi.java | 10 +-
.../org/apache/brooklyn/rest/api/SensorApi.java | 44 +-
.../org/apache/brooklyn/rest/api/ServerApi.java | 31 +-
.../org/apache/brooklyn/rest/api/UsageApi.java | 34 +-
.../apache/brooklyn/rest/api/VersionApi.java | 9 +-
usage/rest-api/src/main/webapp/WEB-INF/web.xml | 10 +-
usage/rest-client/pom.xml | 57 +-
.../brooklyn/rest/client/BrooklynApi.java | 5 +-
usage/rest-server/pom.xml | 8 +-
.../apache/brooklyn/rest/BrooklynRestApi.java | 4 +-
.../brooklyn/rest/filter/SwaggerFilter.java | 76 +
.../brooklyn/rest/resources/ApidocResource.java | 10 +-
.../rest-server/src/main/webapp/WEB-INF/web.xml | 13 +-
.../brooklyn/rest/BrooklynRestApiLauncher.java | 4 +-
.../rest/resources/ApiDocResourceTest.java | 138 --
.../rest/resources/ApidocResourceTest.java | 177 +++
.../rest/testing/BrooklynRestApiTest.java | 31 +-
.../rest/util/NullServletConfigProvider.java | 5 +
usage/test-framework/pom.xml | 6 +
.../brooklyn/test/framework/AbstractTest.java | 28 +-
.../brooklyn/test/framework/BaseTest.java | 10 +-
.../test/framework/SimpleShellCommandTest.java | 107 ++
.../framework/SimpleShellCommandTestImpl.java | 316 ++++
.../brooklyn/test/framework/TestEffector.java | 1 +
.../test/framework/TestFrameworkAssertions.java | 160 ++
.../brooklyn/test/framework/TestHttpCall.java | 16 +
.../test/framework/TestHttpCallImpl.java | 74 +-
.../brooklyn/test/framework/TestSensorImpl.java | 75 +-
.../SimpleShellCommandIntegrationTest.java | 211 +++
.../test/framework/TestEffectorTest.java | 3 +-
.../framework/TestFrameworkAssertionsTest.java | 135 ++
.../test/framework/TestHttpCallTest.java | 121 ++
.../brooklyn/test/framework/TestSensorTest.java | 48 +-
.../example-catalog-test.bom | 2 +-
.../nginx-test-examples.yml | 21 +-
.../testhttpcall-examples.yml | 27 +-
.../tomcat-test-examples.yml | 8 +-
.../brooklyn/util/text/StringEscapes.java | 2 +-
utils/rest-swagger/pom.xml | 33 +-
.../rest/apidoc/ApiListingResource.java | 259 ++++
.../org/apache/brooklyn/rest/apidoc/Apidoc.java | 33 -
.../brooklyn/rest/apidoc/ApidocEndpoint.java | 54 -
.../apidoc/ApidocHelpMessageBodyWriter.java | 28 -
.../brooklyn/rest/apidoc/ApidocResource.java | 291 ----
.../apache/brooklyn/rest/apidoc/ApidocRoot.java | 47 -
.../rest/apidoc/RestApiResourceScanner.java | 81 +
187 files changed, 8867 insertions(+), 3884 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d6eada11/usage/rest-server/pom.xml
----------------------------------------------------------------------
diff --cc usage/rest-server/pom.xml
index d021f13,251c6fb..9028007
--- a/usage/rest-server/pom.xml
+++ b/usage/rest-server/pom.xml
@@@ -232,10 -228,8 +228,14 @@@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>com.sun.jersey.jersey-test-framework</groupId>
+ <artifactId>jersey-test-framework-grizzly2</artifactId>
++ </dependency>
++ <dependency>
+ <groupId>org.apache.brooklyn</groupId>
+ <artifactId>brooklyn-rt-osgi</artifactId>
+ <version>${project.version}</version>
+ <classifier>tests</classifier>
<scope>test</scope>
</dependency>
</dependencies>
[3/4] incubator-brooklyn git commit: Swap catalogue interfaces for
catalogue traits
Posted by sv...@apache.org.
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);