Skip to content

Commit

Permalink
Merge pull request #26149 from cbridgha/CacheFeatureListManifest
Browse files Browse the repository at this point in the history
FeatureList cache product feature list manifest entries
  • Loading branch information
cbridgha committed Sep 2, 2023
2 parents 4078a19 + 2425042 commit 13a6378
Showing 1 changed file with 38 additions and 25 deletions.
Expand Up @@ -48,8 +48,10 @@ public class ManifestFileProcessor {
protected static final String USER_FEATURE_DIR = "extension/lib/features";

protected HashMap<String, ProductExtensionInfo> productExtNameInfoMap;
protected Map<String, ProvisioningFeatureDefinition> 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;
Expand Down Expand Up @@ -165,31 +167,36 @@ public Map<String, ProvisioningFeatureDefinition> getInstallFeatureDefinitions()
* @return All product installed product features.
*/
public Map<String, ProvisioningFeatureDefinition> getFeatureDefinitions() {
Map<String, ProvisioningFeatureDefinition> featureDefs = new TreeMap<String, ProvisioningFeatureDefinition>();

// Add feature definitions from Liberty core.
featureDefs.putAll(getCoreProductFeatureDefinitions());

// Add product extension feature definitions in the default usr location.
Map<String, ProvisioningFeatureDefinition> 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<String, ProvisioningFeatureDefinition> prodExtFeatureDefs = getProductExtFeatureDefinitions(productExtName);
if (prodExtFeatureDefs != null && !prodExtFeatureDefs.isEmpty())
featureDefs.putAll(prodExtFeatureDefs);
}
Map<String, ProvisioningFeatureDefinition> featureDefs = getFeatureDefs();
if (featureDefs != null)
return featureDefs;
else {
featureDefs = new TreeMap<String, ProvisioningFeatureDefinition>();
// Add feature definitions from Liberty core.
featureDefs.putAll(getCoreProductFeatureDefinitions());

// Add product extension feature definitions in the default usr location.
Map<String, ProvisioningFeatureDefinition> 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<String, ProvisioningFeatureDefinition> prodExtFeatureDefs = getProductExtFeatureDefinitions(productExtName);
if (prodExtFeatureDefs != null && !prodExtFeatureDefs.isEmpty())
featureDefs.putAll(prodExtFeatureDefs);
}
}
// cache the featureDefs
allFeatureDefs = featureDefs;
return featureDefs;
}

return featureDefs;
}

/**
Expand Down Expand Up @@ -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<String, ProvisioningFeatureDefinition> getFeatureDefs() {
return allFeatureDefs;
}
}

0 comments on commit 13a6378

Please sign in to comment.