package org.ovirt.engine.ui.userportal.uicommon.model.vm;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.ovirt.engine.ui.common.auth.CurrentUser;
import org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget;
import org.ovirt.engine.ui.common.presenter.popup.ConsolePopupPresenterWidget;
import org.ovirt.engine.ui.common.presenter.popup.DefaultConfirmationPopupPresenterWidget;
import org.ovirt.engine.ui.common.presenter.popup.RemoveConfirmationPopupPresenterWidget;
import org.ovirt.engine.ui.uicommonweb.UICommand;
import org.ovirt.engine.ui.uicommonweb.models.ConfirmationModel;
import org.ovirt.engine.ui.uicommonweb.models.Model;
import org.ovirt.engine.ui.uicommonweb.models.userportal.UserPortalListModel;
import org.ovirt.engine.ui.uicommonweb.models.vms.AttachDiskModel;
import org.ovirt.engine.ui.uicommonweb.models.vms.EditDiskModel;
import org.ovirt.engine.ui.uicommonweb.models.vms.NewDiskModel;
import org.ovirt.engine.ui.uicommonweb.models.vms.SpiceToGuestWithNonRespAgentModel;
import org.ovirt.engine.ui.uicommonweb.models.vms.VmNextRunConfigurationModel;
import org.ovirt.engine.ui.uicommonweb.models.vms.VncInfoModel;
import org.ovirt.engine.ui.userportal.section.main.presenter.popup.vm.CloneVmPopupPresenterWidget;
import org.ovirt.engine.ui.userportal.section.main.presenter.popup.vm.SingleSelectionVmDiskAttachPopupPresenterWidget;
import org.ovirt.engine.ui.userportal.section.main.presenter.popup.vm.VmChangeCDPopupPresenterWidget;
import org.ovirt.engine.ui.userportal.section.main.presenter.popup.vm.VmDiskPopupPresenterWidget;
import org.ovirt.engine.ui.userportal.section.main.presenter.popup.vm.VmDiskRemovePopupPresenterWidget;
import org.ovirt.engine.ui.userportal.section.main.presenter.popup.vm.VmMakeTemplatePopupPresenterWidget;
import org.ovirt.engine.ui.userportal.section.main.presenter.popup.vm.VmNextRunConfigurationPresenterWidget;
import org.ovirt.engine.ui.userportal.section.main.presenter.popup.vm.VmPopupPresenterWidget;
import org.ovirt.engine.ui.userportal.section.main.presenter.popup.vm.VmRunOncePopupPresenterWidget;
import org.ovirt.engine.ui.userportal.section.main.presenter.popup.vm.VncInfoPopupPresenterWidget;
import org.ovirt.engine.ui.userportal.uicommon.model.AbstractUserPortalListProvider;
import com.google.gwt.event.shared.EventBus;
import com.google.inject.Inject;
import com.google.inject.Provider;
public class UserPortalListProvider extends AbstractUserPortalListProvider<UserPortalListModel> {
private final Provider<VmPopupPresenterWidget> newVmPopupProvider;
private final Provider<VmRunOncePopupPresenterWidget> runOncePopupProvider;
private final Provider<VmChangeCDPopupPresenterWidget> changeCDPopupProvider;
private final Provider<VmMakeTemplatePopupPresenterWidget> makeTemplatePopupProvider;
private final Provider<RemoveConfirmationPopupPresenterWidget> removeConfirmPopupProvider;
private final Provider<VncInfoPopupPresenterWidget> vncInfoPopupProvider;
private final Provider<ConsolePopupPresenterWidget> consolePopupProvider;
private final Provider<DefaultConfirmationPopupPresenterWidget> spiceToGuestWithNonRespAgentPopupProvider;
private final Provider<CloneVmPopupPresenterWidget> cloneVmProvider;
private final Provider<VmNextRunConfigurationPresenterWidget> nextRunProvider;
private final Provider<VmDiskPopupPresenterWidget> newDiskPopupProvider;
private final Provider<SingleSelectionVmDiskAttachPopupPresenterWidget> attachDiskPopupProvider;
private final Provider<DefaultConfirmationPopupPresenterWidget> defaultPopupProvider;
private final Provider<VmDiskRemovePopupPresenterWidget> removeDiskConfirmPopupProvider;
@Inject
public UserPortalListProvider(EventBus eventBus,
Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider,
CurrentUser user,
Provider<VmPopupPresenterWidget> newVmPopupProvider,
Provider<VmRunOncePopupPresenterWidget> runOncePopupProvider,
Provider<VmChangeCDPopupPresenterWidget> changeCDPopupProvider,
Provider<VmMakeTemplatePopupPresenterWidget> makeTemplatePopupProvider,
Provider<RemoveConfirmationPopupPresenterWidget> removeConfirmPopupProvider,
Provider<VncInfoPopupPresenterWidget> vncInfoPopupProvider,
Provider<DefaultConfirmationPopupPresenterWidget> spiceToGuestWithNonRespAgentPopupProvider,
Provider<ConsolePopupPresenterWidget> consolePopupProvider,
Provider<CloneVmPopupPresenterWidget> cloneVmProvider,
Provider<VmNextRunConfigurationPresenterWidget> nextRunProvider,
Provider<VmDiskPopupPresenterWidget> newDiskPopupProvider,
Provider<SingleSelectionVmDiskAttachPopupPresenterWidget> attachDiskPopupProvider,
Provider<VmDiskRemovePopupPresenterWidget> removeDiskConfirmPopupProvider) {
super(eventBus, defaultConfirmPopupProvider, user);
this.newVmPopupProvider = newVmPopupProvider;
this.runOncePopupProvider = runOncePopupProvider;
this.changeCDPopupProvider = changeCDPopupProvider;
this.makeTemplatePopupProvider = makeTemplatePopupProvider;
this.removeConfirmPopupProvider = removeConfirmPopupProvider;
this.vncInfoPopupProvider = vncInfoPopupProvider;
this.consolePopupProvider = consolePopupProvider;
this.spiceToGuestWithNonRespAgentPopupProvider = spiceToGuestWithNonRespAgentPopupProvider;
this.cloneVmProvider = cloneVmProvider;
this.nextRunProvider = nextRunProvider;
this.newDiskPopupProvider = newDiskPopupProvider;
this.attachDiskPopupProvider = attachDiskPopupProvider;
this.defaultPopupProvider = defaultConfirmPopupProvider;
this.removeDiskConfirmPopupProvider = removeDiskConfirmPopupProvider;
}
@Override
public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup(UserPortalListModel source,
UICommand lastExecutedCommand, Model windowModel) {
if (lastExecutedCommand == getModel().getNewTemplateCommand()) {
return makeTemplatePopupProvider.get();
} else if (lastExecutedCommand == getModel().getRunOnceCommand()) {
return runOncePopupProvider.get();
} else if (lastExecutedCommand == getModel().getChangeCdCommand()) {
return changeCDPopupProvider.get();
} else if (lastExecutedCommand == getModel().getNewVmCommand() || lastExecutedCommand == getModel().getEditCommand()) {
if (windowModel instanceof AttachDiskModel) {
return attachDiskPopupProvider.get();
} else if ((windowModel instanceof NewDiskModel) || (windowModel instanceof EditDiskModel)) {
return newDiskPopupProvider.get();
} else {
return newVmPopupProvider.get();
}
} else if (windowModel instanceof VncInfoModel) {
return vncInfoPopupProvider.get();
} else if (windowModel instanceof SpiceToGuestWithNonRespAgentModel) {
return spiceToGuestWithNonRespAgentPopupProvider.get();
} else if (lastExecutedCommand == getModel().getEditConsoleCommand()) {
return consolePopupProvider.get();
} else if (lastExecutedCommand == getModel().getCloneVmCommand()) {
return cloneVmProvider.get();
}
else {
return super.getModelPopup(source, lastExecutedCommand, windowModel);
}
}
@Override
public String[] getWindowPropertyNames() {
List<String> names = new ArrayList<>();
names.addAll(Arrays.asList(super.getWindowPropertyNames()));
names.add(UserPortalListModel.DISK_WINDOW);
return names.toArray(new String[names.size()]);
}
@Override
public Model getWindowModel(UserPortalListModel source, String propertyName) {
if (UserPortalListModel.DISK_WINDOW.equals(propertyName)) {
return source.getDiskWindow();
}
return super.getWindowModel(source, propertyName);
}
@Override
public void clearWindowModel(UserPortalListModel source, String propertyName) {
if (UserPortalListModel.DISK_WINDOW.equals(propertyName)) {
source.setDiskWindow(null);
} else {
super.clearWindowModel(source, propertyName);
}
}
@Override
public AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, ?> getConfirmModelPopup(UserPortalListModel source,
UICommand lastExecutedCommand) {
if (lastExecutedCommand == getModel().getRemoveCommand()) {
return removeConfirmPopupProvider.get();
}
else if (source.getConfirmWindow() instanceof VmNextRunConfigurationModel) {
return nextRunProvider.get();
} else if ("OnSave".equals(lastExecutedCommand.getName())) { //$NON-NLS-1$
return defaultPopupProvider.get();
} else if (lastExecutedCommand == getModel().getEditCommand()) {
return removeDiskConfirmPopupProvider.get();
} else {
return super.getConfirmModelPopup(source, lastExecutedCommand);
}
}
}