package sk.stuba.fiit.perconik.activity.listeners.git; import org.eclipse.jgit.events.RefsChangedEvent; import org.eclipse.jgit.lib.Repository; import sk.stuba.fiit.perconik.activity.listeners.ActivityListener; import sk.stuba.fiit.perconik.core.listeners.GitReferenceListener; import sk.stuba.fiit.perconik.utilities.concurrent.NamedRunnable; import static sk.stuba.fiit.perconik.activity.listeners.AbstractListener.RegistrationHook.POST_REGISTER; import static sk.stuba.fiit.perconik.eclipse.core.resources.Workspaces.getWorkspace; import static sk.stuba.fiit.perconik.eclipse.egit.core.projects.GitProjects.fromWorkspace; /** * TODO * * @author Pavol Zbell * @since 1.0 */ abstract class AbstractReferenceListener extends ActivityListener implements GitReferenceListener { AbstractReferenceListener() { POST_REGISTER.add(this, new NamedRunnable(this.getClass(), "RepositoryLoader") { public void run() { loadRepositories(); } }); } final void loadRepositories() { for (Repository repository: fromWorkspace(getWorkspace()).values()) { try { this.loadRepository(repository); } catch (RuntimeException failure) { this.log.error(failure, "%s: cache initialization failure while reading %s", this, repository); } } } abstract void loadRepository(Repository repository); abstract void process(long time, Repository repository); public final void onRefsChanged(final RefsChangedEvent event) { final long time = this.currentTime(); this.execute(new Runnable() { public void run() { process(time, event.getRepository()); } }); } }