Daniel Erez has uploaded a new change for review.

Change subject: webadmin: move-copy disks - inactive domains indication
......................................................................

webadmin: move-copy disks - inactive domains indication

Move/Copy disks dialogs:
* Added a tool-tip for source storage domains label/select-box
  (indicating unavailable source storage domains).
* Added a tool-tip for target storage select-box
  (indicating unavailable target storage domains /
   missing template on target storage domains).
* Ensured that only disks that can be moved/copied
  (with regard to active source/target storage domain availability)
  are sent to the backend.
* Display a warning when some of the disks cannot be moved/copied.

Change-Id: Id1c17bbcdfa9c2358a17b297ef99a94254f68132
Bug-Url: https://bugzilla.redhat.com/880917
Bug-Url: https://bugzilla.redhat.com/907120
Signed-off-by: Daniel Erez <[email protected]>
---
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/DisksAllocationModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/MoveOrCopyDiskModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/CopyDiskModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/MoveDiskModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
M 
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/DisksAllocationPopupView.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/DisksAllocationPopupView.ui.xml
9 files changed, 177 insertions(+), 189 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/73/11873/1

diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/DisksAllocationModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/DisksAllocationModel.java
index c8713d0..7e936a1 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/DisksAllocationModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/DisksAllocationModel.java
@@ -25,10 +25,13 @@
 import org.ovirt.engine.ui.uicommonweb.models.ListModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.DiskModel;
 import org.ovirt.engine.ui.uicommonweb.validation.IValidation;
