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();
  }
 private MutableBundleManifest getBundleManifest(ProjectMetadata project) {
   MutableBundleManifest mf = project.getMetadata(MutableBundleManifest.class);
   if (mf == null) {
     File file = getManifestFile(project);
     try {
       mf = MutableBundleManifest.read(file);
     } catch (IOException e) {
       throw new IllegalArgumentException("Could not parse bundle manifest " + file, e);
     }
     project.putMetadata(mf);
   }
   return mf;
 }
 @Override
 public void writeMetadata(ProjectMetadata project) throws IOException {
   MutableBundleManifest mf = project.getMetadata(MutableBundleManifest.class);
   if (mf != null) {
     MutableBundleManifest.write(mf, getManifestFile(project));
   }
 }
 @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());
     }
   }
 }
 private File getManifestFile(ProjectMetadata project) {
   return new File(project.getBasedir(), "META-INF/MANIFEST.MF");
 }
 private boolean isEclipseRepository(ProjectMetadata project) {
   return PackagingType.TYPE_ECLIPSE_REPOSITORY.equals(
       project.getMetadata(MutablePomFile.class).getPackaging());
 }