package com.intellij.openapi.fileEditor.impl;
import com.intellij.openapi.fileEditor.FileEditor;
import com.intellij.openapi.fileEditor.FileEditorProvider;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
public class TestEditorSplitter {
private final HashMap<String, TestEditorTabGroup> myTabGroups = new HashMap<>();
private static final String Default = "Default";
private String myActiveTabGroupName = Default;
public TestEditorSplitter() {
myTabGroups.put(Default, new TestEditorTabGroup(Default));
myActiveTabGroupName = Default;
}
private TestEditorTabGroup getActiveTabGroup() {
return myTabGroups.get(myActiveTabGroupName);
}
public void openAndFocusTab(VirtualFile virtualFile, FileEditor fileEditor, FileEditorProvider provider) {
getActiveTabGroup().openTab(virtualFile, fileEditor, provider);
}
public void setActiveTabGroup(@NotNull String tabGroup) {
TestEditorTabGroup result = myTabGroups.get(tabGroup);
if (result == null) {
result = new TestEditorTabGroup(tabGroup);
myTabGroups.put(tabGroup, result);
}
myActiveTabGroupName = tabGroup;
}
@Nullable
public FileEditor getFocusedFileEditor() {
Pair<FileEditor, FileEditorProvider> openedEditor = getActiveTabGroup().getOpenedEditor();
if(openedEditor == null)
return null;
return openedEditor.first;
}
@Nullable
public FileEditorProvider getProviderFromFocused() {
Pair<FileEditor, FileEditorProvider> openedEditor = getActiveTabGroup().getOpenedEditor();
if(openedEditor == null)
return null;
return openedEditor.second;
}
public VirtualFile getFocusedFile() {
return getActiveTabGroup().getOpenedFile();
}
public void closeFile(@NotNull VirtualFile file) {
TestEditorTabGroup testEditorTabGroup = getActiveTabGroup();
String key = myActiveTabGroupName;
if (!testEditorTabGroup.contains(file)) {
for (Map.Entry<String, TestEditorTabGroup> next : myTabGroups.entrySet()) {
key = next.getKey();
TestEditorTabGroup value = next.getValue();
if (value.contains(file)) {
testEditorTabGroup = value;
break;
}
}
}
testEditorTabGroup.closeTab(file);
if (!Objects.equals(key, Default) && testEditorTabGroup.getTabCount() == 0)
myTabGroups.remove(key);
}
@Nullable
public Pair<FileEditor, FileEditorProvider> getEditorAndProvider(VirtualFile file) {
return getActiveTabGroup().getEditorAndProvider(file);
}
}