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;
}
}