Tomas Jelinek has uploaded a new change for review.

Change subject: webadmin: Warning when deleting an instance type which is 
attached to a VM
......................................................................

webadmin: Warning when deleting an instance type which is attached to a VM

Frontend part: when deleting an instance type which has VMs based on it, the
user will be warned and he/she will have to explicitly approve it.

Change-Id: I14bf7cecee9e9a2caa43c51e4f3e4682b63e0a1e
Signed-off-by: Tomas Jelinek <[email protected]>
---
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/help/HelpTag.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/instancetypes/InstanceTypeListModel.java
M 
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/uicommon/model/InstanceTypeModelProvider.java
4 files changed, 72 insertions(+), 29 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/05/27005/1

diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/help/HelpTag.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/help/HelpTag.java
index c4dcae4..b371538 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/help/HelpTag.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/help/HelpTag.java
@@ -362,7 +362,7 @@
 
     remove_template("remove_template", HelpTagType.COMMON, "Templates Tab > 
Remove Template(s)"), //$NON-NLS-1$ //$NON-NLS-2$
 
-    remove_instance_type("remove_instance_type", HelpTagType.WEBADMIN, 
"Configure' dialog -> 'Instance Types' section -> 'Remove Instance Type(s)'"), 
//$NON-NLS-1$ //$NON-NLS-2$
+    remove_instance_type("remove_instance_type", HelpTagType.WEBADMIN, 
"Configure' dialog -> 'Instance Types' section -> 'Remove Instance Type'"), 
//$NON-NLS-1$ //$NON-NLS-2$
 
     remove_template_disks("remove_template_disks", HelpTagType.WEBADMIN, 
"Templates Tab > Storage Sub-Tab > Remove Disk Instance From Storage"), 
//$NON-NLS-1$ //$NON-NLS-2$
 
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/instancetypes/InstanceTypeListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/instancetypes/InstanceTypeListModel.java
index db2c5cb..33c1627 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/instancetypes/InstanceTypeListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/instancetypes/InstanceTypeListModel.java
@@ -2,7 +2,6 @@
 
 import org.ovirt.engine.core.common.action.AddVmTemplateParameters;
 import org.ovirt.engine.core.common.action.UpdateVmTemplateParameters;
-import org.ovirt.engine.core.common.action.VdcActionParametersBase;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.action.VmTemplateParametersBase;
 import org.ovirt.engine.core.common.businessentities.InstanceType;
@@ -14,7 +13,9 @@
 import org.ovirt.engine.core.common.businessentities.VmWatchdogAction;
 import org.ovirt.engine.core.common.businessentities.VmWatchdogType;
 import org.ovirt.engine.core.common.interfaces.SearchType;
+import org.ovirt.engine.core.common.queries.IdQueryParameters;
 import org.ovirt.engine.core.common.queries.SearchParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
 import org.ovirt.engine.core.common.utils.ObjectUtils;
 import org.ovirt.engine.core.compat.Guid;
@@ -42,11 +43,13 @@
 import 
org.ovirt.engine.ui.uicommonweb.models.vms.instancetypes.InstanceTypeInterfaceCreatingManager;
 import 
org.ovirt.engine.ui.uicommonweb.models.vms.instancetypes.NewInstanceTypeModelBehavior;
 import org.ovirt.engine.ui.uicompat.ConstantsManager;
-import org.ovirt.engine.ui.uicompat.FrontendMultipleActionAsyncResult;
-import org.ovirt.engine.ui.uicompat.IFrontendMultipleActionAsyncCallback;
+import org.ovirt.engine.ui.uicompat.FrontendActionAsyncResult;
+import org.ovirt.engine.ui.uicompat.IFrontendActionAsyncCallback;
 import org.ovirt.engine.ui.uicompat.ObservableCollection;
 
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 public class InstanceTypeListModel extends ListWithDetailsModel {
@@ -119,17 +122,44 @@
             return;
         }
 
-        ConfirmationModel window = new ConfirmationModel();
-        setWindow(window);
-        
window.setTitle(ConstantsManager.getInstance().getConstants().removeInstanceTypeTitle());
+        final ConfirmationModel window = new ConfirmationModel();
+        setConfirmWindow(window);
+        window.startProgress(null);
+
         window.setHelpTag(HelpTag.remove_instance_type);
         window.setHashName("remove_instance_type"); //$NON-NLS-1$
-        List<String> instanceTypeNames = new ArrayList<String>();
-        for (InstanceType instanceType : (List<InstanceType>) 
getSelectedItems()) {
-            instanceTypeNames.add(instanceType.getName());
-        }
 
-        window.setItems(instanceTypeNames);
+        final Guid instanceTypeId = ((InstanceType) getSelectedItem()).getId();
+        Frontend.getInstance().runQuery(VdcQueryType.GetVmsByInstanceTypeId,
+                new IdQueryParameters(instanceTypeId), new AsyncQuery(this, 
new INewAsyncCallback() {
+            @Override
+            public void onSuccess(Object parentModel, Object returnValue) {
+                List<VM> vmsAttachedToInstanceType = ((VdcQueryReturnValue) 
returnValue).getReturnValue();
+                if (vmsAttachedToInstanceType == null || 
vmsAttachedToInstanceType.size() == 0) {
+                    
window.setTitle(ConstantsManager.getInstance().getConstants().removeInstanceTypeTitle());
+                    window.setItems(Arrays.asList(((InstanceType) 
getSelectedItem()).getName()));
+                } else {
+                    List<String> attachedVmsNames = new ArrayList<String>();
+                    for (VM vm : vmsAttachedToInstanceType) {
+                        attachedVmsNames.add(vm.getName());
+                    }
+
+                    Collections.sort(attachedVmsNames);
+
+                    window.setItems(attachedVmsNames);
+
+                    window.getLatch().setIsAvailable(true);
+                    window.getLatch().setIsChangable(true);
+                    
window.setNote(ConstantsManager.getInstance().getConstants().vmsAttachedToInstanceTypeNote());
+
+                    
window.setMessage(ConstantsManager.getInstance().getConstants().vmsAttachedToInstanceTypeWarningMessage());
+                }
+
+                window.stopProgress();
+            }
+        }));
+
+
 
         UICommand tempVar = new UICommand("OnDeleteInstanceType", this); 
//$NON-NLS-1$
         tempVar.setTitle(ConstantsManager.getInstance().getConstants().ok());
@@ -243,28 +273,26 @@
     }
 
     private void onDeleteInstanceType() {
-        final ConfirmationModel model = (ConfirmationModel) getWindow();
+        final ConfirmationModel model = (ConfirmationModel) getConfirmWindow();
 
-        if (model.getProgress() != null) {
+        boolean latchChecked = !model.validate();
+
+        if (model.getProgress() != null || latchChecked) {
             return;
-        }
-
-        ArrayList<VdcActionParametersBase> list = new 
ArrayList<VdcActionParametersBase>();
-        for (InstanceType instanceType : (List<InstanceType>) 
getSelectedItems()) {
-            list.add(new VmTemplateParametersBase(instanceType.getId()));
         }
 
         model.startProgress(null);
 
-        
Frontend.getInstance().runMultipleAction(VdcActionType.RemoveVmTemplate, list,
-                new IFrontendMultipleActionAsyncCallback() {
+        Guid instanceTypeId = ((InstanceType) getSelectedItem()).getId();
+
+        Frontend.getInstance().runAction(VdcActionType.RemoveVmTemplate, new 
VmTemplateParametersBase(instanceTypeId),
+                new IFrontendActionAsyncCallback() {
                     @Override
-                    public void executed(FrontendMultipleActionAsyncResult 
result) {
+                    public void executed(FrontendActionAsyncResult result) {
                         model.stopProgress();
                         cancel();
-
                     }
-                }, model);
+                }, this);
     }
 
     private void createWindow(VmModelBehaviorBase<UnitVmModel> behavior, 
String hashName, String onOkAction, boolean isNew, String title, HelpTag 
helpTag) {
@@ -299,13 +327,14 @@
 
     private void cancel() {
         setWindow(null);
+        setConfirmWindow(null);
     }
 
     protected void updateActionAvailability() {
         int numOfSelectedItems = getSelectedItems() != null ? 
getSelectedItems().size() : 0;
 
         getEditInstanceTypeCommand().setIsExecutionAllowed(numOfSelectedItems 
== 1);
-        
getDeleteInstanceTypeCommand().setIsExecutionAllowed(numOfSelectedItems > 0);
+        
getDeleteInstanceTypeCommand().setIsExecutionAllowed(numOfSelectedItems == 1);
     }
 
     @Override
diff --git 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
index 658a110..0f909fd 100644
--- 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
+++ 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
@@ -2245,7 +2245,7 @@
     @DefaultStringValue("Edit Instance Type")
     String editInstanceTypeTitle();
 
-    @DefaultStringValue("Remove Instance Type(s)")
+    @DefaultStringValue("Remove Instance Type")
     String removeInstanceTypeTitle();
 
     @DefaultStringValue("Custom")
@@ -2253,5 +2253,11 @@
 
     @DefaultStringValue("No instance type - if selected the instance will be 
attached to no instance type")
     String customInstanceTypeDescription();
+
+    @DefaultStringValue("There are VMs attached to this instance type-this 
will make them attached to 'Custom'")
+    String vmsAttachedToInstanceTypeNote();
+
+    @DefaultStringValue("The following VMs are attached to the instance type")
+    String vmsAttachedToInstanceTypeWarningMessage();
 }
 
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/uicommon/model/InstanceTypeModelProvider.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/uicommon/model/InstanceTypeModelProvider.java
index 964ab40..69bd3dc 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/uicommon/model/InstanceTypeModelProvider.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/uicommon/model/InstanceTypeModelProvider.java
@@ -6,6 +6,7 @@
 import org.ovirt.engine.core.common.businessentities.InstanceType;
 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.uicommon.model.SearchableTabModelProvider;
 import org.ovirt.engine.ui.uicommonweb.UICommand;
 import org.ovirt.engine.ui.uicommonweb.models.ConfirmationModel;
@@ -17,12 +18,16 @@
 
     private final Provider<InstanceTypesPopupPresenterWidget> 
instanceTypePopupProvider;
 
+    private final Provider<RemoveConfirmationPopupPresenterWidget> 
removeConfirmPopupProvider;
+
     @Inject
     public InstanceTypeModelProvider(EventBus eventBus,
                                      final 
Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider,
-                                     final 
Provider<InstanceTypesPopupPresenterWidget> instanceTypePopupProvider) {
+                                     final 
Provider<InstanceTypesPopupPresenterWidget> instanceTypePopupProvider,
+                                     final 
Provider<RemoveConfirmationPopupPresenterWidget> removeConfirmPopupProvider) {
         super(eventBus, defaultConfirmPopupProvider);
         this.instanceTypePopupProvider = instanceTypePopupProvider;
+        this.removeConfirmPopupProvider = removeConfirmPopupProvider;
     }
 
     @Override
@@ -43,8 +48,11 @@
     @Override
     public AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, 
?> getConfirmModelPopup(InstanceTypeListModel source,
             UICommand lastExecutedCommand) {
-            return super.getConfirmModelPopup(source, lastExecutedCommand);
-
+            if (lastExecutedCommand == 
getModel().getDeleteInstanceTypeCommand()) {
+                return removeConfirmPopupProvider.get();
+            } else {
+                return super.getConfirmModelPopup(source, lastExecutedCommand);
+            }
     }
 
 }


-- 
To view, visit http://gerrit.ovirt.org/27005
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I14bf7cecee9e9a2caa43c51e4f3e4682b63e0a1e
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Tomas Jelinek <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to