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

Reply via email to