Daniel Erez has uploaded a new change for review.

Change subject: webadmin: DirectLUN - confirmation dialog for SD LUN (#848067)
......................................................................

webadmin: DirectLUN - confirmation dialog for SD LUN (#848067)

https://bugzilla.redhat.com/848067

DirectLUN disk - when choosing a LUN that is already part of a
storage domain, display a warning confirmation dialog with a latch.

Change-Id: I1f303381142d869d162ad6c181dc715a279d097a
Signed-off-by: Daniel Erez <[email protected]>
---
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/SanStorageModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmDiskListModel.java
M 
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java
M 
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Messages.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/DiskModule.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/VirtualMachineModule.java
7 files changed, 176 insertions(+), 10 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/53/7753/1

diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskListModel.java
index 6993874..df7ca55 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskListModel.java
@@ -20,6 +20,7 @@
 import org.ovirt.engine.core.common.businessentities.PropagateErrors;
 import org.ovirt.engine.core.common.businessentities.Quota;
 import org.ovirt.engine.core.common.businessentities.QuotaEnforcementTypeEnum;
+import org.ovirt.engine.core.common.businessentities.StorageType;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VmEntityType;
 import org.ovirt.engine.core.common.businessentities.VolumeType;
@@ -38,6 +39,7 @@
 import org.ovirt.engine.ui.frontend.Frontend;
 import org.ovirt.engine.ui.uicommonweb.Linq;
 import org.ovirt.engine.ui.uicommonweb.UICommand;
+import org.ovirt.engine.ui.uicommonweb.models.ConfirmationModel;
 import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
 import org.ovirt.engine.ui.uicommonweb.models.ISupportSystemTreeContext;
 import org.ovirt.engine.ui.uicommonweb.models.ListModel;
@@ -47,6 +49,7 @@
 import org.ovirt.engine.ui.uicommonweb.models.configure.PermissionListModel;
 import org.ovirt.engine.ui.uicommonweb.models.quota.ChangeQuotaItemModel;
 import org.ovirt.engine.ui.uicommonweb.models.quota.ChangeQuotaModel;
+import org.ovirt.engine.ui.uicommonweb.models.storage.SanStorageModel;
 import org.ovirt.engine.ui.uicommonweb.models.templates.CopyDiskModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.DiskModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.MoveDiskModel;
@@ -315,8 +318,26 @@
             disk = diskImage;
         }
         else {
-            LunDisk lunDisk = model.getIsNew() ? new LunDisk() : (LunDisk) 
getSelectedItem();
-            lunDisk.setLun((LUNs) 
model.getSanStorageModel().getAddedLuns().get(0).getEntity());
+            LunDisk lunDisk;
+            SanStorageModel sanStorageModel = model.getSanStorageModel();
+            ArrayList<String> partOfSdLunsMessages = 
sanStorageModel.getPartOfSdLunsMessages();
+
+            if (model.getIsNew()) {
+                if (partOfSdLunsMessages.isEmpty() || 
sanStorageModel.isForce()) {
+                    LUNs luns = (LUNs) 
model.getSanStorageModel().getAddedLuns().get(0).getEntity();
+                    luns.setLunType((StorageType) 
model.getStorageType().getSelectedItem());
+
+                    lunDisk = new LunDisk();
+                    lunDisk.setLun(luns);
+                }
+                else {
+                    ForceCreationWarning(partOfSdLunsMessages);
+                    return;
+                }
+            }
+            else {
+                lunDisk = (LunDisk) getSelectedItem();
+            }
 
             disk = lunDisk;
         }
@@ -361,6 +382,44 @@
                     }
                 },
                 this);
