package jetbrains.mps.build.mps.pluginSolution.plugin;
/*Generated by MPS */
import org.jetbrains.mps.openapi.model.SModel;
import org.jetbrains.mps.openapi.model.SModelName;
import jetbrains.mps.project.Solution;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import org.jetbrains.mps.openapi.persistence.ModelRoot;
import org.jetbrains.mps.openapi.model.EditableSModel;
import jetbrains.mps.project.Project;
import jetbrains.mps.vfs.IFile;
import org.jetbrains.mps.openapi.module.SModule;
import jetbrains.mps.smodel.ModuleRepositoryFacade;
import jetbrains.mps.vfs.openapi.FileSystem;
import jetbrains.mps.ide.newSolutionDialog.NewModuleUtil;
/*package*/ class BuildGeneratorUtil {
private BuildGeneratorUtil() {
}
public static SModel createModel(SModelName modelName, Solution solution) {
for (SModel descriptor : ListSequence.fromList(solution.getModels())) {
if (descriptor.getName().equals(modelName)) {
return descriptor;
}
}
for (ModelRoot mr : solution.getModelRoots()) {
if (mr.canCreateModel(modelName.getValue())) {
SModel model = mr.createModel(modelName.getValue());
if (model instanceof EditableSModel) {
// XXX is there true need to setChanged newly created model?
((EditableSModel) model).setChanged(true);
}
return model;
}
}
return null;
}
public static Solution createSolution(Project mpsProject, String solutionName, IFile solutionBaseDirFile) {
SModule existingModule = new ModuleRepositoryFacade(mpsProject).getModuleByName(solutionName);
if (existingModule instanceof Solution) {
return ((Solution) existingModule);
}
final FileSystem fileSystem = solutionBaseDirFile.getFileSystem();
String solutionBaseDirPath = solutionBaseDirFile.getPath();
int i = 0;
while (!(BuildGeneratorUtil.isValidSolutionDir(solutionBaseDirFile))) {
solutionBaseDirFile = fileSystem.getFile(solutionBaseDirPath + i);
i++;
}
if (!(solutionBaseDirFile.exists())) {
solutionBaseDirFile.mkdirs();
}
return NewModuleUtil.createSolution(solutionName, solutionBaseDirFile.getPath(), mpsProject);
}
private static boolean isValidSolutionDir(IFile baseDirFile) {
return !(baseDirFile.getDescendant(Solution.SOLUTION_MODELS).exists()) || baseDirFile.getDescendant(Solution.SOLUTION_MODELS).getChildren().isEmpty();
}
}