Maor Lipchuk has uploaded a new change for review.

Change subject: webadmin: add vm from template with cinder disks
......................................................................

webadmin: add vm from template with cinder disks

Modified new VM dialog to support add VM from
template with Cinder disks.

Change-Id: Id496aeb05e8a294c9f56bc1e258ebc4832fbce82
Bug-Url: https://bugzilla.redhat.com/1185826
Signed-off-by: Maor Lipchuk <mlipc...@redhat.com>
---
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
1 file changed, 60 insertions(+), 36 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/01/39801/1

diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
index a990c47..c3f856d 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
@@ -30,9 +30,11 @@
 import org.ovirt.engine.core.common.businessentities.VmType;
 import 
org.ovirt.engine.core.common.businessentities.comparators.NameableComparator;
 import org.ovirt.engine.core.common.businessentities.profiles.CpuProfile;
+import org.ovirt.engine.core.common.businessentities.storage.CinderDisk;
 import org.ovirt.engine.core.common.businessentities.storage.Disk;
-import org.ovirt.engine.core.common.businessentities.storage.DiskStorageType;
 import org.ovirt.engine.core.common.businessentities.storage.DiskImage;
+import org.ovirt.engine.core.common.businessentities.storage.DiskStorageType;
+import org.ovirt.engine.core.common.businessentities.storage.StorageType;
 import org.ovirt.engine.core.common.businessentities.storage.VolumeType;
 import org.ovirt.engine.core.common.queries.ConfigurationValues;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
@@ -44,10 +46,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.builders.BuilderExecutor;
-import 
org.ovirt.engine.ui.uicommonweb.models.templates.ExistingBlankTemplateModelBehavior;
-import org.ovirt.engine.ui.uicommonweb.models.templates.LatestVmTemplate;
 import org.ovirt.engine.ui.uicommonweb.Linq;
+import org.ovirt.engine.ui.uicommonweb.builders.BuilderExecutor;
 import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
 import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
 import org.ovirt.engine.ui.uicommonweb.models.ListModel;
@@ -55,6 +55,8 @@
 import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemType;
 import org.ovirt.engine.ui.uicommonweb.models.hosts.numa.NumaSupportModel;
 import org.ovirt.engine.ui.uicommonweb.models.hosts.numa.VmNumaSupportModel;
+import 
org.ovirt.engine.ui.uicommonweb.models.templates.ExistingBlankTemplateModelBehavior;
+import org.ovirt.engine.ui.uicommonweb.models.templates.LatestVmTemplate;
 import org.ovirt.engine.ui.uicommonweb.models.templates.TemplateWithVersion;
 import 
org.ovirt.engine.ui.uicommonweb.models.vms.instancetypes.InstanceTypeManager;
 import org.ovirt.engine.ui.uicompat.ConstantsManager;
@@ -575,42 +577,47 @@
         VmTemplate template = 
