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