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:47 UTC

[34/50] git commit: Adds catalog.deleteCatalogItem

Adds catalog.deleteCatalogItem

- needed for CatalogBundleResourceTest, so that tests don’t interfere
  with each other.


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

Branch: refs/heads/master
Commit: 3ed846a371af95bb433ea6a0cd77db81e29366ac
Parents: d8c4232
Author: Aled Sage <al...@gmail.com>
Authored: Tue Jul 8 12:14:18 2014 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Jul 9 22:34:46 2014 +0100

----------------------------------------------------------------------
 .../java/brooklyn/catalog/BrooklynCatalog.java  |  5 ++++
 .../catalog/internal/BasicBrooklynCatalog.java  | 16 ++++++++++++
 .../brooklyn/catalog/internal/CatalogDo.java    | 16 +++++++++++-
 .../main/java/brooklyn/rest/api/CatalogApi.java | 10 ++++++++
 .../rest/resources/CatalogResource.java         |  9 +++++++
 .../rest/resources/CatalogResourceTest.java     | 27 ++++++++++++++++++++
 6 files changed, 82 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/3ed846a3/api/src/main/java/brooklyn/catalog/BrooklynCatalog.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/catalog/BrooklynCatalog.java b/api/src/main/java/brooklyn/catalog/BrooklynCatalog.java
index 386e7ff..1f6e9a4 100644
--- a/api/src/main/java/brooklyn/catalog/BrooklynCatalog.java
+++ b/api/src/main/java/brooklyn/catalog/BrooklynCatalog.java
@@ -18,6 +18,8 @@
  */
 package brooklyn.catalog;
 
