package jetbrains.mps.build.mps.pluginSolution.plugin; /*Generated by MPS */ import org.jetbrains.mps.openapi.model.SModel; import jetbrains.mps.project.Project; import jetbrains.mps.project.MPSProject; import jetbrains.mps.project.Solution; import java.util.List; import jetbrains.mps.internal.collections.runtime.ListSequence; import java.util.ArrayList; import jetbrains.mps.internal.collections.runtime.Sequence; import java.util.Collections; import org.jetbrains.mps.openapi.persistence.ModelRoot; import jetbrains.mps.internal.collections.runtime.IWhereFilter; import org.jetbrains.mps.openapi.model.EditableSModel; public class ModelStep extends TwoOptionsStep<SModel> { private Project myMPSProject; public ModelStep(Project project, AbstractBuildGenerator buildGenerator, IErrorHandler handler) { super(((MPSProject) project).getProject(), buildGenerator, handler); myMPSProject = project; } @Override protected void setChecked(boolean checked) { this.myGenerator.setCreateModel(checked); } @Override protected boolean getChecked() { return this.myGenerator.getCreateModel(); } @Override protected String getComboBoxName() { return "Use existing model:"; } @Override protected String getVariantName(final SModel model) { return model.getName().getSimpleName(); } @Override protected String getTextFieldText() { return this.myGenerator.getNewModelName(); } @Override protected void setTextFieldText(String text) { this.myGenerator.setNewModelName(text); } @Override protected String getCheckBoxName() { return "Create new model"; } @Override protected void setVariant(SModel m) { this.myGenerator.setModel(m); } @Override protected String getTextFieldName() { return "New model name:"; } @Override protected SModel[] getVariants() { final Solution solution = this.myGenerator.getSolution(); if (solution == null) { return new SModel[0]; } else { final List<SModel> modelsVariants = ListSequence.fromList(new ArrayList<SModel>()); myMPSProject.getModelAccess().runReadAction(new Runnable() { @Override public void run() { Iterable<SModel> models = Sequence.fromIterable(Collections.<SModel>emptyList()); for (ModelRoot mr : solution.getModelRoots()) { models = Sequence.fromIterable(models).concat(Sequence.fromIterable(mr.getModels())); } ListSequence.fromList(modelsVariants).addSequence(Sequence.fromIterable(models).where(new IWhereFilter<SModel>() { public boolean accept(SModel it) { return it instanceof EditableSModel && !(it.isReadOnly()); } })); } }); return ListSequence.fromList(modelsVariants).toGenericArray(SModel.class); } } @Override public String getDescription() { return "Select a model to create a new build script."; } @Override protected boolean isCheckBoxEnabled() { return !(this.myGenerator.getCreateSolution()); } @Override protected boolean isValid(String text) { return this.myGenerator.isValidModelName(text); } @Override protected String getWarningText(String text) { if (text.equals("")) { return "Empty model name is not allowed."; } return "Model " + text + " already exists, choose another name."; } }