Maor Lipchuk has uploaded a new change for review.

Change subject: webadmin: Support warnning for import/attach operation
......................................................................

webadmin: Support warnning for import/attach operation

1. Adding properties for the attach/import confirmation module.
2. Add attach warnning in Data center module
3. Adding GUI support in the Storage module to support the confirmation
warnning on attach and import Storage Domain command

Change-Id: I22f7149e298ab38f816e49184f5d02b4e01e3db6
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/help/HelpTag.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/DataCenterStorageListModel.java
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/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/DataCenterModule.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
8 files changed, 378 insertions(+), 148 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/45/36545/1

diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/help/HelpTag.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/help/HelpTag.java
index e0fa2b6..97419ca 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/help/HelpTag.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/help/HelpTag.java
@@ -186,6 +186,10 @@
 
     force_storage_domain_creation("force_storage_domain_creation", 
HelpTagType.WEBADMIN, "Storage Tab > New Domain > Confirm LUNs in Use"), 
//$NON-NLS-1$ //$NON-NLS-2$
 
+    import_storage_domain_confirmation("import_storage_domain_confirmation", 
HelpTagType.WEBADMIN, "Storage Tab > Import Domain > Confirm import storage 
domain"), //$NON-NLS-1$ //$NON-NLS-2$
+
+    attach_storage_domain_confirmation("attach_storage_domain_confirmation", 
HelpTagType.WEBADMIN, "Storage main-tab > Data Center sub-tab > Attach > 
Confirm attach storage domain"), //$NON-NLS-1$ //$NON-NLS-2$
+
     general("general", HelpTagType.UNKNOWN), //$NON-NLS-1$
 
     gluster_bricks("gluster_bricks", HelpTagType.UNKNOWN), //$NON-NLS-1$
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/DataCenterStorageListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/DataCenterStorageListModel.java
index 500f39d..698f3ea 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/DataCenterStorageListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/DataCenterStorageListModel.java
@@ -1,6 +1,7 @@
 package org.ovirt.engine.ui.uicommonweb.models.datacenters;
 
 import java.util.ArrayList;
+import java.util.List;
 
 import org.ovirt.engine.core.common.VdcActionUtils;
 import org.ovirt.engine.core.common.action.AttachStorageDomainToPoolParameters;
@@ -11,6 +12,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.StorageDomainStatus;
 import org.ovirt.engine.core.common.businessentities.StorageDomainType;
 import org.ovirt.engine.core.common.businessentities.StorageFormatType;
@@ -163,6 +165,8 @@
     {
         privatepb_remove = value;
     }
+
+    private ArrayList<StorageDomain> selectedStorageDomains;
 
     public DataCenterStorageListModel()
     {
@@ -449,6 +453,7 @@
     public void onAttach()
     {
         ListModel model = (ListModel) getWindow();
+        ArrayList<StorageDomain> selectedDataStorageDomains = new 
ArrayList<StorageDomain>();
 
         if (getEntity() == null)
         {
@@ -456,26 +461,84 @@
             return;
         }
 
-        ArrayList<StorageDomain> items = new ArrayList<StorageDomain>();
-        for (EntityModel a : Linq.<EntityModel> cast(model.getItems()))
-        {
-            if (a.getIsSelected())
-            {
-                items.add((StorageDomain) a.getEntity());
+        selectedStorageDomains = new ArrayList<StorageDomain>();
+        for (EntityModel a : Linq.<EntityModel> cast(model.getItems())) {
+            if (a.getIsSelected()) {
+                StorageDomain storageDomain = (StorageDomain) a.getEntity();
+                selectedStorageDomains.add(storageDomain);
+                if (storageDomain.getStorageDomainType() == 
StorageDomainType.Data) {
+                    selectedDataStorageDomains.add(storageDomain);
+                }
             }
         }
 
-        if (items.size() > 0)
-        {
-            ArrayList<VdcActionParametersBase> pb = new 
ArrayList<VdcActionParametersBase>();
-            for (StorageDomain a : items)
-            {
-                pb.add(new AttachStorageDomainToPoolParameters(a.getId(), 
getEntity().getId()));
-            }
-
-            
Frontend.getInstance().runMultipleAction(VdcActionType.AttachStorageDomainToPool,
 pb);
+        if (selectedStorageDomains.isEmpty()) {
+            cancel();
+            return;
         }
 
+        AsyncDataProvider.getStorageDomainsWithAttachedStoragePoolGuid(
+                new AsyncQuery(this, new INewAsyncCallback() {
+                    @Override
+                    public void onSuccess(Object target, Object returnValue) {
+                        DataCenterStorageListModel dataCenterStorageListModel 
= (DataCenterStorageListModel) target;
+                        List<StorageDomainStatic> attachedStorageDomains = 
(List<StorageDomainStatic>) returnValue;
+                        if (!attachedStorageDomains.isEmpty()) {
+                            ConfirmationModel model = new ConfirmationModel();
+                            dataCenterStorageListModel.setWindow(null);
+                            dataCenterStorageListModel.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", dataCenterStorageListModel); //$NON-NLS-1$
+                            
onApprove.setTitle(ConstantsManager.getInstance().getConstants().ok());
+                            onApprove.setIsDefault(true);
+                            model.getCommands().add(onApprove);
+
+                            UICommand cancel = new UICommand("Cancel", 
dataCenterStorageListModel); //$NON-NLS-1$
+                            
cancel.setTitle(ConstantsManager.getInstance().getConstants().cancel());
+                            cancel.setIsCancel(true);
+                            model.getCommands().add(cancel);
+                        } else {
+                            executeAttachStorageDomains();
+                        }
+                    }
+                }), getEntity(), selectedDataStorageDomains);
+    }
+
+    public void onAttachApprove() {
+        ConfirmationModel model = (ConfirmationModel) getWindow();
+        if (!model.validate()) {
+            return;
+        }
+
+        executeAttachStorageDomains();
+    }
+
+    public void executeAttachStorageDomains() {
+        ArrayList<VdcActionParametersBase> pb = new 
ArrayList<VdcActionParametersBase>();
+        for (StorageDomain storageDomain : selectedStorageDomains) {
+            pb.add(new 
AttachStorageDomainToPoolParameters(storageDomain.getId(), getEntity().getId(
+            )));
+        }
+        
Frontend.getInstance().runMultipleAction(VdcActionType.AttachStorageDomainToPool,
 pb);
         cancel();
     }
 
@@ -796,6 +859,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/StorageDataCenterListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageDataCenterListModel.java
index 61a8050..d576b81 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
@@ -13,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;
@@ -31,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;
@@ -161,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()
@@ -381,55 +393,102 @@
 
     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());
+
+            AsyncDataProvider.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()
@@ -533,30 +592,29 @@
             }
             else
             {
-                AsyncDataProvider.getLocalStorageHost(new AsyncQuery(new 
Object[] { this, getEntity() },
-                        new INewAsyncCallback() {
-                            @Override
-                            public void onSuccess(Object target, Object 
returnValue) {
+                AsyncDataProvider.getLocalStorageHost(new AsyncQuery(new 
Object[]{this, getEntity()},
+                                new INewAsyncCallback() {
+                                    @Override
+                                    public void onSuccess(Object target, 
Object returnValue) {
 
-                                Object[] array = (Object[]) target;
-                                StorageDataCenterListModel listModel = 
(StorageDataCenterListModel) array[0];
-                                StorageDomain storage = (StorageDomain) 
array[1];
-                                VDS locaVds = (VDS) returnValue;
-                                RemoveStorageDomainParameters tempVar =
-                                        new 
RemoveStorageDomainParameters(storage.getId());
-                                tempVar.setVdsId((locaVds != null ? 
locaVds.getId() : null));
-                                tempVar.setDoFormat(true);
-                                RemoveStorageDomainParameters 
removeStorageDomainParameters = tempVar;
-                                
listModel.getremovePrms().add(removeStorageDomainParameters);
-                                if (listModel.getremovePrms().size() + 
listModel.getdetachPrms().size() == listModel.getSelectedItems()
-                                        .size())
-                                {
-                                    
Frontend.getInstance().runMultipleAction(VdcActionType.RemoveStorageDomain,
-                                            listModel.getremovePrms());
-                                }
+                                        Object[] array = (Object[]) target;
+                                        StorageDataCenterListModel listModel = 
(StorageDataCenterListModel) array[0];
+                                        StorageDomain storage = 
(StorageDomain) array[1];
+                                        VDS locaVds = (VDS) returnValue;
+                                        RemoveStorageDomainParameters tempVar =
+                                                new 
RemoveStorageDomainParameters(storage.getId());
+                                        tempVar.setVdsId((locaVds != null ? 
locaVds.getId() : null));
+                                        tempVar.setDoFormat(true);
+                                        RemoveStorageDomainParameters 
removeStorageDomainParameters = tempVar;
+                                        
listModel.getremovePrms().add(removeStorageDomainParameters);
+                                        if (listModel.getremovePrms().size() + 
listModel.getdetachPrms().size() == listModel.getSelectedItems()
+                                                .size()) {
+                                            
Frontend.getInstance().runMultipleAction(VdcActionType.RemoveStorageDomain,
+                                                    listModel.getremovePrms());
+                                        }
 
-                            }
-                        }),
+                                    }
+                                }),
                         storageDomain.getStoragePoolName());
             }
 
@@ -724,6 +782,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 eadf378..3e2a0b0 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
@@ -213,6 +213,7 @@
     public StorageDomainType domainType = StorageDomainType.values()[0];
     public StorageType storageType;
     public boolean removeConnection;
+    public List<StorageDomain> storageDomainsToAdd;
 
     @Override
     protected void initDetailModels()
@@ -1017,6 +1018,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);
@@ -1186,10 +1206,30 @@
         {
             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$
         {
             onRemove();
@@ -1913,14 +1953,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;
@@ -2033,58 +2075,25 @@
                         
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();
+                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)
-                        {
+                        if (success) {
                             storageListModel.fileConnection.setid((String) 
returnVal.getActionReturnValue());
-                            AsyncDataProvider.getExistingStorageDomainList(new 
AsyncQuery(storageListModel,
-                                    new INewAsyncCallback() {
-                                        @Override
-                                        public void onSuccess(Object target, 
Object returnValue) {
-
-                                            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);
+                            checkFileDomainAttachedToDc("OnImportFile", 
storageListModel.fileConnection); //$NON-NLS-1$
                         }
-                        else
-                        {
+                        else {
                             postImportFileStorage(storageListModel.context,
                                     false,
                                     storageListModel.storageModel,
@@ -2092,15 +2101,46 @@
                                             .getConstants()
                                             
.failedToRetrieveExistingStorageDomainInformationMsg());
                         }
-
                     }
                 },
                 this);
     }
 
-    public void importFileStorageAddDomain(ArrayList<StorageDomain> domains)
-    {
-        StorageDomain sdToAdd = Linq.firstOrDefault(domains);
+    private void getExistingStorageDomainList() {
+        AsyncDataProvider.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 {
+                                    String errorMessage = domains == null ?
+                                            
ConstantsManager.getInstance().getConstants()
+                                                    
.failedToRetrieveExistingStorageDomainInformationMsg() :
+                                            
ConstantsManager.getInstance().getConstants()
+                                                    
.thereIsNoStorageDomainUnderTheSpecifiedPathMsg();
+
+                                    
postImportFileStorage(storageListModel.context,
+                                            false,
+                                            storageListModel.storageModel,
+                                            errorMessage);
+
+                                    
storageListModel.cleanConnection(storageListModel.fileConnection, 
storageListModel.hostId);
+                                }
+                            }
+                        }),
+                hostId,
+                domainType,
+                storageType,
+                path);
+    }
+
+    public void addExistingFileStorageDomain() {
+        StorageDomain sdToAdd = Linq.firstOrDefault(storageDomainsToAdd);
         StorageDomainStatic sdsToAdd = sdToAdd.getStorageStaticData();
 
         StorageDomainManagementParameter params = new 
StorageDomainManagementParameter(sdsToAdd);
@@ -2137,27 +2177,78 @@
     public void postImportFileStorage(TaskContext context, boolean 
isSucceeded, IStorageModel model, String message)
     {
         
Frontend.getInstance().runAction(VdcActionType.DisconnectStorageServerConnection,
-            new StorageServerConnectionParametersBase(fileConnection, hostId),
-            new IFrontendActionAsyncCallback() {
-                @Override
-                public void executed(FrontendActionAsyncResult result) {
+                new StorageServerConnectionParametersBase(fileConnection, 
hostId),
+                new IFrontendActionAsyncCallback() {
+                    @Override
+                    public void executed(FrontendActionAsyncResult result) {
 
-                    VdcReturnValueBase returnValue = result.getReturnValue();
-                    boolean success = returnValue != null && 
returnValue.getSucceeded();
-                    if (success) {
-                        fileConnection = null;
+                        VdcReturnValueBase returnValue = 
result.getReturnValue();
+                        boolean success = returnValue != null && 
returnValue.getSucceeded();
+                        if (success) {
+                            fileConnection = null;
+                        }
+                        Object[] array = (Object[]) result.getState();
+                        onFinish((TaskContext) array[0],
+                                (Boolean) array[1],
+                                (IStorageModel) array[2],
+                                (String) array[3]);
+
                     }
-                    Object[] array = (Object[]) result.getState();
-                    onFinish((TaskContext) array[0],
-                        (Boolean) array[1],
-                        (IStorageModel) array[2],
-                        (String) array[3]);
-
-                }
-            },
-            new Object[] {context, isSucceeded, model, message});
+                },
+                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.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)
@@ -2299,9 +2390,5 @@
 
     public DiskProfileListModel getDiskProfileListModel() {
         return diskProfileListModel;
-    }
-
-    public void setDiskProfileListModel(DiskProfileListModel 
diskProfileListModel) {
-        this.diskProfileListModel = diskProfileListModel;
     }
 }
diff --git 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
index 580c7c5..bf7f134 100644
--- 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
+++ 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
@@ -2355,6 +2355,12 @@
     @DefaultStringValue("The following VMs are attached to the instance type")
     String vmsAttachedToInstanceTypeWarningMessage();
 
+    @DefaultStringValue("Are you sure?")
+    String storageDomainsAttachedToDataCenterWarningTitle();
+
+    @DefaultStringValue("Storage Domain(s) are already attached to a Data 
Center. Approving this operation might cause data corruption if both Data 
Centers are active.")
+    String storageDomainsAttachedToDataCenterWarningMessage();
+
     @DefaultStringValue("If period is specified, bytes per period must be 
specified as well.")
     String rngRateInvalid();
 
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/DataCenterModule.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/DataCenterModule.java
index 5fafb81..8cfb533 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/DataCenterModule.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/DataCenterModule.java
@@ -174,7 +174,8 @@
                 DataCenterStorageListModel.class) {
             @Override
             public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> 
getModelPopup(DataCenterStorageListModel source,
-                    UICommand lastExecutedCommand, Model windowModel) {
+                    UICommand lastExecutedCommand,
+                    Model windowModel) {
                 DataCenterStorageListModel model = getModel();
 
                 if (lastExecutedCommand == model.getAttachStorageCommand()) {
@@ -190,7 +191,8 @@
             @Override
             public AbstractModelBoundPopupPresenterWidget<? extends 
ConfirmationModel, ?> getConfirmModelPopup(DataCenterStorageListModel 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/gin/uicommon/StorageModule.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/StorageModule.java
index d5e9296..1e67cf0 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
@@ -97,7 +97,8 @@
                 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);
@@ -191,7 +192,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/36545
To unsubscribe, visit http://gerrit.ovirt.org/settings

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

Reply via email to