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