package jetbrains.mps.core.tool.environment.util; /*Generated by MPS */ import jetbrains.mps.project.ProjectBase; import jetbrains.mps.project.FileBasedProject; import org.apache.log4j.Logger; import org.apache.log4j.LogManager; import java.io.File; import org.jetbrains.annotations.NotNull; import jetbrains.mps.project.structure.project.ProjectDescriptor; import jetbrains.mps.util.MacroHelper; import jetbrains.mps.util.MacrosFactory; import jetbrains.mps.vfs.impl.IoFile; import java.io.IOException; import org.apache.log4j.Level; import jetbrains.mps.project.persistence.ProjectDescriptorPersistence; import org.jetbrains.annotations.Nullable; import org.jdom.Element; import jetbrains.mps.project.ElementProjectDataSource; import java.util.List; import org.jetbrains.mps.openapi.module.SModule; import java.util.ArrayList; public class FileMPSProject extends ProjectBase implements FileBasedProject { private static final Logger LOG_1170860263 = LogManager.getLogger(FileMPSProject.class); private static Logger LOG = LogManager.getLogger(FileMPSProject.class); private final File myProjectFile; public FileMPSProject(@NotNull File file) { super(new ProjectDescriptor(file.getName())); myProjectFile = file; init(); } @NotNull private MacroHelper createMacroHelper() { return MacrosFactory.forProjectFile(new IoFile(getProjectFile().getPath())); } @Override @NotNull public String getName() { try { return myProjectFile.getCanonicalFile().getName(); } catch (IOException e) { if (LOG_1170860263.isEnabledFor(Level.ERROR)) { LOG_1170860263.error("Got while accessing the project file", e); } return myProjectFile.getName(); } } @Override public void save() { MacroHelper helper = createMacroHelper(); new ProjectDescriptorPersistence(getProjectFile(), helper).save(myProjectDescriptor); } /** * * @deprecated */ @Deprecated @Override public <T> T getComponent(Class<T> cls) { return null; } /** * * @return the element with xml description of the project */ @Nullable private Element getElement() { return new ProjectDescriptorPersistence(getProjectFile(), createMacroHelper()).loadProjectElement(); } private void init() { loadProjectDescriptorWithMacros(); update(); projectOpened(); } private void loadProjectDescriptorWithMacros() { loadDescriptor(new ElementProjectDataSource(getElement(), getProjectFile(), createMacroHelper())); } @NotNull public static FileMPSProject open(@NotNull String projectPath) { return new FileMPSProject(new File(projectPath)); } private boolean close() { List<SModule> projectModules = new ArrayList<SModule>(getProjectModules()); for (SModule module : projectModules) { removeModule(module); } projectClosed(); assert getProjectModules().isEmpty(); return true; } @Override public void dispose() { close(); super.dispose(); } @Override @NotNull public final File getProjectFile() { return myProjectFile; } }