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());
+ }
}