package org.rstudio.studio.client.workbench.views.packages.model;
import org.rstudio.studio.client.application.events.EventBus;
import org.rstudio.studio.client.packages.events.PackageExtensionIndexingCompletedEvent;
import org.rstudio.studio.client.projects.events.ProjectTemplateRegistryUpdatedEvent;
import org.rstudio.studio.client.projects.model.ProjectTemplateRegistry;
import org.rstudio.studio.client.workbench.addins.Addins.RAddins;
import org.rstudio.studio.client.workbench.addins.events.AddinRegistryUpdatedEvent;
import org.rstudio.studio.client.workbench.events.SessionInitEvent;
import org.rstudio.studio.client.workbench.events.SessionInitHandler;
import org.rstudio.studio.client.workbench.model.Session;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@Singleton
public class PackageProvidedExtensions
implements SessionInitHandler,
PackageExtensionIndexingCompletedEvent.Handler
{
public static class Data extends JavaScriptObject
{
protected Data() {}
public final native RAddins getAddinsRegistry()
/*-{
return this["addins_registry"];
}-*/;
public final native ProjectTemplateRegistry getProjectTemplateRegistry()
/*-{
return this["project_templates_registry"];
}-*/;
}
@Inject
public PackageProvidedExtensions(Session session,
EventBus events)
{
session_ = session;
events_ = events;
events_.addHandler(SessionInitEvent.TYPE, this);
events_.addHandler(PackageExtensionIndexingCompletedEvent.TYPE, this);
}
@Override
public void onSessionInit(SessionInitEvent sie)
{
update(session_.getSessionInfo().getPackageProvidedExtensions());
}
@Override
public void onPackageExtensionIndexingCompleted(PackageExtensionIndexingCompletedEvent event)
{
update(event.getData());
}
private void update(PackageProvidedExtensions.Data data)
{
// update addins
RAddins addinRegistry = data.getAddinsRegistry();
if (addinRegistry != null)
events_.fireEvent(new AddinRegistryUpdatedEvent(addinRegistry));
// update project templates
ProjectTemplateRegistry ptRegistry = data.getProjectTemplateRegistry();
if (ptRegistry != null)
events_.fireEvent(new ProjectTemplateRegistryUpdatedEvent(ptRegistry));
}
// Injected ----
private final Session session_;
private final EventBus events_;
}