private Map<File, ProductConfiguration> getProductConfigurations(ProjectMetadata project) {
    ProductConfigurations products = project.getMetadata(ProductConfigurations.class);
    if (products == null) {
      products = new ProductConfigurations();
      File[] productFiles =
          project
              .getBasedir()
              .listFiles(
                  new FileFilter() {

                    @Override
                    public boolean accept(File file) {
                      return file.isFile() && file.getName().endsWith(".product");
                    }
                  });
      if (productFiles != null) {
        for (File productFile : productFiles) {
          try {
            products.addProductConfiguration(productFile, ProductConfiguration.read(productFile));
          } catch (IOException e) {
            throw new IllegalArgumentException(
                "Could not read product configuration file " + productFile, e);
          }
        }
      }
      project.putMetadata(products);
    }
    return products.getProductConfigurations();
  }
 @Override
 public void writeMetadata(ProjectMetadata project) throws IOException {
   ProductConfigurations products = project.getMetadata(ProductConfigurations.class);
   if (products != null) {
     for (Map.Entry<File, ProductConfiguration> entry :
         products.getProductConfigurations().entrySet()) {
       ProductConfiguration.write(entry.getValue(), entry.getKey());
     }
   }
 }