/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.ide.core; import elemental.json.Json; import elemental.json.JsonFactory; import com.google.gwt.inject.client.AbstractGinModule; import com.google.gwt.inject.client.assistedinject.GinFactoryModuleBuilder; import com.google.gwt.inject.client.multibindings.GinMapBinder; import com.google.inject.Provides; import com.google.inject.Singleton; import com.google.web.bindery.event.shared.EventBus; import com.google.web.bindery.event.shared.SimpleEventBus; import org.eclipse.che.ide.actions.ActionApiModule; import org.eclipse.che.ide.api.ConnectionClosedInformer; import org.eclipse.che.ide.api.ProductInfoDataProvider; import org.eclipse.che.ide.api.ProductInfoDataProviderImpl; import org.eclipse.che.ide.api.app.AppContext; import org.eclipse.che.ide.api.component.Component; import org.eclipse.che.ide.api.extension.ExtensionGinModule; import org.eclipse.che.ide.api.extension.ExtensionRegistry; import org.eclipse.che.ide.api.git.GitServiceClient; import org.eclipse.che.ide.api.git.GitServiceClientImpl; import org.eclipse.che.ide.api.keybinding.KeyBindingAgent; import org.eclipse.che.ide.api.machine.CheWsAgentLinksModifier; import org.eclipse.che.ide.api.machine.ExecAgentCommandManager; import org.eclipse.che.ide.api.machine.ExecAgentEventManager; import org.eclipse.che.ide.api.machine.RecipeServiceClient; import org.eclipse.che.ide.api.machine.RecipeServiceClientImpl; import org.eclipse.che.ide.api.machine.WsAgentURLModifier; import org.eclipse.che.ide.api.machine.execagent.ConnectedEventHandler; import org.eclipse.che.ide.api.machine.execagent.JsonRpcExecAgentCommandManager; import org.eclipse.che.ide.api.machine.execagent.JsonRpcExecAgentEventManager; import org.eclipse.che.ide.api.parts.WorkspaceAgent; import org.eclipse.che.ide.api.reference.FqnProvider; import org.eclipse.che.ide.api.selection.SelectionAgent; import org.eclipse.che.ide.api.ssh.SshServiceClient; import org.eclipse.che.ide.api.ssh.SshServiceClientImpl; import org.eclipse.che.ide.api.user.AskCredentialsDialog; import org.eclipse.che.ide.client.ConnectionClosedInformerImpl; import org.eclipse.che.ide.clipboard.ClipboardModule; import org.eclipse.che.ide.command.CommandApiModule; import org.eclipse.che.ide.console.ConsoleGinModule; import org.eclipse.che.ide.context.AppContextImpl; import org.eclipse.che.ide.debug.DebugApiModule; import org.eclipse.che.ide.editor.EditorApiModule; import org.eclipse.che.ide.editor.preferences.EditorPreferencesModule; import org.eclipse.che.ide.factory.inject.FactoryGinModule; import org.eclipse.che.ide.filetypes.FileTypeApiModule; import org.eclipse.che.ide.keybinding.KeyBindingManager; import org.eclipse.che.ide.machine.MachineApiModule; import org.eclipse.che.ide.macro.MacroApiModule; import org.eclipse.che.ide.notification.NotificationApiModule; import org.eclipse.che.ide.oauth.OAuthApiModule; import org.eclipse.che.ide.part.PartApiModule; import org.eclipse.che.ide.preferences.PreferencesApiModule; import org.eclipse.che.ide.processes.ProcessesGinModule; import org.eclipse.che.ide.project.ProjectApiModule; import org.eclipse.che.ide.projectimport.ProjectImportModule; import org.eclipse.che.ide.resources.ResourceApiModule; import org.eclipse.che.ide.rest.RestContext; import org.eclipse.che.ide.rest.RestContextProvider; import org.eclipse.che.ide.search.factory.FindResultNodeFactory; import org.eclipse.che.ide.selection.SelectionAgentImpl; import org.eclipse.che.ide.statepersistance.PersistenceApiModule; import org.eclipse.che.ide.terminal.TerminalFactory; import org.eclipse.che.ide.terminal.TerminalInitializer; import org.eclipse.che.ide.theme.ThemeApiModule; import org.eclipse.che.ide.ui.loaders.PopupLoaderFactory; import org.eclipse.che.ide.ui.loaders.request.LoaderFactory; import org.eclipse.che.ide.user.AskCredentialsDialogImpl; import org.eclipse.che.ide.user.UserApiModule; import org.eclipse.che.ide.workspace.WorkspaceApiModule; import org.eclipse.che.ide.workspace.WorkspacePresenter; import org.eclipse.che.ide.workspace.events.WorkspaceEventsModule; import org.eclipse.che.providers.DynaProvider; import org.eclipse.che.providers.DynaProviderImpl; /** * @author Nikolay Zamosenchuk * @author Dmitry Shnurenko */ @ExtensionGinModule public class CoreGinModule extends AbstractGinModule { @Override protected void configure() { install(new JsonRpcModule()); install(new WebSocketModule()); install(new ClientServerEventModule()); install(new UiModule()); install(new ClipboardModule()); install(new EditorApiModule()); install(new EditorPreferencesModule()); install(new NotificationApiModule()); install(new FileTypeApiModule()); install(new ResourceApiModule()); install(new ActionApiModule()); install(new PartApiModule()); install(new DebugApiModule()); install(new ThemeApiModule()); install(new PreferencesApiModule()); install(new PersistenceApiModule()); install(new MacroApiModule()); install(new UserApiModule()); install(new WorkspaceApiModule()); install(new MachineApiModule()); install(new CommandApiModule()); install(new ConsoleGinModule()); install(new ProcessesGinModule()); install(new ProjectApiModule()); install(new ProjectImportModule()); install(new OAuthApiModule()); install(new WorkspaceEventsModule()); install(new FactoryGinModule()); install(new WorkspaceEventsModule()); // configure miscellaneous core components bind(StandardComponentInitializer.class).in(Singleton.class); bind(TerminalInitializer.class).in(Singleton.class); GinMapBinder<String, Component> componentsBinder = GinMapBinder.newMapBinder(binder(), String.class, Component.class); componentsBinder.addBinding("Standard components").to(StandardComponent.class); bind(DynaProvider.class).to(DynaProviderImpl.class); GinMapBinder.newMapBinder(binder(), String.class, FqnProvider.class); bind(EventBus.class).to(SimpleEventBus.class).in(Singleton.class); //TODO: don't remove binding until not fix Codenvy and other packaging bind(String.class).annotatedWith(RestContext.class).toProvider(RestContextProvider.class).in(Singleton.class); install(new GinFactoryModuleBuilder().build(LoaderFactory.class)); install(new GinFactoryModuleBuilder().build(PopupLoaderFactory.class)); bind(ExtensionRegistry.class).in(Singleton.class); bind(AppContext.class).to(AppContextImpl.class); install(new GinFactoryModuleBuilder().build(FindResultNodeFactory.class)); install(new GinFactoryModuleBuilder().build(TerminalFactory.class)); // clients for the REST services bind(GitServiceClient.class).to(GitServiceClientImpl.class).in(Singleton.class); bind(SshServiceClient.class).to(SshServiceClientImpl.class).in(Singleton.class); bind(RecipeServiceClient.class).to(RecipeServiceClientImpl.class).in(Singleton.class); // IDE agents bind(SelectionAgent.class).to(SelectionAgentImpl.class).asEagerSingleton(); bind(KeyBindingAgent.class).to(KeyBindingManager.class).in(Singleton.class); bind(WorkspaceAgent.class).to(WorkspacePresenter.class).in(Singleton.class); // Exec agent bind(ExecAgentCommandManager.class).to(JsonRpcExecAgentCommandManager.class); bind(ExecAgentEventManager.class).to(JsonRpcExecAgentEventManager.class); bind(ConnectedEventHandler.class).asEagerSingleton(); bind(AskCredentialsDialog.class).to(AskCredentialsDialogImpl.class); bind(ProductInfoDataProvider.class).to(ProductInfoDataProviderImpl.class); bind(WsAgentURLModifier.class).to(CheWsAgentLinksModifier.class); bind(ConnectionClosedInformer.class).to(ConnectionClosedInformerImpl.class); } @Provides @Singleton protected JsonFactory provideJsonFactory() { return Json.instance(); } }