package org.ovirt.engine.ui.webadmin.gin.uicommon;
import org.ovirt.engine.core.common.businessentities.AuditLog;
import org.ovirt.engine.core.common.businessentities.Permission;
import org.ovirt.engine.core.common.businessentities.Quota;
import org.ovirt.engine.core.common.businessentities.QuotaCluster;
import org.ovirt.engine.core.common.businessentities.QuotaStorage;
import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.businessentities.VmTemplate;
import org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget;
import org.ovirt.engine.ui.common.presenter.popup.DefaultConfirmationPopupPresenterWidget;
import org.ovirt.engine.ui.common.presenter.popup.RemoveConfirmationPopupPresenterWidget;
import org.ovirt.engine.ui.common.presenter.popup.RolePermissionsRemoveConfirmationPopupPresenterWidget;
import org.ovirt.engine.ui.common.uicommon.model.MainModelProvider;
import org.ovirt.engine.ui.common.uicommon.model.MainTabModelProvider;
import org.ovirt.engine.ui.common.uicommon.model.SearchableDetailModelProvider;
import org.ovirt.engine.ui.common.uicommon.model.SearchableDetailTabModelProvider;
import org.ovirt.engine.ui.uicommonweb.UICommand;
import org.ovirt.engine.ui.uicommonweb.models.CommonModel;
import org.ovirt.engine.ui.uicommonweb.models.ConfirmationModel;
import org.ovirt.engine.ui.uicommonweb.models.Model;
import org.ovirt.engine.ui.uicommonweb.models.quota.QuotaClusterListModel;
import org.ovirt.engine.ui.uicommonweb.models.quota.QuotaEventListModel;
import org.ovirt.engine.ui.uicommonweb.models.quota.QuotaListModel;
import org.ovirt.engine.ui.uicommonweb.models.quota.QuotaPermissionListModel;
import org.ovirt.engine.ui.uicommonweb.models.quota.QuotaStorageListModel;
import org.ovirt.engine.ui.uicommonweb.models.quota.QuotaTemplateListModel;
import org.ovirt.engine.ui.uicommonweb.models.quota.QuotaUserListModel;
import org.ovirt.engine.ui.uicommonweb.models.quota.QuotaVmListModel;
import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.PermissionsPopupPresenterWidget;
import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.event.EventPopupPresenterWidget;
import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.quota.QuotaPopupPresenterWidget;
import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.quota.QuotaMainTabSelectedItems;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.inject.client.AbstractGinModule;
import com.google.inject.Provider;
import com.google.inject.Provides;
import com.google.inject.Singleton;
import com.google.inject.TypeLiteral;
public class QuotaModule extends AbstractGinModule {
// Main List Model
@Provides
@Singleton
public MainModelProvider<Quota, QuotaListModel> getQuotaListProvider(EventBus eventBus,
Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider,
final Provider<QuotaPopupPresenterWidget> quotaPopupProvider,
final Provider<RemoveConfirmationPopupPresenterWidget> removeConfirmPopupProvider,
final Provider<QuotaListModel> modelProvider,
final Provider<CommonModel> commonModelProvider) {
MainTabModelProvider<Quota, QuotaListModel> result =
new MainTabModelProvider<Quota, QuotaListModel>(eventBus, defaultConfirmPopupProvider,
commonModelProvider) {
@Override
public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup(
QuotaListModel source,
UICommand lastExecutedCommand, Model windowModel) {
if (lastExecutedCommand.equals(getModel().getCreateCommand())
|| lastExecutedCommand.equals(getModel().getEditCommand())
|| lastExecutedCommand.equals(getModel().getCloneCommand())) {
return quotaPopupProvider.get();
} else {
return super.getModelPopup(source, lastExecutedCommand, windowModel);
}
}
@Override
public AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, ?>
getConfirmModelPopup(QuotaListModel source,
UICommand lastExecutedCommand) {
if (lastExecutedCommand.equals(getModel().getRemoveCommand())) {
return removeConfirmPopupProvider.get();
} else {
return super.getConfirmModelPopup(source, lastExecutedCommand);
}
}
};
result.setModelProvider(modelProvider);
return result;
}
// Search-able Detail Models
@Provides
@Singleton
public SearchableDetailModelProvider<Permission, QuotaListModel, QuotaUserListModel>
getQuotaUserListProvider(EventBus eventBus,
Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider,
final Provider<PermissionsPopupPresenterWidget> popupProvider,
final Provider<RemoveConfirmationPopupPresenterWidget> removeConfirmPopupProvider,
final Provider<QuotaListModel> mainModelProvider,
final Provider<QuotaUserListModel> modelProvider) {
SearchableDetailTabModelProvider<Permission, QuotaListModel, QuotaUserListModel> result =
new SearchableDetailTabModelProvider<Permission, QuotaListModel, QuotaUserListModel>(
eventBus, defaultConfirmPopupProvider) {
@Override
public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup(
QuotaUserListModel source,
UICommand lastExecutedCommand, Model windowModel) {
if (lastExecutedCommand == getModel().getAddCommand()) {
return popupProvider.get();
} else {
return super.getModelPopup(source, lastExecutedCommand, windowModel);
}
}
@Override
public AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, ?>
getConfirmModelPopup(QuotaUserListModel source,
UICommand lastExecutedCommand) {
if (lastExecutedCommand == getModel().getRemoveCommand()) {
return removeConfirmPopupProvider.get();
} else {
return super.getConfirmModelPopup(source, lastExecutedCommand);
}
}
};
result.setMainModelProvider(mainModelProvider);
result.setModelProvider(modelProvider);
return result;
}
@Provides
@Singleton
public SearchableDetailModelProvider<Permission, QuotaListModel, QuotaPermissionListModel>
getQuotaPermissionListProvider(EventBus eventBus,
Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider,
final Provider<PermissionsPopupPresenterWidget> popupProvider,
final Provider<RolePermissionsRemoveConfirmationPopupPresenterWidget> removeConfirmPopupProvider,
final Provider<QuotaListModel> mainModelProvider,
final Provider<QuotaPermissionListModel> modelProvider) {
SearchableDetailTabModelProvider<Permission, QuotaListModel, QuotaPermissionListModel> result =
new SearchableDetailTabModelProvider<Permission, QuotaListModel, QuotaPermissionListModel>(
eventBus, defaultConfirmPopupProvider) {
@Override
public AbstractModelBoundPopupPresenterWidget<? extends Model, ?>
getModelPopup(QuotaPermissionListModel source,
UICommand lastExecutedCommand,
Model windowModel) {
if (lastExecutedCommand == getModel().getAddCommand()) {
return popupProvider.get();
} else {
return super.getModelPopup(source, lastExecutedCommand, windowModel);
}
}
@Override
public AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, ?>
getConfirmModelPopup(QuotaPermissionListModel source,
UICommand lastExecutedCommand) {
if (lastExecutedCommand == getModel().getRemoveCommand()) {
return removeConfirmPopupProvider.get();
} else {
return super.getConfirmModelPopup(source, lastExecutedCommand);
}
}
};
result.setMainModelProvider(mainModelProvider);
result.setModelProvider(modelProvider);
return result;
}
@Provides
@Singleton
public SearchableDetailModelProvider<AuditLog, QuotaListModel, QuotaEventListModel>
getQuotaEventListProvider(EventBus eventBus,
Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider,
final Provider<EventPopupPresenterWidget> eventPopupProvider,
final Provider<QuotaListModel> mainModelProvider,
final Provider<QuotaEventListModel> modelProvider) {
SearchableDetailTabModelProvider<AuditLog, QuotaListModel, QuotaEventListModel> result =
new SearchableDetailTabModelProvider<AuditLog, QuotaListModel, QuotaEventListModel>(
eventBus, defaultConfirmPopupProvider) {
@Override
public AbstractModelBoundPopupPresenterWidget<? extends Model, ?>
getModelPopup(QuotaEventListModel source,
UICommand lastExecutedCommand,
Model windowModel) {
if (lastExecutedCommand.equals(getModel().getDetailsCommand())) {
return eventPopupProvider.get();
} else {
return super.getModelPopup(source, lastExecutedCommand, windowModel);
}
}
};
result.setMainModelProvider(mainModelProvider);
result.setModelProvider(modelProvider);
return result;
}
@Override
protected void configure() {
bind(QuotaListModel.class).in(Singleton.class);
bind(QuotaClusterListModel.class).in(Singleton.class);
bind(QuotaStorageListModel.class).in(Singleton.class);
bind(QuotaVmListModel.class).in(Singleton.class);
bind(QuotaTemplateListModel.class).in(Singleton.class);
bind(QuotaUserListModel.class).in(Singleton.class);
bind(QuotaPermissionListModel.class).in(Singleton.class);
bind(QuotaEventListModel.class).in(Singleton.class);
bind(QuotaMainTabSelectedItems.class).asEagerSingleton();
// Search-able Detail Models
bind(new TypeLiteral<SearchableDetailModelProvider<QuotaCluster, QuotaListModel,
QuotaClusterListModel>>(){}).to(new TypeLiteral<SearchableDetailTabModelProvider<QuotaCluster,
QuotaListModel, QuotaClusterListModel>>(){}).in(Singleton.class);
bind(new TypeLiteral<SearchableDetailModelProvider<QuotaStorage, QuotaListModel,
QuotaStorageListModel>>(){}).to(new TypeLiteral<SearchableDetailTabModelProvider<QuotaStorage,
QuotaListModel, QuotaStorageListModel>>(){}).in(Singleton.class);
bind(new TypeLiteral<SearchableDetailModelProvider<VM, QuotaListModel, QuotaVmListModel>>(){})
.to(new TypeLiteral<SearchableDetailTabModelProvider<VM, QuotaListModel, QuotaVmListModel>>(){})
.in(Singleton.class);
bind(new TypeLiteral<SearchableDetailModelProvider<VmTemplate, QuotaListModel,
QuotaTemplateListModel>>(){}).to(new TypeLiteral<SearchableDetailTabModelProvider<VmTemplate,
QuotaListModel, QuotaTemplateListModel>>(){}).in(Singleton.class);
}
}