+import java.util.NoSuchElementException;
+
 import com.google.common.base.Predicate;
 
 public interface BrooklynCatalog {
@@ -25,6 +27,9 @@ public interface BrooklynCatalog {
     /** @return The item with the given ID, or null if not found */
     CatalogItem<?,?> getCatalogItem(String id);
 
+    /** @return Deletes the item with the given ID
+     * @throws NoSuchElementException if not found */
+    void deleteCatalogItem(String id);
 
     /** variant of {@link #getCatalogItem(String)} which checks (and casts) type for convenience
      * (returns null if type does not match) */

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/3ed846a3/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 3754171..b02993c 100644
--- a/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java
+++ b/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java
@@ -117,6 +117,22 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
         return itemDo.getDto();
     }
     
+    @Override
+    public void deleteCatalogItem(String id) {
+        log.debug("Deleting manual catalog item from "+mgmt+": "+id);
+        Preconditions.checkNotNull(id, "id");
+        CatalogItem<?, ?> item = getCatalogItem(id);
+        CatalogItemDtoAbstract<?,?> itemDto = getAbstractCatalogItem(item);
+        if (itemDto == null) {
+            throw new NoSuchElementException("No catalog item found with id "+id);
+        }
+        if (manualAdditionsCatalog==null) loadManualAdditionsCatalog();
+        manualAdditionsCatalog.deleteEntry(itemDto);
+        
+        // Ensure the cache is de-populated
+        getCatalog().removeEntry(itemDto);
+    }
+
     @SuppressWarnings("unchecked")
     @Override
     public <T,SpecT> CatalogItem<T,SpecT> getCatalogItem(Class<T> type, String id) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/3ed846a3/core/src/main/java/brooklyn/catalog/internal/CatalogDo.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/catalog/internal/CatalogDo.java b/core/src/main/java/brooklyn/catalog/internal/CatalogDo.java
index f7dccfa..125d39f 100644
--- a/core/src/main/java/brooklyn/catalog/internal/CatalogDo.java
+++ b/core/src/main/java/brooklyn/catalog/internal/CatalogDo.java
@@ -208,6 +208,21 @@ public class CatalogDo {
             cache.put(entry.getId(), new CatalogItemDo(this, entry));
     }
 
+    public synchronized void deleteEntry(CatalogItemDtoAbstract<?, ?> entry) {
+        if (dto.entries != null)
+            dto.entries.remove(entry);
+        if (cache!=null)
+            cache.remove(entry.getId());
+    }
+
+    /** removes the given entry from the catalog;
+     */
+    public synchronized void removeEntry(CatalogItemDtoAbstract<?,?> entry) {
+        dto.entries.remove(entry);
+        if (cache!=null)
+            cache.remove(entry.getId());
+    }
+
     /** returns loaded catalog, if this has been loaded */
     CatalogDo addCatalog(CatalogDto child) {
         if (dto.catalogs==null) 
@@ -301,5 +316,4 @@ public class CatalogDo {
     public BrooklynClassLoadingContext newClassLoadingContext() {
         return new JavaBrooklynClassLoadingContext(mgmt, getRootClassLoader());
     }
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/3ed846a3/usage/rest-api/src/main/java/brooklyn/rest/api/CatalogApi.java
----------------------------------------------------------------------
diff --git a/usage/rest-api/src/main/java/brooklyn/rest/api/CatalogApi.java b/usage/rest-api/src/main/java/brooklyn/rest/api/CatalogApi.java
index 9ca7cea..f1f07b7 100644
--- a/usage/rest-api/src/main/java/brooklyn/rest/api/CatalogApi.java
+++ b/usage/rest-api/src/main/java/brooklyn/rest/api/CatalogApi.java
@@ -58,6 +58,16 @@ public interface CatalogApi {
             @Valid String yaml
     ) ;
 
+    @DELETE
+    @Path("/entities/{entityId}")
+    @ApiOperation(value = "Deletes an entity's definition from the catalog")
+    @ApiErrors(value = {
+        @ApiError(code = 404, reason = "Entity not found")
+    })
+    public void deleteEntity(
+        @ApiParam(name = "entityId", value = "The ID of the entity or template to delete", required = true)
+        @PathParam("entityId") String entityId) throws Exception ;
+
     @GET
     @Path("/entities")
     @ApiOperation(value = "List available entity types optionally matching a query", responseClass = "CatalogItemSummary", multiValueResponse = true)

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/3ed846a3/usage/rest-server/src/main/java/brooklyn/rest/resources/CatalogResource.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/brooklyn/rest/resources/CatalogResource.java b/usage/rest-server/src/main/java/brooklyn/rest/resources/CatalogResource.java
index 3b8843d..a575d37 100644
--- a/usage/rest-server/src/main/java/brooklyn/rest/resources/CatalogResource.java
+++ b/usage/rest-server/src/main/java/brooklyn/rest/resources/CatalogResource.java
@@ -99,6 +99,15 @@ public class CatalogResource extends AbstractBrooklynRestResource implements Cat
     }
 
     @Override
+    public void deleteEntity(String entityId) throws Exception {
+      CatalogItem<?,?> result = brooklyn().getCatalog().getCatalogItem(entityId);
+      if (result==null) {
+        throw WebResourceUtils.notFound("Entity with id '%s' not found", entityId);
+      }
+      brooklyn().getCatalog().deleteCatalogItem(entityId);
+    }
+
+    @Override
     public List<CatalogItemSummary> listEntities(
         final String regex,
         final String fragment

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/3ed846a3/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 86348c3..55c7d34 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
@@ -188,4 +188,31 @@ public class CatalogResourceTest extends BrooklynRestResourceTest {
     Assert.assertNotNull(asp, "didn't find AutoScalerPolicy");
   }
   
+  @Test
+  public void testDeleteCustomEntityFromCatalog() {
+    String registeredTypeName = "my.catalog.app.id.to.subsequently.delete";
+    String yaml =
+        "name: "+registeredTypeName+"\n"+
+        // FIXME name above should be unnecessary when brooklyn.catalog below is working
+        "brooklyn.catalog:\n"+
+        "  id: " + registeredTypeName + "\n"+
+        "  name: My Catalog App To Be Deleted\n"+
+        "  description: My description\n"+
+        "  version: 0.1.2\n"+
+        "\n"+
+        "services:\n"+
+        "- type: brooklyn.test.entity.TestEntity\n";
+
+    client().resource("/v1/catalog")
+            .post(ClientResponse.class, yaml);
+    
+    ClientResponse deleteResponse = client().resource("/v1/catalog/entities/"+registeredTypeName)
+            .delete(ClientResponse.class);
+
+    assertEquals(deleteResponse.getStatus(), Response.Status.NO_CONTENT.getStatusCode());
+
+    ClientResponse getPostDeleteResponse = client().resource("/v1/catalog/entities/"+registeredTypeName)
+            .get(ClientResponse.class);
+    assertEquals(getPostDeleteResponse.getStatus(), Response.Status.NOT_FOUND.getStatusCode());
+  }
 }