+    }
+
+    private void ForceCreationWarning(ArrayList<String> usedLunsMessages) {
+        ConfirmationModel confirmationModel = new ConfirmationModel();
+        setConfirmWindow(confirmationModel);
+
+        
confirmationModel.setTitle(ConstantsManager.getInstance().getConstants().forceStorageDomainCreation());
+        
confirmationModel.setMessage(ConstantsManager.getInstance().getConstants().lunsAlreadyPartOfSD());
+        confirmationModel.setHashName("force_lun_disk_creation"); //$NON-NLS-1$
+        confirmationModel.setItems(usedLunsMessages);
+
+        UICommand command;
+        command = new UICommand("OnForceSave", this); //$NON-NLS-1$
+        command.setTitle(ConstantsManager.getInstance().getConstants().ok());
+        command.setIsDefault(true);
+        confirmationModel.getCommands().add(command);
+
+        command = new UICommand("CancelConfirm", this); //$NON-NLS-1$
+        
command.setTitle(ConstantsManager.getInstance().getConstants().cancel());
+        command.setIsCancel(true);
+        confirmationModel.getCommands().add(command);
+    }
+
+    private void OnForceSave()
+    {
+        ConfirmationModel confirmationModel = (ConfirmationModel) 
getConfirmWindow();
+        if (confirmationModel != null && !confirmationModel.Validate())
+        {
+            return;
+        }
+
+        CancelConfirm();
+
+        DiskModel model = (DiskModel) getWindow();
+        SanStorageModel sanStorageModel = model.getSanStorageModel();
+        sanStorageModel.setForce(true);
+
+        OnSave();
     }
 
     private void OnAttachDisks()
@@ -666,6 +725,14 @@
         return true;
     }
 
+    private void CancelConfirm()
+    {
+        DiskModel model = (DiskModel) getWindow();
+        SanStorageModel sanStorageModel = model.getSanStorageModel();
+        sanStorageModel.setForce(false);
+        setConfirmWindow(null);
+    }
+
     @Override
     public void ExecuteCommand(UICommand command)
     {
@@ -695,10 +762,18 @@
         {
             OnSave();
         }
+        else if (StringHelper.stringsEqual(command.getName(), "OnForceSave")) 
//$NON-NLS-1$
+        {
+            OnForceSave();
+        }
         else if (StringHelper.stringsEqual(command.getName(), "Cancel")) 
//$NON-NLS-1$
         {
             Cancel();
         }
+        else if (StringHelper.stringsEqual(command.getName(), 
"CancelConfirm")) //$NON-NLS-1$
+        {
+            CancelConfirm();
+        }
         else if (StringHelper.stringsEqual(command.getName(), "OnRemove")) 
//$NON-NLS-1$
         {
             OnRemove();
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/SanStorageModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/SanStorageModel.java
index 5868980..4fb7e8d 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/SanStorageModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/SanStorageModel.java
@@ -618,6 +618,23 @@
         return usedLunsMessages;
     }
 
+    public ArrayList<String> getPartOfSdLunsMessages() {
+        ArrayList<String> partOfSdunsMessages = new ArrayList<String>();
+        Messages messages = ConstantsManager.getInstance().getMessages();
+
+        for (LunModel lunModel : getAddedLuns()) {
+            String reason = null;
+            LUNs lun = (LUNs) lunModel.getEntity();
+
+            if (lun.getStorageDomainId() != null) {
+                reason = 
messages.lunAlreadyPartOfStorageDomainWarning(lun.getStorageDomainName());
+                partOfSdunsMessages.add(lunModel.getLunId() + " (" + reason + 
")"); //$NON-NLS-1$ //$NON-NLS-2$
+            }
+        }
+
+        return partOfSdunsMessages;
+    }
+
     @Override
     public boolean Validate()
     {
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmDiskListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmDiskListModel.java
index da63192..8c39cdb 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmDiskListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmDiskListModel.java
@@ -42,12 +42,13 @@
 import org.ovirt.engine.ui.uicommonweb.Linq.DiskByAliasComparer;
 import org.ovirt.engine.ui.uicommonweb.UICommand;
 import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
+import org.ovirt.engine.ui.uicommonweb.models.ConfirmationModel;
 import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
 import org.ovirt.engine.ui.uicommonweb.models.ISupportSystemTreeContext;
 import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemType;
 import org.ovirt.engine.ui.uicommonweb.models.quota.ChangeQuotaItemModel;
 import org.ovirt.engine.ui.uicommonweb.models.quota.ChangeQuotaModel;
-import org.ovirt.engine.ui.uicommonweb.models.storage.LunModel;
+import org.ovirt.engine.ui.uicommonweb.models.storage.SanStorageModel;
 import org.ovirt.engine.ui.uicompat.ConstantsManager;
 import org.ovirt.engine.ui.uicompat.FrontendActionAsyncResult;
 import org.ovirt.engine.ui.uicompat.FrontendMultipleActionAsyncResult;
@@ -646,14 +647,21 @@
             LunDisk lunDisk;
 
             if (model.getIsNew()) {
-                ArrayList<LunModel> addedLuns = 
model.getSanStorageModel().getAddedLuns();
-                if (addedLuns.isEmpty()) {
+                SanStorageModel sanStorageModel = model.getSanStorageModel();
+                ArrayList<String> partOfSdLunsMessages = 
sanStorageModel.getPartOfSdLunsMessages();
+
+                if (partOfSdLunsMessages.isEmpty() || 
sanStorageModel.isForce()) {
+                    LUNs luns = (LUNs) 
sanStorageModel.getAddedLuns().get(0).getEntity();
+                    luns.setLunType((StorageType) 
model.getStorageType().getSelectedItem());
+
+                    lunDisk = new LunDisk();
+                    lunDisk.setLun(luns);
+                }
+                else {
+                    ForceCreationWarning(partOfSdLunsMessages);
                     return;
                 }
-                LUNs luns = (LUNs) addedLuns.get(0).getEntity();
-                luns.setLunType((StorageType) 
model.getStorageType().getSelectedItem());
-                lunDisk = new LunDisk();
-                lunDisk.setLun(luns);
+
             }
             else {
                 lunDisk = (LunDisk) getSelectedItem();
@@ -702,6 +710,44 @@
                     }
                 },
                 this);
+    }
+
+    private void ForceCreationWarning(ArrayList<String> usedLunsMessages) {
+        ConfirmationModel confirmationModel = new ConfirmationModel();
+        setConfirmWindow(confirmationModel);
+
+        
confirmationModel.setTitle(ConstantsManager.getInstance().getConstants().forceStorageDomainCreation());
+        
confirmationModel.setMessage(ConstantsManager.getInstance().getConstants().lunsAlreadyPartOfSD());
+        confirmationModel.setHashName("force_lun_disk_creation"); //$NON-NLS-1$
+        confirmationModel.setItems(usedLunsMessages);
+
+        UICommand command;
+        command = new UICommand("OnForceSave", this); //$NON-NLS-1$
+        command.setTitle(ConstantsManager.getInstance().getConstants().ok());
+        command.setIsDefault(true);
+        confirmationModel.getCommands().add(command);
+
+        command = new UICommand("CancelConfirm", this); //$NON-NLS-1$
+        
command.setTitle(ConstantsManager.getInstance().getConstants().cancel());
+        command.setIsCancel(true);
+        confirmationModel.getCommands().add(command);
+    }
+
+    private void OnForceSave()
+    {
+        ConfirmationModel confirmationModel = (ConfirmationModel) 
getConfirmWindow();
+        if (confirmationModel != null && !confirmationModel.Validate())
+        {
+            return;
+        }
+
+        CancelConfirm();
+
+        DiskModel model = (DiskModel) getWindow();
+        SanStorageModel sanStorageModel = model.getSanStorageModel();
+        sanStorageModel.setForce(true);
+
+        OnSave();
     }
 
     private void OnAttachDisks()
