package zielu.gittoolbox.repo; import com.intellij.openapi.components.AbstractProjectComponent; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.util.messages.MessageBusConnection; import git4idea.repo.GitRepository; import git4idea.repo.GitRepositoryChangeListener; import java.io.File; import java.util.Map; import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; import org.jetbrains.annotations.NotNull; public class GtRepositoryManager extends AbstractProjectComponent implements GitRepositoryChangeListener { private final Map<GitRepository, GtConfig> myConfigs = new ConcurrentHashMap<GitRepository, GtConfig>(); private MessageBusConnection myConnection; public GtRepositoryManager(Project project) { super(project); } @Override public void repositoryChanged(@NotNull GitRepository repository) { File configFile = new File(VfsUtilCore.virtualToIoFile(repository.getGitDir()), "config"); GtConfig config = GtConfig.load(configFile); myConfigs.put(repository, config); } public java.util.Optional<GtConfig> configFor(GitRepository repository) { return Optional.ofNullable(myConfigs.get(repository)); } @Override public void initComponent() { myConnection = myProject.getMessageBus().connect(); myConnection.subscribe(GitRepository.GIT_REPO_CHANGE, this); } @Override public void disposeComponent() { if (myConnection != null) { myConnection.disconnect(); myConnection = null; } myConfigs.clear(); } public static GtRepositoryManager getInstance(@NotNull Project project) { return project.getComponent(GtRepositoryManager.class); } }