+import org.ovirt.engine.ui.uicompat.Constants;
 import org.ovirt.engine.ui.uicompat.ConstantsManager;
 
 public class DisksAllocationModel extends EntityModel
 {
+    protected static Constants constants = 
ConstantsManager.getInstance().getConstants();
+
     private final IEventListener quota_storageEventListener = new 
IEventListener() {
         @Override
         public void eventRaised(Event ev, Object sender, EventArgs args) {
@@ -168,7 +171,6 @@
     private boolean isVolumeFormatChangable;
     private boolean isAliasChangable;
     private boolean isSourceStorageDomainAvailable;
-    private boolean isSourceStorageDomainChangable;
     private boolean isSourceStorageDomainNameAvailable;
     private boolean isWarningAvailable;
 
@@ -302,23 +304,11 @@
         }
 
         for (DiskModel diskModel : disks) {
-            boolean isDestStoragesEmpty = 
diskModel.getStorageDomain().getItems() != null ?
-                    ((ArrayList) 
diskModel.getStorageDomain().getItems()).isEmpty() : true;
-
             
diskModel.getSourceStorageDomain().setIsAvailable(isSourceStorageDomainAvailable);
-            
diskModel.getSourceStorageDomain().setIsChangable(!isSingleStorageDomain && 
isSourceStorageDomainChangable);
+            
diskModel.getSourceStorageDomainName().setIsAvailable(isSourceStorageDomainNameAvailable);
             diskModel.getVolumeType().setIsAvailable(isVolumeFormatAvailable);
             diskModel.getVolumeType().setIsChangable(isVolumeFormatChangable);
             diskModel.getAlias().setIsChangable(isAliasChangable);
-
-            if (diskModel.getSourceStorageDomain().getItems() != null
-                    && 
diskModel.getSourceStorageDomain().getItems().iterator().hasNext()) {
-                storage_domains sourceStorage =
-                        ((storage_domains) 
diskModel.getSourceStorageDomain().getItems().iterator().next());
-                String sourceStorageName = sourceStorage != null ? 
sourceStorage.getstorage_name() : ""; //$NON-NLS-1$
-                
diskModel.getSourceStorageDomainName().setIsAvailable(isSourceStorageDomainNameAvailable);
-                
diskModel.getSourceStorageDomainName().setEntity(sourceStorageName);
-            }
         }
     }
 
@@ -392,7 +382,7 @@
         for (DiskModel diskModel : getDisks()) {
             if (!diskModel.getStorageDomain().getItems().iterator().hasNext()) 
{
                 diskModel.getStorageDomain().getInvalidityReasons().add(
-                        
ConstantsManager.getInstance().getConstants().storageDomainMustBeSpecifiedInvalidReason());
+                        constants.storageDomainMustBeSpecifiedInvalidReason());
                 diskModel.getStorageDomain().setIsValid(false);
                 setIsValid(false);
             }
@@ -421,10 +411,6 @@
 
     public void setIsSourceStorageDomainAvailable(boolean 
isSourceStorageDomainAvailable) {
         this.isSourceStorageDomainAvailable = isSourceStorageDomainAvailable;
-    }
-
-    public void setIsSourceStorageDomainChangable(boolean 
isSourceStorageDomainChangable) {
-        this.isSourceStorageDomainChangable = isSourceStorageDomainChangable;
     }
 
     public void setIsSourceStorageDomainNameAvailable(boolean 
isSourceStorageDomainNameAvailable) {
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/MoveOrCopyDiskModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/MoveOrCopyDiskModel.java
index b394f1a..7d460ac 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/MoveOrCopyDiskModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/MoveOrCopyDiskModel.java
@@ -16,13 +16,13 @@
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.NGuid;
 import org.ovirt.engine.core.compat.PropertyChangedEventArgs;
-import org.ovirt.engine.core.compat.StringHelper;
 import org.ovirt.engine.ui.frontend.AsyncQuery;
 import org.ovirt.engine.ui.frontend.INewAsyncCallback;
 import org.ovirt.engine.ui.uicommonweb.ICommandTarget;
 import org.ovirt.engine.ui.uicommonweb.Linq;
 import org.ovirt.engine.ui.uicommonweb.UICommand;
 import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
+import org.ovirt.engine.ui.uicommonweb.models.ListModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.DiskModel;
 import org.ovirt.engine.ui.uicommonweb.validation.IValidation;
 import org.ovirt.engine.ui.uicommonweb.validation.SelectedQuotaValidation;
@@ -42,22 +42,6 @@
         {
             allDisks = value;
             OnPropertyChanged(new PropertyChangedEventArgs("All Disks")); 
//$NON-NLS-1$
-        }
-    }
-
-    private ArrayList<storage_domains> storageDomains;
-
-    public ArrayList<storage_domains> getStorageDomains()
-    {
-        return storageDomains;
-    }
-
-    public void setStorageDomains(ArrayList<storage_domains> value)
-    {
-        if (storageDomains != value)
-        {
-            storageDomains = value;
-            OnPropertyChanged(new PropertyChangedEventArgs("Storage 
Domains")); //$NON-NLS-1$
         }
     }
 
@@ -87,20 +71,20 @@
         this.vmId = vmId;
     }
 
-    protected ArrayList<storage_domains> activeStorageDomains;
-    protected ArrayList<storage_domains> intersectStorageDomains;
-    protected ArrayList<storage_domains> unionStorageDomains;
-
     public abstract void init(ArrayList<DiskImage> diskImages);
 
     protected abstract void initStorageDomains();
 
-    protected abstract void postCopyOrMoveInit();
-
-    protected abstract void 
updateMoveOrCopySingleDiskParameters(ArrayList<VdcActionParametersBase> 
parameters,
-            DiskModel diskModel);
-
     protected abstract VdcActionType getActionType();
+
+    protected abstract String getWarning();
+
+    protected abstract String getNoActiveSourceDomainMessage();
+
+    protected abstract String getNoActiveTargetDomainMessage();
+
+    protected abstract void updateMoveOrCopySingleDiskParameters(
+            ArrayList<VdcActionParametersBase> parameters, DiskModel 
diskModel);
 
     protected abstract MoveOrCopyImageGroupParameters createParameters(
             Guid sourceStorageDomainGuid,
@@ -108,8 +92,8 @@
             DiskImage disk);
 
     public MoveOrCopyDiskModel() {
-        allDisks = new ArrayList<DiskModel>();
-        storageDomains = new ArrayList<storage_domains>();
+        setAllDisks(new ArrayList<DiskModel>());
+        setActiveStorageDomains(new ArrayList<storage_domains>());
     }
 
     protected void onInitDisks() {
@@ -135,12 +119,12 @@
     protected void onInitStorageDomains(ArrayList<storage_domains> storages) {
         for (storage_domains storage : storages) {
             if (Linq.IsDataActiveStorageDomain(storage)) {
-                storageDomains.add(storage);
+                getActiveStorageDomains().add(storage);
             }
         }
-        Collections.sort(storageDomains, new 
Linq.StorageDomainByNameComparer());
+        Collections.sort(getActiveStorageDomains(), new 
Linq.StorageDomainByNameComparer());
 
-        if (!storageDomains.isEmpty()) {
+        if (!getActiveStorageDomains().isEmpty()) {
             AsyncDataProvider.GetDataCenterById(new AsyncQuery(this, new 
INewAsyncCallback() {
                 @Override
                 public void OnSuccess(Object target, Object returnValue) {
@@ -150,7 +134,7 @@
                     
model.setQuotaEnforcementType(dataCenter.getQuotaEnforcementType());
                     model.postInitStorageDomains();
                 }
-            }), storageDomains.get(0).getstorage_pool_id().getValue());
+            }), 
getActiveStorageDomains().get(0).getstorage_pool_id().getValue());
         }
         else {
             postInitStorageDomains();
@@ -158,52 +142,91 @@
     }
 
     protected void postInitStorageDomains() {
-        activeStorageDomains = getStorageDomains();
-
-        ArrayList<ArrayList<storage_domains>> allSourceStorages = new 
ArrayList<ArrayList<storage_domains>>();
-        ArrayList<storage_domains> missingStorageDomains = new 
ArrayList<storage_domains>();
+        boolean showWarning = false;
 
         for (DiskModel disk : getDisks()) {
             DiskImage diskImage = ((DiskImage) disk.getDisk());
 
-            // Source storages
+            // Source storage domains
             ArrayList<Guid> diskStorageIds = diskImage.getstorage_ids();
-            ArrayList<storage_domains> diskStorages = 
Linq.getStorageDomainsByIds(diskStorageIds, activeStorageDomains);
-            disk.getSourceStorageDomain().setItems(diskStorages);
-            allSourceStorages.add(diskStorages);
+            ArrayList<storage_domains> sourceStorageDomains =
+                    Linq.getStorageDomainsByIds(diskStorageIds, 
getActiveStorageDomains());
 
-            // Destination storages
-            ArrayList<storage_domains> destStorageDomains = 
Linq.Except(activeStorageDomains, diskStorages);
-            ArrayList<storage_domains> diskMissingStorageDomains = new 
ArrayList<storage_domains>();
+            // Destination storage domains
+            ArrayList<storage_domains> destStorageDomains =
+                    Linq.Except(getActiveStorageDomains(), 
sourceStorageDomains);
+            destStorageDomains = 
filterStoragesByDatacenterId(destStorageDomains, 
diskImage.getstorage_pool_id());
 
-            // Filter storages with missing template disk
-            if (!diskImage.getParentId().equals(NGuid.Empty)) {
-                diskMissingStorageDomains = 
getMissingStorages(destStorageDomains, disk);
-            }
-            missingStorageDomains.addAll(diskMissingStorageDomains);
-            destStorageDomains = Linq.Except(destStorageDomains, 
missingStorageDomains);
-
-            // Filter storages on different datacenters
-            if (!diskStorages.isEmpty()) {
-                NGuid diskDatacenterId = 
diskStorages.get(0).getstorage_pool_id();
-                destStorageDomains = 
filterStoragesByDatacenterId(destStorageDomains, diskDatacenterId);
+            // Filter storage domains with missing template disk
+            boolean isDiskBasedOnTemplate = 
!diskImage.getParentId().equals(NGuid.Empty);
+            if (isDiskBasedOnTemplate) {
+                destStorageDomains = Linq.Except(destStorageDomains, 
getMissingStorages(destStorageDomains, disk));
             }
 
+            // Add prohibition reasons
+            if (sourceStorageDomains.isEmpty() || 
destStorageDomains.isEmpty()) {
+                showWarning = true;
+                addProhibitionReasons(disk, isDiskBasedOnTemplate,
+                        sourceStorageDomains.isEmpty(), 
destStorageDomains.isEmpty());
+            }
+
+            // Sort and add storage domains
             Collections.sort(destStorageDomains, new 
Linq.StorageDomainByNameComparer());
+            Collections.sort(sourceStorageDomains, new 
Linq.StorageDomainByNameComparer());
             disk.getStorageDomain().setItems(destStorageDomains);
+            disk.getSourceStorageDomain().setItems(sourceStorageDomains);
+            addSourceStorageDomainName(disk, sourceStorageDomains);
         }
 
-        intersectStorageDomains = Linq.Intersection(allSourceStorages);
-        unionStorageDomains = Linq.Union(allSourceStorages);
-
-        ArrayList<storage_domains> destStorageDomains = 
Linq.Except(activeStorageDomains, intersectStorageDomains);
-        destStorageDomains = Linq.Except(destStorageDomains, 
missingStorageDomains);
-        Collections.sort(destStorageDomains, new 
Linq.StorageDomainByNameComparer());
-
-        getStorageDomain().setItems(destStorageDomains);
         sortDisks();
+        postCopyOrMoveInit(showWarning);
+    }
 
-        postCopyOrMoveInit();
+    private void addProhibitionReasons(DiskModel disk, boolean 
isDiskBasedOnTemplate, boolean noSources, boolean noTargets) {
+        disk.getStorageDomain().setIsChangable(!noTargets);
+        disk.getSourceStorageDomain().setIsChangable(!noSources);
+        disk.getSourceStorageDomainName().setIsChangable(!noSources);
+        
disk.getStorageDomain().getChangeProhibitionReasons().add(isDiskBasedOnTemplate 
?
+                constants.noActiveStorageDomainWithTemplateMsg() : 
getNoActiveTargetDomainMessage());
+        
disk.getSourceStorageDomain().getChangeProhibitionReasons().add(getNoActiveSourceDomainMessage());
+        
disk.getSourceStorageDomainName().getChangeProhibitionReasons().add(getNoActiveSourceDomainMessage());
+    }
+
+    private void addSourceStorageDomainName(DiskModel disk, 
ArrayList<storage_domains> sourceStorageDomains) {
+        String sourceStorageName = sourceStorageDomains.isEmpty() ?
+                constants.notAvailableLabel() : 
sourceStorageDomains.get(0).getstorage_name();
+        disk.getSourceStorageDomainName().setEntity(sourceStorageName);
+    }
+
+    protected void postCopyOrMoveInit(boolean showWarning) {
+        ICommandTarget target = (ICommandTarget) getEntity();
+
+        if (getActiveStorageDomains().isEmpty()) {
+            setMessage(constants.noStorageDomainAvailableMsg());
+
+            UICommand closeCommand = new UICommand("Cancel", target); 
//$NON-NLS-1$
+            closeCommand.setTitle(constants.close());
+            closeCommand.setIsDefault(true);
+            closeCommand.setIsCancel(true);
+            getCommands().add(closeCommand);
+        }
+        else
+        {
+            if (showWarning) {
+                setMessage(getWarning());
+            }
+
+            UICommand actionCommand = new UICommand("OnExecute", this); 
//$NON-NLS-1$
+            actionCommand.setTitle(constants.ok());
+            actionCommand.setIsDefault(true);
+            getCommands().add(actionCommand);
+            UICommand cancelCommand = new UICommand("Cancel", target); 
//$NON-NLS-1$
+            cancelCommand.setTitle(constants.cancel());
+            cancelCommand.setIsCancel(true);
+            getCommands().add(cancelCommand);
+        }
+
+        StopProgress();
     }
 
     protected ArrayList<storage_domains> 
filterStoragesByDatacenterId(ArrayList<storage_domains> storageDomains,
@@ -284,8 +307,7 @@
                 updateMoveOrCopySingleDiskParameters(parameters, diskModel);
             }
             else {
-                if (destStorageDomain == null
-                        || ((DiskImage) 
diskModel.getDisk()).getstorage_ids().contains(destStorageDomain.getId())) {
+                if (destStorageDomain == null || sourceStorageDomain == null) {
                     continue;
                 }
 
@@ -316,11 +338,7 @@
     {
         super.ExecuteCommand(command);
 
-        if (StringHelper.stringsEqual(command.getName(), "OnMove") || 
//$NON-NLS-1$
-                StringHelper.stringsEqual(command.getName(), "OnCopy")) 
//$NON-NLS-1$
-        {
-            OnExecute();
-        }
+        OnExecute();
     }
 
     public boolean Validate() {
@@ -337,4 +355,9 @@
 
         return isValid;
     }
+
+    protected void cancel() {
+        StopProgress();
+        ((ListModel) getEntity()).setWindow(null);
+    }
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/CopyDiskModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/CopyDiskModel.java
index 46409ff..fd8b0ed 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/CopyDiskModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/CopyDiskModel.java
@@ -14,13 +14,9 @@
 import org.ovirt.engine.ui.frontend.AsyncQuery;
 import org.ovirt.engine.ui.frontend.Frontend;
 import org.ovirt.engine.ui.frontend.INewAsyncCallback;
-import org.ovirt.engine.ui.uicommonweb.ICommandTarget;
-import org.ovirt.engine.ui.uicommonweb.UICommand;
 import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
-import org.ovirt.engine.ui.uicommonweb.models.ListModel;
 import org.ovirt.engine.ui.uicommonweb.models.storage.MoveOrCopyDiskModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.DiskModel;
-import org.ovirt.engine.ui.uicompat.ConstantsManager;
 import org.ovirt.engine.ui.uicompat.FrontendMultipleActionAsyncResult;
 import org.ovirt.engine.ui.uicompat.IFrontendMultipleActionAsyncCallback;
 
@@ -30,7 +26,6 @@
         super();
 
         setIsSourceStorageDomainAvailable(true);
-        setIsSourceStorageDomainChangable(true);
     }
 
     @Override
@@ -68,42 +63,6 @@
     }
 
     @Override
-    protected void postCopyOrMoveInit() {
-        ICommandTarget target = (ICommandTarget) getEntity();
-
-        boolean noSingleStorageDomain = 
!getStorageDomain().getItems().iterator().hasNext();
-        boolean noDestStorageDomain = 
intersectStorageDomains.containsAll(activeStorageDomains);
-
-        if (activeStorageDomains.isEmpty() || noDestStorageDomain) {
-            if (activeStorageDomains.isEmpty()) {
-                
setMessage(ConstantsManager.getInstance().getConstants().noSDAvailableMsg());
-            }
-            else if (noDestStorageDomain) {
-                
setMessage(ConstantsManager.getInstance().getConstants().disksAlreadyExistMsg());
-            }
-
-            UICommand tempVar = new UICommand("Cancel", target); //$NON-NLS-1$
-            
tempVar.setTitle(ConstantsManager.getInstance().getConstants().close());
-            tempVar.setIsDefault(true);
-            tempVar.setIsCancel(true);
-            getCommands().add(tempVar);
-        }
-        else
-        {
-            UICommand tempVar2 = new UICommand("OnCopy", this); //$NON-NLS-1$
-            
tempVar2.setTitle(ConstantsManager.getInstance().getConstants().ok());
-            tempVar2.setIsDefault(true);
-            getCommands().add(tempVar2);
-            UICommand tempVar3 = new UICommand("Cancel", target); //$NON-NLS-1$
-            
tempVar3.setTitle(ConstantsManager.getInstance().getConstants().cancel());
-            tempVar3.setIsCancel(true);
-            getCommands().add(tempVar3);
-        }
-
-        StopProgress();
-    }
-
-    @Override
     protected void 
updateMoveOrCopySingleDiskParameters(ArrayList<VdcActionParametersBase> 
parameters,
             DiskModel diskModel) {
 
@@ -129,6 +88,21 @@
     }
 
     @Override
+    protected String getWarning() {
+        return constants.cannotCopyDisks();
+    }
+
+    @Override
+    protected String getNoActiveSourceDomainMessage() {
+        return constants.noActiveSourceStorageDomainAvailableMsg();
+    }
+
+    @Override
+    protected String getNoActiveTargetDomainMessage() {
+        return constants.diskExistsOnAllActiveStorageDomainsMsg();
+    }
+
+    @Override
     protected MoveOrCopyImageGroupParameters createParameters(Guid 
sourceStorageDomainGuid,
             Guid destStorageDomainGuid,
             DiskImage disk) {
@@ -142,14 +116,18 @@
     protected void OnExecute() {
         super.OnExecute();
 
-        Frontend.RunMultipleAction(getActionType(), getParameters(),
+        ArrayList<VdcActionParametersBase> parameters = getParameters();
+        if (parameters.isEmpty()) {
+            cancel();
+            return;
+        }
+
+        Frontend.RunMultipleAction(getActionType(), parameters,
                 new IFrontendMultipleActionAsyncCallback() {
                     @Override
                     public void Executed(FrontendMultipleActionAsyncResult 
result) {
                         CopyDiskModel localModel = (CopyDiskModel) 
result.getState();
-                        localModel.StopProgress();
-                        ListModel listModel = (ListModel) 
localModel.getEntity();
-                        listModel.setWindow(null);
+                        localModel.cancel();
                     }
                 }, this);
     }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java
index b7c7464..75380d8 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java
@@ -175,8 +175,6 @@
         
model.setTitle(ConstantsManager.getInstance().getConstants().copyTemplateTitle());
         model.setHashName("copy_template"); //$NON-NLS-1$
         model.setIsVolumeFormatAvailable(false);
-        model.setIsSourceStorageDomainAvailable(true);
-        model.setIsSourceStorageDomainChangable(true);
         model.setEntity(this);
 
         model.StartProgress(null);
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/MoveDiskModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/MoveDiskModel.java
index e4f2d0f..905f0ae 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/MoveDiskModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/MoveDiskModel.java
@@ -16,12 +16,8 @@
 import org.ovirt.engine.ui.frontend.AsyncQuery;
 import org.ovirt.engine.ui.frontend.Frontend;
 import org.ovirt.engine.ui.frontend.INewAsyncCallback;
-import org.ovirt.engine.ui.uicommonweb.ICommandTarget;
-import org.ovirt.engine.ui.uicommonweb.UICommand;
 import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
-import org.ovirt.engine.ui.uicommonweb.models.ListModel;
 import org.ovirt.engine.ui.uicommonweb.models.storage.MoveOrCopyDiskModel;
-import org.ovirt.engine.ui.uicompat.ConstantsManager;
 import org.ovirt.engine.ui.uicompat.FrontendActionAsyncResult;
 import org.ovirt.engine.ui.uicompat.IFrontendActionAsyncCallback;
 
@@ -29,6 +25,8 @@
 {
     public MoveDiskModel() {
         super();
+
+        setIsSourceStorageDomainNameAvailable(true);
     }
 
     @Override
@@ -65,37 +63,6 @@
     }
 
     @Override
-    protected void postCopyOrMoveInit() {
-        ICommandTarget target = (ICommandTarget) getEntity();
-
-        if (!getStorageDomain().getItems().iterator().hasNext())
-        {
-            setWarningAvailable(false);
-            setMessage(ConstantsManager.getInstance().getConstants()
-                    .theSystemCouldNotFindAvailableTargetStorageDomainMsg());
-
-            UICommand tempVar = new UICommand("Cancel", target); //$NON-NLS-1$
-            
tempVar.setTitle(ConstantsManager.getInstance().getConstants().close());
-            tempVar.setIsDefault(true);
-            tempVar.setIsCancel(true);
-            getCommands().add(tempVar);
-        }
-        else
-        {
-            UICommand tempVar2 = new UICommand("OnMove", this); //$NON-NLS-1$
-            
tempVar2.setTitle(ConstantsManager.getInstance().getConstants().ok());
-            tempVar2.setIsDefault(true);
-            getCommands().add(tempVar2);
-            UICommand tempVar3 = new UICommand("Cancel", target); //$NON-NLS-1$
-            
tempVar3.setTitle(ConstantsManager.getInstance().getConstants().cancel());
-            tempVar3.setIsCancel(true);
-            getCommands().add(tempVar3);
-        }
-
-        StopProgress();
-    }
-
-    @Override
     protected void 
updateMoveOrCopySingleDiskParameters(ArrayList<VdcActionParametersBase> 
parameters,
             DiskModel diskModel) {
 
@@ -113,6 +80,21 @@
     }
 
     @Override
+    protected String getWarning() {
+        return constants.cannotMoveDisks();
+    }
+
+    @Override
+    protected String getNoActiveSourceDomainMessage() {
+        return constants.sourceStorageDomainIsNotActiveMsg();
+    }
+
+    @Override
+    protected String getNoActiveTargetDomainMessage() {
+        return constants.noActiveTargetStorageDomainAvailableMsg();
+    }
+
+    @Override
     protected MoveOrCopyImageGroupParameters createParameters(Guid 
sourceStorageDomainGuid,
             Guid destStorageDomainGuid,
             DiskImage disk) {
@@ -125,15 +107,19 @@
     protected void OnExecute() {
         super.OnExecute();
 
-        MoveDisksParameters parameters = new MoveDisksParameters((List) 
getParameters());
-        Frontend.RunAction(getActionType(), parameters,
+        ArrayList<VdcActionParametersBase> parameters = getParameters();
+        if (parameters.isEmpty()) {
+            cancel();
+            return;
+        }
+
+        MoveDisksParameters moveDisksParameters = new 
MoveDisksParameters((List) parameters);
+        Frontend.RunAction(getActionType(), moveDisksParameters,
                 new IFrontendActionAsyncCallback() {
                     @Override
                     public void Executed(FrontendActionAsyncResult result) {
                         MoveDiskModel localModel = (MoveDiskModel) 
result.getState();
-                        localModel.StopProgress();
-                        ListModel listModel = (ListModel) 
localModel.getEntity();
-                        listModel.setWindow(null);
+                        localModel.cancel();
                     }
                 }, this);
     }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
index c85fd95..ee3587a 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
@@ -1000,7 +1000,6 @@
         setWindow(model);
         
model.setTitle(ConstantsManager.getInstance().getConstants().moveVirtualMachineTitle());
         model.setHashName("move_virtual_machine"); //$NON-NLS-1$
-        model.setIsSourceStorageDomainNameAvailable(true);
         model.setEntity(this);
         model.StartProgress(null);
 
diff --git 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java
 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java
index 0d489a7..c91c965 100644
--- 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java
+++ 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java
@@ -656,9 +656,6 @@
     @DefaultStringValue("Permission")
     String permissionMsg();
 
-    @DefaultStringValue("No Storage Domain is available - check Storage 
Domains and Hosts status.")
-    String noSDAvailableMsg();
-
     @DefaultStringValue("Disks already exist on all available Storage 
Domains.")
     String disksAlreadyExistMsg();
 
@@ -800,8 +797,29 @@
     @DefaultStringValue("Tag(s)")
     String tagsMsg();
 
-    @DefaultStringValue("The system could not find available target Storage 
Domain.\nPossible reasons:\n  - No active Storage Domain available\n  - The 
Template that the VM is based on does not exist on active Storage Domain")
-    String theSystemCouldNotFindAvailableTargetStorageDomainMsg();
+    @DefaultStringValue("No active Storage Domain is available - check Storage 
Domains and Hosts status.")
+    String noStorageDomainAvailableMsg();
+
+    @DefaultStringValue("Source Storage Domain is not active")
+    String sourceStorageDomainIsNotActiveMsg();
+
+    @DefaultStringValue("No active target Storage Domain is available")
+    String noActiveTargetStorageDomainAvailableMsg();
+
+    @DefaultStringValue("No active source Storage Domain is available")
+    String noActiveSourceStorageDomainAvailableMsg();
+
+    @DefaultStringValue("Disk exists on all active Storage Domains")
+    String diskExistsOnAllActiveStorageDomainsMsg();
+
+    @DefaultStringValue("The Template that the VM is based on does not exist 
on any active Storage Domain")
+    String noActiveStorageDomainWithTemplateMsg();
+    
+    @DefaultStringValue("Warning: Some of the disks cannot be moved")
+    String cannotMoveDisks();
+
+    @DefaultStringValue("Warning: Some of the disks cannot be copied")
+    String cannotCopyDisks();
 
     @DefaultStringValue("Field value should follow: 
<parameter=value;parameter=value;...>")
     String fieldValueShouldFollowMsg();
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/DisksAllocationPopupView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/DisksAllocationPopupView.java
index 79ee413..67755f4 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/DisksAllocationPopupView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/DisksAllocationPopupView.java
@@ -12,6 +12,7 @@
 import com.google.gwt.event.shared.EventBus;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.client.ui.FlowPanel;
 import com.google.gwt.user.client.ui.Label;
 import com.google.inject.Inject;
 
@@ -22,7 +23,7 @@
     }
 
     @UiField
-    Label messageLabel;
+    FlowPanel messagePanel;
 
     @UiField(provided = true)
     @Ignore
@@ -54,9 +55,8 @@
         super.setMessage(message);
 
         boolean isMessageEmpty = message == null || message.isEmpty();
-        disksAllocationView.setVisible(isMessageEmpty || 
disksAllocationModel.isWarningAvailable());
-        messageLabel.setVisible(!isMessageEmpty);
-        messageLabel.setText(message);
+        messagePanel.setVisible(!isMessageEmpty);
+        messagePanel.add(new Label(message));
     }
 
 }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/DisksAllocationPopupView.ui.xml
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/DisksAllocationPopupView.ui.xml
index c29da6e..149472a 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/DisksAllocationPopupView.ui.xml
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/DisksAllocationPopupView.ui.xml
@@ -5,7 +5,7 @@
        xmlns:e="urn:import:org.ovirt.engine.ui.webadmin.widget.editor" 
xmlns:w="urn:import:org.ovirt.engine.ui.common.widget.uicommon.storage">
 
        <ui:style>
-               .messageLabel {
+               .messagePanel {
                        color: #CD2127;
                        text-align: center;
                        padding: 10px;
@@ -15,8 +15,8 @@
        <d:SimpleDialogPanel width="540px" height="400px">
                <d:content>
                        <g:FlowPanel>
-                               <g:Label ui:field="messageLabel" 
visible="false" addStyleNames="{style.messageLabel}" />
-                               <w:DisksAllocationView 
ui:field="disksAllocationView" listHeight="260px" listWidth="525px" 
showSource="true" />
+                               <g:FlowPanel ui:field="messagePanel" 
visible="false" addStyleNames="{style.messagePanel}" />
+                               <w:DisksAllocationView 
ui:field="disksAllocationView" listHeight="245px" listWidth="525px" 
showSource="true" />
                        </g:FlowPanel>
                </d:content>
        </d:SimpleDialogPanel>


--
To view, visit http://gerrit.ovirt.org/11873
To unsubscribe, visit http://gerrit.ovirt.org/settings

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

Reply via email to