Github user aledsage commented on a diff in the pull request:

    https://github.com/apache/brooklyn-server/pull/873#discussion_r149049524
  
    --- Diff: 
core/src/main/java/org/apache/brooklyn/core/typereg/BundleUpgradeParser.java ---
    @@ -312,6 +335,90 @@ public static boolean 
contains(Iterable<VersionRangedName> names, VersionedName
             public static boolean contains(VersionRangedName range, 
VersionedName name) {
                 return range.getSymbolicName().equals(name.getSymbolicName()) 
&& range.getOsgiVersionRange().includes(name.getOsgiVersion());
             }
    +
    +        @Beta
    +        public static void storeInManagementContext(CatalogUpgrades 
catalogUpgrades, ManagementContext managementContext) {
    +            
((BasicBrooklynTypeRegistry)managementContext.getTypeRegistry()).storeCatalogUpgradesInstructions(catalogUpgrades);
    +        }
    +        
    +        @Beta @Nonnull
    +        public static CatalogUpgrades 
getFromManagementContext(ManagementContext managementContext) {
    +            CatalogUpgrades result = 
((BasicBrooklynTypeRegistry)managementContext.getTypeRegistry()).getCatalogUpgradesInstructions();
    +            if (result!=null) {
    +                return result;
    +            }
    +            return builder().build();
    +        }
    +
    +        @Beta
    +        public static String 
getBundleUpgradedIfNecessary(ManagementContext mgmt, String vName) {
    +            if (vName==null) return null;
    +            Maybe<OsgiManager> osgi = 
((ManagementContextInternal)mgmt).getOsgiManager();
    +            if (osgi.isAbsent()) {
    +                // ignore upgrades if not osgi
    +                return vName;
    +            }
    +            if 
(osgi.get().getManagedBundle(VersionedName.fromString(vName))!=null) {
    +                // bundle installed, prefer that to upgrade 
    +                return vName;
    +            }
    +            return getItemUpgradedIfNecessary(mgmt, vName, (cu,vn) -> 
cu.getUpgradesForBundle(vn));
    +        }
    +        @Beta
    +        public static String getTypeUpgradedIfNecessary(ManagementContext 
mgmt, String vName) {
    +            if (vName==null || mgmt.getTypeRegistry().get(vName)!=null) {
    +                // item found (or n/a), prefer that to upgrade
    +                return vName;
    +            }
    +            // callers should use BrooklynTags.newUpgradedFromTag if 
creating a spec,
    +            // then warn on instantiation, done only for entities 
currently.
    +            // (yoml will allow us to have one code path for all the 
different creation routines.)
    +            // persistence/rebind also warns.
    +            return getItemUpgradedIfNecessary(mgmt, vName, (cu,vn) -> 
cu.getUpgradesForType(vn));
    +        }
    +        
    +        private interface LookupFunction {
    +            public Set<VersionedName> lookup(CatalogUpgrades cu, 
VersionedName vn);
    +        }
    +        private static String getItemUpgradedIfNecessary(ManagementContext 
mgmt, String vName, LookupFunction lookupF) {
    +            Set<VersionedName> r = 
lookupF.lookup(getFromManagementContext(mgmt), VersionedName.fromString(vName));
    +            if (!r.isEmpty()) return r.iterator().next().toString();
    +            
    +            if (log.isTraceEnabled()) {
    +                log.trace("Could not find '"+vName+"' and no upgrades 
specified; subsequent failure or warning possible unless that is a direct java 
class reference");
    +            }
    +            return vName;
    +        }
    +        
    +        /** This method is used internally to mark places we need to 
update when we switch to persisting and loading
    +         *  registered type IDs instead of java types, as noted on 
RebindIteration.load */
    +        @Beta
    +        public static boolean 
markerForCodeThatLoadsJavaTypesButShouldLoadRegisteredType() {
    +            // return true if we use registered types, and update callers 
not to need this method
    +            return false;
    +        }
    +        
    +        @Beta
    +        CatalogUpgrades withTypeCleared(VersionedName versionedName) {
    +            return 
builder().addAll(this).clearUpgradesProvidedByType(versionedName).build();
    +        }
    +        @Beta
    +        CatalogUpgrades withBundleCleared(VersionedName versionedName) {
    +            return 
builder().addAll(this).clearUpgradesProvidedByType(versionedName).build();
    --- End diff --
    
    Should this instead call `clearUpgradesProvidedByBundle`?


---

Reply via email to