Vitor de Lima has uploaded a new change for review.

Change subject: ui, core: Prevent architecture mismatches in the frontend
......................................................................

ui, core: Prevent architecture mismatches in the frontend

This patch introduces some changes in the frontend in order to prevent
the user from making mistakes and receive errors from the backend
commands. These changes include:

* Show only CPUs compatible with the cluster's current CPU when
  editing clusters
* Show only clusters with the same architecture as the host when
  editing hosts
* Show only clusters with the same architecture as the VM, Pool or
  Template when editing them
* Show only clusters with the same architecture as the VM used as a
  model when creating a template
* Hide clusters without a CPU name in the 'New VM' and 'New Pool'
  dialogs

Change-Id: I0033c399061108c4495029ae2bca3f62e75fac68
Signed-off-by: Vitor de Lima <[email protected]>
---
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAllowedServerCpuListQuery.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVdsGroupsByStoragePoolIdAndFlagsQuery.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetAllowedServerCpuListParameters.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/IdAndStringQueryParameters.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingPoolModelBehavior.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingVmModelBehavior.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewPoolModelBehavior.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBase.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java
16 files changed, 275 insertions(+), 10 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/32/19132/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAllowedServerCpuListQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAllowedServerCpuListQuery.java
new file mode 100644
index 0000000..76572b8
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAllowedServerCpuListQuery.java
@@ -0,0 +1,44 @@
+package org.ovirt.engine.core.bll;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.lang.StringUtils;
+import org.ovirt.engine.core.common.businessentities.ServerCpu;
+import org.ovirt.engine.core.common.businessentities.VDS;
+import org.ovirt.engine.core.common.businessentities.VDSGroup;
+import org.ovirt.engine.core.common.businessentities.VM;
+import org.ovirt.engine.core.common.queries.GetAllowedServerCpuListParameters;
+
+public class GetAllowedServerCpuListQuery<P extends 
GetAllowedServerCpuListParameters> extends QueriesCommandBase<P> {
+    public GetAllowedServerCpuListQuery(P parameters) {
+        super(parameters);
+    }
+
+    @Override
+    protected void executeQueryCommand() {
+        VDSGroup cluster = 
getDbFacade().getVdsGroupDao().get(getParameters().getClusterId());
+
+        List<VDS> allVdsForVdsGroup = 
getDbFacade().getVdsDao().getAllForVdsGroup(cluster.getId());
+
+        List<VM> allVmsForVdsGroup = 
getDbFacade().getVmDao().getAllForVdsGroup(cluster.getId());
+
+        List<ServerCpu> cpuList = 
CpuFlagsManagerHandler.AllServerCpuList(getParameters().getVersion());
+
+        if ((allVdsForVdsGroup.isEmpty() && allVmsForVdsGroup.isEmpty()) || 
StringUtils.isEmpty(cluster.getcpu_name()))
+        {
+            getQueryReturnValue().setReturnValue(cpuList);
+        } else {
+            ArrayList<ServerCpu> filteredList = new ArrayList<ServerCpu>();
+
+            for (ServerCpu sc : cpuList) {
+
+                if (cluster.getArchitecture().equals(sc.getArchitecture())) {
+                    filteredList.add(sc);
+                }
+            }
+
+            getQueryReturnValue().setReturnValue(filteredList);
+        }
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVdsGroupsByStoragePoolIdAndFlagsQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVdsGroupsByStoragePoolIdAndFlagsQuery.java
new file mode 100644
index 0000000..14a468a
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVdsGroupsByStoragePoolIdAndFlagsQuery.java
@@ -0,0 +1,41 @@
+package org.ovirt.engine.core.bll;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.lang.StringUtils;
+import org.ovirt.engine.core.common.businessentities.ServerCpu;
+import org.ovirt.engine.core.common.businessentities.VDSGroup;
+import org.ovirt.engine.core.common.queries.IdAndStringQueryParameters;
+
+public class GetVdsGroupsByStoragePoolIdAndFlagsQuery<P extends 
IdAndStringQueryParameters> extends QueriesCommandBase<P> {
+
+    public GetVdsGroupsByStoragePoolIdAndFlagsQuery(P parameters) {
+        super(parameters);
+    }
+
+    @Override
+    protected void executeQueryCommand() {
+        List<VDSGroup> clusterList = 
getDbFacade().getVdsGroupDao().getAllForStoragePool(
+                getParameters().getId(),
+                getUserID(),
+                getParameters().isFiltered());
+
+        ArrayList<VDSGroup> filteredList = new ArrayList<VDSGroup>();
+
+        for (VDSGroup cluster : clusterList) {
+            ServerCpu sc =
+                    
CpuFlagsManagerHandler.FindMaxServerCpuByFlags(getParameters().getString(),
+                            cluster.getcompatibility_version());
+
+            if (sc != null) {
+                if (StringUtils.isEmpty(cluster.getcpu_name())
+                        || 
sc.getArchitecture().equals(cluster.getArchitecture())) {
+                    filteredList.add(cluster);
+                }
+            }
+        }
+
+        getQueryReturnValue().setReturnValue(filteredList);
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetAllowedServerCpuListParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetAllowedServerCpuListParameters.java
new file mode 100644
index 0000000..ae76ec1
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetAllowedServerCpuListParameters.java
@@ -0,0 +1,28 @@
+package org.ovirt.engine.core.common.queries;
+
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.compat.Version;
+
+public class GetAllowedServerCpuListParameters extends VdcQueryParametersBase {
+    private static final long serialVersionUID = -6048741913142095068L;
+
+    public GetAllowedServerCpuListParameters(Guid clusterId, Version version) {
+        _version = version;
+        _clusterId = clusterId;
+    }
+
+    private Version _version;
+
+    public Version getVersion() {
+        return _version;
+    }
+
+    private Guid _clusterId;
+
+    public Guid getClusterId() {
+        return _clusterId;
+    }
+
+    public GetAllowedServerCpuListParameters() {
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/IdAndStringQueryParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/IdAndStringQueryParameters.java
new file mode 100644
index 0000000..bf07e94
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/IdAndStringQueryParameters.java
@@ -0,0 +1,29 @@
+package org.ovirt.engine.core.common.queries;
+
+import org.ovirt.engine.core.compat.Guid;
+
+/**
+ * Parameter class for the "GetById" queries
+ */
+public class IdAndStringQueryParameters extends VdcQueryParametersBase {
+
+    private static final long serialVersionUID = -4601447036978553847L;
+    private Guid id;
+    private String string;
+
+    public IdAndStringQueryParameters() {
+    }
+
+    public IdAndStringQueryParameters(Guid id, String string) {
+        this.id = id;
+        this.string = string;
+    }
+
+    public Guid getId() {
+        return id;
+    }
+
+    public String getString() {
+        return string;
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
index cd67bbe..400270b 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
@@ -81,6 +81,7 @@
     GetVdsGroupById(VdcQueryAuthType.User),
     GetVdsGroupByName(VdcQueryAuthType.User),
     GetVdsGroupsByStoragePoolId(VdcQueryAuthType.User),
+    GetVdsGroupsByStoragePoolIdAndFlags(VdcQueryAuthType.User),
 
     // Certificate
     GetCACertificate(VdcQueryAuthType.User),
@@ -170,6 +171,7 @@
 
     // License queries
     GetAllServerCpuList,
+    GetAllowedServerCpuList,
 
     // Multi Level Administration queries
     GetAllRoles(VdcQueryAuthType.User),
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
index c450bc8..3b4deee 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
@@ -18,6 +18,7 @@
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.businessentities.ActionGroup;
+import org.ovirt.engine.core.common.businessentities.ArchitectureType;
 import org.ovirt.engine.core.common.businessentities.DbUser;
 import org.ovirt.engine.core.common.businessentities.Disk;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
@@ -71,6 +72,7 @@
 import 
org.ovirt.engine.core.common.queries.GetAllFromExportDomainQueryParameters;
 import org.ovirt.engine.core.common.queries.GetAllProvidersParameters;
 import org.ovirt.engine.core.common.queries.GetAllServerCpuListParameters;
+import org.ovirt.engine.core.common.queries.GetAllowedServerCpuListParameters;
 import org.ovirt.engine.core.common.queries.GetConfigurationValueParameters;
 import 
org.ovirt.engine.core.common.queries.GetDataCentersWithPermittedActionOnClustersParameters;
 import org.ovirt.engine.core.common.queries.GetDomainListParameters;
@@ -88,6 +90,7 @@
 import org.ovirt.engine.core.common.queries.GetTagsByVdsIdParameters;
 import org.ovirt.engine.core.common.queries.GetTagsByVmIdParameters;
 import org.ovirt.engine.core.common.queries.GetVmTemplateParameters;
+import org.ovirt.engine.core.common.queries.IdAndStringQueryParameters;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
 import org.ovirt.engine.core.common.queries.InterfaceAndIdQueryParameters;
 import 
org.ovirt.engine.core.common.queries.MultilevelAdministrationsQueriesParameters;
@@ -599,6 +602,25 @@
         getConfigFromCache(tempVar, aQuery);
     }
 
+    public static void getClusterListByFlags(AsyncQuery aQuery, Guid 
dataCenterId, String vdsFlags) {
+        aQuery.converterCallback = new IAsyncConverter() {
+            @Override
+            public Object Convert(Object source, AsyncQuery _asyncQuery)
+            {
+                if (source != null)
+                {
+                    ArrayList<VDSGroup> list = (ArrayList<VDSGroup>) source;
+                    Collections.sort(list, new NameableComparator());
+                    return list;
+                }
+                return new ArrayList<VDSGroup>();
+            }
+        };
+        Frontend.RunQuery(VdcQueryType.GetVdsGroupsByStoragePoolIdAndFlags,
+                new IdAndStringQueryParameters(dataCenterId, vdsFlags),
+                aQuery);
+    }
+
     public static void getClusterList(AsyncQuery aQuery, Guid dataCenterId) {
         aQuery.converterCallback = new IAsyncConverter() {
             @Override
@@ -616,6 +638,28 @@
         Frontend.RunQuery(VdcQueryType.GetVdsGroupsByStoragePoolId,
                 new IdQueryParameters(dataCenterId),
                 aQuery);
+    }
+
+    public static List<VDSGroup> filterByArchitecture(List<VDSGroup> clusters, 
ArchitectureType targetArchitecture) {
+        List<VDSGroup> filteredClusters = new ArrayList<VDSGroup>();
+
+        for (VDSGroup cluster : clusters) {
+            if (cluster.getArchitecture().equals(targetArchitecture)) {
+                filteredClusters.add(cluster);
+            }
+        }
+        return filteredClusters;
+    }
+
+    public static List<VDSGroup> filterClustersWithoutCpuName(List<VDSGroup> 
clusters) {
+        List<VDSGroup> filteredClusters = new ArrayList<VDSGroup>();
+
+        for (VDSGroup cluster : clusters) {
+            if (!cluster.getArchitecture().equals(ArchitectureType.undefined)) 
{
+                filteredClusters.add(cluster);
+            }
+        }
+        return filteredClusters;
     }
 
     public static void getClusterByServiceList(AsyncQuery aQuery, Guid 
dataCenterId,
@@ -1656,6 +1700,18 @@
         Frontend.RunQuery(VdcQueryType.GetAllServerCpuList, new 
GetAllServerCpuListParameters(version), aQuery);
     }
 
+    public static void getAllowedCPUList(AsyncQuery aQuery, Guid clusterId, 
Version version) {
+        aQuery.converterCallback = new IAsyncConverter() {
+            @Override
+            public Object Convert(Object source, AsyncQuery _asyncQuery)
+            {
+                return source != null ? (ArrayList<ServerCpu>) source : new 
ArrayList<ServerCpu>();
+            }
+        };
+        Frontend.RunQuery(VdcQueryType.GetAllowedServerCpuList, new 
GetAllowedServerCpuListParameters(clusterId,
+                version), aQuery);
+    }
+
     public static void getPmTypeList(AsyncQuery aQuery, Version version) {
         aQuery.converterCallback = new IAsyncConverter() {
             @Override
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterModel.java
index a41a690..010c81a 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterModel.java
@@ -1134,7 +1134,12 @@
                 }
             }
         };
-        AsyncDataProvider.getCPUList(_asyncQuery, version);
+
+        if (getIsEdit()) {
+            AsyncDataProvider.getAllowedCPUList(_asyncQuery, 
getEntity().getId(), version);
+        } else {
+            AsyncDataProvider.getCPUList(_asyncQuery, version);
+        }
 
         // CPU Thread support is only available for clusters of version 3.2 or 
greater
         
getVersionSupportsCpuThreads().setEntity(version.compareTo(Version.v3_2) >= 0);
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostModel.java
index b7ccc9d..bfd06f7 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostModel.java
@@ -124,6 +124,16 @@
         privateName = value;
     }
 
+    String privateVdsFlags;
+
+    public String getVdsFlags() {
+        return privateVdsFlags;
+    }
+
+    public void setVdsFlags(String vdsFlags) {
+        privateVdsFlags = vdsFlags;
+    }
+
     private EntityModel privateUserName;
 
     public EntityModel getUserName()
@@ -1210,7 +1220,11 @@
                 }
             };
 
-            AsyncDataProvider.getClusterList(_asyncQuery, dataCenter.getId());
+            if (getIsNew()) {
+                AsyncDataProvider.getClusterList(_asyncQuery, 
dataCenter.getId());
+            } else {
+                AsyncDataProvider.getClusterListByFlags(_asyncQuery, 
dataCenter.getId(), getVdsFlags());
+            }
         }
     }
 
@@ -1584,6 +1598,7 @@
             SystemTreeItemModel selectedSystemTreeItem)
     {
         setHostId(vds.getId());
+        setVdsFlags(vds.getCpuFlags());
         getOverrideIpTables().setIsAvailable(showInstallationProperties());
         setSpmPriorityValue(vds.getVdsSpmPriority());
         setOriginalName(vds.getName());
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingPoolModelBehavior.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingPoolModelBehavior.java
index af8fcd7..d819855 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingPoolModelBehavior.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingPoolModelBehavior.java
@@ -8,6 +8,7 @@
 import org.ovirt.engine.core.common.businessentities.DisplayType;
 import org.ovirt.engine.core.common.businessentities.StorageDomain;
 import org.ovirt.engine.core.common.businessentities.StoragePool;
+import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VmBase;
 import org.ovirt.engine.core.common.businessentities.VmStatic;
@@ -133,4 +134,9 @@
 
         return parentValidation;
     }
+
+    @Override
+    protected List<VDSGroup> filterClusters(List<VDSGroup> clusters) {
+        return AsyncDataProvider.filterByArchitecture(clusters, 
pool.getArchitecture());
+    }
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingVmModelBehavior.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingVmModelBehavior.java
index 2429b68..3f6bfc4 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingVmModelBehavior.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingVmModelBehavior.java
@@ -117,9 +117,15 @@
                     @Override
                     public void onSuccess(Object target, Object returnValue) {
                         UnitVmModel model = (UnitVmModel) target;
+
+                        List<VDSGroup> clusters = (List<VDSGroup>) returnValue;
+
+                        List<VDSGroup> filteredClusters =
+                                
AsyncDataProvider.filterByArchitecture(clusters, vm.getArchitecture());
+
                         model.setDataCentersAndClusters(model,
                                 dataCenters,
-                                (List<VDSGroup>) returnValue, 
vm.getVdsGroupId());
+                                filteredClusters, vm.getVdsGroupId());
                         initTemplate();
                         initCdImage();
                         initSoundCard(vm.getId());
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewPoolModelBehavior.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewPoolModelBehavior.java
index ac30fbf8..a3ca389 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewPoolModelBehavior.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewPoolModelBehavior.java
@@ -3,9 +3,11 @@
 import java.util.List;
 
 import org.ovirt.engine.core.common.businessentities.DisplayType;
+import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.VmBase;
 import org.ovirt.engine.core.common.businessentities.VmTemplate;
 import org.ovirt.engine.ui.uicommonweb.Linq;
+import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
 import org.ovirt.engine.ui.uicommonweb.models.ListModel;
 import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemModel;
 import org.ovirt.engine.ui.uicommonweb.validation.IValidation;
@@ -63,4 +65,9 @@
 
         return parentValidation;
     }
