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