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

Reply via email to