+
+    @Override
+    protected List<VDSGroup> filterClusters(List<VDSGroup> clusters) {
+        return AsyncDataProvider.filterClustersWithoutCpuName(clusters);
+    }
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java
index a9c7cb7..6f698ba 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java
@@ -74,9 +74,14 @@
                                             UnitVmModel model = (UnitVmModel) 
target;
 
                                             List<VDSGroup> clusters = 
(List<VDSGroup>) returnValue;
+
+                                            List<VDSGroup> filteredClusters =
+                                                    
AsyncDataProvider.filterByArchitecture(clusters,
+                                                            
vm.getArchitecture());
+
                                             
model.setDataCentersAndClusters(model,
                                                     Arrays.asList(dataCenter),
-                                                    clusters,
+                                                    filteredClusters,
                                                     vm.getVdsGroupId());
 
                                             initTemplate();
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java
index 2edf060..f8c2851 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java
@@ -52,9 +52,15 @@
                                     @Override
                                     public void onSuccess(Object target, 
Object returnValue) {
                                         UnitVmModel model = (UnitVmModel) 
target;
+
+                                        List<VDSGroup> clusterList = 
(List<VDSGroup>) returnValue;
+
+                                        List<VDSGroup> filteredClusterList =
+                                                
AsyncDataProvider.filterClustersWithoutCpuName(clusterList);
+
                                         model.setDataCentersAndClusters(model,
                                                 dataCenters,
-                                                (List<VDSGroup>) returnValue, 
null);
+                                                filteredClusterList, null);
                                         initCdImage();
                                     }
                                 }, getModel().getHash()),
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBase.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBase.java
index c400317..57754ca 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBase.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBase.java
@@ -66,9 +66,14 @@
                             @Override
                             public void onSuccess(Object target, Object 
returnValue) {
                                 UnitVmModel model = (UnitVmModel) target;
+
+                                List<VDSGroup> clusters = (List<VDSGroup>) 
returnValue;
+
+                                List<VDSGroup> filteredClusters = 
filterClusters(clusters);
+
                                 model.setDataCentersAndClusters(model,
                                         dataCenters,
-                                        (List<VDSGroup>) returnValue, null);
+                                        filteredClusters, null);
                                 initCdImage();
                                 
