You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2014/11/13 23:23:42 UTC
[09/18] incubator-brooklyn git commit: Catalog versioning -
groundwork for returning the latest version if no version specified
Catalog versioning - groundwork for returning the latest version if no version specified
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/415619a3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/415619a3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/415619a3
Branch: refs/heads/master
Commit: 415619a3c2e230c6c700159ad97a001b584da9d7
Parents: 5661ac4
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Mon Nov 10 18:56:39 2014 +0200
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Thu Nov 13 11:49:52 2014 +0200
----------------------------------------------------------------------
.../java/brooklyn/catalog/BrooklynCatalog.java | 3 +-
.../catalog/internal/BasicBrooklynCatalog.java | 40 +++++++++++++++++---
.../internal/CatalogItemDtoAbstract.java | 2 +-
.../internal/CatalogItemVersionComparator.java | 16 ++++++++
.../brooklyn/catalog/internal/CatalogUtils.java | 32 +++++++++++++++-
.../catalog/internal/CatalogDtoTest.java | 2 +-
.../entity/rebind/RebindTestFixture.java | 3 +-
.../BrooklynComponentTemplateResolver.java | 5 +--
.../BrooklynEntityDecorationResolver.java | 8 ++--
.../lookup/AbstractTemplateBrooklynLookup.java | 9 +----
.../camp/brooklyn/AbstractYamlTest.java | 2 +-
.../rest/resources/ApplicationResource.java | 3 +-
.../rest/resources/CatalogResource.java | 22 ++++++-----
.../rest/util/BrooklynRestResourceUtils.java | 3 +-
.../rest/resources/CatalogResourceTest.java | 2 +-
15 files changed, 112 insertions(+), 40 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/415619a3/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 ce0d928..cac3038 100644
--- a/api/src/main/java/brooklyn/catalog/BrooklynCatalog.java
+++ b/api/src/main/java/brooklyn/catalog/BrooklynCatalog.java
@@ -24,6 +24,7 @@ import java.util.NoSuchElementException;
import com.google.common.base.Predicate;
public interface BrooklynCatalog {
+ static String DEFAULT_VERSION = "0.0.0_DEFAULT_VERSION";
/** @return The item with the given {@link brooklyn.catalog.CatalogItem#getSymbolicName()
* symbolicName}, or null if not found.
@@ -47,7 +48,7 @@ public interface BrooklynCatalog {
* @throws NoSuchElementException if not found */
void deleteCatalogItem(String symbolicName, String version);
- /** variant of {@link #getCatalogItem(String)} which checks (and casts) type for convenience
+ /** variant of {@link #getCatalogItem(String, String)} which checks (and casts) type for convenience
* (returns null if type does not match)
* @deprecated since 0.7.0 use {@link #getCatalogItem(Class<T>, String, String)} */
@Deprecated
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/415619a3/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 43da70f..f74e24c 100644
--- a/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java
+++ b/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java
@@ -68,6 +68,7 @@ import com.google.common.base.Predicates;
import com.google.common.base.Throwables;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSortedSet;
import com.google.common.collect.Iterables;
public class BasicBrooklynCatalog implements BrooklynCatalog {
@@ -168,7 +169,13 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
}
protected CatalogItemDo<?,?> getCatalogItemDo(String symbolicName, String version) {
- String versionedId = CatalogUtils.getVersionedId(symbolicName, version);
+ String fixedVersionId = getFixedVersionId(symbolicName, version);
+ if (fixedVersionId == null) {
+ //no items with symbolicName exist
+ return null;
+ }
+
+ String versionedId = CatalogUtils.getVersionedId(symbolicName, fixedVersionId);
CatalogItemDo<?, ?> item = null;
//TODO should remove "manual additions" bucket; just have one map a la osgi
if (manualAdditionsCatalog!=null) item = manualAdditionsCatalog.getIdCache().get(versionedId);
@@ -176,10 +183,28 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
return item;
}
+ private String getFixedVersionId(String symbolicName, String version) {
+ if (!DEFAULT_VERSION.equals(version)) {
+ return version;
+ } else {
+ return getDefaultVersion(symbolicName);
+ }
+ }
+
+ private String getDefaultVersion(String symbolicName) {
+ Iterable<CatalogItem<Object, Object>> versions = getCatalogItems(CatalogPredicates.symbolicName(Predicates.equalTo(symbolicName)));
+ ImmutableSortedSet<CatalogItem<?, ?>> orderedVersions = ImmutableSortedSet.orderedBy(new CatalogItemVersionComparator()).addAll(versions).build();
+ if (!orderedVersions.isEmpty()) {
+ return orderedVersions.iterator().next().getVersion();
+ } else {
+ return null;
+ }
+ }
+
@Override
@Deprecated
public CatalogItem<?,?> getCatalogItem(String id) {
- return getCatalogItem(id, NO_VERSION);
+ return getCatalogItem(id, DEFAULT_VERSION);
}
@Override
@@ -194,6 +219,8 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
@Override
@Deprecated
public void deleteCatalogItem(String id) {
+ //Delete only if installed through the
+ //deprecated methods. Don't support DEFAULT_VERSION for delete.
deleteCatalogItem(id, NO_VERSION);
}
@@ -201,7 +228,10 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
public void deleteCatalogItem(String id, String version) {
log.debug("Deleting manual catalog item from "+mgmt+": "+id + ":" + version);
checkNotNull(id, "id");
- checkNotNull(id, "version");
+ checkNotNull(version, "version");
+ if (DEFAULT_VERSION.equals(version)) {
+ throw new IllegalStateException("Deleting items with unspecified version (argument DEFAULT_VERSION) not supported.");
+ }
CatalogItem<?, ?> item = getCatalogItem(id, version);
CatalogItemDtoAbstract<?,?> itemDto = getAbstractCatalogItem(item);
if (itemDto == null) {
@@ -224,7 +254,7 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
@Override
@Deprecated
public <T,SpecT> CatalogItem<T,SpecT> getCatalogItem(Class<T> type, String id) {
- return getCatalogItem(type, id, NO_VERSION);
+ return getCatalogItem(type, id, DEFAULT_VERSION);
}
@SuppressWarnings("unchecked")
@@ -417,7 +447,7 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
symbolicName = (String) catalog.getMaybe("symbolicName").orNull();
if (Strings.isBlank(symbolicName)) {
symbolicName = (String) catalog.getMaybe("id").orNull();
- if (Strings.isNonBlank(symbolicName) && symbolicName.indexOf(CatalogUtils.VERSION_DELIMITER) != -1) {
+ if (Strings.isNonBlank(symbolicName) && CatalogUtils.looksLikeVersionedId(symbolicName)) {
symbolicName = CatalogUtils.getIdFromVersionedId(symbolicName);
version = CatalogUtils.getVersionFromVersionedId(symbolicName);
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/415619a3/core/src/main/java/brooklyn/catalog/internal/CatalogItemDtoAbstract.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/catalog/internal/CatalogItemDtoAbstract.java b/core/src/main/java/brooklyn/catalog/internal/CatalogItemDtoAbstract.java
index f834f15..f10aee1 100644
--- a/core/src/main/java/brooklyn/catalog/internal/CatalogItemDtoAbstract.java
+++ b/core/src/main/java/brooklyn/catalog/internal/CatalogItemDtoAbstract.java
@@ -325,7 +325,7 @@ public abstract class CatalogItemDtoAbstract<T, SpecT> extends AbstractBrooklynO
name = null;
version = null;
url = inlineRef;
- } else if (inlineRef.indexOf(CatalogUtils.VERSION_DELIMITER) != -1) {
+ } else if (CatalogUtils.looksLikeVersionedId(inlineRef)) {
//looks like a name+version ref
name = CatalogUtils.getIdFromVersionedId(inlineRef);
version = CatalogUtils.getVersionFromVersionedId(inlineRef);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/415619a3/core/src/main/java/brooklyn/catalog/internal/CatalogItemVersionComparator.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/catalog/internal/CatalogItemVersionComparator.java b/core/src/main/java/brooklyn/catalog/internal/CatalogItemVersionComparator.java
new file mode 100644
index 0000000..3e279a4
--- /dev/null
+++ b/core/src/main/java/brooklyn/catalog/internal/CatalogItemVersionComparator.java
@@ -0,0 +1,16 @@
+package brooklyn.catalog.internal;
+
+import java.util.Comparator;
+
+import brooklyn.catalog.CatalogItem;
+
+public class CatalogItemVersionComparator implements Comparator<CatalogItem<?, ?>> {
+
+ protected CatalogItemVersionComparator() {}
+
+ @Override
+ public int compare(CatalogItem<?, ?> o1, CatalogItem<?, ?> o2) {
+ return -o1.getVersion().compareTo(o2.getVersion());
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/415619a3/core/src/main/java/brooklyn/catalog/internal/CatalogUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/catalog/internal/CatalogUtils.java b/core/src/main/java/brooklyn/catalog/internal/CatalogUtils.java
index 25c8d8d..849075f 100644
--- a/core/src/main/java/brooklyn/catalog/internal/CatalogUtils.java
+++ b/core/src/main/java/brooklyn/catalog/internal/CatalogUtils.java
@@ -27,6 +27,7 @@ import org.slf4j.LoggerFactory;
import brooklyn.basic.BrooklynObject;
import brooklyn.basic.BrooklynObjectInternal;
+import brooklyn.catalog.BrooklynCatalog;
import brooklyn.catalog.CatalogItem;
import brooklyn.catalog.CatalogItem.CatalogBundle;
import brooklyn.catalog.internal.BasicBrooklynCatalog.BrooklynLoaderTracker;
@@ -141,9 +142,13 @@ public class CatalogUtils {
log.debug(message, args);
}
+ public static boolean looksLikeVersionedId(String versionedId) {
+ return versionedId.indexOf(VERSION_DELIMITER) != -1;
+ }
+
public static String getIdFromVersionedId(String versionedId) {
if (versionedId == null) return null;
- int versionDelimiterPos = versionedId.lastIndexOf(CatalogUtils.VERSION_DELIMITER);
+ int versionDelimiterPos = versionedId.lastIndexOf(VERSION_DELIMITER);
if (versionDelimiterPos != -1) {
return versionedId.substring(0, versionDelimiterPos);
} else {
@@ -153,7 +158,7 @@ public class CatalogUtils {
public static String getVersionFromVersionedId(String versionedId) {
if (versionedId == null) return null;
- int versionDelimiterPos = versionedId.lastIndexOf(CatalogUtils.VERSION_DELIMITER);
+ int versionDelimiterPos = versionedId.lastIndexOf(VERSION_DELIMITER);
if (versionDelimiterPos != -1) {
return versionedId.substring(versionDelimiterPos+1);
} else {
@@ -165,4 +170,27 @@ public class CatalogUtils {
return id + VERSION_DELIMITER + version;
}
+ //TODO Don't really like this, but it's better to have it here than on the interface to keep the API's
+ //surface minimal. Could instead have the interface methods accept VerionedId object and have the helpers
+ //construct it as needed.
+ public static CatalogItem<?, ?> getCatalogItemOptionalVersion(ManagementContext mgmt, String versionedId) {
+ if (looksLikeVersionedId(versionedId)) {
+ String id = getIdFromVersionedId(versionedId);
+ String version = getVersionFromVersionedId(versionedId);
+ return mgmt.getCatalog().getCatalogItem(id, version);
+ } else {
+ return mgmt.getCatalog().getCatalogItem(versionedId, BrooklynCatalog.DEFAULT_VERSION);
+ }
+ }
+
+ public static <T,SpecT> CatalogItem<T, SpecT> getCatalogItemOptionalVersion(ManagementContext mgmt, Class<T> type, String versionedId) {
+ if (looksLikeVersionedId(versionedId)) {
+ String id = getIdFromVersionedId(versionedId);
+ String version = getVersionFromVersionedId(versionedId);
+ return mgmt.getCatalog().getCatalogItem(type, id, version);
+ } else {
+ return mgmt.getCatalog().getCatalogItem(type, versionedId, BrooklynCatalog.DEFAULT_VERSION);
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/415619a3/core/src/test/java/brooklyn/catalog/internal/CatalogDtoTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/catalog/internal/CatalogDtoTest.java b/core/src/test/java/brooklyn/catalog/internal/CatalogDtoTest.java
index 07585b2..8ab75d5 100644
--- a/core/src/test/java/brooklyn/catalog/internal/CatalogDtoTest.java
+++ b/core/src/test/java/brooklyn/catalog/internal/CatalogDtoTest.java
@@ -135,7 +135,7 @@ public class CatalogDtoTest {
public void testVersionedIdSplitter() {
String id = "simple.id";
String version = "0.1.2";
- String versionedId = id + CatalogUtils.VERSION_DELIMITER + version;
+ String versionedId = CatalogUtils.getVersionedId(id, version);
Assert.assertNull(CatalogUtils.getIdFromVersionedId(null));
Assert.assertNull(CatalogUtils.getVersionFromVersionedId(null));
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/415619a3/core/src/test/java/brooklyn/entity/rebind/RebindTestFixture.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/rebind/RebindTestFixture.java b/core/src/test/java/brooklyn/entity/rebind/RebindTestFixture.java
index f97fb85..2b221d1 100644
--- a/core/src/test/java/brooklyn/entity/rebind/RebindTestFixture.java
+++ b/core/src/test/java/brooklyn/entity/rebind/RebindTestFixture.java
@@ -35,6 +35,7 @@ import brooklyn.catalog.CatalogItem;
import brooklyn.catalog.internal.CatalogUtils;
import brooklyn.config.BrooklynProperties;
import brooklyn.entity.basic.Entities;
+import brooklyn.entity.basic.EntityFunctions;
import brooklyn.entity.basic.StartableApplication;
import brooklyn.entity.rebind.persister.BrooklynMementoPersisterToObjectStore;
import brooklyn.entity.rebind.persister.FileBasedObjectStore;
@@ -53,6 +54,7 @@ import brooklyn.util.time.Duration;
import com.google.api.client.util.Sets;
import com.google.common.annotations.Beta;
+import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
@@ -181,7 +183,6 @@ public abstract class RebindTestFixture<T extends StartableApplication> {
return rebind(checkSerializable, false);
}
- @SuppressWarnings("unchecked")
protected T rebind(boolean checkSerializable, boolean terminateOrigManagementContext) throws Exception {
return rebind(checkSerializable, terminateOrigManagementContext, (File)null);
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/415619a3/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java b/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
index b384d98..e641b50 100644
--- a/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
+++ b/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
@@ -191,10 +191,7 @@ public class BrooklynComponentTemplateResolver {
public CatalogItem<Entity,EntitySpec<?>> getCatalogItem() {
String type = getBrooklynType();
if (type != null) {
- BrooklynCatalog catalog = loader.getManagementContext().getCatalog();
- return catalog.getCatalogItem(Entity.class,
- CatalogUtils.getIdFromVersionedId(type),
- CatalogUtils.getVersionFromVersionedId(type));
+ return CatalogUtils.getCatalogItemOptionalVersion(loader.getManagementContext(), Entity.class, type);
} else {
return null;
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/415619a3/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynEntityDecorationResolver.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynEntityDecorationResolver.java b/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynEntityDecorationResolver.java
index 13c6454..8fd080b 100644
--- a/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynEntityDecorationResolver.java
+++ b/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynEntityDecorationResolver.java
@@ -122,12 +122,12 @@ public abstract class BrooklynEntityDecorationResolver<DT> {
decorations.add(spec);
}
private CatalogItem<?, ?> getPolicyCatalogItem(BrooklynCatalog catalog, String policyType) {
- String id = CatalogUtils.getIdFromVersionedId(policyType);
- String version = CatalogUtils.getVersionFromVersionedId(policyType);
- if (id != null) {
+ if (CatalogUtils.looksLikeVersionedId(policyType)) {
+ String id = CatalogUtils.getIdFromVersionedId(policyType);
+ String version = CatalogUtils.getVersionFromVersionedId(policyType);
return catalog.getCatalogItem(id, version);
} else {
- return catalog.getCatalogItem(policyType);
+ return catalog.getCatalogItem(policyType, BrooklynCatalog.DEFAULT_VERSION);
}
}
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/415619a3/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/lookup/AbstractTemplateBrooklynLookup.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/lookup/AbstractTemplateBrooklynLookup.java b/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/lookup/AbstractTemplateBrooklynLookup.java
index c329193..54a3214 100644
--- a/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/lookup/AbstractTemplateBrooklynLookup.java
+++ b/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/lookup/AbstractTemplateBrooklynLookup.java
@@ -25,6 +25,7 @@ import io.brooklyn.camp.spi.collection.ResolvableLink;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import brooklyn.catalog.BrooklynCatalog;
import brooklyn.catalog.CatalogItem;
import brooklyn.catalog.internal.CatalogUtils;
import brooklyn.entity.Entity;
@@ -50,13 +51,7 @@ public abstract class AbstractTemplateBrooklynLookup<T extends AbstractResource>
}
private CatalogItem<?, ?> getCatalogItem(String versionedId) {
- String id = CatalogUtils.getIdFromVersionedId(versionedId);
- String version = CatalogUtils.getVersionFromVersionedId(versionedId);
- if (id != null) {
- return bmc.getCatalog().getCatalogItem(id, version);
- } else {
- return bmc.getCatalog().getCatalogItem(id);
- }
+ return CatalogUtils.getCatalogItemOptionalVersion(bmc, versionedId);
}
public abstract T adapt(CatalogItem<?,?> item);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/415619a3/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/AbstractYamlTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/AbstractYamlTest.java b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/AbstractYamlTest.java
index fd856ca..aa1922c 100644
--- a/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/AbstractYamlTest.java
+++ b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/AbstractYamlTest.java
@@ -153,7 +153,7 @@ public abstract class AbstractYamlTest {
}
protected String ver(String id) {
- return id + CatalogUtils.VERSION_DELIMITER + TEST_VERSION;
+ return CatalogUtils.getVersionedId(id, TEST_VERSION);
}
public void forceCatalogUpdate() {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/415619a3/usage/rest-server/src/main/java/brooklyn/rest/resources/ApplicationResource.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/brooklyn/rest/resources/ApplicationResource.java b/usage/rest-server/src/main/java/brooklyn/rest/resources/ApplicationResource.java
index 6b9be05..9511ebe 100644
--- a/usage/rest-server/src/main/java/brooklyn/rest/resources/ApplicationResource.java
+++ b/usage/rest-server/src/main/java/brooklyn/rest/resources/ApplicationResource.java
@@ -44,6 +44,7 @@ import org.codehaus.jackson.node.ObjectNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import brooklyn.catalog.internal.CatalogUtils;
import brooklyn.entity.Application;
import brooklyn.entity.Entity;
import brooklyn.entity.Group;
@@ -384,7 +385,7 @@ public class ApplicationResource extends AbstractBrooklynRestResource implements
}
private void checkEntityTypeIsValid(String type) {
- if (brooklyn().getCatalog().getCatalogItem(type) == null) {
+ if (CatalogUtils.getCatalogItemOptionalVersion(mgmt(), type) == null) {
try {
brooklyn().getCatalog().getRootClassLoader().loadClass(type);
} catch (ClassNotFoundException e) {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/415619a3/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 c874e14..188825f 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
@@ -22,6 +22,7 @@ import java.io.InputStream;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
+import java.util.NoSuchElementException;
import java.util.Set;
import javax.annotation.Nullable;
@@ -33,6 +34,7 @@ import javax.ws.rs.core.Response.Status;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import brooklyn.catalog.BrooklynCatalog;
import brooklyn.catalog.CatalogItem;
import brooklyn.catalog.CatalogPredicates;
import brooklyn.catalog.internal.BasicBrooklynCatalog;
@@ -126,20 +128,20 @@ public class CatalogResource extends AbstractBrooklynRestResource implements Cat
@Override
@Deprecated
public void deleteEntity(String entityId) throws Exception {
- CatalogItem<?,?> result = brooklyn().getCatalog().getCatalogItem(entityId);
- if (result==null) {
+ try {
+ brooklyn().getCatalog().deleteCatalogItem(entityId);
+ } catch (NoSuchElementException e) {
throw WebResourceUtils.notFound("Entity with id '%s' not found", entityId);
}
- brooklyn().getCatalog().deleteCatalogItem(entityId);
}
@Override
public void deleteEntity(String entityId, String version) throws Exception {
- CatalogItem<?,?> result = brooklyn().getCatalog().getCatalogItem(entityId, version);
- if (result==null) {
- throw WebResourceUtils.notFound("Entity with id '%s' not found", entityId);
+ try {
+ brooklyn().getCatalog().deleteCatalogItem(entityId, version);
+ } catch (NoSuchElementException e) {
+ throw WebResourceUtils.notFound("Entity with id '%s:%s' not found", entityId, version);
}
- brooklyn().getCatalog().deleteCatalogItem(entityId, version);
}
@Override
@@ -160,7 +162,7 @@ public class CatalogResource extends AbstractBrooklynRestResource implements Cat
//Or we could provide asEntity/asPolicy cast methods on the CataloItem doing a safety check internally
@SuppressWarnings("unchecked")
CatalogItem<? extends Entity,EntitySpec<?>> result =
- (CatalogItem<? extends Entity,EntitySpec<?>>) brooklyn().getCatalog().getCatalogItem(entityId);
+ (CatalogItem<? extends Entity,EntitySpec<?>>) brooklyn().getCatalog().getCatalogItem(entityId, BrooklynCatalog.DEFAULT_VERSION);
if (result==null) {
throw WebResourceUtils.notFound("Entity with id '%s' not found", entityId);
@@ -203,7 +205,7 @@ public class CatalogResource extends AbstractBrooklynRestResource implements Cat
public CatalogItemSummary getPolicy(String policyId) {
@SuppressWarnings("unchecked")
CatalogItem<? extends Policy, PolicySpec<?>> result =
- (CatalogItem<? extends Policy, PolicySpec<?>>) brooklyn().getCatalog().getCatalogItem(policyId);
+ (CatalogItem<? extends Policy, PolicySpec<?>>) brooklyn().getCatalog().getCatalogItem(policyId, BrooklynCatalog.DEFAULT_VERSION);
if (result==null) {
throw WebResourceUtils.notFound("Policy with id '%s' not found", policyId);
@@ -243,7 +245,7 @@ public class CatalogResource extends AbstractBrooklynRestResource implements Cat
@Override
@Deprecated
public Response getIcon(String itemId) {
- CatalogItem<?,?> result = brooklyn().getCatalog().getCatalogItem(itemId);
+ CatalogItem<?,?> result = brooklyn().getCatalog().getCatalogItem(itemId, BrooklynCatalog.DEFAULT_VERSION);
return getCatalogItemIcon(result);
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/415619a3/usage/rest-server/src/main/java/brooklyn/rest/util/BrooklynRestResourceUtils.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/brooklyn/rest/util/BrooklynRestResourceUtils.java b/usage/rest-server/src/main/java/brooklyn/rest/util/BrooklynRestResourceUtils.java
index 52f9df8..67519ec 100644
--- a/usage/rest-server/src/main/java/brooklyn/rest/util/BrooklynRestResourceUtils.java
+++ b/usage/rest-server/src/main/java/brooklyn/rest/util/BrooklynRestResourceUtils.java
@@ -41,6 +41,7 @@ import org.slf4j.LoggerFactory;
import brooklyn.basic.BrooklynTypes;
import brooklyn.catalog.BrooklynCatalog;
import brooklyn.catalog.CatalogItem;
+import brooklyn.catalog.internal.CatalogUtils;
import brooklyn.config.ConfigKey;
import brooklyn.enricher.Enrichers;
import brooklyn.entity.Application;
@@ -366,7 +367,7 @@ public class BrooklynRestResourceUtils {
protected Map<?, ?> getRenderingConfigurationFor(String catalogId) {
MutableMap<Object, Object> result = MutableMap.of();
- CatalogItem<?,?> item = mgmt.getCatalog().getCatalogItem(catalogId);
+ CatalogItem<?,?> item = CatalogUtils.getCatalogItemOptionalVersion(mgmt, catalogId);
if (item==null) return result;
result.addIfNotNull("iconUrl", item.getIconUrl());
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/415619a3/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 a610cda..5eae763 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
@@ -265,6 +265,6 @@ public class CatalogResourceTest extends BrooklynRestResourceTest {
}
private static String ver(String id) {
- return id + CatalogUtils.VERSION_DELIMITER + TEST_VERSION;
+ return CatalogUtils.getVersionedId(id, TEST_VERSION);
}
}