package com.intellij.openapi.roots;

import com.intellij.facet.ModifiableFacetModel;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.libraries.LibraryTable;

/**
 * Returns the modifiable models from either the open Project Structure configurable (if any) or the standard module root manager.
 *
 * @author Dennis.Ushakov
 */
public interface ModifiableModelsProvider {
  class SERVICE {
    private SERVICE() {
    }

    public static ModifiableModelsProvider getInstance() {
      return ServiceManager.getService(ModifiableModelsProvider.class);
    }
  }
  
  ModifiableRootModel getModuleModifiableModel(final Module module);
  void commitModuleModifiableModel(final ModifiableRootModel model);
  void disposeModuleModifiableModel(final ModifiableRootModel model);

  ModifiableFacetModel getFacetModifiableModel(Module module);
  void commitFacetModifiableModel(Module module, ModifiableFacetModel model);

  LibraryTable.ModifiableModel getLibraryTableModifiableModel();
  LibraryTable.ModifiableModel getLibraryTableModifiableModel(Project project);
}
