code: public Map<String, Map<String, ProvisioningFeatureDefinition>> getFeatureDefinitionsByProduct() {
          Map<String, Map<String, ProvisioningFeatureDefinition>> prodFeatureMap = new TreeMap<String, Map<String, ProvisioningFeatureDefinition>>();
  
          // Add feature definitions from Liberty core.
          prodFeatureMap.put(CORE_PRODUCT_NAME, getCoreProductFeatureDefinitions());
  
          // Add product extension feature definitions in the default usr location.
          Map<String, ProvisioningFeatureDefinition> userFeatureDefs = getUsrProductFeatureDefinitions();
          if (userFeatureDefs != null && !userFeatureDefs.isEmpty()) {
              prodFeatureMap.put(USR_PRODUCT_EXT_NAME, userFeatureDefs);
          }
  
          // Add product extension feature definitions that are not in the default usr location.
          readProductExtFeatureLocations();
          if (!BundleRepositoryRegistry.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())
                      prodFeatureMap.put(productExtName, prodExtFeatureDefs);
              }
          }
  
          return prodFeatureMap;
      }
docs: Retrieves a map of product feature definitions organized by product name (core, usr, prod1, prod2, ...)
  
  @return