package jetbrains.mps.lang.generator.pluginSolution.plugin;
/*Generated by MPS */
import jetbrains.mps.workbench.action.BaseAction;
import javax.swing.Icon;
import com.intellij.openapi.actionSystem.AnActionEvent;
import java.util.Map;
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.ide.actions.MPSCommonDataKeys;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations;
import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory;
import jetbrains.mps.project.MPSProject;
import org.jetbrains.annotations.NotNull;
import com.intellij.openapi.ui.DialogWrapper;
import org.jetbrains.mps.openapi.module.SRepository;
import org.jetbrains.mps.openapi.model.SModel;
import jetbrains.mps.generator.impl.plan.GenerationPlan;
import jetbrains.mps.generator.ModelGenerationPlan;
import jetbrains.mps.generator.runtime.TemplateMappingConfiguration;
import org.jetbrains.mps.openapi.module.SModuleReference;
public class DeriveGenPlanModel_Action extends BaseAction {
private static final Icon ICON = null;
public DeriveGenPlanModel_Action() {
super("Derive Generation Plan", "", ICON);
this.setIsAlwaysVisible(false);
this.setExecuteOutsideCommand(true);
}
@Override
public boolean isDumbAware() {
return true;
}
@Override
protected boolean collectActionData(AnActionEvent event, final Map<String, Object> _params) {
if (!(super.collectActionData(event, _params))) {
return false;
}
{
SNode node = event.getData(MPSCommonDataKeys.NODE);
if (node != null && !(SNodeOperations.isInstanceOf(node, MetaAdapterFactory.getConcept(0x7ab1a6fa0a114b95L, 0x9e4875f363d6cb00L, 0x19443180a20717fbL, "jetbrains.mps.lang.generator.plan.structure.Plan")))) {
node = null;
}
if (node == null) {
return false;
}
}
{
MPSProject p = event.getData(MPSCommonDataKeys.MPS_PROJECT);
if (p == null) {
return false;
}
}
return true;
}
@Override
public void doExecute(@NotNull final AnActionEvent event, final Map<String, Object> _params) {
final DeriveGenPlanDialog dialog = new DeriveGenPlanDialog(event.getData(MPSCommonDataKeys.MPS_PROJECT));
dialog.show();
if (dialog.getExitCode() != DialogWrapper.OK_EXIT_CODE || dialog.getSelectedModel() == null) {
return;
}
final SRepository repository = event.getData(MPSCommonDataKeys.MPS_PROJECT).getRepository();
repository.getModelAccess().executeCommand(new Runnable() {
public void run() {
GenPlanFunnel gpf = new GenPlanFunnel(repository, event.getData(MPSCommonDataKeys.NODE));
if (dialog.useLanguageInSteps()) {
gpf.transformLanguages();
} else {
gpf.applyGenerators();
}
gpf.distinctSteps(dialog.isDistinctStep());
SModel sampleModel = dialog.getSelectedModel().resolve(repository);
GenerationPlan plan = new GenerationPlan(sampleModel);
for (ModelGenerationPlan.Step step : plan.getSteps()) {
if (!(step instanceof ModelGenerationPlan.Transform)) {
continue;
}
ModelGenerationPlan.Transform ts = ((ModelGenerationPlan.Transform) step);
for (TemplateMappingConfiguration tmc : ts.getTransformations()) {
SModuleReference generatorModuleRef = tmc.getModel().getModule().getModuleReference();
gpf.next(generatorModuleRef);
}
}
}
});
}
}