/*******************************************************************************
* 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 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.Singleton;
import org.eclipse.che.ide.api.component.Component;
import org.eclipse.che.ide.api.dialogs.ChoiceDialog;
import org.eclipse.che.ide.api.dialogs.ConfirmDialog;
import org.eclipse.che.ide.api.dialogs.DialogFactory;
import org.eclipse.che.ide.api.dialogs.InputDialog;
import org.eclipse.che.ide.api.dialogs.MessageDialog;
import org.eclipse.che.ide.api.icon.IconRegistry;
import org.eclipse.che.ide.icon.DefaultIconsComponent;
import org.eclipse.che.ide.icon.IconRegistryImpl;
import org.eclipse.che.ide.menu.MainMenuView;
import org.eclipse.che.ide.menu.MainMenuViewImpl;
import org.eclipse.che.ide.menu.StatusPanelGroupView;
import org.eclipse.che.ide.menu.StatusPanelGroupViewImpl;
import org.eclipse.che.ide.ui.button.ConsoleButton;
import org.eclipse.che.ide.ui.button.ConsoleButtonFactory;
import org.eclipse.che.ide.ui.button.ConsoleButtonImpl;
import org.eclipse.che.ide.ui.dialogs.choice.ChoiceDialogFooter;
import org.eclipse.che.ide.ui.dialogs.choice.ChoiceDialogPresenter;
import org.eclipse.che.ide.ui.dialogs.choice.ChoiceDialogView;
import org.eclipse.che.ide.ui.dialogs.choice.ChoiceDialogViewImpl;
import org.eclipse.che.ide.ui.dialogs.confirm.ConfirmDialogFooter;
import org.eclipse.che.ide.ui.dialogs.confirm.ConfirmDialogPresenter;
import org.eclipse.che.ide.ui.dialogs.confirm.ConfirmDialogView;
import org.eclipse.che.ide.ui.dialogs.confirm.ConfirmDialogViewImpl;
import org.eclipse.che.ide.ui.dialogs.input.InputDialogFooter;
import org.eclipse.che.ide.ui.dialogs.input.InputDialogPresenter;
import org.eclipse.che.ide.ui.dialogs.input.InputDialogView;
import org.eclipse.che.ide.ui.dialogs.input.InputDialogViewImpl;
import org.eclipse.che.ide.ui.dialogs.message.MessageDialogFooter;
import org.eclipse.che.ide.ui.dialogs.message.MessageDialogPresenter;
import org.eclipse.che.ide.ui.dialogs.message.MessageDialogView;
import org.eclipse.che.ide.ui.dialogs.message.MessageDialogViewImpl;
import org.eclipse.che.ide.ui.multisplitpanel.SubPanel;
import org.eclipse.che.ide.ui.multisplitpanel.SubPanelFactory;
import org.eclipse.che.ide.ui.multisplitpanel.panel.SubPanelPresenter;
import org.eclipse.che.ide.ui.multisplitpanel.panel.SubPanelView;
import org.eclipse.che.ide.ui.multisplitpanel.panel.SubPanelViewFactory;
import org.eclipse.che.ide.ui.multisplitpanel.panel.SubPanelViewImpl;
import org.eclipse.che.ide.ui.multisplitpanel.tab.Tab;
import org.eclipse.che.ide.ui.multisplitpanel.tab.TabItemFactory;
import org.eclipse.che.ide.ui.multisplitpanel.tab.TabWidget;
import org.eclipse.che.ide.ui.toolbar.MainToolbar;
import org.eclipse.che.ide.ui.toolbar.ToolbarPresenter;
import org.eclipse.che.ide.ui.toolbar.ToolbarView;
import org.eclipse.che.ide.ui.toolbar.ToolbarViewImpl;
import org.eclipse.che.ide.workspace.WorkBenchControllerFactory;
import org.eclipse.che.ide.workspace.WorkBenchPartController;
import org.eclipse.che.ide.workspace.WorkBenchPartControllerImpl;
import org.eclipse.che.ide.workspace.WorkspaceView;
import org.eclipse.che.ide.workspace.WorkspaceViewImpl;
/**
* GIN module for configuring UI components.
*
* @author Artem Zatsarynnyi
*/
public class UiModule extends AbstractGinModule {
@Override
protected void configure() {
bind(IconRegistry.class).to(IconRegistryImpl.class).in(Singleton.class);
GinMapBinder<String, Component> componentsBinder = GinMapBinder.newMapBinder(binder(), String.class, Component.class);
componentsBinder.addBinding("DefaultIconsComponent").to(DefaultIconsComponent.class);
componentsBinder.addBinding("FontAwesomeInjector").to(FontAwesomeInjector.class);
// core UI components
install(new GinFactoryModuleBuilder()
.implement(WorkBenchPartController.class, WorkBenchPartControllerImpl.class)
.build(WorkBenchControllerFactory.class));
bind(WorkspaceView.class).to(WorkspaceViewImpl.class).in(Singleton.class);
bind(MainMenuView.class).to(MainMenuViewImpl.class).in(Singleton.class);
bind(ToolbarView.class).to(ToolbarViewImpl.class);
bind(ToolbarPresenter.class).annotatedWith(MainToolbar.class).to(ToolbarPresenter.class).in(Singleton.class);
// dialog factory
bind(MessageDialogFooter.class);
bind(MessageDialogView.class).to(MessageDialogViewImpl.class);
bind(ConfirmDialogFooter.class);
bind(ConfirmDialogView.class).to(ConfirmDialogViewImpl.class);
bind(ChoiceDialogFooter.class);
bind(ChoiceDialogView.class).to(ChoiceDialogViewImpl.class);
bind(InputDialogFooter.class);
bind(InputDialogView.class).to(InputDialogViewImpl.class);
install(new GinFactoryModuleBuilder()
.implement(MessageDialog.class, MessageDialogPresenter.class)
.implement(ConfirmDialog.class, ConfirmDialogPresenter.class)
.implement(ChoiceDialog.class, ChoiceDialogPresenter.class)
.implement(InputDialog.class, InputDialogPresenter.class)
.build(DialogFactory.class));
// multi-split panel
install(new GinFactoryModuleBuilder()
.implement(SubPanel.class, SubPanelPresenter.class)
.build(SubPanelFactory.class));
install(new GinFactoryModuleBuilder()
.implement(SubPanelView.class, SubPanelViewImpl.class)
.build(SubPanelViewFactory.class));
install(new GinFactoryModuleBuilder()
.implement(Tab.class, TabWidget.class)
.build(TabItemFactory.class));
// miscellaneous UI components
install(new GinFactoryModuleBuilder()
.implement(ConsoleButton.class, ConsoleButtonImpl.class)
.build(ConsoleButtonFactory.class));
bind(StatusPanelGroupView.class).to(StatusPanelGroupViewImpl.class).in(Singleton.class);
}
}