Maor Lipchuk has uploaded a new change for review. Change subject: webadmin: Add attach/import warnning in Storage module ......................................................................
webadmin: Add attach/import warnning in Storage module Adding GUI support in the Storage module to support the confirmation warnning on attach and import Storage Domain command Change-Id: I68de45685a3c2e55a5e2b42659020f2753c0a77e Bug-Url: https://bugzilla.redhat.com/1138115 Signed-off-by: Maor Lipchuk <[email protected]> --- M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageDataCenterListModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/StorageModule.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/StorageForceCreatePopupView.ui.xml 4 files changed, 243 insertions(+), 84 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/53/36453/1 diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageDataCenterListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageDataCenterListModel.java index f72cde4..67a46c5 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageDataCenterListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageDataCenterListModel.java @@ -2,6 +2,7 @@ import java.util.ArrayList; import java.util.Collections; +import java.util.List; import org.ovirt.engine.core.common.VdcActionUtils; import org.ovirt.engine.core.common.action.AttachStorageDomainToPoolParameters; @@ -12,6 +13,7 @@ import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StorageDomainSharedStatus; +import org.ovirt.engine.core.common.businessentities.StorageDomainStatic; import org.ovirt.engine.core.common.businessentities.StorageDomainType; import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.businessentities.StoragePoolStatus; @@ -30,6 +32,7 @@ import org.ovirt.engine.ui.uicommonweb.models.ConfirmationModel; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicommonweb.models.ListModel; +import org.ovirt.engine.ui.uicommonweb.models.Model; import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel; import org.ovirt.engine.ui.uicompat.ConstantsManager; import org.ovirt.engine.ui.uicompat.FrontendMultipleActionAsyncResult; @@ -160,6 +163,16 @@ public void setavailableDatacenters(ArrayList<StoragePool> value) { privateavailableDatacenters = value; + } + + private List<StoragePool> selectedDataCentersForAttach; + + public List<StoragePool> getSelectedDataCentersForAttach() { + return selectedDataCentersForAttach; + } + + public void setSelectedDataCentersForAttach(List<StoragePool> selectedDataCentersForAttach) { + this.selectedDataCentersForAttach = selectedDataCentersForAttach; } public StorageDataCenterListModel() @@ -377,7 +390,7 @@ private void onAttach() { - ListModel model = (ListModel) getWindow(); + final ListModel model = (ListModel) getWindow(); if (model.getProgress() != null) { @@ -393,39 +406,90 @@ ArrayList<StoragePool> items = new ArrayList<StoragePool>(); for (EntityModel a : Linq.<EntityModel> cast(model.getItems())) { - if (a.getIsSelected()) - { + if (a.getIsSelected()) { items.add((StoragePool) a.getEntity()); } } - if (items.size() > 0) - { - model.startProgress(null); - - ArrayList<VdcActionParametersBase> parameters = - new ArrayList<VdcActionParametersBase>(); - for (StoragePool dataCenter : items) - { - parameters.add(new AttachStorageDomainToPoolParameters(getEntity().getId(), dataCenter.getId())); - } - - Frontend.getInstance().runMultipleAction(VdcActionType.AttachStorageDomainToPool, parameters, - new IFrontendMultipleActionAsyncCallback() { - @Override - public void executed(FrontendMultipleActionAsyncResult result) { - - ListModel localModel = (ListModel) result.getState(); - localModel.stopProgress(); - cancel(); - - } - }, model); - } - else + if (items.size() == 0) { cancel(); + return; } + + setSelectedDataCentersForAttach(items); + model.startProgress(null); + + if (getEntity().getStorageDomainType() == StorageDomainType.Data) { + StoragePool dataCenter = items.get(0); + ArrayList<StorageDomain> storageDomains = new ArrayList<StorageDomain>(); + storageDomains.add(getEntity()); + + AsyncDataProvider.getInstance().getStorageDomainsWithAttachedStoragePoolGuid( + new AsyncQuery(this, new INewAsyncCallback() { + @Override + public void onSuccess(Object target, Object returnValue) { + StorageDataCenterListModel storageDataCenterListModel = (StorageDataCenterListModel) target; + List<StorageDomainStatic> attachedStorageDomains = (List<StorageDomainStatic>) returnValue; + if (!attachedStorageDomains.isEmpty()) { + ConfirmationModel model = new ConfirmationModel(); + storageDataCenterListModel.setWindow(null); + storageDataCenterListModel.setWindow(model); + + List<String> stoageDomainNames = new ArrayList<String>(); + for (StorageDomainStatic domain : attachedStorageDomains) { + stoageDomainNames.add(domain.getStorageName()); + } + model.setItems(stoageDomainNames); + + model.setTitle(ConstantsManager.getInstance().getConstants().storageDomainsAttachedToDataCenterWarningTitle()); + model.setMessage(ConstantsManager.getInstance().getConstants().storageDomainsAttachedToDataCenterWarningMessage()); + model.setHelpTag(HelpTag.attach_storage_domain_confirmation); + model.setHashName("attach_storage_domain_confirmation"); //$NON-NLS-1$ + model.getLatch().setIsAvailable(true); + model.getLatch().setIsChangable(true); + + UICommand onApprove = new UICommand("OnAttachApprove", storageDataCenterListModel); //$NON-NLS-1$ + onApprove.setTitle(ConstantsManager.getInstance().getConstants().ok()); + onApprove.setIsDefault(true); + model.getCommands().add(onApprove); + + UICommand cancel = new UICommand("Cancel", storageDataCenterListModel); //$NON-NLS-1$ + cancel.setTitle(ConstantsManager.getInstance().getConstants().cancel()); + cancel.setIsCancel(true); + model.getCommands().add(cancel); + } else { + executeAttachStorageDomains(model); + } + } + }), dataCenter, storageDomains); + } else { + executeAttachStorageDomains(model); + } + } + + public void onAttachApprove() { + ConfirmationModel model = (ConfirmationModel) getWindow(); + if (!model.validate()) { + return; + } + executeAttachStorageDomains(model); + } + + public void executeAttachStorageDomains(Model model) { + ArrayList<VdcActionParametersBase> parameters = new ArrayList<VdcActionParametersBase>(); + for (StoragePool dataCenter : getSelectedDataCentersForAttach()) { + parameters.add(new AttachStorageDomainToPoolParameters(getEntity().getId(), dataCenter.getId())); + } + Frontend.getInstance().runMultipleAction(VdcActionType.AttachStorageDomainToPool, parameters, + new IFrontendMultipleActionAsyncCallback() { + @Override + public void executed(FrontendMultipleActionAsyncResult result) { + ListModel localModel = (ListModel) result.getState(); + localModel.stopProgress(); + cancel(); + } + }, model); } private void detach() @@ -720,6 +784,10 @@ { onAttach(); } + else if ("OnAttachApprove".equals(command.getName())) //$NON-NLS-1$ + { + onAttachApprove(); + } else if ("OnDetach".equals(command.getName())) //$NON-NLS-1$ { onDetach(); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java index 48139d4..bb1dd24 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java @@ -266,6 +266,7 @@ public StorageDomainType domainType = StorageDomainType.values()[0]; public StorageType storageType; public boolean removeConnection; + public List<StorageDomain> storageDomainsToAdd; @Override public boolean isSearchStringMatch(String searchString) @@ -1018,6 +1019,25 @@ setConfirmWindow(null); } + private void cancelImportConfirm() { + cancelConfirm(); + getWindow().stopProgress(); + + if (fileConnection != null) { + Frontend.getInstance().runAction(VdcActionType.DisconnectStorageServerConnection, + new StorageServerConnectionParametersBase(fileConnection, hostId), + new IFrontendActionAsyncCallback() { + @Override + public void executed(FrontendActionAsyncResult result) { + StorageListModel storageListModel = (StorageListModel) result.getState(); + cleanConnection(storageListModel.fileConnection, storageListModel.hostId); + storageListModel.fileConnection = null; + } + }, + this); + } + } + private void cancel() { setWindow(null); @@ -1187,9 +1207,27 @@ { cancelConfirm(); } + else if ("CancelImportConfirm".equals(command.getName())) //$NON-NLS-1$ + { + cancelImportConfirm(); + } else if ("OnImport".equals(command.getName())) //$NON-NLS-1$ { onImport(); + } + else if ("OnImportFile".equals(command.getName())) { //$NON-NLS-1$ + if (getConfirmWindow() != null && !((ConfirmationModel) getConfirmWindow()).validate()) { + return; + } + cancelConfirm(); + getExistingStorageDomainList(); + } + else if ("OnImportSan".equals(command.getName())) { //$NON-NLS-1$ + if (getConfirmWindow() != null && !((ConfirmationModel) getConfirmWindow()).validate()) { + return; + } + cancelConfirm(); + onImportSanDomainApprove(); } else if ("OnRemove".equals(command.getName())) //$NON-NLS-1$ { @@ -1914,14 +1952,16 @@ importFileStorageInit(); } - private void importSanStorage(final TaskContext context) - { + private void importSanStorage(final TaskContext context) { this.context = context; - - ArrayList<Object> data = (ArrayList<Object>) context.getState(); StorageModel model = (StorageModel) getWindow(); - storageModel = model.getSelectedItem(); + ImportSanStorageModel importSanStorageModel = (ImportSanStorageModel) storageModel; + checkSanDomainAttachedToDc("OnImportSan", importSanStorageModel.getStorageDomains().getSelectedItems()); //$NON-NLS-1$ + } + + private void onImportSanDomainApprove() { + ArrayList<Object> data = (ArrayList<Object>) context.getState(); hostId = (Guid) data.get(1); ImportSanStorageModel importSanStorageModel = (ImportSanStorageModel) storageModel; @@ -2034,74 +2074,72 @@ tempVar.setMountOptions(glusterModel.getMountOptions().getEntity()); } storageListModel.fileConnection = tempVar; - storageListModel.importFileStorageConnect(); + importFileStorageConnect(); } } }), null, path); } - public void importFileStorageConnect() - { + public void importFileStorageConnect() { Frontend.getInstance().runAction(VdcActionType.AddStorageServerConnection, new StorageServerConnectionParametersBase(fileConnection, hostId), new IFrontendActionAsyncCallback() { @Override public void executed(FrontendActionAsyncResult result) { - StorageListModel storageListModel = (StorageListModel) result.getState(); - VdcReturnValueBase returnVal = result.getReturnValue(); - boolean success = returnVal != null && returnVal.getSucceeded(); - if (success) - { - storageListModel.fileConnection.setid((String) returnVal.getActionReturnValue()); - AsyncDataProvider.getInstance().getExistingStorageDomainList(new AsyncQuery(storageListModel, - new INewAsyncCallback() { - @Override - public void onSuccess(Object target, Object returnValue) { + VdcReturnValueBase returnVal = result.getReturnValue(); + boolean success = returnVal != null && returnVal.getSucceeded(); + if (success) { + storageListModel.fileConnection.setid((String) returnVal.getActionReturnValue()); + checkFileDomainAttachedToDc("OnImportFile", storageListModel.fileConnection); //$NON-NLS-1$ + } + else { + postImportFileStorage(storageListModel.context, + false, + storageListModel.storageModel, + ConstantsManager.getInstance() + .getConstants() + .failedToRetrieveExistingStorageDomainInformationMsg()); + } + } + }, + this); + } - StorageListModel storageListModel1 = (StorageListModel) target; - ArrayList<StorageDomain> domains = (ArrayList<StorageDomain>) returnValue; - if (domains != null && !domains.isEmpty()) { - storageListModel1.importFileStorageAddDomain(domains); - } - else { - String errorMessage = domains == null ? - ConstantsManager.getInstance().getConstants() - .failedToRetrieveExistingStorageDomainInformationMsg() : - ConstantsManager.getInstance().getConstants() - .thereIsNoStorageDomainUnderTheSpecifiedPathMsg(); - - postImportFileStorage(storageListModel1.context, - false, - storageListModel1.storageModel, - errorMessage); - - storageListModel1.cleanConnection(storageListModel1.fileConnection, storageListModel1.hostId); - } - } - }), - hostId, - domainType, - storageType, - path); + private void getExistingStorageDomainList() { + AsyncDataProvider.getInstance().getExistingStorageDomainList(new AsyncQuery(this, + new INewAsyncCallback() { + @Override + public void onSuccess(Object target, Object returnValue) { + StorageListModel storageListModel = (StorageListModel) target; + ArrayList<StorageDomain> domains = (ArrayList<StorageDomain>) returnValue; + if (domains != null && !domains.isEmpty()) { + storageListModel.storageDomainsToAdd = domains; + addExistingFileStorageDomain(); } - else - { + else { + String errorMessage = domains == null ? + ConstantsManager.getInstance().getConstants() + .failedToRetrieveExistingStorageDomainInformationMsg() : + ConstantsManager.getInstance().getConstants() + .thereIsNoStorageDomainUnderTheSpecifiedPathMsg(); + postImportFileStorage(storageListModel.context, false, storageListModel.storageModel, - ConstantsManager.getInstance() - .getConstants() - .failedToRetrieveExistingStorageDomainInformationMsg()); - } + errorMessage); + storageListModel.cleanConnection(storageListModel.fileConnection, storageListModel.hostId); + } } - }, - this); + }), + hostId, + domainType, + storageType, + path); } - public void importFileStorageAddDomain(ArrayList<StorageDomain> domains) - { - StorageDomain sdToAdd = Linq.firstOrDefault(domains); + public void addExistingFileStorageDomain() { + StorageDomain sdToAdd = Linq.firstOrDefault(storageDomainsToAdd); StorageDomainStatic sdsToAdd = sdToAdd.getStorageStaticData(); StorageDomainManagementParameter params = new StorageDomainManagementParameter(sdsToAdd); @@ -2159,6 +2197,57 @@ new Object[] {context, isSucceeded, model, message}); } + private void checkSanDomainAttachedToDc(String commandName, List<StorageDomain> storageDomains) { + checkDomainAttachedToDc(commandName, storageDomains, null); + } + + private void checkFileDomainAttachedToDc(String commandName, StorageServerConnections storageServerConnections) { + checkDomainAttachedToDc(commandName, null, storageServerConnections); + } + + private void checkDomainAttachedToDc(String commandName, List<StorageDomain> storageDomains, + StorageServerConnections storageServerConnections) { + final StorageModel storageModel = (StorageModel) getWindow(); + StoragePool storagePool = storageModel.getDataCenter().getSelectedItem(); + + final UICommand okCommand = createOKCommand(commandName); + + if (storagePool.getId().equals(Guid.Empty)) { + okCommand.execute(); + return; + } + + VDS host = storageModel.getHost().getSelectedItem(); + + AsyncDataProvider.getInstance().getStorageDomainsWithAttachedStoragePoolGuid( + new AsyncQuery(this, new INewAsyncCallback() { + @Override + public void onSuccess(Object target, Object returnValue) { + List<StorageDomainStatic> attachedStorageDomains = (List<StorageDomainStatic>) returnValue; + if (!attachedStorageDomains.isEmpty()) { + ConfirmationModel model = new ConfirmationModel(); + setConfirmWindow(model); + + model.setTitle(ConstantsManager.getInstance().getConstants().storageDomainsAttachedToDataCenterWarningTitle()); + model.setMessage(ConstantsManager.getInstance().getConstants().storageDomainsAttachedToDataCenterWarningMessage()); + model.setHelpTag(HelpTag.import_storage_domain_confirmation); + model.setHashName("import_storage_domain_confirmation"); //$NON-NLS-1$ + + List<String> stoageDomainNames = new ArrayList<String>(); + for (StorageDomainStatic domain : attachedStorageDomains) { + stoageDomainNames.add(domain.getStorageName()); + } + model.setItems(stoageDomainNames); + + UICommand cancelCommand = createCancelCommand("CancelImportConfirm"); //$NON-NLS-1$ + model.getCommands().add(okCommand); + model.getCommands().add(cancelCommand); + } else { + okCommand.execute(); + } + } + }), storagePool, storageDomains, storageServerConnections, host.getId()); + } @Override public void run(TaskContext context) diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/StorageModule.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/StorageModule.java index d187906..dda4d91 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/StorageModule.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/StorageModule.java @@ -101,7 +101,8 @@ UICommand lastExecutedCommand) { if (lastExecutedCommand == getModel().getDestroyCommand()) { return destroyConfirmPopupProvider.get(); - } else if (lastExecutedCommand.getName().equals("OnSave")) { //$NON-NLS-1$ + } else if (lastExecutedCommand.getName().equals("OnSave") //$NON-NLS-1$ + || lastExecutedCommand.getName().equals("OnImport")) { //$NON-NLS-1$ return forceCreateConfirmPopupProvider.get(); } else { return super.getConfirmModelPopup(source, lastExecutedCommand); @@ -155,7 +156,8 @@ @Override public AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, ?> getConfirmModelPopup(StorageDataCenterListModel source, UICommand lastExecutedCommand) { - if (lastExecutedCommand == getModel().getDetachCommand()) { + if (lastExecutedCommand == getModel().getDetachCommand() || + lastExecutedCommand.getName().equals("OnAttach")) { //$NON-NLS-1$) { return removeConfirmPopupProvider.get(); } else { return super.getConfirmModelPopup(source, lastExecutedCommand); diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/StorageForceCreatePopupView.ui.xml b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/StorageForceCreatePopupView.ui.xml index 10d391e..60df04b 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/StorageForceCreatePopupView.ui.xml +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/StorageForceCreatePopupView.ui.xml @@ -23,7 +23,7 @@ } </ui:style> - <d:SimpleDialogPanel width="700px" height="300px"> + <d:SimpleDialogPanel width="700px" height="320px"> <d:content> <g:FlowPanel addStyleNames="{style.content}"> <g:Label ui:field="warningLabel" addStyleNames="{style.warningLabel}"/> -- To view, visit http://gerrit.ovirt.org/36453 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I68de45685a3c2e55a5e2b42659020f2753c0a77e Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Maor Lipchuk <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
