Arik Hadas has uploaded a new change for review. Change subject: userportal: add 'update on next restart' dialog ......................................................................
userportal: add 'update on next restart' dialog On update running VM such that part of the changed configuration can be applied only when the VM will be restarted, new dialog is presented with a proper message and the user can choose whether cpu changes (if exist) will be applied immediately or later. Change-Id: Ie2fbede65c57505d1290cd8eb6c3bc239a6eb47d Signed-off-by: Arik Hadas <[email protected]> --- M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java M frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/gin/PresenterModule.java A frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/popup/vm/VmNextRunConfigurationPresenterWidget.java A frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/popup/vm/VmNextRunConfigurationPopupView.java M frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/uicommon/model/vm/UserPortalListProvider.java 5 files changed, 152 insertions(+), 54 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/82/27582/1 diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java index 615ce67..06e406e 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java @@ -1,5 +1,12 @@ package org.ovirt.engine.ui.uicommonweb.models.userportal; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; + import org.ovirt.engine.core.common.VdcActionUtils; import org.ovirt.engine.core.common.action.AddVmFromScratchParameters; import org.ovirt.engine.core.common.action.AddVmFromTemplateParameters; @@ -71,6 +78,7 @@ import org.ovirt.engine.ui.uicommonweb.models.vms.VmInterfaceCreatingManager; import org.ovirt.engine.ui.uicommonweb.models.vms.VmInterfaceListModel; import org.ovirt.engine.ui.uicommonweb.models.vms.VmMonitorModel; +import org.ovirt.engine.ui.uicommonweb.models.vms.VmNextRunConfigurationModel; import org.ovirt.engine.ui.uicommonweb.models.vms.VmSessionsModel; import org.ovirt.engine.ui.uicompat.ConstantsManager; import org.ovirt.engine.ui.uicompat.Event; @@ -84,18 +92,28 @@ import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs; import org.ovirt.engine.ui.uicompat.UIConstants; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.LinkedList; -import java.util.List; - public class UserPortalListModel extends AbstractUserPortalListModel { private final UIConstants constants = ConstantsManager.getInstance().getConstants(); public static final EventDefinition searchCompletedEventDefinition; private Event privateSearchCompletedEvent; + + VmInterfaceCreatingManager defaultNetworkCreatingManager = new VmInterfaceCreatingManager(new VmInterfaceCreatingManager.PostVnicCreatedCallback() { + @Override + public void vnicCreated(Guid vmId) { + if (getWindow() != null) { + getWindow().stopProgress(); + } + cancel(); + updateActionAvailability(); + } + + @Override + public void queryFailed() { + stopProgress(UserPortalListModel.this); + cancel(); + } + }); public Event getSearchCompletedEvent() { @@ -506,6 +524,16 @@ } else if ("OnClone".equals(command.getName())) { //$NON-NLS-1$ onClone(); + } + else if ("CancelConfirmation".equals(command.getName())) //$NON-NLS-1$ + { + stopProgress(UserPortalListModel.this); + setConfirmWindow(null); + } + else if ("updateExistingVm".equals(command.getName())) { // $NON-NLS-1$ + VmNextRunConfigurationModel model = (VmNextRunConfigurationModel) getConfirmWindow(); + updateExistingVm(UserPortalListModel.this, model.getApplyCpuLater().getEntity()); + setConfirmWindow(null); } } @@ -1042,28 +1070,9 @@ } } - public void postVmNameUniqueCheck(UserPortalListModel userPortalListModel) + public void postVmNameUniqueCheck(final UserPortalListModel userPortalListModel) { - final VmInterfaceCreatingManager defaultNetworkCreatingManager = new VmInterfaceCreatingManager(new VmInterfaceCreatingManager.PostVnicCreatedCallback() { - @Override - public void vnicCreated(Guid vmId) { - if (getWindow() != null) { - getWindow().stopProgress(); - } - cancel(); - updateActionAvailability(); - } - - @Override - public void queryFailed() { - stopProgress(UserPortalListModel.this); - cancel(); - } - }); - final UnitVmModel model = (UnitVmModel) getWindow(); - - UserPortalItemModel selectedItem = (UserPortalItemModel) userPortalListModel.getSelectedItem(); // Save changes. buildVmOnSave(model, gettempVm()); @@ -1134,37 +1143,67 @@ } else { - Guid oldClusterID = ((VM) selectedItem.getEntity()).getVdsGroupId(); - Guid newClusterID = model.getSelectedCluster().getId(); - if (oldClusterID.equals(newClusterID) == false) - { - Frontend.getInstance().runAction(VdcActionType.ChangeVMCluster, new ChangeVMClusterParameters(newClusterID, - gettempVm().getId()), - new IFrontendActionAsyncCallback() { - @Override - public void executed(FrontendActionAsyncResult result) { - VM vm = gettempVm(); - vm.setUseLatestVersion(constants.latestTemplateVersionName().equals(model.getTemplate().getSelectedItem().getTemplateVersionName())); + final VM selectedItem = (VM) ((UserPortalItemModel) userPortalListModel.getSelectedItem()).getEntity(); + gettempVm().setUseLatestVersion(constants.latestTemplateVersionName().equals(model.getTemplate().getSelectedItem().getTemplateVersionName())); - VmManagementParametersBase param = new VmManagementParametersBase(vm); - param.setSoundDeviceEnabled(model.getIsSoundcardEnabled().getEntity()); - param.setConsoleEnabled(model.getIsConsoleDeviceEnabled().getEntity()); + AsyncDataProvider.isNextRunConfigurationChanged(selectedItem, gettempVm(), new AsyncQuery(this, + new INewAsyncCallback() { + @Override + public void onSuccess(Object thisModel, Object returnValue) { + if ((Boolean) returnValue) { + VmNextRunConfigurationModel confirmModel = new VmNextRunConfigurationModel(); + confirmModel.setTitle(ConstantsManager.getInstance().getConstants().editNextRunConfigurationTitle()); + confirmModel.setHelpTag(HelpTag.edit_next_run_configuration); + confirmModel.setHashName("edit_next_run_configuration"); //$NON-NLS-1$ + confirmModel.setCpuPluggable(selectedItem.getCpuPerSocket() == gettempVm().getCpuPerSocket() && + selectedItem.getNumOfSockets() != gettempVm().getNumOfSockets()); - Frontend.getInstance().runAction(VdcActionType.UpdateVm, param, new UnitVmModelNetworkAsyncCallback(model, defaultNetworkCreatingManager, vm.getId()), this); + confirmModel.getCommands().add(new UICommand("updateExistingVm", UserPortalListModel.this) //$NON-NLS-1$ + .setTitle(ConstantsManager.getInstance().getConstants().ok()) + .setIsDefault(true)); + + confirmModel.getCommands().add(new UICommand("CancelConfirmation", UserPortalListModel.this) //$NON-NLS-1$ + .setTitle(ConstantsManager.getInstance().getConstants().cancel()) + .setIsCancel(true)); + + setConfirmWindow(confirmModel); } - }, this); - } - else - { - VM vm = gettempVm(); - vm.setUseLatestVersion(constants.latestTemplateVersionName().equals(model.getTemplate().getSelectedItem().getTemplateVersionName())); + else { + updateExistingVm(userPortalListModel, false); + } + } + })); + } + } - VmManagementParametersBase param = new VmManagementParametersBase(vm); - param.setSoundDeviceEnabled(model.getIsSoundcardEnabled().getEntity()); - param.setConsoleEnabled(model.getIsConsoleDeviceEnabled().getEntity()); + private void updateExistingVm(UserPortalListModel userPortalListModel, boolean applyCpuChangesLater) { + final UnitVmModel model = (UnitVmModel) getWindow(); + UserPortalItemModel selectedItem = (UserPortalItemModel) userPortalListModel.getSelectedItem(); - Frontend.getInstance().runAction(VdcActionType.UpdateVm, param, new UnitVmModelNetworkAsyncCallback(model, defaultNetworkCreatingManager, vm.getId()), this); - } + Guid oldClusterID = ((VM) selectedItem.getEntity()).getVdsGroupId(); + Guid newClusterID = model.getSelectedCluster().getId(); + if (oldClusterID.equals(newClusterID) == false) + { + Frontend.getInstance().runAction(VdcActionType.ChangeVMCluster, new ChangeVMClusterParameters(newClusterID, + gettempVm().getId()), + new IFrontendActionAsyncCallback() { + @Override + public void executed(FrontendActionAsyncResult result) { + VmManagementParametersBase param = new VmManagementParametersBase(gettempVm()); + param.setSoundDeviceEnabled(model.getIsSoundcardEnabled().getEntity()); + param.setConsoleEnabled(model.getIsConsoleDeviceEnabled().getEntity()); + + Frontend.getInstance().runAction(VdcActionType.UpdateVm, param, new UnitVmModelNetworkAsyncCallback(model, defaultNetworkCreatingManager, gettempVm().getId()), this); + } + }, this); + } + else + { + VmManagementParametersBase param = new VmManagementParametersBase(gettempVm()); + param.setSoundDeviceEnabled(model.getIsSoundcardEnabled().getEntity()); + param.setConsoleEnabled(model.getIsConsoleDeviceEnabled().getEntity()); + + Frontend.getInstance().runAction(VdcActionType.UpdateVm, param, new UnitVmModelNetworkAsyncCallback(model, defaultNetworkCreatingManager, gettempVm().getId()), this); } } diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/gin/PresenterModule.java b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/gin/PresenterModule.java index d32f4c0..725f711 100644 --- a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/gin/PresenterModule.java +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/gin/PresenterModule.java @@ -19,6 +19,7 @@ import org.ovirt.engine.ui.userportal.section.main.presenter.popup.vm.VmDiskRemovePopupPresenterWidget; import org.ovirt.engine.ui.userportal.section.main.presenter.popup.vm.VmInterfacePopupPresenterWidget; 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.VmSnapshotCreatePopupPresenterWidget; @@ -66,6 +67,7 @@ import org.ovirt.engine.ui.userportal.section.main.view.popup.vm.VmDiskRemovePopupView; import org.ovirt.engine.ui.userportal.section.main.view.popup.vm.VmInterfacePopupView; import org.ovirt.engine.ui.userportal.section.main.view.popup.vm.VmMakeTemplatePopupView; +import org.ovirt.engine.ui.userportal.section.main.view.popup.vm.VmNextRunConfigurationPopupView; import org.ovirt.engine.ui.userportal.section.main.view.popup.vm.VmPopupView; import org.ovirt.engine.ui.userportal.section.main.view.popup.vm.VmRunOncePopupView; import org.ovirt.engine.ui.userportal.section.main.view.popup.vm.VmSnapshotCreatePopupView; @@ -296,6 +298,9 @@ bindPresenterWidget(VncInfoPopupPresenterWidget.class, VncInfoPopupPresenterWidget.ViewDef.class, VncInfoPopupView.class); + bindPresenterWidget(VmNextRunConfigurationPresenterWidget.class, + VmNextRunConfigurationPresenterWidget.ViewDef.class, + VmNextRunConfigurationPopupView.class); // Template popups bindPresenterWidget(TemplateNewPopupPresenterWidget.class, diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/popup/vm/VmNextRunConfigurationPresenterWidget.java b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/popup/vm/VmNextRunConfigurationPresenterWidget.java new file mode 100644 index 0000000..029f8f4 --- /dev/null +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/popup/vm/VmNextRunConfigurationPresenterWidget.java @@ -0,0 +1,17 @@ +package org.ovirt.engine.ui.userportal.section.main.presenter.popup.vm; + +import org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget; +import org.ovirt.engine.ui.uicommonweb.models.vms.VmNextRunConfigurationModel; + +import com.google.gwt.event.shared.EventBus; +import com.google.inject.Inject; + +public class VmNextRunConfigurationPresenterWidget extends AbstractModelBoundPopupPresenterWidget<VmNextRunConfigurationModel, VmNextRunConfigurationPresenterWidget.ViewDef> { + public interface ViewDef extends AbstractModelBoundPopupPresenterWidget.ViewDef<VmNextRunConfigurationModel> { + } + + @Inject + public VmNextRunConfigurationPresenterWidget(EventBus eventBus, ViewDef view) { + super(eventBus, view); + } +} diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/popup/vm/VmNextRunConfigurationPopupView.java b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/popup/vm/VmNextRunConfigurationPopupView.java new file mode 100644 index 0000000..8622615 --- /dev/null +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/popup/vm/VmNextRunConfigurationPopupView.java @@ -0,0 +1,30 @@ +package org.ovirt.engine.ui.userportal.section.main.view.popup.vm; + +import org.ovirt.engine.ui.common.CommonApplicationResources; +import org.ovirt.engine.ui.common.CommonApplicationTemplates; +import org.ovirt.engine.ui.common.idhandler.ElementIdHandler; +import org.ovirt.engine.ui.common.view.popup.AbstractModelBoundWidgetPopupView; +import org.ovirt.engine.ui.common.widget.uicommon.popup.vm.VmNextRunConfigurationWidget; +import org.ovirt.engine.ui.uicommonweb.models.vms.VmNextRunConfigurationModel; +import org.ovirt.engine.ui.userportal.ApplicationConstants; +import org.ovirt.engine.ui.userportal.ApplicationMessages; +import org.ovirt.engine.ui.userportal.section.main.presenter.popup.vm.VmNextRunConfigurationPresenterWidget; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.shared.EventBus; +import com.google.inject.Inject; + +public class VmNextRunConfigurationPopupView extends AbstractModelBoundWidgetPopupView<VmNextRunConfigurationModel> +implements VmNextRunConfigurationPresenterWidget.ViewDef { + + interface ViewIdHandler extends ElementIdHandler<VmNextRunConfigurationPopupView> { + ViewIdHandler idHandler = GWT.create(ViewIdHandler.class); + } + + @Inject + public VmNextRunConfigurationPopupView(EventBus eventBus, CommonApplicationResources resources, + ApplicationConstants constants, ApplicationMessages messages, CommonApplicationTemplates templates) { + super(eventBus, resources, new VmNextRunConfigurationWidget(constants, messages, templates), "400px", "200px"); //$NON-NLS-1$ //$NON-NLS-2$ + ViewIdHandler.idHandler.generateAndSetIds(this); + } +} diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/uicommon/model/vm/UserPortalListProvider.java b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/uicommon/model/vm/UserPortalListProvider.java index d34d752..fe8236b 100644 --- a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/uicommon/model/vm/UserPortalListProvider.java +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/uicommon/model/vm/UserPortalListProvider.java @@ -14,6 +14,7 @@ import org.ovirt.engine.ui.userportal.section.main.presenter.popup.vm.CloneVmPopupPresenterWidget; import org.ovirt.engine.ui.userportal.section.main.presenter.popup.vm.VmChangeCDPopupPresenterWidget; 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; @@ -34,6 +35,7 @@ private final Provider<ConsolePopupPresenterWidget> consolePopupProvider; private final Provider<DefaultConfirmationPopupPresenterWidget> spiceToGuestWithNonRespAgentPopupProvider; private final Provider<CloneVmPopupPresenterWidget> cloneVmProvider; + private final Provider<VmNextRunConfigurationPresenterWidget> nextRunProvider; @Inject public UserPortalListProvider(EventBus eventBus, @@ -47,7 +49,8 @@ Provider<VncInfoPopupPresenterWidget> vncInfoPopupProvider, Provider<DefaultConfirmationPopupPresenterWidget> spiceToGuestWithNonRespAgentPopupProvider, Provider<ConsolePopupPresenterWidget> consolePopupProvider, - Provider<CloneVmPopupPresenterWidget> cloneVmProvider) { + Provider<CloneVmPopupPresenterWidget> cloneVmProvider, + Provider<VmNextRunConfigurationPresenterWidget> nextRunProvider) { super(eventBus, defaultConfirmPopupProvider, user); this.newVmPopupProvider = newVmPopupProvider; this.runOncePopupProvider = runOncePopupProvider; @@ -58,6 +61,7 @@ this.consolePopupProvider = consolePopupProvider; this.spiceToGuestWithNonRespAgentPopupProvider = spiceToGuestWithNonRespAgentPopupProvider; this.cloneVmProvider = cloneVmProvider; + this.nextRunProvider = nextRunProvider; } @Override @@ -97,6 +101,9 @@ UICommand lastExecutedCommand) { if (lastExecutedCommand == getModel().getRemoveCommand()) { return removeConfirmPopupProvider.get(); + } + else if ("OnSave".equals(lastExecutedCommand.getName())) { //$NON-NLS-1$ + return nextRunProvider.get(); } else { return super.getConfirmModelPopup(source, lastExecutedCommand); } -- To view, visit http://gerrit.ovirt.org/27582 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ie2fbede65c57505d1290cd8eb6c3bc239a6eb47d Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Arik Hadas <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
