package jetbrains.mps.vcs.plugin; /*Generated by MPS */ import jetbrains.mps.workbench.action.BaseAction; import javax.swing.Icon; import com.intellij.icons.AllIcons; import com.intellij.openapi.actionSystem.AnActionEvent; import java.util.Map; import org.jetbrains.mps.openapi.persistence.DataSource; import jetbrains.mps.ide.actions.MPSCommonDataKeys; import jetbrains.mps.extapi.persistence.FileDataSource; import com.intellij.openapi.vfs.VirtualFile; import jetbrains.mps.ide.vfs.VirtualFileUtils; import jetbrains.mps.util.SNodeOperations; import com.intellij.openapi.vcs.ProjectLevelVcsManager; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.vcs.FileStatus; import com.intellij.openapi.vcs.impl.VcsFileStatusProvider; import jetbrains.mps.persistence.FilePerRootDataSource; import jetbrains.mps.smodel.ModelAccess; import jetbrains.mps.util.Computable; import jetbrains.mps.project.MPSExtentions; import org.jetbrains.annotations.NotNull; import org.jetbrains.mps.openapi.model.SNode; import com.intellij.openapi.project.Project; import org.jetbrains.mps.openapi.model.SModel; import org.jetbrains.mps.openapi.model.EditableSModel; import jetbrains.mps.vcs.platform.actions.VcsActionsUtil; public class ShowDiffererenceWithCurrentRevision_Action extends BaseAction { private static final Icon ICON = AllIcons.Actions.Diff; public ShowDiffererenceWithCurrentRevision_Action() { super("Compare with the Same Repository Version", "", ICON); this.setIsAlwaysVisible(false); this.setExecuteOutsideCommand(true); } @Override public boolean isDumbAware() { return true; } @Override public boolean isApplicable(final AnActionEvent event, final Map<String, Object> _params) { DataSource dataSource = event.getData(MPSCommonDataKeys.CONTEXT_MODEL).getSource(); if (dataSource instanceof FileDataSource) { VirtualFile virtualFile = VirtualFileUtils.getProjectVirtualFile(((FileDataSource) event.getData(MPSCommonDataKeys.CONTEXT_MODEL).getSource()).getFile()); assert virtualFile != null; if (SNodeOperations.isRoot(event.getData(MPSCommonDataKeys.NODE)) && ProjectLevelVcsManager.getInstance(event.getData(CommonDataKeys.PROJECT)).getVcsFor(virtualFile) != null) { FileStatus fileStatus = event.getData(CommonDataKeys.PROJECT).getComponent(VcsFileStatusProvider.class).getFileStatus(virtualFile); return FileStatus.ADDED != fileStatus && FileStatus.UNKNOWN != fileStatus; } } else if (dataSource instanceof FilePerRootDataSource) { if (!(SNodeOperations.isRoot(event.getData(MPSCommonDataKeys.NODE)))) { return false; } String rootName = ModelAccess.instance().runReadAction(new Computable<String>() { public String compute() { return event.getData(MPSCommonDataKeys.NODE).getName(); } }); VirtualFile virtualFile = VirtualFileUtils.getProjectVirtualFile(((FilePerRootDataSource) event.getData(MPSCommonDataKeys.CONTEXT_MODEL).getSource()).getFile(rootName + "." + MPSExtentions.MODEL_ROOT)); assert virtualFile != null; if (ProjectLevelVcsManager.getInstance(event.getData(CommonDataKeys.PROJECT)).getVcsFor(virtualFile) != null) { FileStatus fileStatus = event.getData(CommonDataKeys.PROJECT).getComponent(VcsFileStatusProvider.class).getFileStatus(virtualFile); return FileStatus.ADDED != fileStatus && FileStatus.UNKNOWN != fileStatus; } } return false; } @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; } { SNode p = event.getData(MPSCommonDataKeys.NODE); if (p == null) { return false; } } { Project p = event.getData(CommonDataKeys.PROJECT); if (p == null) { return false; } } { SModel p = event.getData(MPSCommonDataKeys.CONTEXT_MODEL); if (p == null) { return false; } if (!(p instanceof EditableSModel) || p.isReadOnly()) { return false; } } return true; } @Override public void doExecute(@NotNull final AnActionEvent event, final Map<String, Object> _params) { VcsActionsUtil.showRootDifference(event.getData(MPSCommonDataKeys.CONTEXT_MODEL), event.getData(MPSCommonDataKeys.NODE), event.getData(CommonDataKeys.PROJECT), null); } }