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
