Repository: brooklyn-server Updated Branches: refs/heads/master 5827932c2 -> 4795aac1b
fix Catalog method backwards compatibility, and deprecate them now they delegate to TypeRegistry if can't find locally Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/6a8800d6 Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/6a8800d6 Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/6a8800d6 Branch: refs/heads/master Commit: 6a8800d6cfd760f287ff6eb9a979483651f88bda Parents: 36de666 Author: Alex Heneveld <[email protected]> Authored: Mon Sep 11 13:19:33 2017 +0100 Committer: Alex Heneveld <[email protected]> Committed: Mon Sep 11 13:19:33 2017 +0100 ---------------------------------------------------------------------- .../brooklyn/api/catalog/BrooklynCatalog.java | 39 +++++++++++-- .../catalog/internal/BasicBrooklynCatalog.java | 60 +++++++++++++++++--- .../core/catalog/internal/CatalogUtils.java | 2 +- .../core/typereg/BasicBrooklynTypeRegistry.java | 6 +- .../brooklyn/core/typereg/RegisteredTypes.java | 9 +-- 5 files changed, 93 insertions(+), 23 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6a8800d6/api/src/main/java/org/apache/brooklyn/api/catalog/BrooklynCatalog.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/catalog/BrooklynCatalog.java b/api/src/main/java/org/apache/brooklyn/api/catalog/BrooklynCatalog.java index cbc5b2b..9c7ed66 100644 --- a/api/src/main/java/org/apache/brooklyn/api/catalog/BrooklynCatalog.java +++ b/api/src/main/java/org/apache/brooklyn/api/catalog/BrooklynCatalog.java @@ -25,6 +25,7 @@ import java.util.NoSuchElementException; import javax.annotation.Nullable; import org.apache.brooklyn.api.internal.AbstractBrooklynObjectSpec; +import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry; import org.apache.brooklyn.api.typereg.ManagedBundle; import org.apache.brooklyn.api.typereg.RegisteredType; import org.apache.brooklyn.api.typereg.RegisteredTypeLoadingContext; @@ -45,25 +46,51 @@ public interface BrooklynCatalog { * {@link CatalogItem#getSymbolicName() symbolicName} * and optionally {@link CatalogItem#getVersion()}, * taking the best version if the version is {@link #DEFAULT_VERSION} or null, - * returning null if no matches are found. */ + * returning null if no matches are found. + * @deprecated since 0.12.0 use {@link BrooklynTypeRegistry} instead */ + @Deprecated CatalogItem<?,?> getCatalogItem(String symbolicName, String version); + + /** As {@link #getCatalogItem(String, String)} but only looking in legacy catalog + * @deprecated since 0.12.0 only provided to allow TypeRegistry to see the legacy items */ + CatalogItem<?,?> getCatalogItemLegacy(String symbolicName, String version); /** @return Deletes the item with the given {@link CatalogItem#getSymbolicName() * symbolicName} and version - * @throws NoSuchElementException if not found */ + * @throws NoSuchElementException if not found + * @deprecated since 0.12.0 use {@link BrooklynTypeRegistry} instead */ + @Deprecated void deleteCatalogItem(String symbolicName, String version); /** variant of {@link #getCatalogItem(String, String)} which checks (and casts) type for convenience - * (returns null if type does not match) */ + * (returns null if type does not match) + * @deprecated since 0.12.0 use {@link BrooklynTypeRegistry} instead */ + @Deprecated <T,SpecT> CatalogItem<T,SpecT> getCatalogItem(Class<T> type, String symbolicName, String version); + + /** As non-legacy method but only looking in legacy catalog + * @deprecated since 0.12.0 only provided to allow TypeRegistry to see the legacy items */ + <T,SpecT> CatalogItem<T,SpecT> getCatalogItemLegacy(Class<T> type, String symbolicName, String version); - /** @return All items in the catalog */ + /** @return All items in the catalog + * @deprecated since 0.12.0 use {@link BrooklynTypeRegistry} instead */ + @Deprecated <T,SpecT> Iterable<CatalogItem<T,SpecT>> getCatalogItems(); - /** convenience for filtering items in the catalog; see CatalogPredicates for useful filters */ -// XXX + /** As non-legacy method but only looking in legacy catalog + * @deprecated since 0.12.0 only provided to allow TypeRegistry to see the legacy items */ + @Deprecated + <T,SpecT> Iterable<CatalogItem<T,SpecT>> getCatalogItemsLegacy(); + + /** convenience for filtering items in the catalog; see CatalogPredicates for useful filters + * @deprecated since 0.12.0 use {@link BrooklynTypeRegistry} instead */ + @Deprecated <T,SpecT> Iterable<CatalogItem<T,SpecT>> getCatalogItems(Predicate<? super CatalogItem<T,SpecT>> filter); + /** As non-legacy method but only looking in legacy catalog + * @deprecated since 0.12.0 only provided to allow TypeRegistry to see the legacy items */ + <T,SpecT> Iterable<CatalogItem<T,SpecT>> getCatalogItemsLegacy(Predicate<? super CatalogItem<T,SpecT>> filter); + /** persists the catalog item to the object store, if persistence is enabled */ public void persist(CatalogItem<?, ?> catalogItem); http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6a8800d6/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 bfca5ca..3177a50 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 @@ -283,8 +283,16 @@ public class BasicBrooklynCatalog implements BrooklynCatalog { return ImmutableSortedSet.orderedBy(CatalogItemComparator.<T,SpecT>getInstance()).addAll(versions).build(); } - @Override + @Override @Deprecated public CatalogItem<?,?> getCatalogItem(String symbolicName, String version) { + CatalogItem<?,?> legacy = getCatalogItemLegacy(symbolicName, version); + if (legacy!=null) return legacy; + RegisteredType rt = mgmt.getTypeRegistry().get(symbolicName, version); + if (rt!=null) return RegisteredTypes.toPartialCatalogItem(rt); + return null; + } + @Override @Deprecated + public CatalogItem<?,?> getCatalogItemLegacy(String symbolicName, String version) { if (symbolicName == null) return null; CatalogItemDo<?, ?> itemDo = getCatalogItemDo(symbolicName, version); if (itemDo == null) return null; @@ -337,9 +345,21 @@ public class BasicBrooklynCatalog implements BrooklynCatalog { } - @SuppressWarnings("unchecked") + @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public <T,SpecT> CatalogItem<T,SpecT> getCatalogItem(Class<T> type, String id, String version) { + RegisteredType rt = mgmt.getTypeRegistry().get(id, version); + if (rt!=null) { + if (rt.getSuperTypes().contains(type) || rt.getSuperTypes().contains(type.getName())) { + return (CatalogItem) RegisteredTypes.toPartialCatalogItem(rt); + } + } + return getCatalogItemLegacy(type, id, version); + } + + @SuppressWarnings("unchecked") + @Override + public <T,SpecT> CatalogItem<T,SpecT> getCatalogItemLegacy(Class<T> type, String id, String version) { if (id==null || version==null) return null; CatalogItem<?,?> result = getCatalogItem(id, version); if (result==null) return null; @@ -1777,29 +1797,51 @@ public class BasicBrooklynCatalog implements BrooklynCatalog { } @SuppressWarnings({ "unchecked", "rawtypes" }) - @Override + @Deprecated public <T,SpecT> Iterable<CatalogItem<T,SpecT>> getCatalogItems() { + Map<String,CatalogItem<T,SpecT>> result = MutableMap.of(); if (!getCatalog().isLoaded()) { // some callers use this to force the catalog to load (maybe when starting as hot_backup without a catalog ?) log.debug("Forcing catalog load on access of catalog items"); load(); } - return ImmutableList.copyOf((Iterable)catalog.getIdCache().values()); + result.putAll((Map)catalog.getIdCache()); + for (RegisteredType rt: mgmt.getTypeRegistry().getAll()) { + result.put(rt.getId(), (CatalogItem)RegisteredTypes.toPartialCatalogItem(rt)); + } + return result.values(); } @SuppressWarnings({ "unchecked", "rawtypes" }) @Override + @Deprecated + public <T,SpecT> Iterable<CatalogItem<T,SpecT>> getCatalogItemsLegacy() { + if (!getCatalog().isLoaded()) { + // some callers use this to force the catalog to load (maybe when starting as hot_backup without a catalog ?) + log.debug("Forcing catalog load on access of catalog items"); + load(); + } + return ImmutableList.copyOf((Iterable)catalog.getIdCache().values()); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override @Deprecated public <T,SpecT> Iterable<CatalogItem<T,SpecT>> getCatalogItems(Predicate<? super CatalogItem<T,SpecT>> filter) { + Iterable<CatalogItem<T,SpecT>> filtered = Iterables.filter(getCatalogItems(), (Predicate) filter); + return Iterables.transform(filtered, BasicBrooklynCatalog.<T,SpecT>itemDoToDto()); + } + @Override @Deprecated + public <T,SpecT> Iterable<CatalogItem<T,SpecT>> getCatalogItemsLegacy(Predicate<? super CatalogItem<T,SpecT>> filter) { Iterable<CatalogItemDo<T,SpecT>> filtered = Iterables.filter((Iterable)catalog.getIdCache().values(), (Predicate<CatalogItem<T,SpecT>>)(Predicate) filter); return Iterables.transform(filtered, BasicBrooklynCatalog.<T,SpecT>itemDoToDto()); } - private static <T,SpecT> Function<CatalogItemDo<T,SpecT>, CatalogItem<T,SpecT>> itemDoToDto() { - return new Function<CatalogItemDo<T,SpecT>, CatalogItem<T,SpecT>>() { + private static <T,SpecT> Function<CatalogItem<T,SpecT>, CatalogItem<T,SpecT>> itemDoToDto() { + return new Function<CatalogItem<T,SpecT>, CatalogItem<T,SpecT>>() { @Override - public CatalogItem<T,SpecT> apply(@Nullable CatalogItemDo<T,SpecT> item) { - if (item==null) return null; - return item.getDto(); + public CatalogItem<T,SpecT> apply(@Nullable CatalogItem<T,SpecT> item) { + if (!(item instanceof CatalogItemDo)) return item; + return ((CatalogItemDo<T,SpecT>) item).getDto(); } }; } http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6a8800d6/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogUtils.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogUtils.java b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogUtils.java index 06286c4..973f56d 100644 --- a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogUtils.java +++ b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogUtils.java @@ -336,7 +336,7 @@ public class CatalogUtils { } /** @deprecated since 0.9.0 use {@link BrooklynTypeRegistry#get(String, org.apache.brooklyn.api.typereg.BrooklynTypeRegistry.RegisteredTypeKind, Class)} */ - // only one item left, in deprecated service resolver + // not used @Deprecated public static <T,SpecT> CatalogItem<T, SpecT> getCatalogItemOptionalVersion(ManagementContext mgmt, Class<T> type, String versionedId) { if (looksLikeVersionedId(versionedId)) { http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6a8800d6/core/src/main/java/org/apache/brooklyn/core/typereg/BasicBrooklynTypeRegistry.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/typereg/BasicBrooklynTypeRegistry.java b/core/src/main/java/org/apache/brooklyn/core/typereg/BasicBrooklynTypeRegistry.java index 5f8e361..440d301 100644 --- a/core/src/main/java/org/apache/brooklyn/core/typereg/BasicBrooklynTypeRegistry.java +++ b/core/src/main/java/org/apache/brooklyn/core/typereg/BasicBrooklynTypeRegistry.java @@ -93,7 +93,7 @@ public class BasicBrooklynTypeRegistry implements BrooklynTypeRegistry { result.put(rt.getId(), rt); } for (RegisteredType rt: Iterables.filter( - Iterables.transform(mgmt.getCatalog().getCatalogItems(), RegisteredTypes.CI_TO_RT), + Iterables.transform(mgmt.getCatalog().getCatalogItemsLegacy(), RegisteredTypes.CI_TO_RT), filter)) { if (!result.containsKey(rt.getId())) { // shouldn't be using this now @@ -146,7 +146,7 @@ public class BasicBrooklynTypeRegistry implements BrooklynTypeRegistry { } // missing case is to look for exact version in legacy catalog - CatalogItem<?, ?> item = mgmt.getCatalog().getCatalogItem(symbolicNameOrAliasIfNoVersion, version); + CatalogItem<?, ?> item = mgmt.getCatalog().getCatalogItemLegacy(symbolicNameOrAliasIfNoVersion, version); if (item!=null) return Maybe.of( RegisteredTypes.CI_TO_RT.apply( item ) ); @@ -237,7 +237,7 @@ public class BasicBrooklynTypeRegistry implements BrooklynTypeRegistry { // fallback: look up in (legacy) catalog // TODO remove once all transformers are available in the new style - CatalogItem item = symbolicName!=null ? (CatalogItem) mgmt.getCatalog().getCatalogItem(symbolicName, version) : null; + CatalogItem item = symbolicName!=null ? (CatalogItem) mgmt.getCatalog().getCatalogItemLegacy(symbolicName, version) : null; if (item==null) { // if not in catalog (because loading a new item?) then look up item based on type // (only really used in tests; possibly also for any recursive legacy transformers we might have to create a CI; cross that bridge when we come to it) http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6a8800d6/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypes.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypes.java b/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypes.java index 6ec5983..275d5c8 100644 --- a/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypes.java +++ b/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypes.java @@ -150,6 +150,11 @@ public class RegisteredTypes { @Override public String getContainingBundle() { return type.getContainingBundle(); } @Override public String getVersion() { return type.getVersion(); } + @Override public void setDeprecated(boolean deprecated) { RegisteredTypes.setDeprecated(type, deprecated); } + @Override public void setDisabled(boolean disabled) { RegisteredTypes.setDisabled(type, disabled); } + @Override public boolean isDeprecated() { return type.isDeprecated(); } + @Override public boolean isDisabled() { return type.isDisabled(); } + @Override public List<String> getCatalogItemIdSearchPath() { throw new UnsupportedOperationException(); } @Override public TagSupport tags() { throw new UnsupportedOperationException(); } @Override public RelationSupport<?> relations() { throw new UnsupportedOperationException(); } @@ -166,10 +171,6 @@ public class RegisteredTypes { } @Override public String getPlanYaml() { throw new UnsupportedOperationException(); } @Override public RebindSupport<CatalogItemMemento> getRebindSupport() { throw new UnsupportedOperationException(); } - @Override public void setDeprecated(boolean deprecated) { throw new UnsupportedOperationException(); } - @Override public void setDisabled(boolean disabled) { throw new UnsupportedOperationException(); } - @Override public boolean isDeprecated() { throw new UnsupportedOperationException(); } - @Override public boolean isDisabled() { throw new UnsupportedOperationException(); } } /** Preferred mechanism for defining a bean {@link RegisteredType}.