getPoolModelBehaviorInitializedEvent().raise(this, EventArgs.Empty);
                             }
@@ -78,6 +83,8 @@
         }, getModel().getHash()), true, false);
     }
 
+    protected abstract List<VDSGroup> filterClusters(List<VDSGroup> clusters);
+
     protected void setupWindowModelFrom(VmBase vmBase) {
         if (vmBase != null) {
             updateQuotaByCluster(vmBase.getQuotaId(), vmBase.getQuotaName());
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java
index 2c49da7..4838d91 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java
@@ -3,6 +3,7 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.List;
 
 import org.ovirt.engine.core.common.businessentities.DisplayType;
 import org.ovirt.engine.core.common.businessentities.StoragePool;
@@ -51,13 +52,18 @@
                                             UnitVmModel model = (UnitVmModel) 
target;
 
                                             ArrayList<VDSGroup> clusters = 
(ArrayList<VDSGroup>) returnValue;
-                                            ArrayList<VDSGroup> 
filteredClusters = new ArrayList<VDSGroup>();
+                                            ArrayList<VDSGroup> 
clustersSupportingVirt = new ArrayList<VDSGroup>();
                                             // filter clusters supporting virt 
service only
                                             for (VDSGroup cluster : clusters) {
                                                 if 
(cluster.supportsVirtService()) {
-                                                    
filteredClusters.add(cluster);
+                                                    
clustersSupportingVirt.add(cluster);
                                                 }
                                             }
+
+                                            List<VDSGroup> filteredClusters =
+                                                    
AsyncDataProvider.filterByArchitecture(clustersSupportingVirt,
+                                                            
template.getArchitecture());
+
                                             
model.setDataCentersAndClusters(model,
                                                     new 
ArrayList<StoragePool>(Arrays.asList(new StoragePool[] { dataCenter })),
                                                     filteredClusters,
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java
index 16d18b6..808a429 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java
@@ -1963,8 +1963,10 @@
                 new ArrayList<DataCenterWithCluster>();
 
         for (StoragePool dataCenter : dataCenters) {
-            for (VDSGroup cluster : 
dataCenterToCluster.get(dataCenter.getId())) {
-                dataCentersWithClusters.add(new 
DataCenterWithCluster(dataCenter, cluster));
+            if (dataCenterToCluster.containsKey(dataCenter.getId())) {
+                for (VDSGroup cluster : 
dataCenterToCluster.get(dataCenter.getId())) {
+                    dataCentersWithClusters.add(new 
DataCenterWithCluster(dataCenter, cluster));
+                }
             }
         }
         getDataCenterWithClustersList().setItems(dataCentersWithClusters);


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

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

Reply via email to