package jetbrains.mps.vcs.actions; /*Generated by MPS */ import com.intellij.openapi.vcs.actions.AbstractVcsAction; import com.intellij.openapi.vcs.actions.VcsContext; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import jetbrains.mps.ide.projectPane.fileSystem.FileViewProjectPane; import org.jetbrains.annotations.Nullable; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.actionSystem.Presentation; import java.util.List; import org.jetbrains.annotations.NotNull; /*package*/ abstract class AbstractShowInFileView extends AbstractVcsAction { /*package*/ AbstractShowInFileView() { } @Override protected void actionPerformed(VcsContext e) { final Project project = e.getProject(); VirtualFile selectedFile = calculateSelectedFile(e); if (selectedFile != null) { assert project != null; FileViewProjectPane view = getView(project); view.selectNode(selectedFile, true); } } @Nullable private VirtualFile calculateSelectedFile(VcsContext e) { VirtualFile[] selectedFiles = e.getSelectedFiles(); if (selectedFiles.length == 0) { return null; } if (selectedFiles.length == 1) { return selectedFiles[0]; } return VfsUtil.getCommonAncestors(selectedFiles)[0]; } protected abstract FileViewProjectPane getView(Project project); @Override protected void update(VcsContext vcsContext, Presentation presentation) { if (vcsContext.getProject() == null) { presentation.setEnabled(false); return; } List<VirtualFile> baseDirs = getRoots(vcsContext); VirtualFile selectedFile = calculateSelectedFile(vcsContext); if (selectedFile != null) { for (VirtualFile baseDir : baseDirs) { if (canScroll(baseDir, selectedFile)) { presentation.setEnabled(true); return; } } } presentation.setEnabled(false); } protected abstract List<VirtualFile> getRoots(VcsContext vcsContext); private boolean canScroll(VirtualFile baseDir, @NotNull VirtualFile selectedFile) { if (baseDir != null) { return VfsUtil.isAncestor(baseDir, selectedFile, false); } return false; } }