package uk.co.ben_gibson.git.link.UI.Action.VcsLog; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.vcs.log.VcsFullCommitDetails; import com.intellij.vcs.log.VcsLog; import com.intellij.vcs.log.VcsLogDataKeys; import org.jetbrains.annotations.NotNull; import uk.co.ben_gibson.git.link.Git.Commit; import uk.co.ben_gibson.git.link.UI.Action.Action; import java.util.List; /** * An action triggered from an VCS log toolbar. */ abstract class VcsLogAction extends Action { protected abstract void perform(@NotNull final Project project, @NotNull final Commit commit, final @NotNull VirtualFile file); @Override public void actionPerformed(@NotNull final Project project, @NotNull final AnActionEvent event) { VcsLog vcsLog = event.getData(VcsLogDataKeys.VCS_LOG); if (vcsLog == null) { return; } VcsFullCommitDetails vcsCommit = vcsLog.getSelectedDetails().get(0); Commit commit = new Commit(vcsCommit.getId().toShortString()); this.perform(project, commit, vcsCommit.getRoot()); } @Override protected boolean shouldActionBeEnabled(@NotNull final AnActionEvent event) { VcsLog log = event.getData(VcsLogDataKeys.VCS_LOG); if (log == null) { return false; } List<VcsFullCommitDetails> commits = log.getSelectedDetails(); return commits.size() == 1; } }