This is an automated email from the ASF dual-hosted git repository.

heneveld pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git

commit 0a33ad619955a1402f39b22dcea99b22e6940eb9
Author: iuliana <[email protected]>
AuthorDate: Tue May 25 09:27:24 2021 +0100

     Added API impl
---
 .../java/org/apache/brooklyn/core/mgmt/BrooklynTags.java     |  8 ++++++++
 .../main/java/org/apache/brooklyn/rest/api/EntityApi.java    | 12 ++++++++++++
 .../org/apache/brooklyn/rest/resources/EntityResource.java   |  8 ++++++++
 .../apache/brooklyn/rest/resources/EntityResourceTest.java   |  4 ++--
 4 files changed, 30 insertions(+), 2 deletions(-)

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 ff165e1..11264ed 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
@@ -245,6 +245,14 @@ public class BrooklynTags {
         return null;
     }
 
+    public  static SpecTag findHierarchySpecTag(String kind, Iterable<Object> 
tags) {
+        for (Object object: tags) {
+            if (object instanceof SpecTag && kind.equals((((SpecTag) 
object).kind)))
+                return (SpecTag) object;
+        }
+        return null;
+    }
+
     public static List<NamedStringTag> findAll(String kind, Iterable<Object> 
tags) {
         List<NamedStringTag> result = MutableList.of();
         for (Object object: tags) {
diff --git 
a/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/EntityApi.java 
b/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/EntityApi.java
index 5bbd5b3..f51c854 100644
--- a/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/EntityApi.java
+++ b/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/EntityApi.java
@@ -252,4 +252,16 @@ public interface EntityApi {
             @PathParam("application") String application,
             @ApiParam(value = "Entity ID or name", required = true)
             @PathParam("entity") String entity);
+
+    @GET
+    @Path("/{entity}/speclist")
+    @ApiOperation(value = "Get the list of YAML spec used to create the 
entity, if available")
+    @ApiResponses(value = {
+            @ApiResponse(code = 404, message = "Application or entity missing")
+    })
+    public List<Object> getSpecList(
+            @ApiParam(value = "Application ID or name", required = true)
+            @PathParam("application") String application,
+            @ApiParam(value = "Entity ID or name", required = true)
+            @PathParam("entity") String entity);
 }
diff --git 
a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/EntityResource.java
 
b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/EntityResource.java
index fdd5ea7..7bd5797 100644
--- 
a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/EntityResource.java
+++ 
b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/EntityResource.java
@@ -55,6 +55,7 @@ import org.apache.brooklyn.rest.transform.TaskTransformer;
 import org.apache.brooklyn.rest.util.EntityRelationUtils;
 import org.apache.brooklyn.rest.util.WebResourceUtils;
 import org.apache.brooklyn.util.collections.MutableList;
+import org.apache.brooklyn.util.collections.MutableMap;
 import org.apache.brooklyn.util.core.ResourceUtils;
 import org.apache.brooklyn.util.time.Duration;
 import org.slf4j.Logger;
@@ -311,4 +312,11 @@ public class EntityResource extends 
AbstractBrooklynRestResource implements Enti
             return null;
         return (String) 
WebResourceUtils.getValueForDisplay(spec.getContents(), false, true);
     }
+
+    @Override
+    public List<Object>  getSpecList(String applicationId, String entityId) {
+        Entity entity = brooklyn().getEntity(applicationId, entityId);
+        BrooklynTags.SpecTag specTag =  
BrooklynTags.findHierarchySpecTag(BrooklynTags.YAML_SPEC_HIERARCHY, 
entity.tags().getTags());
+        return (List<Object>) resolving( 
specTag.getSpecList()).preferJson(true).resolve();
+    }
 }
diff --git 
a/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/resources/EntityResourceTest.java
 
b/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/resources/EntityResourceTest.java
index 62ee189..6485c43 100644
--- 
a/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/resources/EntityResourceTest.java
+++ 
b/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/resources/EntityResourceTest.java
@@ -114,11 +114,11 @@ public class EntityResourceTest extends 
BrooklynRestResourceTest {
         // Retrieve the yaml spec, and confirm it is as expected (not wrapped 
in quotes, and treating \n sensibly)
         Response response;
         if (acceptMimeType != null) {
-            response = client().path("/applications/" + appName + "/entities/" 
+ appName + "/spec")
+            response = client().path("/applications/" + appName + "/entities/" 
+ appName + "/speclist")
                     .accept(acceptMimeType)
                     .get();
         } else {
-            response = client().path("/applications/" + appName + "/entities/" 
+ appName + "/spec")
+            response = client().path("/applications/" + appName + "/entities/" 
+ appName + "/speclist")
                     .get();
         }
         String data = response.readEntity(String.class);

Reply via email to