From 24250428e1913840bbc8e50fcfa39ef673d7e130 Mon Sep 17 00:00:00 2001 From: Chuck Bridgham Date: Fri, 1 Sep 2023 14:30:49 -0400 Subject: [PATCH] Caching product feature list manifest entries --- .../generator/ManifestFileProcessor.java | 63 +++++++++++-------- 1 file changed, 38 insertions(+), 25 deletions(-) diff --git a/dev/com.ibm.ws.kernel.feature.cmdline/src/com/ibm/ws/kernel/feature/internal/generator/ManifestFileProcessor.java b/dev/com.ibm.ws.kernel.feature.cmdline/src/com/ibm/ws/kernel/feature/internal/generator/ManifestFileProcessor.java index 61d55ec479b..f967d9042fd 100644 --- a/dev/com.ibm.ws.kernel.feature.cmdline/src/com/ibm/ws/kernel/feature/internal/generator/ManifestFileProcessor.java +++ b/dev/com.ibm.ws.kernel.feature.cmdline/src/com/ibm/ws/kernel/feature/internal/generator/ManifestFileProcessor.java @@ -48,8 +48,10 @@ public class ManifestFileProcessor { protected static final String USER_FEATURE_DIR = "extension/lib/features"; protected HashMap productExtNameInfoMap; + protected Map allFeatureDefs; - public static final String MF_EXTENSION = ".mf"; + + public static final String MF_EXTENSION = ".mf"; public static final String CORE_PRODUCT_NAME = "core"; public static final String USR_PRODUCT_EXT_NAME = ExtensionConstants.USER_EXTENSION; @@ -165,31 +167,36 @@ public Map getInstallFeatureDefinitions() * @return All product installed product features. */ public Map getFeatureDefinitions() { - Map featureDefs = new TreeMap(); - - // Add feature definitions from Liberty core. - featureDefs.putAll(getCoreProductFeatureDefinitions()); - - // Add product extension feature definitions in the default usr location. - Map userFeatureDefs = getUsrProductFeatureDefinitions(); - if (userFeatureDefs != null && !userFeatureDefs.isEmpty()) { - featureDefs.putAll(userFeatureDefs); - } - - // Add product extension feature definitions that are not in the default usr location. - readProductExtFeatureLocations(); - if (!productExtNameInfoMap.isEmpty()) { - for (String productExtName : BundleRepositoryRegistry.keys()) { - if (productExtName.isEmpty() || USR_PRODUCT_EXT_NAME.equals(productExtName)) - continue; - - Map prodExtFeatureDefs = getProductExtFeatureDefinitions(productExtName); - if (prodExtFeatureDefs != null && !prodExtFeatureDefs.isEmpty()) - featureDefs.putAll(prodExtFeatureDefs); - } + Map featureDefs = getFeatureDefs(); + if (featureDefs != null) + return featureDefs; + else { + featureDefs = new TreeMap(); + // Add feature definitions from Liberty core. + featureDefs.putAll(getCoreProductFeatureDefinitions()); + + // Add product extension feature definitions in the default usr location. + Map userFeatureDefs = getUsrProductFeatureDefinitions(); + if (userFeatureDefs != null && !userFeatureDefs.isEmpty()) { + featureDefs.putAll(userFeatureDefs); + } + + // Add product extension feature definitions that are not in the default usr location. + readProductExtFeatureLocations(); + if (!productExtNameInfoMap.isEmpty()) { + for (String productExtName : BundleRepositoryRegistry.keys()) { + if (productExtName.isEmpty() || USR_PRODUCT_EXT_NAME.equals(productExtName)) + continue; + + Map prodExtFeatureDefs = getProductExtFeatureDefinitions(productExtName); + if (prodExtFeatureDefs != null && !prodExtFeatureDefs.isEmpty()) + featureDefs.putAll(prodExtFeatureDefs); + } + } + // cache the featureDefs + allFeatureDefs = featureDefs; + return featureDefs; } - - return featureDefs; } /** @@ -504,4 +511,10 @@ public File getCoreAssetDir() { public ContentBasedLocalBundleRepository getBundleRepository(String featureName, WsLocationAdmin locService) { return BundleRepositoryRegistry.getRepositoryHolder(featureName).getBundleRepository(); } + /** + * @return the cached featureDefs if present, or lazily read them and store. + */ + private Map getFeatureDefs() { + return allFeatureDefs; + } }