getModel().getTemplateWithVersion().getSelectedItem().getTemplateVersion();
 
         AsyncDataProvider.getInstance().getTemplateDiskList(new 
AsyncQuery(getModel(),
-                new INewAsyncCallback() {
-                    @Override
-                    public void onSuccess(Object target, Object returnValue) {
+                        new INewAsyncCallback() {
+                            @Override
+                            public void onSuccess(Object target, Object 
returnValue) {
 
-                        UnitVmModel model = (UnitVmModel) target;
-                        ArrayList<DiskImage> disks = (ArrayList<DiskImage>) 
returnValue;
-                        Collections.sort(disks, new 
Linq.DiskByAliasComparer());
-                        ArrayList<DiskModel> list = new ArrayList<DiskModel>();
+                                UnitVmModel model = (UnitVmModel) target;
+                                ArrayList<DiskImage> disks = 
(ArrayList<DiskImage>) returnValue;
+                                Collections.sort(disks, new 
Linq.DiskByAliasComparer());
+                                ArrayList<DiskModel> list = new 
ArrayList<DiskModel>();
 
-                        for (Disk disk : disks) {
-                            DiskModel diskModel = new DiskModel();
-                            
diskModel.getAlias().setEntity(disk.getDiskAlias());
+                                for (Disk disk : disks) {
+                                    DiskModel diskModel = new DiskModel();
+                                    
diskModel.getAlias().setEntity(disk.getDiskAlias());
+                                    
diskModel.getVolumeType().setIsAvailable(false);
 
-                            if (disk.getDiskStorageType() == 
DiskStorageType.IMAGE) {
-                                DiskImage diskImage = (DiskImage) disk;
+                                    switch (disk.getDiskStorageType()) {
+                                        case IMAGE:
+                                            DiskImage diskImage = (DiskImage) 
disk;
+                                            diskModel.setSize(new 
EntityModel<>((int) diskImage.getSizeInGigabytes()));
+                                            ListModel volumes = new 
ListModel();
+                                            
volumes.setItems((diskImage.getVolumeType() == VolumeType.Preallocated ? new 
ArrayList<>(Arrays.asList(new VolumeType[]{VolumeType.Preallocated}))
+                                                    : 
AsyncDataProvider.getInstance().getVolumeTypeList()), 
diskImage.getVolumeType());
+                                            diskModel.setVolumeType(volumes);
+                                            break;
+                                        case CINDER:
+                                            CinderDisk cinderDisk = 
(CinderDisk) disk;
+                                            diskModel.setSize(new 
EntityModel<>((int) cinderDisk.getSizeInGigabytes()));
+                                            ListModel volumeTypes = new 
ListModel();
+                                            volumeTypes.setItems(new 
ArrayList<>(Arrays.asList(cinderDisk.getVolumeType())), 
cinderDisk.getVolumeType());
+                                            
diskModel.setVolumeType(volumeTypes);
+                                            break;
+                                    }
 
-                                EntityModel<Integer> sizeEntity = new 
EntityModel<Integer>();
-                                sizeEntity.setEntity((int) 
diskImage.getSizeInGigabytes());
-                                diskModel.setSize(sizeEntity);
-                                ListModel tempVar2 = new ListModel();
-                                tempVar2.setItems((diskImage.getVolumeType() 
== VolumeType.Preallocated ? new ArrayList<VolumeType>(Arrays.asList(new 
VolumeType[] {VolumeType.Preallocated}))
-                                        : 
AsyncDataProvider.getInstance().getVolumeTypeList()));
-                                
tempVar2.setSelectedItem(diskImage.getVolumeType());
-                                diskModel.setVolumeType(tempVar2);
-                                
diskModel.getVolumeType().setIsAvailable(false);
+                                    diskModel.setDisk(disk);
+                                    list.add(diskModel);
+                                }
+
+                                model.setDisks(list);
+                                updateIsDisksAvailable();
+                                initStorageDomains();
                             }
-
-                            diskModel.setDisk(disk);
-                            list.add(diskModel);
-                        }
-
-                        model.setDisks(list);
-                        updateIsDisksAvailable();
-                        initStorageDomains();
-                    }
-                }),
+                        }),
                 template.getId());
     }
 
@@ -656,7 +663,8 @@
                 ArrayList<DiskModel> disks = (ArrayList<DiskModel>) 
behavior.getModel().getDisks();
                 Collections.sort(activeStorageDomains, new 
NameableComparator());
 
-                for (DiskModel diskModel : disks) {
+                ArrayList<DiskModel> diskImages = 
Linq.filterDisksByType(disks, DiskStorageType.IMAGE);
+                for (DiskModel diskModel : diskImages) {
                     ArrayList<StorageDomain> availableDiskStorageDomains;
                     
diskModel.getQuota().setItems(behavior.getModel().getQuota().getItems());
                     ArrayList<Guid> storageIds = ((DiskImage) 
diskModel.getDisk()).getStorageIds();
@@ -674,10 +682,26 @@
                             
constants.noActiveTargetStorageDomainAvailableMsg());
                     
diskModel.getStorageDomain().setIsChangable(!availableDiskStorageDomains.isEmpty());
                 }
+                ArrayList<DiskModel> cinderDisks = 
Linq.filterDisksByType(disks, DiskStorageType.CINDER);
+                Collection<StorageDomain> cinderStorageDomains =
+                        Linq.filterStorageDomainsByStorageType(storageDomains, 
StorageType.CINDER);
+                initStorageDomainsForCinderDisks(cinderDisks, 
cinderStorageDomains);
             }
         }), dataCenter.getId(), actionGroup);
     }
 
+    private void initStorageDomainsForCinderDisks(ArrayList<DiskModel> 
cinderDisks, Collection<StorageDomain> cinderStorageDomains) {
+        for (DiskModel diskModel : cinderDisks) {
+            CinderDisk cinderDisk = (CinderDisk) diskModel.getDisk();
+            diskModel.getStorageDomain().setItems(Linq.filterStorageDomainById(
+                    cinderStorageDomains, cinderDisk.getStorageIds().get(0)));
+            diskModel.getStorageDomain().setIsChangable(false);
+            diskModel.getDiskProfile().setIsChangable(false);
+            diskModel.getDiskProfile().setChangeProhibitionReason(
+                    
ConstantsManager.getInstance().getConstants().notSupportedForCinderDisks());
+        }
+    }
+
     public ArrayList<StorageDomain> 
filterStorageDomains(ArrayList<StorageDomain> storageDomains)
     {
         // filter only the Active storage domains (Active regarding the 
relevant storage pool).


-- 
To view, visit https://gerrit.ovirt.org/39801
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Id496aeb05e8a294c9f56bc1e258ebc4832fbce82
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Maor Lipchuk <mlipc...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to