Maor Lipchuk has uploaded a new change for review. Change subject: webadmin: Add dialog for attaching an attached Storage Domain [2] ......................................................................
webadmin: Add dialog for attaching an attached Storage Domain [2] Add a dialog box when attaching a Storage Domain to a Data Center from the Storage main tab through the Data Center sub tab. Also using a latch flag in the dialog Change-Id: I9e9b29e24d7c13b16ef80a84eabfe109413d46e9 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/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/StorageModule.java 2 files changed, 103 insertions(+), 35 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/33/34733/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 5f54ac6..4c07929 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,12 +13,14 @@ 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; import org.ovirt.engine.core.common.businessentities.StorageType; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.queries.IdQueryParameters; +import org.ovirt.engine.core.common.queries.StorageDomainsAndStoragePoolIdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.ui.frontend.AsyncQuery; @@ -30,6 +33,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 +164,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() @@ -363,55 +377,103 @@ private void onAttach() { - ListModel model = (ListModel) getWindow(); + final ListModel model = (ListModel) getWindow(); - if (model.getProgress() != null) - { + if (model.getProgress() != null) { return; } - if (getEntity() == null) - { + if (getEntity() == null) { cancel(); return; } ArrayList<StoragePool> items = new ArrayList<StoragePool>(); - for (EntityModel a : Linq.<EntityModel> cast(model.getItems())) - { - if (a.getIsSelected()) - { + for (EntityModel a : Linq.<EntityModel> cast(model.getItems())) { + 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()); + Frontend.getInstance().runQuery(VdcQueryType.GetStorageDomainsWithAttachedStoragePoolGuid, + new StorageDomainsAndStoragePoolIdQueryParameters(storageDomains, dataCenter.getId()), + new AsyncQuery(this, new INewAsyncCallback() { + @Override + public void onSuccess(Object target, Object returnValue) { + StorageDataCenterListModel storageDataCenterListModel =(StorageDataCenterListModel) target; + List<StorageDomainStatic> attachedStorageDomains = ((VdcQueryReturnValue) returnValue).getReturnValue(); + 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.getLatch().setIsAvailable(true); + model.getLatch().setIsChangable(true); + + UICommand maintenance = new UICommand("OnAttachApprove", storageDataCenterListModel); //$NON-NLS-1$ + maintenance.setTitle(ConstantsManager.getInstance().getConstants().ok()); + maintenance.setIsDefault(true); + model.getCommands().add(maintenance); + + 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); + } + } + })); + } 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>(); + ArrayList<StoragePool> items = new ArrayList<StoragePool>(); + 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() @@ -705,6 +767,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/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 b335758..cb5e1dc 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 @@ -174,7 +174,9 @@ @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); -- To view, visit http://gerrit.ovirt.org/34733 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I9e9b29e24d7c13b16ef80a84eabfe109413d46e9 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
