package org.ovirt.engine.ui.webadmin.gin;

import org.ovirt.engine.ui.webadmin.plugin.PluginEventHandler;
import org.ovirt.engine.ui.webadmin.plugin.PluginManager;
import org.ovirt.engine.ui.webadmin.plugin.api.PluginUiFunctions;
import org.ovirt.engine.ui.webadmin.plugin.restapi.RestApiSessionManager;
import org.ovirt.engine.ui.webadmin.section.main.presenter.DynamicUrlContentTabPresenter;
import org.ovirt.engine.ui.webadmin.section.main.presenter.DynamicUrlContentTabProxyFactory;
import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.DynamicUrlContentPopupPresenterWidget;
import org.ovirt.engine.ui.webadmin.section.main.view.DynamicUrlContentTabView;
import org.ovirt.engine.ui.webadmin.section.main.view.popup.DynamicUrlContentPopupView;

import com.google.inject.Singleton;
import com.gwtplatform.mvp.client.gin.AbstractPresenterModule;

/**
 * GIN module containing WebAdmin UI plugin infrastructure and related GWTP presenter bindings.
 */
public class PluginModule extends AbstractPresenterModule {

    @Override
    protected void configure() {
        bind(PluginManager.class).asEagerSingleton();
        bind(PluginEventHandler.class).asEagerSingleton();
        bind(PluginUiFunctions.class).in(Singleton.class);
        bind(RestApiSessionManager.class).in(Singleton.class);

        // Dynamic tab component
        bind(DynamicUrlContentTabPresenter.ViewDef.class).to(DynamicUrlContentTabView.class);
        bind(DynamicUrlContentTabProxyFactory.class).in(Singleton.class);

        // Dynamic dialog component
        bindPresenterWidget(DynamicUrlContentPopupPresenterWidget.class,
                DynamicUrlContentPopupPresenterWidget.ViewDef.class,
                DynamicUrlContentPopupView.class);
    }

}
