package jetbrains.mps.build.mps.testManifest.pluginSolution.plugin; /*Generated by MPS */ import jetbrains.mps.workbench.action.BaseAction; import org.apache.log4j.Logger; import org.apache.log4j.LogManager; import javax.swing.Icon; import com.intellij.openapi.actionSystem.AnActionEvent; import java.util.Map; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import jetbrains.mps.ide.actions.MPSCommonDataKeys; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import org.jetbrains.annotations.NotNull; import com.intellij.openapi.project.Project; import com.intellij.openapi.actionSystem.CommonDataKeys; import jetbrains.mps.project.MPSProject; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.baseLanguage.closures.runtime.Wrappers; import com.intellij.ide.IdeEventQueue; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.progress.ProgressIndicator; import org.apache.log4j.Level; import org.jetbrains.mps.openapi.model.SModel; import org.jetbrains.mps.openapi.module.SRepository; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SLinkOperations; import jetbrains.mps.smodel.ModuleRepositoryFacade; import jetbrains.mps.lang.smodel.behavior.ModelReferenceExpression__BehaviorDescriptor; import com.intellij.openapi.ui.Messages; import java.util.List; import java.util.ArrayList; import jetbrains.mps.internal.collections.runtime.ListSequence; import jetbrains.mps.ide.ThreadUtils; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SPropertyOperations; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SModelOperations; import jetbrains.mps.internal.collections.runtime.IWhereFilter; import jetbrains.mps.build.mps.util.PathConverter; import org.jetbrains.mps.openapi.language.SAbstractConcept; import jetbrains.mps.build.mps.util.VisibleModules; import jetbrains.mps.build.mps.util.ModuleLoader; import jetbrains.mps.build.mps.util.ModuleChecker; import jetbrains.mps.build.mps.util.ModuleLoaderException; import com.intellij.openapi.wm.IdeFrame; import com.intellij.openapi.wm.WindowManager; public class RefreshTestProject_Action extends BaseAction { private static final Logger LOG = LogManager.getLogger(RefreshTestProject_Action.class); private static final Icon ICON = null; public RefreshTestProject_Action() { super("Refresh Test Project", "", ICON); this.setIsAlwaysVisible(false); this.setExecuteOutsideCommand(true); } @Override public boolean isDumbAware() { return true; } @Override public boolean isApplicable(AnActionEvent event, final Map<String, Object> _params) { return SNodeOperations.isInstanceOf(event.getData(MPSCommonDataKeys.NODE), MetaAdapterFactory.getConcept(0x9f846aef4e4a4a84L, 0x828e7e83fe2697f2L, 0x2dc6844997876885L, "jetbrains.mps.build.mps.testManifest.structure.TestProjectConfiguration")); } @Override public void doUpdate(@NotNull AnActionEvent event, final Map<String, Object> _params) { this.setEnabledState(event.getPresentation(), this.isApplicable(event, _params)); } @Override protected boolean collectActionData(AnActionEvent event, final Map<String, Object> _params) { if (!(super.collectActionData(event, _params))) { return false; } { Project p = event.getData(CommonDataKeys.PROJECT); if (p == null) { return false; } } { MPSProject p = event.getData(MPSCommonDataKeys.MPS_PROJECT); if (p == null) { return false; } } { SNode node = event.getData(MPSCommonDataKeys.NODE); if (node != null && !(SNodeOperations.isInstanceOf(node, MetaAdapterFactory.getConcept(0x9f846aef4e4a4a84L, 0x828e7e83fe2697f2L, 0x2dc6844997876885L, "jetbrains.mps.build.mps.testManifest.structure.TestProjectConfiguration")))) { node = null; } if (node == null) { return false; } } return true; } @Override public void doExecute(@NotNull final AnActionEvent event, final Map<String, Object> _params) { String action = "Refresh Test Project"; final Wrappers._boolean done = new Wrappers._boolean(false); IdeEventQueue.getInstance().flushQueue(); ProgressManager.getInstance().runProcessWithProgressSynchronously(new Runnable() { public void run() { ProgressIndicator proInd = ProgressManager.getInstance().getProgressIndicator(); proInd.pushState(); try { done.value = RefreshTestProject_Action.this.doExecute(proInd, event); } catch (RuntimeException ex) { if (LOG.isEnabledFor(Level.ERROR)) { LOG.error("error processing test project", ex); } } finally { proInd.popState(); } } }, action, true, event.getData(CommonDataKeys.PROJECT)); if (!(done.value)) { RefreshTestProject_Action.this.displayInfo(action + " action cancelled", event); } } private boolean doExecute(ProgressIndicator proInd, final AnActionEvent event) { final Wrappers._T<SModel> target = new Wrappers._T<SModel>(); final Wrappers._boolean ok = new Wrappers._boolean(true); final SRepository repo = event.getData(MPSCommonDataKeys.MPS_PROJECT).getRepository(); repo.getModelAccess().runReadAction(new Runnable() { public void run() { // shamelessly copypasted from the smodel lang's generator SNode targetRef = SLinkOperations.getTarget(event.getData(MPSCommonDataKeys.NODE), MetaAdapterFactory.getContainmentLink(0x9f846aef4e4a4a84L, 0x828e7e83fe2697f2L, 0x2dc6844997876885L, 0x6a7c966ca6903a21L, "target")); target.value = new ModuleRepositoryFacade(repo).getModelByName(ModelReferenceExpression__BehaviorDescriptor.getFQName_id7K4mn_BeEzv.invoke(targetRef)); if (target.value == null) { Messages.showErrorDialog(event.getData(CommonDataKeys.PROJECT), "Not found target model: " + ModelReferenceExpression__BehaviorDescriptor.getFQName_id7K4mn_BeEzv.invoke(targetRef), "Model Not Found"); ok.value = false; } } }); if (!(ok.value)) { return false; } final List<SNode> manifests = new ArrayList<SNode>(); repo.getModelAccess().runReadAction(new Runnable() { public void run() { for (SNode mref : SLinkOperations.getChildren(event.getData(MPSCommonDataKeys.NODE), MetaAdapterFactory.getContainmentLink(0x9f846aef4e4a4a84L, 0x828e7e83fe2697f2L, 0x2dc6844997876885L, 0x2dc684499788dbc4L, "manifest"))) { SNode manifest = SLinkOperations.getTarget(mref, MetaAdapterFactory.getReferenceLink(0x9f846aef4e4a4a84L, 0x828e7e83fe2697f2L, 0x2dc684499788c1c4L, 0x2dc684499788c1c5L, "manifest")); ListSequence.fromList(manifests).addElement(manifest); } } }); ThreadUtils.runInUIThreadAndWait(new Runnable() { public void run() { repo.getModelAccess().executeCommand(new Runnable() { public void run() { TestModuleBuildProjectTemplate template = new TestModuleBuildProjectTemplate(event.getData(MPSCommonDataKeys.MPS_PROJECT), target.value); final SNode bproj = template.createBuildProject(event.getData(MPSCommonDataKeys.NODE), manifests); SPropertyOperations.set(bproj, MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x10802efe25aL, 0x115eca8579fL, "virtualPackage"), "generated"); SNode existing = ListSequence.fromList(SModelOperations.roots(target.value, MetaAdapterFactory.getConcept(0x798100da4f0a421aL, 0xb99171f8c50ce5d2L, 0x4df58c6f18f84a13L, "jetbrains.mps.build.structure.BuildProject"))).findFirst(new IWhereFilter<SNode>() { public boolean accept(SNode it) { return eq_tlmhfo_a0a0a0a0a0a5a0a0a0a1a0a0a0j0j(SPropertyOperations.getString(it, MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name")), SPropertyOperations.getString(bproj, MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name"))); } }); if ((existing != null)) { SNodeOperations.replaceWithAnother(existing, bproj); } else { SModelOperations.addRootNode(target.value, bproj); } PathConverter pathConverter = new PathConverter(bproj); List<SNode> modules = ListSequence.fromList(SNodeOperations.getNodeDescendants(bproj, MetaAdapterFactory.getConcept(0xcf935df46994e9cL, 0xa132fa109541cba3L, 0x4780308f5d333ebL, "jetbrains.mps.build.mps.structure.BuildMps_AbstractModule"), false, new SAbstractConcept[]{})).toListSequence(); for (SNode mod : modules) { try { VisibleModules visible = new VisibleModules(bproj); visible.collect(); ModuleLoader.createModuleChecker(mod, visible, pathConverter).check(ModuleChecker.CheckType.LOAD_IMPORTANT_PART); } catch (ModuleLoaderException ex) { if (LOG.isEnabledFor(Level.ERROR)) { LOG.error(ex.getMessage(), ex); } break; } } } }); } }); return ok.value; } private void displayInfo(String info, final AnActionEvent event) { IdeFrame frame = WindowManager.getInstance().getIdeFrame(event.getData(CommonDataKeys.PROJECT)); if (frame != null) { frame.getStatusBar().setInfo(info); } } private static boolean eq_tlmhfo_a0a0a0a0a0a5a0a0a0a1a0a0a0j0j(Object a, Object b) { return (a != null ? a.equals(b) : a == b); } }