@@ -796,6 +842,14 @@
         presets = null;
         nextAlias = null;
         datacenter = null;
+    }
+
+    private void CancelConfirm()
+    {
+        DiskModel model = (DiskModel) getWindow();
+        SanStorageModel sanStorageModel = model.getSanStorageModel();
+        sanStorageModel.setForce(false);
+        setConfirmWindow(null);
     }
 
     private void Cancel()
@@ -966,10 +1020,18 @@
         {
             OnSave();
         }
+        else if (StringHelper.stringsEqual(command.getName(), "OnForceSave")) 
//$NON-NLS-1$
+        {
+            OnForceSave();
+        }
         else if (StringHelper.stringsEqual(command.getName(), "Cancel")) 
//$NON-NLS-1$
         {
             Cancel();
         }
+        else if (StringHelper.stringsEqual(command.getName(), 
"CancelConfirm")) //$NON-NLS-1$
+        {
+            CancelConfirm();
+        }
         else if (StringHelper.stringsEqual(command.getName(), "OnRemove")) 
//$NON-NLS-1$
         {
             OnRemove();
diff --git 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java
 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java
index dedb76a..12c795a 100644
--- 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java
+++ 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java
@@ -1479,6 +1479,9 @@
     @DefaultStringValue("The following LUNs are already in use:")
     String lunsAlreadyInUse();
 
+    @DefaultStringValue("The following LUNs are already part of Storage 
Domains:")
+    String lunsAlreadyPartOfSD();
+
     @DefaultStringValue("Networks on both interfaces : Detach all the networks 
from one the interfaces/bond, if required re-attach to the bond")
     String networksOnBothInterfaces();
 
diff --git 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Messages.java
 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Messages.java
index 69a6b9d..a0d029d 100644
--- 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Messages.java
+++ 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Messages.java
@@ -116,7 +116,7 @@
     @DefaultMessage("Press {0} to Release Cursor")
     String pressKeyToReleaseCursor(String key);
 
-    @DefaultMessage("LUN is already part of storage domain: {0}")
+    @DefaultMessage("LUN is already part of Storage Domain: {0}")
     String lunAlreadyPartOfStorageDomainWarning(String storageDomainName);
 
     @DefaultMessage("LUN is already used by disk: {0}")
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/DiskModule.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/DiskModule.java
index 5ba54d0..c50d25a 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/DiskModule.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/DiskModule.java
@@ -26,6 +26,7 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.PermissionsPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.quota.ChangeQuotaPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.storage.DisksAllocationPopupPresenterWidget;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.storage.StorageForceCreatePopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmDiskPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmDiskRemovePopupPresenterWidget;
 
@@ -43,6 +44,7 @@
     public MainModelProvider<Disk, DiskListModel> 
getDiskListProvider(ClientGinjector ginjector,
             final Provider<VmDiskPopupPresenterWidget> newPopupProvider,
             final Provider<VmDiskRemovePopupPresenterWidget> 
removeConfirmPopupProvider,
+            final Provider<StorageForceCreatePopupPresenterWidget> 
forceCreateConfirmPopupProvider,
             final Provider<DisksAllocationPopupPresenterWidget> 
moveOrCopyPopupProvider,
             final Provider<ChangeQuotaPopupPresenterWidget> 
changeQutoaPopupProvider) {
         return new MainTabModelProvider<Disk, DiskListModel>(ginjector, 
DiskListModel.class) {
@@ -68,6 +70,8 @@
                     UICommand lastExecutedCommand) {
                 if (lastExecutedCommand == getModel().getRemoveCommand()) {
                     return removeConfirmPopupProvider.get();
+                } else if (lastExecutedCommand.getName().equals("OnSave")) { 
//$NON-NLS-1$
+                    return forceCreateConfirmPopupProvider.get();
                 } else {
                     return super.getConfirmModelPopup(source, 
lastExecutedCommand);
                 }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/VirtualMachineModule.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/VirtualMachineModule.java
index deeee9f..bd8d919 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/VirtualMachineModule.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/VirtualMachineModule.java
@@ -37,6 +37,7 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.guide.GuidePopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.quota.ChangeQuotaPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.storage.DisksAllocationPopupPresenterWidget;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.storage.StorageForceCreatePopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmChangeCDPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmClonePopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmDesktopNewPopupPresenterWidget;
@@ -186,6 +187,7 @@
     public SearchableDetailModelProvider<Disk, VmListModel, VmDiskListModel> 
getVmDiskListProvider(ClientGinjector ginjector,
             final Provider<VmDiskPopupPresenterWidget> popupProvider,
             final Provider<VmDiskRemovePopupPresenterWidget> 
removeConfirmPopupProvider,
+            final Provider<StorageForceCreatePopupPresenterWidget> 
forceCreateConfirmPopupProvider,
             final Provider<DisksAllocationPopupPresenterWidget> 
movePopupProvider,
             final Provider<ChangeQuotaPopupPresenterWidget> 
changeQutoaPopupProvider) {
         return new SearchableDetailTabModelProvider<Disk, VmListModel, 
VmDiskListModel>(ginjector,
@@ -213,6 +215,9 @@
                     UICommand lastExecutedCommand) {
                 if (lastExecutedCommand == getModel().getRemoveCommand()) {
                     return removeConfirmPopupProvider.get();
+                }
+                else if (lastExecutedCommand.getName().equals("OnSave")) { 
//$NON-NLS-1$
+                    return forceCreateConfirmPopupProvider.get();
                 } else {
                     return super.getConfirmModelPopup(source, 
lastExecutedCommand);
                 }


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

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

Reply via email to