package jetbrains.mps.vcs.platform.mergedriver; /*Generated by MPS */ import com.intellij.openapi.project.Project; import jetbrains.mps.vcs.platform.util.PluginUtil; import java.util.Arrays; import java.util.List; import com.intellij.openapi.vcs.VcsDirectoryMapping; import com.intellij.openapi.vcs.ProjectLevelVcsManager; import jetbrains.mps.internal.collections.runtime.Sequence; import jetbrains.mps.internal.collections.runtime.IWhereFilter; import jetbrains.mps.internal.collections.runtime.ListSequence; import com.intellij.openapi.application.ApplicationManager; public class MergeDriverInstaller { private MergeDriverInstaller() { } public static boolean isApplicable(Project project) { return PluginUtil.isGitPluginEnabled() || PluginUtil.isSvnPluginEnabled(); } public static AbstractInstaller.State getCompositeState(Project project, boolean allVcses) { Iterable<AbstractInstaller> installers = Arrays.asList(new GitGlobalInstaller(project), new GitGlobalInstaller(project), new GitRepositoriesInstaller(project), new SvnInstaller(project, false), new SvnInstaller(project, true)); if (!(allVcses)) { final List<VcsDirectoryMapping> directoryMappings = ProjectLevelVcsManager.getInstance(project).getDirectoryMappings(); installers = Sequence.fromIterable(installers).where(new IWhereFilter<AbstractInstaller>() { public boolean accept(final AbstractInstaller i) { return ListSequence.fromList(directoryMappings).any(new IWhereFilter<VcsDirectoryMapping>() { public boolean accept(VcsDirectoryMapping dm) { return dm.getVcs().equals(i.getAffectedVcsName()); } }); } }); } if (Sequence.fromIterable(installers).any(new IWhereFilter<AbstractInstaller>() { public boolean accept(AbstractInstaller i) { return i.getCurrentState() == AbstractInstaller.State.NOT_INSTALLED; } })) { return AbstractInstaller.State.NOT_INSTALLED; } else if (Sequence.fromIterable(installers).any(new IWhereFilter<AbstractInstaller>() { public boolean accept(AbstractInstaller i) { return i.getCurrentState() == AbstractInstaller.State.OUTDATED; } })) { return AbstractInstaller.State.OUTDATED; } else if (Sequence.fromIterable(installers).any(new IWhereFilter<AbstractInstaller>() { public boolean accept(AbstractInstaller it) { return it.getCurrentState() == AbstractInstaller.State.INSTALLED; } })) { return AbstractInstaller.State.INSTALLED; } else { return AbstractInstaller.State.NOT_ENABLED; } } public static void installWhereNeeded(final Project project) { ApplicationManager.getApplication().invokeLater(new Runnable() { public void run() { new MergeDriverOptionsDialog(project).show(); } }); } }