Skip to content

Commit 13a6378

Browse files
authored
Merge pull request #26149 from cbridgha/CacheFeatureListManifest
FeatureList cache product feature list manifest entries
2 parents 4078a19 + 2425042 commit 13a6378

File tree

1 file changed

+38
-25
lines changed

1 file changed

+38
-25
lines changed

dev/com.ibm.ws.kernel.feature.cmdline/src/com/ibm/ws/kernel/feature/internal/generator/ManifestFileProcessor.java

Lines changed: 38 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,10 @@ public class ManifestFileProcessor {
4848
protected static final String USER_FEATURE_DIR = "extension/lib/features";
4949

5050
protected HashMap<String, ProductExtensionInfo> productExtNameInfoMap;
51+
protected Map<String, ProvisioningFeatureDefinition> allFeatureDefs;
5152

52-
public static final String MF_EXTENSION = ".mf";
53+
54+
public static final String MF_EXTENSION = ".mf";
5355
public static final String CORE_PRODUCT_NAME = "core";
5456

5557
public static final String USR_PRODUCT_EXT_NAME = ExtensionConstants.USER_EXTENSION;
@@ -165,31 +167,36 @@ public Map<String, ProvisioningFeatureDefinition> getInstallFeatureDefinitions()
165167
* @return All product installed product features.
166168
*/
167169
public Map<String, ProvisioningFeatureDefinition> getFeatureDefinitions() {
168-
Map<String, ProvisioningFeatureDefinition> featureDefs = new TreeMap<String, ProvisioningFeatureDefinition>();
169-
170-
// Add feature definitions from Liberty core.
171-
featureDefs.putAll(getCoreProductFeatureDefinitions());
172-
173-
// Add product extension feature definitions in the default usr location.
174-
Map<String, ProvisioningFeatureDefinition> userFeatureDefs = getUsrProductFeatureDefinitions();
175-
if (userFeatureDefs != null && !userFeatureDefs.isEmpty()) {
176-
featureDefs.putAll(userFeatureDefs);
177-
}
178-
179-
// Add product extension feature definitions that are not in the default usr location.
180-
readProductExtFeatureLocations();
181-
if (!productExtNameInfoMap.isEmpty()) {
182-
for (String productExtName : BundleRepositoryRegistry.keys()) {
183-
if (productExtName.isEmpty() || USR_PRODUCT_EXT_NAME.equals(productExtName))
184-
continue;
185-
186-
Map<String, ProvisioningFeatureDefinition> prodExtFeatureDefs = getProductExtFeatureDefinitions(productExtName);
187-
if (prodExtFeatureDefs != null && !prodExtFeatureDefs.isEmpty())
188-
featureDefs.putAll(prodExtFeatureDefs);
189-
}
170+
Map<String, ProvisioningFeatureDefinition> featureDefs = getFeatureDefs();
171+
if (featureDefs != null)
172+
return featureDefs;
173+
else {
174+
featureDefs = new TreeMap<String, ProvisioningFeatureDefinition>();
175+
// Add feature definitions from Liberty core.
176+
featureDefs.putAll(getCoreProductFeatureDefinitions());
177+
178+
// Add product extension feature definitions in the default usr location.
179+
Map<String, ProvisioningFeatureDefinition> userFeatureDefs = getUsrProductFeatureDefinitions();
180+
if (userFeatureDefs != null && !userFeatureDefs.isEmpty()) {
181+
featureDefs.putAll(userFeatureDefs);
182+
}
183+
184+
// Add product extension feature definitions that are not in the default usr location.
185+
readProductExtFeatureLocations();
186+
if (!productExtNameInfoMap.isEmpty()) {
187+
for (String productExtName : BundleRepositoryRegistry.keys()) {
188+
if (productExtName.isEmpty() || USR_PRODUCT_EXT_NAME.equals(productExtName))
189+
continue;
190+
191+
Map<String, ProvisioningFeatureDefinition> prodExtFeatureDefs = getProductExtFeatureDefinitions(productExtName);
192+
if (prodExtFeatureDefs != null && !prodExtFeatureDefs.isEmpty())
193+
featureDefs.putAll(prodExtFeatureDefs);
194+
}
195+
}
196+
// cache the featureDefs
197+
allFeatureDefs = featureDefs;
198+
return featureDefs;
190199
}
191-
192-
return featureDefs;
193200
}
194201

195202
/**
@@ -504,4 +511,10 @@ public File getCoreAssetDir() {
504511
public ContentBasedLocalBundleRepository getBundleRepository(String featureName, WsLocationAdmin locService) {
505512
return BundleRepositoryRegistry.getRepositoryHolder(featureName).getBundleRepository();
506513
}
514+
/**
515+
* @return the cached featureDefs if present, or lazily read them and store.
516+
*/
517+
private Map<String, ProvisioningFeatureDefinition> getFeatureDefs() {
518+
return allFeatureDefs;
519+
}
507520
}

0 commit comments

Comments
 (0)